Имя: Пароль:
1C
1C 7.7
v7: Найти значение в ТЗ
, , ,
0 Mafiozaa
 
22.01.21
07:54
Всем привет, что то не понятное, есть табличная часть, есть ТЗ, выгружаю табличную часть в ТЗ (в табличной части есть колонка (КодТовара)) хочу найти значение в колонке ТЗКоды.КодТовара, выдает ошибку неверный идентификатор колонки, но если в цикле пишу сообщить ТЗКоды.КодТовара он показывает все содержимое этой колонки

Для А = 1 По ТЗКоды.КоличествоСтрок() Цикл
    Если ТЗКоды.НайтиЗначение(Штрихкод, А, ТЗКоды.КодТовара) = 1 Тогда
        Сообщить("Есть")
    КонецЕсли;
КонецЦикла;
1 ДенисЧ
 
22.01.21
07:55
А что СП говорит про НайтиЗначение() ? (у меня клюшек нет, посмотреть негде)
2 Mafiozaa
 
22.01.21
07:56
(1)
НайтиЗначение(<?>,,);
Синтаксис:
НайтиЗначение(<Знач>,<Строка>,<Колонка>)
Назначение:
Найти заданное значение в таблице значений. Возвращает число: 0 - значение не найдено; 1 - значение найдено
Параметры:
<Знач> - значение для поиска.
<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке.
<Колонка> - номер или идентификатор колонки, возвращает номер найденной колонки. Идентификатор переменной, куда возвращается номер найденной колонки. Если при вызове метода передать в этот параметр номер или идентификатор колонки, то поиск будет осуществляться только по указанной колонке.
3 Документовед
 
22.01.21
07:57
ТЗКоды.ВыбратьСтроки();
Если ТЗКоды.НайтиЗначение(Штрихкод, А, ТЗКоды.КодТовара) = 1 Тогда
4 ДенисЧ
 
22.01.21
07:57
А у тебя в ТЗКоды.КодТовара название колонки шоле?
5 ДенисЧ
 
22.01.21
07:57
Так попробуй
Если ТЗКоды.НайтиЗначение(Штрихкод, А, "КодТовара") = 1 Тогда
6 Андрей_Андреич
 
naïve
22.01.21
07:57
Вообще ни одной буквы не угадал
Если ТЗКоды.КодТовара=Штрихкод
Это если в цикле проверять
Если найти первую попавшуюся строка то:
    А=0;
    Если ТЗКоды.НайтиЗначение(Штрихкод, А, "КодТовара") = 1 Тогда
        Сообщить("Есть в строке № "+А)
    КонецЕсли;
7 Bigbro
 
22.01.21
07:58
"кодТовара" в кавычках надо
8 JeHer
 
22.01.21
08:01
(6) это клюшки. Там надо А=1.
И вполне возможно, что в ТЗ коды попали со всякими левыми символами, в том числе с пробелом.
9 Mafiozaa
 
22.01.21
08:04
(6) "КодТовара" - съел, но не возвращает 1ку, хотя штрихкод верный, щас пробелы отобью
10 Андрей_Андреич
 
naïve
22.01.21
08:04
(8) Садись два. Если не указать А=0, то ищет в строке с номером А. Если А=0, то ищет по всей таблице и в А возвращает номер найденной строки
11 Mafiozaa
 
22.01.21
08:08
(10) (8) (7) (6) Штрихкод верный, СокрЛП не помог, еденичку не ворачивает
12 Mafiozaa
 
22.01.21
08:15
В чем может быть проблема?)
13 JeHer
 
22.01.21
08:15
(10) это что? Фича какая-то?
14 JeHer
 
22.01.21
08:15
(12) типы данных одинаковые?
15 Андрей_Андреич
 
naïve
22.01.21
08:16
(11) Мы же твоих данных не видим. Сохрани таблицу значений в файл и выложи. и штрихкод тоже
16 ДенисЧ
 
22.01.21
08:16
(13) Это поведение, описанное в документации
17 Mafiozaa
 
22.01.21
08:18
(14) Ну если я табличную часть выгружаю в ТЗ, врятле они меняются как то
18 Bigbro
 
22.01.21
08:18
я вообще не понял зачем цикл?
стр=0;
Если ТЗКоды.НайтиЗначение(ШтрихКод,стр,"КодТовара")=1 Тогда
  Сообщить("Найден штрихкод в строке "+стр);
Иначе
  Сообщить("Штрихкод "+ШтрихКод+" не найден");
КонецЕсли;
19 Андрей_Андреич
 
naïve
22.01.21
08:20
(17) Если тебе нужны ответы - следуй советам. Можно же не думать, а тупо посмотреть проверить. ЗначениеВФайл() и будет видно
(18) Может человеку надо все дубли проверить
20 Bigbro
 
22.01.21
08:20
(19) дубли не так проверяются.
21 Bigbro
 
22.01.21
08:21
а так он в цикле ищет в ТЗ но каждый раз по одной ячейке. это бред какой то.
22 Mafiozaa
 
