|   |   | 
| 
 | v7: не удается найти строку в таблице значения 1с77 | ☑ | ||
|---|---|---|---|---|
| 0
    
        alpha78 29.05.19✎ 14:38 | 
        добрый день, не удается найти строку в таблице значения 1с77
 вот код, должно работать, ТЗ - таблица значения внешней обработки ОС, Счет - строковые реквизиты формы объявление таблицы значения - 3 колонки: ТЗ.НоваяКолонка("КодОС","Строка",10); ТЗ.НоваяКолонка("ОС","Строка",200); ТЗ.НоваяКолонка("Сумма","Число",15,2); а вот код поиска строки таблицы значения с нужными данными Процедура ВыборкаИзТЗ() С=""; Если ТЗ.НайтиЗначение(СокрЛП(Выбор.Наименование),С,"ОС")=1 Тогда ТЗ.ПолучитьСтрокуПоНомеру(С); ОС = ТЗ.ОС; Счет = ТЗ.СчетДт; Предупреждение ("Таблица есть, нужно выгрузить = "+ОС); Иначе Предупреждение ("Нет значения"); КонецЕсли; КонецПроцедуры что не так, благодарю | |||
| 1
    
        HawkEye 29.05.19✎ 14:41 | 
        (0) сокрЛП - не так...     | |||
| 2
    
        HawkEye 29.05.19✎ 14:42 | 
        ЧтоИщем = Лев(СокрЛП(Выбор.Наименование) + "ТУТ СТО ПРОБЕЛОВ", 100);
 Если ТЗ.НайтиЗначение(ЧтоИщем, С, "ОС") = 1 | |||
| 3
    
        alpha78 29.05.19✎ 14:43 | 
        без него тоже не фурычит     | |||
| 4
    
        HawkEye 29.05.19✎ 14:43 | 
        даже не сто, а двести )))
 а чего по коду не ищется? | |||
| 5
    
        HawkEye 29.05.19✎ 14:43 | 
        (3) надо не без него.. а вместе с ним...     | |||
| 6
    
        ZDenis 29.05.19✎ 14:47 | 
        (0) А еще проще убрать 200
 ТЗ.НоваяКолонка("ОС","Строка"); | |||
| 7
    
        1Сергей 29.05.19✎ 14:48 | 
        Если ТЗ.НайтиЗначение(Формат(Выбор.Наименование, "С200"),С,"ОС")=1
 Как-то так. Не помню точно синтаксис | |||
| 8
    
        alpha78 29.05.19✎ 15:03 | 
        все равно пишет нет значения. я насчет с - номера строки. ведь при  поиске неизвестно где находится искомая строка, ранее я задаю с="";
 то есть нулевая, вот метод НайтиЗначение() и ищет в нулевой строке, если не задавать начальное значение С, то выдаст неизвестная переменная как тут быть? | |||
| 9
    
        HawkEye 29.05.19✎ 15:05 | 
        (8) ничего не понял, но при с = 0 - нормально все ищет     | |||
| 10
    
        1Сергей 29.05.19✎ 15:05 | 
        (8) нуль загони в неё. будет искать по всем     | |||
| 11
    
        ZDenis 29.05.19✎ 15:06 | 
        (8) Можно и С=0 и С="", проблема точно не в этом     | |||
| 12
    
        Garykom гуру 29.05.19✎ 15:08 | 
        (8) Проверить перебором всей ТЗ построчно а есть ли искомое значение.     | |||
| 13
    
        ZDenis 29.05.19✎ 15:09 | 
        (0) Что такое "Выбор.Наименование", ведь в эту процедуру не передаются параметры у тебя     | |||
| 14
    
        alpha78 29.05.19✎ 15:11 | 
        Выбор реквизит типа справочник     | |||
| 15
    
        HawkEye 29.05.19✎ 15:13 | 
        (14) ТЗ как заполняешь?     | |||
| 16
    
        alpha78 29.05.19✎ 15:14 | 
        сейчас:
 Опер = СоздатьОбъект("Операция"); Опер.ВыбратьОперацииСПроводками(Дата1,Дата2,"*,423"); Пока Опер.ПолучитьПроводку()=1 Цикл ТЗ.НоваяСтрока(); Спр = СоздатьОбъект("Справочник.НеоборотныеАктивы"); Если Спр.НайтиПоКоду(Опер.Дебет.Субконто(2))=1 Тогда НаименованиеОС = Спр.ТекущийЭлемент(); НаименованиеОС = НаименованиеОС.Наименование; ТЗ.ОС=НаименованиеОС; КонецЕсли ; ТЗ.КодОС =Опер.Дебет.Субконто(2); // получаем код ОС ТЗ.СчетДт=Опер.Дебет.Счет.Код; // полукчаем счет дебета 10* ТЗ.СчетКт=Опер.Кредит.Счет.Код; // получаем счет кредита 423 - счет переоценки ТЗ.Сумма =Опер.Сумма; //получаем сумм проводки П2 - П1 для конкретного ОС КонецЦикла; ТЗ.Сортировать("ОС+") | |||
