При разработке внешних обработок или доработке документов 1С часто возникает необходимость получить данные из табличной части, например, значения субконто. Многие начинающие разработчики совершают ошибку, обращаясь к фиксированным реквизитам вроде СубконтоКт1, СубконтоКт2 и так далее. Такой подход делает код жестким, нечитаемым и не позволяет системе корректно работать, если структура документа изменится или количество субконто увеличится.
Давайте разберем, как реализовать универсальный и правильный алгоритм обхода табличной части для извлечения нужных данных.
В исходном коде автор пытается обращаться к каждому реквизиту по отдельности. Это не только избыточно, но и требует постоянного внесения правок в код при изменении структуры документа. Чтобы сделать решение профессиональным, мы должны использовать коллекцию строк табличной части и выполнять обход в цикле.
Вместо перечисления каждого поля, мы воспользуемся конструкцией Для каждого ... Из ... Цикл. Это позволит нам динамически проверять каждую строку табличной части, находить нужный вид субконто и извлекать из этой же строки соответствующее значение.
Рассмотрим пошаговый алгоритм реализации:
ЗначениеЗаполнено(), чтобы убедиться, что найденное значение не является пустой ссылкой.Давайте посмотрим, как может выглядеть оптимизированный код для вашей задачи:
// Предположим, что ТабЧастьСчета - это имя вашей табличной части
Для Каждого СтрокаСчета Из Документ.ТабЧастьСчета Цикл
// Проверяем, совпадает ли вид субконто с нужным нам
Если СтрокаСчета.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры Тогда
// Проверяем, заполнено ли значение
Если ЗначениеЗаполнено(СтрокаСчета.ЗначениеСубконто) Тогда
НоваяСтрока = Объект.ТабЧасть.Добавить();
НоваяСтрока.ДоговорыДокумента = СтрокаСчета.ЗначениеСубконто;
НоваяСтрока.Справка = "Данные из ТЧ";
КонецЕсли;
КонецЕсли;
КонецЦикла;
Использование цикла дает нам ряд преимуществ:
Если ... Тогда для каждого номера субконто.ЗначениеЗаполнено(), которая корректно обрабатывает пустые ссылки любых типов данных, что предотвращает ошибки в работе программы.Для глубокого понимания того, как устроена работа с субконто в 1С, мы настоятельно рекомендуем проанализировать типовой код в конфигурации 1С:Бухгалтерия. Обратите внимание на модули проведения документов, где формируются бухгалтерские проводки. Там используется аналогичный механизм обхода коллекций, который является стандартом индустрии.
Если табличная часть документа содержит очень большое количество строк, для оптимизации производительности можно использовать запрос. Запрос к табличной части позволяет отобрать только те строки, где вид субконто соответствует искомому, что работает быстрее, чем обычный цикл, за счет переноса операций фильтрации на уровень СУБД.
Продолжайте практиковаться, пробуйте разные подходы, и со временем написание подобных алгоритмов станет для вас привычной и простой задачей!