Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: не удается найти строку в таблице значения 1с77

v7: не удается найти строку в таблице значения 1с77
Я
   alpha78
 
29.05.19 - 14:38
добрый день, не удается найти строку в таблице значения 1с77
вот код, должно работать, ТЗ - таблица значения внешней обработки
ОС, Счет - строковые реквизиты формы

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

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


что не так, благодарю
 
 
   HawkEye
 
1 - 29.05.19 - 14:41
(0) сокрЛП - не так...
   HawkEye
 
2 - 29.05.19 - 14:42
ЧтоИщем = Лев(СокрЛП(Выбор.Наименование) + "ТУТ СТО ПРОБЕЛОВ", 100);
Если ТЗ.НайтиЗначение(ЧтоИщем, С, "ОС") = 1
   alpha78
 
3 - 29.05.19 - 14:43
без него тоже не фурычит
   HawkEye
 
4 - 29.05.19 - 14:43
даже не сто, а двести )))
а чего по коду не ищется?
   HawkEye
 
5 - 29.05.19 - 14:43
(3) надо не без него.. а вместе с ним...
   ZDenis
 
6 - 29.05.19 - 14:47
(0) А еще проще убрать 200
ТЗ.НоваяКолонка("ОС","Строка");
   1Сергей
 
7 - 29.05.19 - 14:48
Если ТЗ.НайтиЗначение(Формат(Выбор.Наименование, "С200"),С,"ОС")=1

Как-то так. Не помню точно синтаксис
   alpha78
 
8 - 29.05.19 - 15:03
все равно пишет нет значения. я насчет с - номера строки. ведь при  поиске неизвестно где находится искомая строка, ранее я задаю с="";
то есть нулевая, вот метод НайтиЗначение() и ищет в нулевой строке, если не задавать начальное значение С, то выдаст неизвестная переменная

как тут быть?
   HawkEye
 
9 - 29.05.19 - 15:05
(8) ничего не понял, но при с = 0 - нормально все ищет
   1Сергей
 
10 - 29.05.19 - 15:05
(8) нуль загони в неё. будет искать по всем
   ZDenis
 
11 - 29.05.19 - 15:06
(8) Можно и С=0 и С="", проблема точно не в этом
   Garykom
 
12 - 29.05.19 - 15:08
(8) Проверить перебором всей ТЗ построчно а есть ли искомое значение.
   ZDenis
 
13 - 29.05.19 - 15:09
(0) Что такое "Выбор.Наименование", ведь в эту процедуру не передаются параметры у тебя
   alpha78
 
14 - 29.05.19 - 15:11
Выбор реквизит типа справочник
   HawkEye
 
15 - 29.05.19 - 15:13
(14) ТЗ как заполняешь?
   alpha78
 
16 - 29.05.19 - 15:14
сейчас:

Опер = СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(Дата1,Дата2,"*,423"); 
Пока Опер.ПолучитьПроводку()=1 Цикл             
ТЗ.НоваяСтрока(); 
Спр = СоздатьОбъект("Справочник.НеоборотныеАктивы");
Если Спр.НайтиПоКоду(Опер.Дебет.Субконто(2))=1 Тогда
        НаименованиеОС = Спр.ТекущийЭлемент();
        НаименованиеОС = НаименованиеОС.Наименование;
        ТЗ.ОС=НаименованиеОС;
КонецЕсли    ;
        ТЗ.КодОС =Опер.Дебет.Субконто(2);    // получаем код ОС

        ТЗ.СчетДт=Опер.Дебет.Счет.Код;    // полукчаем счет дебета 10*

        ТЗ.СчетКт=Опер.Кредит.Счет.Код;  // получаем счет кредита  423 - счет переоценки

        ТЗ.Сумма =Опер.Сумма;  //получаем сумм проводки П2 - П1 для конкретного ОС

КонецЦикла;
ТЗ.Сортировать("ОС+")
   alpha78
 
17 - 29.05.19 - 15:15
тз заполняется нормально
   HawkEye
 
18 - 29.05.19 - 15:16
(16) ну ожидаемо... что мешает то сам объект пихать в ТЗ и искать уже потом по нему?
   Mikeware
 
19 - 29.05.19 - 15:18
(18) ссылку... :-)
   HawkEye
 
20 - 29.05.19 - 15:19
(19) не будем усложнять ))
   ZDenis
 
21 - 29.05.19 - 15:22
(16) Очень страшно выглядит конструкция.
Опер.Дебет.Субконто(2) - Это что код справочника? Точно не сам элемент?
   Ёпрст
 
22 - 29.05.19 - 15:23
(16) феерический п..ц
   Mikeware
 
23 - 29.05.19 - 15:24
может. устроим тотализатор  - догадается ТС про существование отладчика, или нет?
   HawkEye
 
24 - 29.05.19 - 15:24
(21) Опер.Дебет.Субконто(2) - это элемент, но видимо у него представление в виде кода, поэтому в ТЗ - код... ))
   Ёпрст
 
25 - 29.05.19 - 15:29
(16)


ТЗ.НоваяКолонка("КодОС"); 
ТЗ.НоваяКолонка("ОС"); 
ТЗ.НоваяКолонка("Сумма"); 
.....
Опер = СоздатьОбъект("Операция"); 
Опер.ВыбратьОперацииСПроводками(Дата1,Дата2,"*,423"); 
Пока Опер.ПолучитьПроводку()=1 Цикл             
    ТЗ.НоваяСтрока(); 
    ОС  = Опер.Дебет.Субконто(2); 
    ТЗ.КодОС =ОС.Код;    // получаем код ОС

    ТЗ.ОС =ОС;    // получаем ОС

    ТЗ.СчетДт=Опер.Дебет.Счет;    // полукчаем счет дебета 10*

    ТЗ.СчетКт=Опер.Кредит.Счет;  // получаем счет кредита  423 - счет переоценки

    ТЗ.Сумма =Опер.Сумма;  //получаем сумм проводки П2 - П1 для конкретного ОС

КонецЦикла;
ТЗ.Сортировать("ОС");
....

 С=""; 
 Если ТЗ.НайтиЗначение(Выбор.ТекущийЭлемент(),С,"ОС")=1 Тогда
        Сообщить("И не благодари");

   alpha78
 
26 - 29.05.19 - 16:52
по поиску по строке получилось

Перем С; 

// запись П2-П1

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

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

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

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

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

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

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

// запись П2-П1

//Сообщить (Выбор.Код);

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


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

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

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

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

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

вообще не ищет - выдает как сказано в коде - поиск по коду неудачен, в чем дело, не подскажете, спасибо!
   Arbuz
 
27 - 29.05.19 - 17:50
(26) Ёпрст же уже всё сделал для/за тебя. там и кодос есть в отдельной колонке. и, опять, зачем тебе ос как строка? храни ссылку (сам объект), как тебе показали. опять много лишнего и сумбурного. если ты уже разок нашёл объект в строке тз, то далее используй НайтиЭлемент() вместо НайтиПоКоду(). и поищи обработку просмотра произвольных тз - после заполнения тз, смотри её глазами, очень помогает.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.