УФ, табличная часть документа: "Номер строки" и "Индекс".

1. user659168_xec8787 3 22.11.21 17:24 Сейчас в теме
День добрый.
Возникла задача по заполнению табличной части документа внешней обработкой (БСП).
Вид = "ЗаполнениеОбъекта"
Использование = "ЗаполнениеФормы"

Алгоритм заполнения кратко:
Выборка = Запрос.Выполнить.Выбрать();

Пока Выборка.Следующий() Цикл

Форма.Объект.Товары[Выборка.НомерСтроки-1].СерийныйНомер = СокрЛП(Выборка.САПКод);

КонецЦикла;
Показать


где НомерСтроки - это Стандартный реквизит табличной части.

Т.е. обращаюсь к строке по индексу, считая что "Индекс строки" = "Номер строки - 1"

Вопрос - а всегда ли это так? Может где-то описано?

Спасибо.
По теме из базы знаний
Найденные решения
6. spacecraft 23.11.21 06:59 Сейчас в теме
(5) не совсем так. При изменении ДанныеФормыКоллекция индексы также будут перестроены. По сути это индексы массива строк. И всегда Индекс будет соответствовать (НомерСтроки-1). НомерСтроки так же перестраивается. Другое дело, что НомерСтроки перестроенных строк на форме могут не соответствовать НомерСтроки из БД.
Помимо этого есть еще ИсходныйНомерСтроки и скрытый индекс(Идентификатор), который можно получить через метод ПолучитьИдетнификатор(). Вот они остаются неизменными(ИсходныйНомерСтроки до записи в БД) и удаленные строки не освобождают нумерацию Идентификатора.
116hrus; klaus38; user659168_xec8787; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user705522_constantin_h 35 22.11.21 17:39 Сейчас в теме
(1)Индекс выборки всегда от нуля.
3. sssss_aaaaa_2011 22.11.21 17:44 Сейчас в теме
(1)Индекс строки - неизменный идентификатор строки, номер строки - изменяемый пользователем альтернативный идентификатор строки.
5. t.v.s. 111 23.11.21 06:05 Сейчас в теме
(1)
Вопрос - а всегда ли это так?

Не всегда. Индексы формируются при создании формы, и далее все время жизни формы только увеличиваются. Т.е. при открытии формы в которой уже есть 5 строк, они действительно заполнятся от 0 до 4, но дальше при перемещении этих строк вверх-вниз их индексы останутся неизменными и вы получите произвольный порядок (2-3-0-1-4, например). При удалении строки индекс также не освобождается, например, если вы удалите строку с индексом 4, то новая добавленная будет иметь индекс 5
6. spacecraft 23.11.21 06:59 Сейчас в теме
(5) не совсем так. При изменении ДанныеФормыКоллекция индексы также будут перестроены. По сути это индексы массива строк. И всегда Индекс будет соответствовать (НомерСтроки-1). НомерСтроки так же перестраивается. Другое дело, что НомерСтроки перестроенных строк на форме могут не соответствовать НомерСтроки из БД.
Помимо этого есть еще ИсходныйНомерСтроки и скрытый индекс(Идентификатор), который можно получить через метод ПолучитьИдетнификатор(). Вот они остаются неизменными(ИсходныйНомерСтроки до записи в БД) и удаленные строки не освобождают нумерацию Идентификатора.
116hrus; klaus38; user659168_xec8787; +3 Ответить
7. user659168_xec8787 3 23.11.21 11:33 Сейчас в теме
(6)
Спасибо за развернутый ответ!
И всегда Индекс будет соответствовать (НомерСтроки-1)
- а это личный опыт, или где-то описано такое поведение платформы?

Кто хочет поэкспериментировать, вот код
&НаКлиенте
Процедура ТабличнаяЧасть1ПриАктивизацииСтроки(Элемент)
	
	
	Если Объект.ТабличнаяЧасть1.Индекс(Элемент.ТекущиеДанные) > -1 Тогда
		Сообщить("Индекс: " + Объект.ТабличнаяЧасть1.Индекс(Элемент.ТекущиеДанные)+ " Номер строки: " + 
                Элемент.ТекущиеДанные.НомерСтроки + " Идентификатор строки: " + Элементы.ТабличнаяЧасть1.ТекущаяСтрока);
	КонецЕсли;
	
КонецПроцедуры
Показать
8. spacecraft 23.11.21 15:48 Сейчас в теме
(7)
- а это личный опыт, или где-то описано такое поведение платформы?

Скорее личный опыт. По индексу вопросов нет, как и говорил, это по сути индекс массива строк. А НомерСтроки тоже перестраивается. Вот и получается их связанное поведение.
user659168_xec8787; +1 Ответить
9. realEvgenius 1 18.10.23 09:39 Сейчас в теме
(7) Индекс соответствует (НомерСтроки-1) только тогда когда документ создан и в табличной части ничего не менялось...
Если добавить, убавить строки, сделать обеспечение руками, то - все индексы разбежались
10. user1936667 18.10.23 10:17 Сейчас в теме
(9)
то - все индексы разбежались
Ты бы проверил хотя бы сам, что пишешь.

Номер строки, который хранится в базе и который при выгрузке табличной части в таблицу значений появляется - он всегда от 1, и всегда на 1 больше индекса в коллекции.

Индекс, который в коллекции - он всегда от 0 и всегда на 1 меньше текущего номера строки.

Идентификатор строки, который надо использовать при сопоставлении строки в элементе диалога и в данных, он вообще никак ни с индексом ни с номером строки не связан. И вот именно он динамически генерируется и меняется.

Правильное использование этого числового идентификатора

Идентификатор = Элементы.ТаблицаФормы.ТекущаяСтрока;

СтрокаДанных = ДанныеТаблицыФормы.НайтиПоИдентификатору(Идентификатор);
Если СтрокаДанных = Неопределено Тогда
    // Это не строка данных, а какая-то строка группировки или что-то левое
Иначе
    ИндексВКоллекции = ДанныеТаблицыФормы.Индекс(СтрокаДанных);
    ТекущийНомерСтроки = ИндексВКоллекции + 1;
    ИсходныйНомерСтроки = СтрокаДанных.ИсходныйНомерСтроки;
КонецЕсли;
Показать
11. realEvgenius 1 18.10.23 17:27 Сейчас в теме
(10) Только что проверил...
4. coollerinc 189 22.11.21 18:20 Сейчас в теме
Вы в выборку засунули табличную часть формы? Или перед использованием записываете документ?

Обычно перед заполнением табличная часть очищается и просто заполняется результатом запроса. Если нужно сохранить порядок строк, то отсортируйте по номеру строки. А искать соответствие так себе идея
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот