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

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

При объединении информационных баз конфигурации «Зарплата и управление персоналом» (версия 3.1) с помощью стандартной обработки ВыгрузкаЗагрузкаДанныхXML83 разработчики и администраторы часто сталкиваются с появлением дубликатов (и даже «трибликатов») элементов в плане видов расчета (ПВР) «Начисления». На первый взгляд база данных продолжает работать корректно, однако при выполнении специфических операций (например, при проведении документа «Увольнение») система выдает критическую ошибку:

«При записи в РС плановые начисления, значение поля Начисление не может быть пустым»

Рассмотрим причинно-следственную связь возникновения этой проблемы, проанализируем, почему типовой поиск и удаление дублей оказывается неэффективным, и пошагово разберем проверенный алгоритм её устранения.

Причины возникновения дублей при XML-переносе

Главная причина кроется в принципе работы обработки универсальной выгрузки и загрузки данных XML. Данный механизм сопоставляет объекты информационных баз строго по их внутренним уникальным идентификаторам (GUID / УИД). Если объединяемые базы развивались независимо друг от друга (не были созданы из одного общего начального образца), то одинаковые по названию виды расчета, показатели и предопределенные элементы имеют совершенно разные GUID.

При загрузке данных система воспринимает такие элементы как абсолютно новые и создает их копии. В результате образуются следующие осложнения:

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

Почему не помогает штатная обработка «Поиск и удаление дублей»

Стандартный механизм поиска и удаления дублей в 1С работает с включенным контролем записи и не отключает бизнес-логику объектов. При попытке замен видов расчета штатная обработка сталкивается со следующими ограничениями:

во-первых, платформа не позволяет напрямую помечать на удаление или заменять предопределенные элементы, за которыми закреплены алгоритмы конфигурации;

во-вторых, штатный поиск не пересчитывает сложную граф-структуру табличных частей вытеснения у всех связанных начислений;

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

Пошаговый алгоритм исправления дублей видов расчета

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

Шаг 1. Создание резервной копии
Перед выполнением любых глобальных корректировок ссылок обязательно создадим копию информационной базы и зафиксируем текущее состояние данных.

Шаг 2. Идентификация и защита корректных элементов
С помощью штатной обработки поиска дублей или через консоль запросов определим, какие элементы ПВР «Начисления» являются «эталонными» (созданными изначально в базе-приемнике и имеющими заполненое ИмяПредопределенныхДанных), а какие — загруженными дублями.

Чтобы случайно не перепутать объекты в процессе замены, временно переименуем корректные элементы, добавив к их наименованию уникальный префикс или суффикс (например, «Оклад (ПРАВ)»).

Шаг 3. Очистка зависимостей у ошибочных начислений
Зайдем в каждый дублирующий («левый») элемент плана видов расчета и очистим его связи:

  1. Очистим табличные части базовых, вытесняющих и ведущих начислений.
  2. Удалим ссылки на дублирующий элемент в формулах других видов расчета.
  3. Если дублирующий элемент является предопределенным, с помощью внешней обработки программно очистим у него свойство ИмяПредопределенныхДанных, установив его в пустую строку. Это переведет элемент в статус обычного пользовательского объекта.

Шаг 4. Восстановление наименований
Вернем правильным начислениям их исходные наименования, убрав временные суффиксы.

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

Программно этот режим устанавливается следующим образом:


// При выполнении замены ссылок через специализированные обработки
// включается режим ЗагрузкаДанных, который отключает проверки платформы:
Движение.ОбменДанными.Загрузка = Истина;
ОбъектСсылка.ОбменДанными.Загрузка = Истина;

Заменим все ссылки с «левых» дублей на один «правильный» элемент ПВР. После выполнения замены помеченные на удаление дубли можно безпрепятственно удалить из базы окончательно.

Шаг 6. Проверка и перепроведение документов
После завершения очистки перейдём к сотруднику, на котором возникала ошибка при увольнении. Проверим кадровые документы, зафиксировавшие плановые начисления (например, «Прием на работу» или «Кадровый перевод»). Перевыберем плановое начисление, перепроведем документ-основание, после чего повторно проведем документ «Увольнение».

Как избежать задвоения при последующих объединениях

Чтобы избежать описанной ситуации при будущем слиянии баз 1С:ЗУП 3.1, рекомендуется использовать следующие подходы:

  1. Использование механизмов Конвертации данных: При переносе данных через КД 2.0 или КД 3.0 (EnterpriseData) настраиваются правила поиска объектов по коду, наименованию или физическим свойствам, а не по внутреннему GUID.
  2. Предварительное сопоставление GUID: Перед XML-выгрузкой в базе-источнике выполняется обработка, которая находит совпадающие по наименованию виды расчета и присваивает им УИД аналогичных объектов из базы-приемника.
← На главную