УФ, табличная часть документа: "Номер строки" и "Индекс".
День добрый.
Возникла задача по заполнению табличной части документа внешней обработкой (БСП).
Вид = "ЗаполнениеОбъекта"
Использование = "ЗаполнениеФормы"
Алгоритм заполнения кратко:
где НомерСтроки - это Стандартный реквизит табличной части.
Т.е. обращаюсь к строке по индексу, считая что "Индекс строки" = "Номер строки - 1"
Вопрос - а всегда ли это так? Может где-то описано?
Спасибо.
Возникла задача по заполнению табличной части документа внешней обработкой (БСП).
Вид = "ЗаполнениеОбъекта"
Использование = "ЗаполнениеФормы"
Алгоритм заполнения кратко:
Выборка = Запрос.Выполнить.Выбрать();
Пока Выборка.Следующий() Цикл
Форма.Объект.Товары[Выборка.НомерСтроки-1].СерийныйНомер = СокрЛП(Выборка.САПКод);
КонецЦикла;
Показатьгде НомерСтроки - это Стандартный реквизит табличной части.
Т.е. обращаюсь к строке по индексу, считая что "Индекс строки" = "Номер строки - 1"
Вопрос - а всегда ли это так? Может где-то описано?
Спасибо.
По теме из базы знаний
- Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3
- Загрузка данных из табличного документа в справочники, документы, планы видов характеристик, планы видов расчетов, планы счетов, бизнес-процессы, задачи, в движения документов, поточная загрузка документов (EXCEL, управляемые формы, универсальная)
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
Найденные решения
(5) не совсем так. При изменении ДанныеФормыКоллекция индексы также будут перестроены. По сути это индексы массива строк. И всегда Индекс будет соответствовать (НомерСтроки-1). НомерСтроки так же перестраивается. Другое дело, что НомерСтроки перестроенных строк на форме могут не соответствовать НомерСтроки из БД.
Помимо этого есть еще ИсходныйНомерСтроки и скрытый индекс(Идентификатор), который можно получить через метод ПолучитьИдетнификатор(). Вот они остаются неизменными(ИсходныйНомерСтроки до записи в БД) и удаленные строки не освобождают нумерацию Идентификатора.
Помимо этого есть еще ИсходныйНомерСтроки и скрытый индекс(Идентификатор), который можно получить через метод ПолучитьИдетнификатор(). Вот они остаются неизменными(ИсходныйНомерСтроки до записи в БД) и удаленные строки не освобождают нумерацию Идентификатора.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Не всегда. Индексы формируются при создании формы, и далее все время жизни формы только увеличиваются. Т.е. при открытии формы в которой уже есть 5 строк, они действительно заполнятся от 0 до 4, но дальше при перемещении этих строк вверх-вниз их индексы останутся неизменными и вы получите произвольный порядок (2-3-0-1-4, например). При удалении строки индекс также не освобождается, например, если вы удалите строку с индексом 4, то новая добавленная будет иметь индекс 5
Вопрос - а всегда ли это так?
Не всегда. Индексы формируются при создании формы, и далее все время жизни формы только увеличиваются. Т.е. при открытии формы в которой уже есть 5 строк, они действительно заполнятся от 0 до 4, но дальше при перемещении этих строк вверх-вниз их индексы останутся неизменными и вы получите произвольный порядок (2-3-0-1-4, например). При удалении строки индекс также не освобождается, например, если вы удалите строку с индексом 4, то новая добавленная будет иметь индекс 5
(5) не совсем так. При изменении ДанныеФормыКоллекция индексы также будут перестроены. По сути это индексы массива строк. И всегда Индекс будет соответствовать (НомерСтроки-1). НомерСтроки так же перестраивается. Другое дело, что НомерСтроки перестроенных строк на форме могут не соответствовать НомерСтроки из БД.
Помимо этого есть еще ИсходныйНомерСтроки и скрытый индекс(Идентификатор), который можно получить через метод ПолучитьИдетнификатор(). Вот они остаются неизменными(ИсходныйНомерСтроки до записи в БД) и удаленные строки не освобождают нумерацию Идентификатора.
Помимо этого есть еще ИсходныйНомерСтроки и скрытый индекс(Идентификатор), который можно получить через метод ПолучитьИдетнификатор(). Вот они остаются неизменными(ИсходныйНомерСтроки до записи в БД) и удаленные строки не освобождают нумерацию Идентификатора.
(6)
Спасибо за развернутый ответ!
Кто хочет поэкспериментировать, вот код
Спасибо за развернутый ответ!
И всегда Индекс будет соответствовать (НомерСтроки-1)
- а это личный опыт, или где-то описано такое поведение платформы?
Кто хочет поэкспериментировать, вот код
&НаКлиенте
Процедура ТабличнаяЧасть1ПриАктивизацииСтроки(Элемент)
Если Объект.ТабличнаяЧасть1.Индекс(Элемент.ТекущиеДанные) > -1 Тогда
Сообщить("Индекс: " + Объект.ТабличнаяЧасть1.Индекс(Элемент.ТекущиеДанные)+ " Номер строки: " +
Элемент.ТекущиеДанные.НомерСтроки + " Идентификатор строки: " + Элементы.ТабличнаяЧасть1.ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
Показать
(7)
Скорее личный опыт. По индексу вопросов нет, как и говорил, это по сути индекс массива строк. А НомерСтроки тоже перестраивается. Вот и получается их связанное поведение.
- а это личный опыт, или где-то описано такое поведение платформы?
Скорее личный опыт. По индексу вопросов нет, как и говорил, это по сути индекс массива строк. А НомерСтроки тоже перестраивается. Вот и получается их связанное поведение.
(9)
Номер строки, который хранится в базе и который при выгрузке табличной части в таблицу значений появляется - он всегда от 1, и всегда на 1 больше индекса в коллекции.
Индекс, который в коллекции - он всегда от 0 и всегда на 1 меньше текущего номера строки.
Идентификатор строки, который надо использовать при сопоставлении строки в элементе диалога и в данных, он вообще никак ни с индексом ни с номером строки не связан. И вот именно он динамически генерируется и меняется.
Правильное использование этого числового идентификатора
то - все индексы разбежались
Ты бы проверил хотя бы сам, что пишешь.
Номер строки, который хранится в базе и который при выгрузке табличной части в таблицу значений появляется - он всегда от 1, и всегда на 1 больше индекса в коллекции.
Индекс, который в коллекции - он всегда от 0 и всегда на 1 меньше текущего номера строки.
Идентификатор строки, который надо использовать при сопоставлении строки в элементе диалога и в данных, он вообще никак ни с индексом ни с номером строки не связан. И вот именно он динамически генерируется и меняется.
Правильное использование этого числового идентификатора
Идентификатор = Элементы.ТаблицаФормы.ТекущаяСтрока;
СтрокаДанных = ДанныеТаблицыФормы.НайтиПоИдентификатору(Идентификатор);
Если СтрокаДанных = Неопределено Тогда
// Это не строка данных, а какая-то строка группировки или что-то левое
Иначе
ИндексВКоллекции = ДанныеТаблицыФормы.Индекс(СтрокаДанных);
ТекущийНомерСтроки = ИндексВКоллекции + 1;
ИсходныйНомерСтроки = СтрокаДанных.ИсходныйНомерСтроки;
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот