Как исправить ошибку «Недопустимое значение параметра» в модуле УправлениеКонтактнойИнформацией при переходе с БП 2.0 на 3.0?

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

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

Выясняем причину ошибки

Разберем ситуацию: при выполнении обработок обновления в режиме «1С:Предприятие» система выдает сообщение об ошибке, указывающее на строку кода:

ЗаполнитьЗначенияСвойств(Данные, ВидИнформации);

Проанализируем техническую суть проблемы. В редакции 3.0 была полностью пересмотрена архитектура хранения адресов, телефонов и других данных. Если в исходной базе 2.0 справочник ВидыКонтактнойИформации содержит некорректные записи, дубли или битые ссылки, механизм конвертации не может сопоставить их с новыми метаданными. Параметр ВидИнформации принимает значение Неопределено или ссылку на объект, который физически отсутствует в базе (объект не найден), что и вызывает исключение в платформенном методе.

Способ 1. Правильная настройка отладки для поиска «битых» данных

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

  1. Включим отладку на сервере. Если база серверная, убедимся, что агент сервера запущен с ключом -debug. Без этого отладчик не сможет подключиться к серверному вызову.
  2. Настроим автоматическое подключение. В конфигураторе перейдем в меню Отладка — Подключение. Нажмем кнопку Автоматическое подключение и установим флажок Фоновые задания. Теперь отладчик будет «подхватывать» процессы конвертации.
  3. Используем остановку по ошибке. Поскольку процедура вызывается тысячи раз, обычная точка останова нам не поможет. Перейдем в Отладка — Остановка по ошибке и установим флажок Останавливаться по ошибке. При возникновении сбоя система сама зафиксирует состояние переменных.

Когда отладчик остановится на строке с ошибкой, проанализируем содержимое переменной ВидИнформации. Скорее всего, мы увидим там Неопределено или «Объект не найден». Это даст нам понимание, в каком именно объекте (контрагенте, физлице или организации) данные повреждены.

Способ 2. Пошаговое обновление через промежуточные релизы

Как показывает практика, попытка обновиться с очень старого релиза 2.0 сразу на актуальный релиз 3.0 часто приводит к несовместимости алгоритмов конвертации. Рассмотрим стратегию «мелких шагов»:

Выясним, какой релиз является минимально необходимым для перехода. Вместо последнего доступного релиза 3.0, попробуем использовать один из первых релизов ветки 3.0 (например, 3.0.43.XX или 3.0.44.XX). Последовательность действий будет следующей:

  1. Обновляем конфигурацию 2.0 до последнего актуального релиза этой ветки.
  2. Выполняем переход на «ранний» релиз 3.0.
  3. Запускаем программу в режиме «1С:Предприятие» и дожидаемся полного завершения всех регламентных процедур обновления данных.
  4. Только после успешного завершения обновляем 3.0 до актуальной версии.

Этот метод часто помогает, так как в промежуточных релизах механизмы трансформации данных могут быть менее требовательными к чистоте справочников.

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

Чтобы предотвратить ошибку, проанализируем состояние данных еще до начала обновления. Выполним следующие действия в редакции 2.0:

  1. Поиск и замена дублей. Воспользуемся стандартной обработкой для поиска дубликатов в справочнике Виды контактной информации. Наличие двух «Юридических адресов» с одинаковыми именами, но разными внутренними идентификаторами — гарантированная причина сбоя.
  2. Проверка предопределенных элементов. Убедимся, что все предопределенные элементы (со значком «шарика») на месте и не помечены на удаление.
  3. Очистка регистра сведений. Проверим регистр КонтактнаяИнформация. Если в нем есть записи с пустым полем Вид или Объект, их необходимо удалить. Рассмотрим пример запроса для поиска таких записей:

ВЫБРАТЬ
    КонтактнаяИнформация.Объект,
    КонтактнаяИнформация.Тип,
    КонтактнаяИнформация.Вид
ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
    (КонтактнаяИнформация.Вид ЕСТЬ NULL
        ИЛИ КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка))

Способ 4. Тестирование и исправление с очисткой ссылок

Перед переходом обязательно выполним Тестирование и исправление (ТиИ). Однако здесь есть важный нюанс. Посмотрим на настройки:

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

Способ 5. Программный обход ошибки (для опытных разработчиков)

Если время поджимает и базу нужно запустить «здесь и сейчас», можно прибегнуть к временной модификации кода. Найдем в конфигурации общий модуль УправлениеКонтактнойИнформациейСлужебныйПовтИсп и внесем правку в процедуру, где происходит заполнение свойств.

Проанализируем следующий фрагмент кода:


// Было:
ЗаполнитьЗначенияСвойств(Данные, ВидИнформации);

// Стало (добавляем проверку):
Если ВидИнформации <> Неопределено И ТипЗнч(ВидИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
    ЗаполнитьЗначенияСвойств(Данные, ВидИнформации);
Иначе
    // Записываем лог, чтобы потом понять, какие данные не перенеслись
    ЗаписьЖурналаРегистрации("ОбновлениеДанных", УровеньЖурналаРегистрации.Предупреждение, , , "Пропущен некорректный вид контактной информации");
КонецЕсли;

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

Заключение

Мы рассмотрели комплексный подход к решению проблемы при переходе с БП 2.0 на 3.0. Помним, что наиболее эффективным методом является предварительная очистка данных в исходной базе и использование промежуточных релизов. Чистота справочника Виды контактной информации и отсутствие «битых» записей в регистре — залог успешной конвертации без необходимости вмешательства в программный код 1С.

← На главную