При переходе на конфигурацию «Зарплата и управление персоналом» (версия 3) для ввода исторических данных часто используется документ Перенос данных. В определенных версиях конфигурации разработчики добавляют новые регистры (например, регистр сведений Реестр отпусков) и переносят в них данные из старых регистров (например, Фактические отпуска). Если в исходных данных присутствовала ошибочная запись, она дублируется в новый регистр. Рассмотрим подробнее, как корректно удалить такую запись, если регистр подчинен регистратору.
В платформе 1С:Предприятие регистры сведений могут иметь режим записи «Подчинение регистратору». Это означает следующие правила:
МенеджерЗаписи для таких регистров недоступен, поэтому удалить отдельную строку простой интерактивной операцией из списка регистра нельзя.Перенос данных).Частая проблема заключается в том, что в документе Перенос данных по умолчанию включено отображение только тех регистров, которые были выбраны при его первичном создании. Если системный обработчик обновления перенес движения в новый регистр Реестр отпусков, соответствующая вкладка в документе может оставаться скрытой.
Разберем по шагам, как вывести нужный регистр в документе Перенос данных и удалить ошибочную запись без привлекающих программных обработок.
Реестр отпусков (через меню Функции для специалиста или настройки навигации).Регистратор. Откроется документ Перенос данных.Перенос данных нажмем кнопку «Настройка состава регистров».Реестр отпусков. Нажмем «ОК».Реестр отпусков.Проанализируем риски при редактировании регистров кадрового учета. В ЗУП 3.0 данные о фактически использованных отпусках учитываются сразу в нескольких механизмах. Если удалить запись только из регистра Реестр отпусков, но оставить ее в регистре Фактические отпуска (или наоборот), возникнет рассинхронизация данных.
Это может привести к следующим последствиям:
Фактические отпуска и автоматически создать запись в Реестр отпусков.Важно: Всегда удаляйте ошибочную строку одновременно со всех закладок документа Перенос данных, относящихся к учету фактических отпусков (и Фактические отпуска, и Реестр отпусков).
Если требуется выполнить аналогичную операцию программно или через обработку, необходимо использовать объект НаборЗаписей с установкой отбора по регистратору. Выполнять операцию через менеджер записи нельзя.
Рассмотрим пример кода для удаления строки из подчиненного регистра:
// Создаем набор записей для подчиненного регистра
Набор = РегистрыСведений.РеестрОтпусков.СоздатьНаборЗаписей();
// Устанавливаем отбор по конкретному документу-регистратору
Набор.Отбор.Регистратор.Установить(СсылкаНаПереносДанных);
// Читаем существующие записи документа из базы данных
Набор.Прочитать();
// Выгружаем данные в таблицу значений для обработки
ТаблицаЗаписей = Набор.Выгрузить();
// Ищем и удаляем нужную строку по условию
Индекс = 0;
Пока Индекс < ТаблицаЗаписей.Количество() Цикл
Строка = ТаблицаЗаписей[Индекс];
Если Строка.Сотрудник = НужныйСотрудник И Строка.ДатаНачала = ДатаУдаляемойЗаписи Тогда
ТаблицаЗаписей.Удалить(Строка);
// Не увеличиваем индекс, так как элементы сдвинулись
Продолжить;
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
// Загружаем скорректированную таблицу обратно в набор и записываем
Набор.Загрузить(ТаблицаЗаписей);
Набор.Записать();
Использование описанных методов позволяет безопасно исправить данные информационной базы, сохранив целостность движений документов и корректность кадровых отчетов.