| 17
    
        alpha78 29.05.19✎ 15:15 | 
        тз заполняется нормально     | |||
| 18
    
        HawkEye 29.05.19✎ 15:16 | 
        (16) ну ожидаемо... что мешает то сам объект пихать в ТЗ и искать уже потом по нему?     | |||
| 19
    
        Mikeware 29.05.19✎ 15:18 | 
        (18) ссылку... :-)     | |||
| 20
    
        HawkEye 29.05.19✎ 15:19 | 
        (19) не будем усложнять ))     | |||
| 21
    
        ZDenis 29.05.19✎ 15:22 | 
        (16) Очень страшно выглядит конструкция.
 Опер.Дебет.Субконто(2) - Это что код справочника? Точно не сам элемент? | |||
| 22
    
        Ёпрст гуру 29.05.19✎ 15:23 | 
        (16) феерический п..ц     | |||
| 23
    
        Mikeware 29.05.19✎ 15:24 | 
        может. устроим тотализатор  - догадается ТС про существование отладчика, или нет?     | |||
| 24
    
        HawkEye 29.05.19✎ 15:24 | 
        (21) Опер.Дебет.Субконто(2) - это элемент, но видимо у него представление в виде кода, поэтому в ТЗ - код... ))     | |||
| 25
    
        Ёпрст гуру 29.05.19✎ 15:29 | 
        (16) 
 
 | |||
| 26
    
        alpha78 29.05.19✎ 16:52 | 
        по поиску по строке получилось
 Перем С; // запись П2-П1 Если ТЗ.НайтиЗначение(Выбор.Наименование,С,"ОС")=1 Тогда ТЗ.ПолучитьСтрокуПоНомеру(С); ОС = ТЗ.ОС; КодОС = ТЗ.КодОС; Счет = ТЗ.СчетДт; ДельтаП = ТЗ.Сумма; Я объявил переменную С для получения номера найденной строки и все пошло другая проблема в этой же таблице значений поиск нужен не по наименованию, а по коду, код числовое значение вот новая структура таблицы значения : ТЗ.НоваяКолонка("КодОС","Число"); ТЗ.НоваяКолонка("ОС","Строка"); ТЗ.НоваяКолонка("СчетДт","Число",10); ТЗ.НоваяКолонка("СчетКт","Число",10); ТЗ.НоваяКолонка("Сумма","Число",15,2); пишу алгоритм поиска строки по коду (числовое значение) Перем С; Перем С2; СпрОС = СоздатьОбъект("Справочник.НеоборотныеАктивы"); // запись П2-П1 //Сообщить (Выбор.Код); Если ТЗ.НайтиЗначение(Выбор.Код,С,"КодОС")=1 Тогда ТЗ.ПолучитьСтрокуПоНомеру(С); ОС = ТЗ.ОС; КодОС = ТЗ.КодОС; Счет = ТЗ.СчетДт; ДельтаП = ТЗ.Сумма; Если СпрОС.НайтиПоКоду(ТЗ.КодОС,0)=1 Тогда СпрОС.ПереоценкаПервСт = ТЗ.Сумма; СпрОС.Записать(); Сообщить (ТЗ.ОС+" найдено "+" переоценка первоначальной стоимости записана"+Строка(ТЗ.Сумма)); Иначе Сообщить("Запись переоценки первоначалки не найдена"); КонецЕсли; Иначе Сообщить("поиск по коду неудачен"); КонецЕсли; вообще не ищет - выдает как сказано в коде - поиск по коду неудачен, в чем дело, не подскажете, спасибо! | |||
| 27
    
        Arbuz 29.05.19✎ 17:50 | 
        (26) Ёпрст же уже всё сделал для/за тебя. там и кодос есть в отдельной колонке. и, опять, зачем тебе ос как строка? храни ссылку (сам объект), как тебе показали. опять много лишнего и сумбурного. если ты уже разок нашёл объект в строке тз, то далее используй НайтиЭлемент() вместо НайтиПоКоду(). и поищи обработку просмотра произвольных тз - после заполнения тз, смотри её глазами, очень помогает.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |