Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 19:12

не удается найти строку в таблице значения 1с77 - выдает, что ничего не находит, хотя запись в ТЗ есть

Автор alpha78, 29 мая 2019, 14:40

0 Пользователей и 1 гость просматривают эту тему.

alpha78

добрый день, не удается найти строку в таблице значения 1с77 - выдает, что ничего не находит, хотя запись в ТЗ есть
вот код, должно работать, ТЗ - таблица значения внешней обработки
ОС, Счет - строковые реквизиты формы

объявление таблицы значения - 3 колонки:
ТЗ.НоваяКолонка("КодОС","Строка",10);
ТЗ.НоваяКолонка("ОС","Строка",200);
ТЗ.НоваяКолонка("Сумма","Число",15,2);

а вот код поиска строки таблицы значения с нужными данными
Процедура ВыборкаИзТЗ()
С="";
Если ТЗ.НайтиЗначение(СокрЛП(Выбор.Наименование),С,"ОС")=1
Тогда
ТЗ.ПолучитьСтрокуПоНомеру(С);
ОС = ТЗ.ОС;
Счет = ТЗ.СчетДт;
Предупреждение ("Таблица есть, нужно выгрузить = "+ОС);
Иначе
Предупреждение ("Нет значения");   
КонецЕсли;   
КонецПроцедуры   


что не так, благодарю

alpha78

ps. Выбор - реквизит типа справочник НеоборотныеАктивы
Добавлено: 29 мая 2019, 17:03


по поиску по строке получилось

Перем С;

// запись П2-П1
Если ТЗ.НайтиЗначение(Выбор.Наименование,С,"ОС")=1 Тогда

ТЗ.ПолучитьСтрокуПоНомеру(С);
ОС = ТЗ.ОС;
КодОС = ТЗ.КодОС;
Счет = ТЗ.СчетДт;
ДельтаП = ТЗ.Сумма;
Я объявил переменную С для получения номера найденной строки и все пошло

другая проблема в этой же таблице значений поиск нужен не по наименованию, а по коду, код числовое значение
вот новая структура таблицы значения :

ТЗ.НоваяКолонка("КодОС","Число");
ТЗ.НоваяКолонка("ОС","Строка");
ТЗ.НоваяКолонка("СчетДт","Число",10);
ТЗ.НоваяКолонка("СчетКт","Число",10);
ТЗ.НоваяКолонка("Сумма","Число",15,2);

пишу алгоритм поиска строки по коду (числовое значение)

Перем С;
Перем С2;

СпрОС = СоздатьОбъект("Справочник.НеоборотныеАктивы");

// запись П2-П1
//Сообщить (Выбор.Код);

Если ТЗ.НайтиЗначение(Выбор.Код,С,"КодОС")=1 Тогда


ТЗ.ПолучитьСтрокуПоНомеру(С);

ОС = ТЗ.ОС;
КодОС = ТЗ.КодОС;
Счет = ТЗ.СчетДт;
ДельтаП = ТЗ.Сумма;

Если СпрОС.НайтиПоКоду(ТЗ.КодОС,0)=1 Тогда

СпрОС.ПереоценкаПервСт = ТЗ.Сумма;
СпрОС.Записать();
Сообщить (ТЗ.ОС+" найдено "+" переоценка первоначальной стоимости записана"+Строка(ТЗ.Сумма));

Иначе Сообщить("Запись переоценки первоначалки не найдена");
КонецЕсли;
Иначе Сообщить("поиск по коду неудачен");
КонецЕсли;   

вообще не ищет - выдает как сказано в коде - поиск по коду неудачен, в чем дело, не подскажете, спасибо!

prog1c7.7

ну вообще не надо переменные объявлять.
Но перед найтизначение() обнулять надо :
С = 0;
Но вот вдруг у тебя несколько строк есть таких, а ты только первую цепляешь.
Да и элементов справочника с кодом может быть несколько , если не уникальны.
Вот например можно через  cpp:  (примерно накидал, но не проверял)

Сервис1С = СоздатьОбъект("MetaDataWork");
Запрос1С = СоздатьОбъект("ODBCRecordSet");
ТзИнд2 = СоздатьОбъект("ИндексированнаяТаблица");

ТзИнд2.Объединить(ТЗ);
ТзИнд2.ДобавитьИндекс("ИндКодОс","КодОС");
списиндекс = СоздатьОбъект("СписокЗначений");
списиндекс.ДобавитьЗначение(Выбор.Код,"КодОС");
ТзИнд2.Подмножество(списиндекс,1,"ИндКодОс");
ТзИнд1 = СоздатьОбъект("ТаблицаЗначений");
ТзИнд2.ВЫГРУЗИТЬ(ТзИнд1,"ИндКодОс");


Так получишь в ТзИнд1 все строки вхождения из первичной;
а дальше примерно так :
ТекстЗапроса1с = "
|SELECT     
|Спр.ID as [ТекЭл $Справочник.НеоборотныеАктивы]
|FROM
| $Справочник.НеоборотныеАктивы as Спр
|WHERE
| Спр.IsFolder = 2 AND
|   Спр.IsMark = 0 AND
| Спр.Code IN (SELECT Val FROM #ТзИнд1)
|";
ТЗ1с = Запрос1С.ВыполнитьИнструкцию(ТекстЗапроса1с);
   
в ТЗ1с все элементы справочника с этим кодом,
ну там я еще ограничил чтобы не группы, и не помеченные на удаление..
удачи в экспериментах

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск