Как исправить ошибку записи регистра Лицевые счета сотрудников по зарплатным проектам при переходе с БП 2.0 на 3.0

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

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

Выясняем причину конфликта данных

Для начала проанализируем ситуацию. В старой редакции 2.0 сведения о банковских картах сотрудников хранились в регистре Лицевые счета работников организаций. Его структура позволяла хранить записи в разрезе организаций, физических лиц и банков, при этом регистр часто был периодическим. В новой редакции 3.0 структура была оптимизирована: теперь ключевыми измерениями являются Физическое лицо и Зарплатный проект. Кроме того, в новых релизах БП 3.0 была убрана периодичность этого регистра или изменены правила уникальности.

Когда алгоритм обновления пытается перенести данные из старой таблицы в новую, он сталкивается с ситуацией, когда несколько старых записей (например, по разным организациям или за разные даты) претендуют на одно и то же «место» в новом регистре. Система не может записать дублирующиеся данные и прерывает обновление. Выясним, как с этим бороться.

Способ 1. Подготовка данных в исходной базе БП 2.0

Самый правильный и безопасный метод — это навести порядок в данных еще до начала перехода. Если у нас есть возможность вернуться к архивной копии 2.0, выполним следующие шаги:

  1. Поиск дублей: Проанализируем содержимое регистра Лицевые счета работников организаций. Нам нужно найти записи, где для одного и того же сотрудника и одного и того же банка введено несколько лицевых счетов. В редакции 3.0 должен остаться только один, актуальный счет.
  2. Очистка битых ссылок: Выполним стандартное «Тестирование и исправление» в Конфигураторе. Обязательно выберем пункты «Проверка ссылочной целостности» и «Пересчет итогов». Если в регистре есть записи с пометкой «Объект не найден», их необходимо удалить.
  3. Проверка организации: Даже в базовой версии 1С, где может быть только одна организация, в регистрах иногда «застревают» записи по другим, ранее удаленным или тестовым организациям. Убедимся, что во всех записях указана корректная основная организация.

После очистки данных повторим процедуру обновления конфигурации через «Поддержка» — «Обновить конфигурацию».

Способ 2. Программный обход ошибки в конфигураторе БП 3.0

Если обновление уже запущено, конфигурация уже имеет версию 3.0, но режим «Предприятие» не открывается из-за ошибки, мы можем прибегнуть к технической хитрости. Мы модифицируем процедуру конвертации так, чтобы она игнорировала проблемные записи вместо того, чтобы останавливать весь процесс.

Разберем этот процесс по шагам:

  1. Откроем информационную базу в режиме «Конфигуратор».
  2. Перейдем в меню «Конфигурация» — «Поддержка» — «Настройка поддержки».
  3. Нажмем кнопку «Включить возможность изменения». На вопрос системы ответим утвердительно.
  4. Найдем в дереве объектов общий модуль ЗарплатаКадрыОбновлениеСПредыдущейРедакции. Нажмем на него правой кнопкой мыши и установим правило «Редактируется с сохранением поддержки».
  5. Откроем этот модуль и найдем процедуру ЛицевыеСчетаСотрудниковКонвертация.

Проанализируем программный код. Нам нужно обернуть метод Записать() в блок Попытка...Исключение. Рассмотрим пример того, как должна выглядеть измененная логика внутри цикла обработки записей:


Процедура ЛицевыеСчетаСотрудниковКонвертация(СоответствиеКонвертированныхОбъектов)
    // ... часть типового кода по выборке данных из старого регистра ...
    
    Пока Выборка.Следующий() Цикл
        НаборЗаписей = РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.ФизическоеЛицо.Установить(Выборка.ФизЛицо);
        НаборЗаписей.Отбор.ЗарплатныйПроект.Установить(ЗарплатныйПроект);
        
        Запись = НаборЗаписей.Добавить();
        Запись.ДатаОткрытияЛицевогоСчета = Выборка.Период;
        Запись.Организация               = Выборка.Организация;
        Запись.ФизическоеЛицо            = Выборка.ФизЛицо;
        Запись.НомерЛицевогоСчета        = Выборка.НомерЛицевогоСчета;
        Запись.ЗарплатныйПроект          = ЗарплатныйПроект;
        
        Попытка
            НаборЗаписей.Записать();
        Исключение
            // Если запись не удалась (например, из-за дубля), мы просто фиксируем это в журнале 
            // и продолжаем работу программы, не прерывая обновление.
            ЗаписьЖурналаРегистрации("КонвертацияЛицевыхСчетов", 
                УровеньЖурналаРегистрации.Ошибка, 
                Метаданные.РегистрыСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам, , 
                "Не удалось перенести счет для: " + Строка(Выборка.ФизЛицо));
        КонецПопытки;
    КонецЦикла;
    
    // ... продолжение типового кода ...
КонецПроцедуры

После внесения изменений сохраним конфигурацию и запустим базу в режиме «1С:Предприятие». Обновление должно завершиться успешно. После этого рекомендуется проверить журнал регистрации и вручную дозаполнить те лицевые счета, которые были пропущены из-за ошибок.

Дополнительные рекомендации по переходу

Посмотрим на важные нюансы, которые часто упускают при переходе с БП 2.0 на 3.0:

  1. Роли пользователей: Перед началом обновления в БП 2.0 обязательно создайте пользователя с полными правами и добавьте ему специальную роль Администратор системы (для перехода на ред. 3.0). Без этой роли механизмы конвертации могут работать некорректно.
  2. Версия платформы: Убедитесь, что вы используете актуальную версию платформы 8.3 (не ниже рекомендованной в файле Readme к релизу БП 3.0). Устаревшие версии платформы могут вызывать ошибки при записи наборов записей с новыми типами отборов.
  3. Шрифты: Не забудьте установить шрифт EanGnivc из каталога шаблонов. Он необходим для корректного отображения штрих-кодов в налоговых декларациях, которые в версии 3.0 формируются по новым алгоритмам.
  4. Нумерация документов: Помните, что в редакции 3.0 формат номеров документов изменился (добавлены префиксы и дефисы). Чтобы сохранить преемственность, первый документ каждого вида после перехода нужно пронумеровать вручную, соблюдая новый формат, после чего автонумерация подхватит правильный порядок.

Таким образом, мы рассмотрели два основных пути решения проблемы. Первый — через очистку данных в 2.0 — является методически верным. Второй — через модификацию модуля ЗарплатаКадрыОбновлениеСПредыдущейРедакции — позволяет завершить обновление в экстренных ситуациях, когда возврат к старой базе невозможен или трудозатратен.

← На главную