Как заменить подразделения в табличной части документа на их родительские элементы в 1С:ЗУП 3.1?

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

При обработке документов в конфигурации «Зарплата и управление персоналом» часто возникает необходимость укрупнить аналитику — например, заменить подразделения нижнего уровня на их родительские группы (подразделения верхнего уровня). Рассмотрим, как правильно реализовать такой алгоритм и избежать частых ошибок начинающих разработчиков.

Анализ ошибок при работе со справочниками в коде

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

  1. Ошибка «Элемент не выбран!» при вызове метода ПолныйКод(): Возникает, если в строке табличной части реквизит Подразделение незаполнен (содержит пустую ссылку или значение Неопределено). Вызов методов у незаполненной ссылки приводит к исключению.
  2. Ошибочное использование менеджера справочника: Попытка вызвать метод ПолучитьОбъект() непосредственно у менеджера Справочники.ПодразделенияОрганизаций вызывает ошибку, так как данный метод доступен только у конкретной ссылки типа СправочникСсылка.
  3. Некорректная проверка результата НайтиПоКоду(): Метод возвращает ссылку на найденный элемент или пустую ссылку, но не число. Сравнение результата с единицей (= 1) является ошибочным. Для проверки найденного значения следует использовать функцию ЗначениеЗаполнено().
  4. Избыточные обращения к базе данных: Для получения родительского элемента нет необходимости считывать полный объект с помощью ПолучитьОбъект() и проверять его уровень. Свойство Родитель доступно напрямую из ссылки СправочникСсылка.

Простой способ замены подразделения на родительское

Если справочник является двухъярусным или требуется просто поднять аналитику на уровень выше, нет необходимости искать элементы по коду. Достаточно обратиться к свойству Родитель текущей ссылки.

Рассмотрим пример кода для обработки табличной части НачисленнаяЗарплатаИВзносы документа ОтражениеЗарплатыВБухучете:


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

Важные особенности документа «Отражение зарплаты в бухучете»

При работе с документом ОтражениеЗарплатыВБухучете в 1С:ЗУП 3.1 важно учитывать следующие технические нюансы:

  1. Перепроведение документа: Простой вызов метода Записать() без указания режима проведения обновит данные в табличной части, но движения в регистрах останутся со старыми значениями подразделений. Чтобы обновить учетные данные, проведенный документ необходимо записывать в режиме РежимЗаписиДокумента.Проведение.
  2. Прочие табличные части: Аналитика подразделений в этом документе находится не только в ТЧ НачисленнаяЗарплатаИВзносы, но и в других табличных частях: Взносы, УдержаннаяЗарплата, ПособияЗаСчетФСС, НачисленныеНДФЛ. При смене подразделения рекомендуется обрабатывать все табличные части документа для сохранения целостности данных.
← На главную