Переход со старых версий программ (например, «Зарплата и Кадры 7.7» или «Зарплата и управление персоналом 2.5») на актуальную редакцию 1С:Зарплата и Управление Персоналом 3.1 (ЗУП 3.1) часто преподносит неприятные сюрпризы. Типичный сценарий: первоначальный перенос уже выполнен, в новой базе заведены и проведены документы за первые месяцы года (начисления, больничные, отпуска), но вдруг обнаруживается системная ошибка в перенесенных данных — например, задвоение сумм, дней или часов у сотрудников-совместителей.
Простой перезапуск переноса в рабочую базу невозможен, так как это затрет ручные исправления и нарушит логику уже проведенных документов. Попытка перенести данные в чистую базу, а затем «перебросить» их в рабочую с помощью универсальной обработки ВыгрузкаЗагрузкаДанныхXML приводит к другой серьезной проблеме — возникновению ошибки «Предопределенный элемент не уникален» при попытке изменить настройки состава начислений (например, при включении почасовой оплаты).
В этой статье мы подробно разберем, как правильно организовать повторный перенос данных без потери текущих документов и как быстро исправить технический конфликт уникальности предопределенных элементов в платформе «1С:Предприятие 8.3».
Проанализируем ситуацию: в рабочей базе (базе №1) уже ведется полноценный учет. Документы первоначального переноса данных (такие как ПереносДанных) задействованы в расчетах среднего заработка для отпусков и больничных листов за январь и февраль. Прямое удаление этих документов или их полная перезапись приведет к тому, что все последующие документы потеряют связь с исходными данными и потребуют тотального перепроведения, что крайне нежелательно.
Рассмотрим оптимальный пошаговый алгоритм решения этой задачи:
ДанныеОНачисленияхДляРасчетаСреднегоЗаработкаОбщий) из корректной базы №2 в рабочую базу №1.ПереносДанных в базе №1 не было, их можно обновить из базы №2 с помощью обработки ВыгрузкаЗагрузкаДанныхXML. При этом важно настроить выгрузку так, чтобы переносились только конкретные документы ПереносДанных по UUID (уникальным идентификаторам), избегая перезаписи справочников и настроек программы.Если для исправления данных вы воспользовались обработкой ВыгрузкаЗагрузкаДанныхXML, при первой же попытке изменить настройки расчета зарплаты (например, установить флажок «Применение почасовой оплаты») система заблокирует действие и выдаст ошибку уникальности предопределенного элемента.
Выясним причину этого поведения платформы. Начиная с версии «1С:Предприятие 8.3», механизм работы с предопределенными данными был кардинально изменен:
ВыгрузкаЗагрузкаДанныхXML записывает объекты в режиме ОбменДанными.Загрузка = Истина. Этот режим отключает стандартные платформенные проверки бизнес-логики.ИмяПредопределенныхДанных.Обратите внимание: в конфигураторе список предопределенных элементов для планов видов расчета в ЗУП 3.1 часто выглядит пустым. Это связано с тем, что программа создает и связывает эти элементы программно при первом запуске или обновлении информационной базы.
Проанализируем структуру базы данных, чтобы понять, где именно произошло задвоение. Как правило, в ЗУП 3.1 при переносах данных дублируются элементы в следующих объектах:
Начисления (чаще всего начисление «Оплата по часовому тарифу» с кодом ОКЛЧС).ПоказателиРасчетаЗарплаты (показатели ТарифнаяСтавкаЧасовая, ТарифнаяСтавкаДневная, Оклад).ВидыИспользованияРабочегоВремени (элементы Явка, НочныеЧасы и другие).Для быстрого поиска дублей воспользуемся «Консолью запросов». Нам необходимо выявить записи, у которых заполнено поле ИмяПредопределенныхДанных, но количество ссылок на них превышает единицу. Разберем пример запроса для справочника показателей расчета зарплаты:
ВЫБРАТЬ
ИмяПредопределенныхДанных,
КОЛИЧЕСТВО(Ссылка) КАК КоличествоДублей
ИЗ
Справочник.ПоказателиРасчетаЗарплаты
ГДЕ
ИмяПредопределенныхДанных <> ""
СГРУППИРОВАТЬ ПО
ИмяПредопределенныхДанных
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Ссылка) > 1
Аналогичные запросы выполним для таблиц ПланВидовРасчета.Начисления и Справочник.ВидыИспользованияРабочегоВремени. Если запрос вернул строки, мы нашли корень проблемы. Теперь перейдем к исправлению.
Платформа не позволит нам пометить на удаление или изменить предопределенный элемент в пользовательском интерфейсе. Чтобы решить проблему, нам нужно программно «разжаловать» дублирующий элемент в обычный (непредопределенный), очистив у него свойство ИмяПредопределенныхДанных.
Разберем, как написать простую обработку для этой операции. Создадим внешнюю обработку и в модуле объекта выполним следующий код:
Процедура ОчиститьИмяПредопределенногоЭлемента(СсылкаНаОбъект) Экспорт
// Получаем объект для редактирования
Попытка
Объект = СсылкаНаОбъект.ПолучитьОбъект();
Если Объект = Неопределено Тогда
Возврат;
КонецЕсли;
// Очищаем системный реквизит предопределенности
Объект.ИмяПредопределенныхДанных = "";
// Включаем режим загрузки, чтобы обойти проверки платформы при записи
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
Сообщить("Элемент """ + СсылкаНаОбъект + """ успешно преобразован в обычный.");
Исключение
Сообщить("Ошибка изменения объекта: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
После запуска этого кода дублирующий элемент потеряет связь с конфигуратором, и его можно будет свободно редактировать, помечать на удаление или объединять с оригиналом.
После того как у дубликата было очищено свойство ИмяПредопределенныхДанных, нам необходимо заменить все ссылки на него в существующих документах и регистрах на правильный («оригинальный») предопределенный элемент.
Выполним следующие шаги:
Показатели расчета зарплаты).Программа автоматически найдет все упоминания дубликата во всех кадровых и расчетных документах, заменит ссылки на корректный предопределенный элемент и безболезненно удалит дубль из базы данных.
После завершения этой процедуры зайдем в настройки состава начислений и проверим результат: флажок «Применение почасовой оплаты» теперь включается без ошибок и конфликтов уникальности.
Чтобы избежать подобных ситуаций при переносе данных, рекомендуем придерживаться простых правил:
ВыгрузкаЗагрузкаДанныхXML в настройках выгрузки всегда снимайте флажки с системных справочников (таких как виды времени, показатели расчета, начисления, удержания, валюты), если вы переносите только документы. Предопределенные данные должны создаваться платформой естественным путем.ИмяПредопределенныхДанных на платформе 1С 8.3.