Как исправить ошибку "Значение поля 'Группа приказа' не может быть пустым" при интеграции 1С с ВЕТИС (Меркурий)?

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

При первичной настройке интеграции с государственной системой «Меркурий» (ВетИС) через программный интерфейс API в конфигурациях 1С пользователи часто сталкиваются с неожиданным препятствием. Сразу после ввода учетных данных и попытки создать новое подключение система выдает критическую ошибку: «Запись не верна! Значение поля "Группа приказа" не может быть пустым!: ВидыПродукцииПоГруппамВетис:Аттестованный специалист». Эта ошибка полностью блокирует дальнейший процесс настройки обмена и не позволяет завершить сопоставление данных.

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

Выясняем причину: техническая суть программного сбоя

Для того чтобы понять, почему система ведет себя подобным образом, обратимся к законодательной базе и логике работы ветеринарного контроля. Согласно нормативным актам Минсельхоза РФ, права на оформление ветеринарно-сопроводительных документов (ВСД) в системе «Меркурий» строго разграничены в зависимости от квалификации и статуса пользователя:

  1. Приказ № 646 регламентирует права уполномоченных лиц организаций (обычных сотрудников предприятий, занимающихся розничной торговлей).
  2. Приказ № 647 (и сменивший его Приказ № 194) определяет права аттестованных специалистов (ветеринарных врачей, не являющихся госслужащими).
  3. Приказ № 648 устанавливает полномочия для государственных ветеринарных врачей.

В коде программных решений 1С (это касается конфигураций «1С:Розница», «1С:Управление торговлей», «1С:ERP», «1С:Комплексная автоматизация» и «1С:Бухгалтерия») за сопоставление этих приказов, групп продукции и уровней доступа отвечает специальный регистр сведений ВидыПродукцииПоГруппамВЕТИС. В структуре метаданных этого регистра для измерения или реквизита ГруппаПриказа программно установлено жесткое ограничение: «Запретить пустые значения».

При первом подключении к ВетИС программа в фоновом режиме пытается автоматически заполнить этот регистр стандартными предопределенными настройками. Однако из-за внутренней ошибки в программном коде библиотеки интеграции (БЭД), которая поставлялась в ряде релизов, для записи с типом доступа АттестованныйСпециалист реквизит ГруппаПриказа оставался незаполненным. Платформа 1С обнаруживает попытку записать в базу данных строку с пустым обязательным полем, срабатывает системное ограничение, и транзакция аварийно прерывается с выводом сообщения об ошибке.

Давайте разберем по шагам, как мы можем обойти или полностью устранить эту проблему в вашей информационной базе.

Способ 1. Обновление конфигурации и установка официальных патчей (Рекомендуемый метод)

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

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

  1. Создадим резервную копию (информационную базу в формате .dt или копию файла 1Cv8.1CD). Никогда не пренебрегайте этим шагом перед проведением любых обновлений!
  2. Перейдем в раздел Администрирование, далее выберем пункт Обслуживание.
  3. Откроем подраздел Обновление программы и запустим поиск доступных обновлений.
  4. Если конфигурация находится на поддержке и не имеет кастомных доработок, выполним обновление в автоматическом режиме до актуального релиза.

Если ваша конфигурация существенно доработана программистами и быстрое обновление типовыми средствами невозможно, проверим наличие официальных исправлений (патчей):

  1. В разделе Обслуживание перейдем по ссылке Установка обновлений и исправлений.
  2. Настроим автоматическую загрузку исправлений (патчей). Фирма «1С» оперативно выпускает небольшие расширения (патчи с префиксом EF_), которые исправляют конкретные точечные ошибки в коде без изменения версии всей конфигурации. Если патч для вашего релиза выпущен, программа скачает его и применит при перезапуске сеанса.

Способ 2. Ручное заполнение регистра сведений через технический режим

Если у нас нет возможности обновить программу прямо сейчас, а настроить интеграцию с ВетИС нужно срочно, мы можем обойти ошибку платформы, заполнив проблемную строку в регистре вручную. Для этого воспользуемся встроенным инструментом для администраторов.

