|
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) Ёпрст же уже всё сделал для/за тебя. там и кодос есть в отдельной колонке. и, опять, зачем тебе ос как строка? храни ссылку (сам объект), как тебе показали. опять много лишнего и сумбурного. если ты уже разок нашёл объект в строке тз, то далее используй НайтиЭлемент() вместо НайтиПоКоду(). и поищи обработку просмотра произвольных тз - после заполнения тз, смотри её глазами, очень помогает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |