Как правильно выбрать значение субконто из табличной части документа в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При разработке внешних обработок или доработке документов 1С часто возникает необходимость получить данные из табличной части, например, значения субконто. Многие начинающие разработчики совершают ошибку, обращаясь к фиксированным реквизитам вроде СубконтоКт1, СубконтоКт2 и так далее. Такой подход делает код жестким, нечитаемым и не позволяет системе корректно работать, если структура документа изменится или количество субконто увеличится.

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

Анализ текущей проблемы

В исходном коде автор пытается обращаться к каждому реквизиту по отдельности. Это не только избыточно, но и требует постоянного внесения правок в код при изменении структуры документа. Чтобы сделать решение профессиональным, мы должны использовать коллекцию строк табличной части и выполнять обход в цикле.

Решение: универсальный обход табличной части

Вместо перечисления каждого поля, мы воспользуемся конструкцией Для каждого ... Из ... Цикл. Это позволит нам динамически проверять каждую строку табличной части, находить нужный вид субконто и извлекать из этой же строки соответствующее значение.

Рассмотрим пошаговый алгоритм реализации:

  1. Перебор строк: организуем цикл по табличной части документа, которая содержит счета и субконто.
  2. Поиск вида субконто: внутри цикла проверяем, является ли текущий вид субконто тем, который нам нужен (например, «Договоры»).
  3. Валидация данных: используем функцию ЗначениеЗаполнено(), чтобы убедиться, что найденное значение не является пустой ссылкой.
  4. Заполнение результата: при выполнении условий добавляем данные в целевую табличную часть.

Пример реализации кода

Давайте посмотрим, как может выглядеть оптимизированный код для вашей задачи:


// Предположим, что ТабЧастьСчета - это имя вашей табличной части
Для Каждого СтрокаСчета Из Документ.ТабЧастьСчета Цикл
    // Проверяем, совпадает ли вид субконто с нужным нам
    Если СтрокаСчета.ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры Тогда
        
        // Проверяем, заполнено ли значение
        Если ЗначениеЗаполнено(СтрокаСчета.ЗначениеСубконто) Тогда
            НоваяСтрока = Объект.ТабЧасть.Добавить();
            НоваяСтрока.ДоговорыДокумента = СтрокаСчета.ЗначениеСубконто;
            НоваяСтрока.Справка = "Данные из ТЧ";
        КонецЕсли;
        
    КонецЕсли;
КонецЦикла;

Почему этот способ лучше?

Использование цикла дает нам ряд преимуществ:

Рекомендации по дальнейшей работе

Для глубокого понимания того, как устроена работа с субконто в 1С, мы настоятельно рекомендуем проанализировать типовой код в конфигурации 1С:Бухгалтерия. Обратите внимание на модули проведения документов, где формируются бухгалтерские проводки. Там используется аналогичный механизм обхода коллекций, который является стандартом индустрии.

Если табличная часть документа содержит очень большое количество строк, для оптимизации производительности можно использовать запрос. Запрос к табличной части позволяет отобрать только те строки, где вид субконто соответствует искомому, что работает быстрее, чем обычный цикл, за счет переноса операций фильтрации на уровень СУБД.

Продолжайте практиковаться, пробуйте разные подходы, и со временем написание подобных алгоритмов станет для вас привычной и простой задачей!

← На главную