Имя: Пароль:
1C
1С v8
Нюансы и внимательность. НайтиСтроки, Найти
0 Мультук
 
01.09.23
15:34
Есть документ "Заказ клиента"
В таб.части товары есть товары (остальные столбцы не столь важны):

НомерСтроки  Номенклатура
1            Товар1
2            Товар2
3            Товар3
4            Товар1

Вопросы:
1) Что будет в МояСтрока: Неопределено или некаяСтрока из "Товары" ?

2) Чему равно Мас1.Количество() ?

3) Чему равно Мас3.Количество() ?

4) Чему равно Мас4.Количество() ?

Код

об = Объект.ЗаказКлиентаСсылка.ПолучитьОбъект();
    
    МояСтрока = об.Товары.Найти(1, "НомерСтроки");
    //Вопрос 1 Что будет в МояСтрока Неопределено или некаяСтрока из "Товары" ?
    
    
    мас1 =  об.Товары.НайтиСтроки(Новый Структура("НомерСтроки", 1));
    //Вопрос 2 Чему равно Мас1.Количество() ?
    
    //Мас2.Количество() равно 2 (ибо данная номенклатура в таб.части задублирована
    мас2 =  об.Товары.НайтиСтроки(Новый Структура("Номенклатура", об.Товары[0].Номенклатура));
    
    
    мас3 =  об.Товары.НайтиСтроки(Новый Структура("НомерСтроки, Номенклатура", 1, об.Товары[0].Номенклатура));
    //Вопрос 3. Чему равно Мас3.Количество()

    мас4 =  об.Товары.Выгрузить().НайтиСтроки(Новый Структура("НомерСтроки, Номенклатура", 1, об.Товары[0].Номенклатура));
    //Вопрос 4. Чему равно Мас4.Количество()

P.S.

Отцы должны ответить на все вопросы, а затем заклеймить, полить ядом и поджечь.
Неофиты (надеюсь) почерпнут что-то новое, например, научатся новым матерным словам у отцов и поймут {всякое}
1 Asmody
 
01.09.23
15:45
1) Строка ТЧ
2) 0
3) 2
4) 1
2 Asmody
 
01.09.23
15:46
🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
3 Галахад
 
01.09.23
15:46
Вопрос зачем вообще что-то искать по номеру строки.
4 unenu
 
01.09.23
15:47
пора уже переходить к новым матерным

зачем этот цирк с конями?
5 Fedor-1971
 
01.09.23
15:48
(0) Если правильно помню, то зависит от контекста
мас2 количество = 2, в прочих случаях ошибка выполнения, т.к. НомерСтроки недоступен для поиска и в ТЧ документа не хранится
Оный номер есть только в наборе данных Формы
6 Asmody
 
01.09.23
15:51
(5) С чего бы она не хранится? Очень даже хранится.
Только колонкой ТЧ не является.
7 Мультук
 
01.09.23
15:53
(5)

>> в прочих случаях ошибка выполнения
Увы, нет. Ответ (я так думаю) -- "так исторически сложилось"
8 H A D G E H O G s
 
01.09.23
16:26
Что хотел сказать автор?
9 H A D G E H O G s
 
01.09.23
16:29
Дичь какая-то.

Гораздо веселее получить

ДанныеЗаполнения=Неопределено

в обработчике
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

выполнив это
СтруктураЗаполнения=Новый Структура;
Документ.Заполнить(СтруктураЗаполнения);


И нормальную структуру, выполнив это
СтруктураЗаполнения=Новый Структура("Заглушка",Истина);
Документ.Заполнить(СтруктураЗаполнения);
10 Fedor-1971
 
01.09.23
16:33
(8) Пробует что будет при поиске по НомерСтроки
11 Мультук
 
01.09.23
16:35
(8)

Короткий ответ: пятница

P.S.

Автор задумался:

Почему 1С успешно ищет строку через об.Товары.Найти(1, "НомерСтроки");
но не ищет через об.Товары.НайтиСтроки(Новый Структура("НомерСтроки", 1));

А если не ищет, то почему не кидает исключение и т.п.

Ну и надеялся обратить внимание неофитов, что "НомерСтроки" -- хреновый уникальный ключ

(10)
А чего тут пробовать? Верные ответы дал Asmodey
12 H A D G E H O G s
 
01.09.23
16:35
(10) Если судьбинушка заставит меня искать по ТЧ вне запроса - я ее выгружу в ТЗ и добавлю индекс или поищу по merge
13 Fedor-1971
 
01.09.23
16:41
(9) Это как раз объяснимо: структура перед передачей в заполнение переписывается системой через внутренние преобразование в данные заполнения, соответственно пустая структура = Неопределено
(12) это понятно, но у неофитов могут возникнуть фантазии поискать и таким образом как у ТС (вот так у них звёзды сойдутся)
14 H A D G E H O G s
 
01.09.23
17:32
(13) "структура перед передачей в заполнение переписывается системой через внутренние преобразование в данные заполнения"

Какие то фантазии, которые легко отвергаются кодом, который не упадет:

СтруктураЗаполнения=Новый Структура("Заглушка",Истина);
СтруктураЗаполнения.Вставить("ЦиклическаяСсылка",СтруктураЗаполнения);
Документ.Заполнить(СтруктураЗаполнения);
15 sitex
 
naïve
01.09.23
19:44
(0) Не там Вы решилим стресс тест проводить . Отцы , знаю , дети учат СП
16 Asmody
 
12.09.23
15:11
(0) Специально для тебя поправили в 8.3.24

Как стало

Если метод табличной части Найти() не находит искомое значение и список колонок поиска состоит только из колонки НомерСтроки, то поиск по другим колонкам не выполняется.

Рекомендуется проанализировать использование данного метода и устранить возможное использование некорректного поведения.

В режиме совместимости с версией 8.3.23 поведение не изменилось.

Как было

Если метод табличной части Найти() не находит искомое значение и список колонок поиска состоит только из колонки НомерСтроки, то выполнялся поиск по всем колонкам табличной части.

Источник: https://dl03.1c.ru/content/Platform/8_3_24_1201/1cv8upd_8_3_24_1201.htm#34de9fc3-172d-11ee-963f-0050569f678a
17 Garykom
 
12.09.23
15:59
(16) Баг объявили фичей :)
AdBlock убивает бесплатный контент. 1Сергей