22.01.21
08:23
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
    // Процедура разбирает штрих-код, считанный сканером
    // и заполняет строки накладной
    Перем Упаковка,ТекКоличество, Спецификация;
    Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена;
    
    Перем СтрокаВозврЦена;
    Если Событие = "BarCodeValue" Тогда
        Штрихкод = СокрЛП(Данные);
        Сообщить(Штрихкод);
        стр=1;
            Если ТЗКоды.НайтиЗначение(ШтрихКод,стр,"КодТовара")=1 Тогда
                 Сообщить("Найден штрихкод в строке "+стр);
            Иначе
                Сообщить("Штрихкод "+ШтрихКод+" не найден");
            КонецЕсли;
        //Если ТЗКоды.НайтиЗначение(Штрихкод,Стр,ТЗКоды.КодТовара) = 1 Тогда
        //    Сообщить("Йоу")
        //Иначе
        //    Сообщить("Колом");
        //КонецЕсли;
        
        //ПолучитьСтрокуПоНомеру(НомерСтроки);
        //Если СтрДлина(Данные) > 14 Тогда
        //    Маркер = СокрЛП(Данные);
        //    КодМаркировки = Маркер;
        //    ПолучитьСтрокуПоНомеру(НомерСтроки + 1);
        //    АктивизироватьСтроку(НомерСтроки);
        //КонецЕсли;
        глСканерПосылкаДанных(1);
    Иначе
        глОбработкаВнешнегоСобытия(Источник, Событие, Данные);    
    КонецЕсли;
23 Mafiozaa
 
22.01.21
08:23
24 Mafiozaa
 
22.01.21
08:24
При данном коде, вижу вот это см скрин
25 JeHer
 
22.01.21
08:25
ТЗКоды как заполняешь-то всё-таки?
26 Mafiozaa
 
22.01.21
08:26
(25) ВыгрузитьТабличнуюЧасть(ТЗКоды);
27 Андрей_Андреич
 
naïve
22.01.21
08:26
(24) Ну и что что скрин - может это вычисляемое поле, а в таблице его нет. Говорю же - выдай собственно ТЗКоды
28 Mafiozaa
 
22.01.21
08:27
(27) Секунду, этим и занимаюсь
29 Андрей_Андреич
 
naïve
22.01.21
08:27
(26) А в коде нет этой выгрузки
30 Mafiozaa
 
22.01.21
08:27
(29) Она заполняется при открытии
31 Bigbro
 
22.01.21
08:27
стр = 0
а не стр = 1
иначе ищет по строке номер 1
32 Mafiozaa
 
22.01.21
08:28
(29) И при обходе пусть той же номенклатуры в цикле, выдает все значения
33 Mafiozaa
 
22.01.21
08:28
(31) Стр = 0, тоже самое
34 Андрей_Андреич
 
naïve
22.01.21
08:29
(32) Пока таблицу не покажешь - смысла нет
35 Bigbro
 
22.01.21
08:30
Значит оборачивай в СОкрЛП()
по-любому там пробелы у тебя добиты, длина поля больше чем длина штриха.
36 JeHer
 
22.01.21
08:30
Вот не поленился и накидал обработину. У меня всё ищет
37 Bigbro
 
22.01.21
08:31
ну или наоборот штрих добивай пробелами до нужной длины, чтобы найтизначение работало
38 Mafiozaa
 
22.01.21
08:33
(34)
ЗначениеВФайл("123.txt", ТЗКоды);
Сообщить(ЗначениеВФайл("123.txt", ТЗКоды));

Возвращает 1, файл пустой
39 JeHer
 
22.01.21
08:33
(36)+ https://prnt.sc/xf4q4x
По-любому, типы не совпадают
40 Mafiozaa
 
22.01.21
08:35
(39) Строка 13 символом, а кодтовара строка 20 символом, щас под 13 сделал проверю
41 Mafiozaa
 
22.01.21
08:36
(39) Красавчик, полетело
42 Mafiozaa
 
22.01.21
08:50
Уважаемые,опять колом встал)))
43 Mafiozaa
 
22.01.21
08:51
Бывает такое что на 1 номенклатурную позицию вбито 2-3 штрихкода)
44 Андрей_Андреич
 
naïve
22.01.21
08:52
(42) Хвастаешься?
45 JeHer
 
22.01.21
08:52
(43) опять в загадки играть будем? В чем теперь-то вопрос?
46 Bigbro
 
22.01.21
08:55
(43) и что с того?
47 Mafiozaa
 
22.01.21
09:04
(44) (45) (46) Принцип понятен, буду играться, разберусь, спасибо большое)
48 Mikeware
 
22.01.21
09:38
Открой для себя индексированную таблицу из 1с++
49 Андрей_Андреич
 
naïve
22.01.21
09:47
(48) Сначала синтакс-помощник бы открыть ...
50 Mikeware
 
22.01.21
10:02
(49) ну да. Это первое дело...
"спроси у мужика в кепке!"©
51 Mafiozaa
 
22.01.21
11:45
(48) Вот это дельное, а (49) (50) не по сути, ибо через него и делал
52 GreyK
 
22.01.21
12:54
(51) А чем индексированная таблица дельнее, чем НайтиЗначений? Ну окромя того, что надо уметь пользоваться.
53 andrewalexk
 
22.01.21
13:01
(52) :) найтизначение одно - ничем, а найтизначение списком - дельнее
54 GreyK
 
22.01.21
13:13
(53) Тут бы ТС хоть одно значение найти, а вы про списки уже речь ведете, как говорят мудрецы : Большая дорога начинается с маленького шага :)
55 Mikeware
 
22.01.21
13:51
(52)(53) тем, что можно найти сразу БлижайшуюБольше, и сравнив по СокрЛП, понять, попал или не попал.
ну и мелкий сахар, типа сразу спозиционироваться...
Или УстановитьФильтр и посмотреть КоличествоСтрок...
(54) ну да, сначала нужно научиться справшивать и понимать МужикаВКепке®