Проанализируем последовательность действий для ручной корректировки данных:

  1. Включим отображение всех функций в программе. Для этого нажмем на кнопку главного меню (в левом верхнем углу окна программы), перейдем в раздел Настройки, затем выберем пункт Параметры.
  2. В открывшемся окне установим флажок Отображать команду "Функции для технического специалиста" (в старых версиях платформы эта команда называлась "Все функции") и нажмем кнопку "ОК".
  3. Вновь откроем главное меню программы и выберем появившийся пункт Функции для технического специалиста.
  4. В списке объектов развернем ветку Регистры сведений и найдем через строку поиска регистр с именем Виды продукции по группам ВЕТИС (в метаданных он может отображаться латиницей как ВидыПродукцииПоГруппамВЕТИС). Откроем его двойным щелчком мыши.
  5. В открывшемся списке записей найдем строку, у которой в колонке уровня доступа указано значение Аттестованный специалист. Обратим внимание, что колонка Группа приказа для этой строки будет пустой — именно это и вызывает сбой системы.
  6. Откроем эту запись на редактирование. В поле ввода группы приказа нажмем кнопку выбора и выберем соответствующий элемент из справочника групп приказов ВетИС (это должен быть элемент, ссылающийся на Приказ Минсельхоза РФ № 647 или № 194).
  7. Сохраним и закроем запись регистра сведений.

После ручного заполнения этого поля платформа перестанет ругаться на незаполненные реквизиты, и вы сможете беспрепятственно продолжить создание подключения в панели обмена с ВетИС.

Способ 3. Программный обход проблемы с помощью внешней обработки

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

Рассмотрим структуру и логику работы программного кода, который принудительно запишет верное значение в базу данных:


// Создаем объект для работы с набором записей регистра сведений
НаборЗаписей = РегистрыСведений.ВидыПродукцииПоГруппамВЕТИС.СоздатьНаборЗаписей();

// Устанавливаем жесткий отбор по проблемному измерению регистра
НаборЗаписей.Отбор.УровеньДоступа.Установить(Перечисления.УровниДоступаВЕТИС.АттестованныйСпециалист); 

// Считываем существующие записи из базы данных по нашему отбору
НаборЗаписей.Прочитать();

// Обходим полученный набор в цикле и заполняем пустые реквизиты
Для Каждого Запись Из НаборЗаписей Цикл
    Если Не ЗначениеЗаполнено(Запись.ГруппаПриказа) Тогда
        // Выполняем поиск ссылки на нужную группу приказа по коду "647"
        СсылкаНаПриказ = Справочники.ГруппыПриказовВЕТИС.НайтиПоРеквизиту("Код", "647"); 
        
        // Если поиск по коду не дал результатов, пробуем найти элемент по наименованию
        Если Не ЗначениеЗаполнено(СсылкаНаПриказ) Тогда
            СсылкаНаПриказ = Справочники.ГруппыПриказовВЕТИС.НайтиПоНаименованию("Приказ № 647");
        КонецЕсли;
        
        // Присваиваем найденную ссылку реквизиту записи
        Если ЗначениеЗаполнено(СсылкаНаПриказ) Тогда
            Запись.ГруппаПриказа = СсылкаНаПриказ;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

// Записываем обновленный набор записей обратно в базу данных с отключением проверок
Попытка
    НаборЗаписей.Записать(Истина);
    Сообщить("Корректировка регистра ВидыПродукцииПоГруппамВЕТИС выполнена успешно!");
Исключение
    Сообщить("Не удалось записать изменения. Причина: " + ОписаниеОшибки());
КонецПопытки;

Давайте подробно проанализируем, как работает данный скрипт:

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

Резюме и рекомендации по дальнейшей работе

Мы детально рассмотрели проблему интеграции 1С с ВетИС (Меркурий) и убедились, что пугающая ошибка при создании подключения — это всего лишь следствие допущенной разработчиками опечатки в процедурах первоначального заполнения регистров.

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

  1. Регулярно обновляйте конфигурации. Требования со стороны ВетИС, Честного Знака, ЕГАИС и других контролирующих органов меняются очень часто. Разработчики 1С оперативно выпускают обновления конфигураций и библиотек интеграции для обеспечения стабильного обмена данными.
  2. Контролируйте актуальность сертификатов и учетных данных API. Периодически проверяйте сроки действия электронных подписей и соответствие реквизитов вашей организации в личном кабинете ВетИС.Паспорт и настройках 1С.
  3. Используйте тестовый контур для отладки. При интеграции новых рабочих мест или переходе на новые версии программ сначала производите все тестовые подключения и обмены в демонстрационной базе и тестовом контуре ВетИС.API, чтобы исключить порчу реальных ветеринарных документов в продуктивной базе.
← На главную