В ситуациях, когда государственная информационная система «Меркурий» (ФГИС ВетИС) недоступна из-за технических сбоев или аварий, хозяйствующие субъекты сталкиваются с невозможностью оформить ветеринарные сопроводительные документы (ВСД). Однако отгрузка маркированной продукции и передача сведений в «Честный ЗНАК» (ГИС МТ) не должны останавливаться.
Согласно регламентам, в аварийном режиме допускается использование «нулевого» идентификатора ВСД (формат UUID: 00000000-0000-0000-0000-000000000000). Рассмотрим подробно, как реализовать это в типовых конфигурациях 1С (Управление торговлей 11, УНФ, ERP), обойти проверки системы и корректно оформить документы.
При штатной работе модуль обмена с ГИС МТ в 1С проверяет наличие реального, оформленного ВСД в базе. Если ФГИС ВетИС «лежит», получить этот документ невозможно. Попытка ввести нули вручную часто блокируется форматно-логическим контролем программы, так как поле ожидает ссылку на существующий объект справочника, а не просто строку.
Разберем три основных подхода к решению этой задачи:
Этот метод рекомендован технической поддержкой и подходит для ситуаций, когда нет возможности оперативно внедрять доработки кода. Суть заключается во временном отключении жесткой связки с подсистемой ВетИС.
Для ввода идентификатора ВСД в виде произвольного текста выполним следующие действия:
После этого документ «Ввод в оборот» или документ передачи сведений о нанесении переключается в так называемый «режим производственной линии». В этом режиме проверки смягчаются, и идентификатор ВСД можно ввести вручную или вставить скопированное значение 00000000-0000-0000-0000-000000000000 как строку.
Важно: После восстановления работы сервиса и отправки аварийных документов настройку необходимо вернуть в исходное состояние.
Более надежный способ с точки зрения целостности данных — создать в базе 1С реальный объект справочника ВетеринарноСопроводительныйДокументВЕТИС, в который принудительно записать нулевой идентификатор. Это позволит выбирать этот документ в стандартных полях ввода без отключения функциональных опций.
Рассмотрим алгоритм создания такой обработки. Код должен выполняться на сервере.
Основная процедура создания заглушки выглядит следующим образом:
&НаСервере
Процедура СоздатьНулевыеВСДПоСписку(СписокВСД) Экспорт
// СписокВСД - это массив или список ссылок на документы-основания (например, Производственная операция ВЕТИС)
Для Каждого Строка Из СписокВСД Цикл
ПОСсылка = Строка; // Ссылка на производственную операцию
// Создаем новый элемент справочника
ВСД = Справочники.ВетеринарноСопроводительныйДокументВЕТИС.СоздатьЭлемент();
// Заполняем структуру данных для ВСД
ДанныеЗаполнения = Новый Структура;
// Самое главное - подставляем нулевой UUID
ДанныеЗаполнения.Вставить("Идентификатор", "00000000-0000-0000-0000-000000000000");
ДанныеЗаполнения.Вставить("Дата", ПОСсылка.Дата);
ДанныеЗаполнения.Вставить("ДатаИзменения", ПОСсылка.Дата);
ДанныеЗаполнения.Вставить("Статус", Перечисления.СтатусыВетеринарныхДокументовВЕТИС.Оформлен);
ДанныеЗаполнения.Вставить("Форма", Перечисления.ФормыВетеринарныхДокументовВЕТИС.PRODUCTIVE); // Производственный сертификат
ДанныеЗаполнения.Вставить("Тип", Перечисления.ТипыВетеринарныхДокументовВЕТИС.Производственный);
ДанныеЗаполнения.Вставить("Закрыт", Ложь);
// Заполняем хозяйствующие субъекты из документа-основания
ДанныеЗаполнения.Вставить("ГрузоотправительХозяйствующийСубъект", ПОСсылка.ХозяйствующийСубъект);
ДанныеЗаполнения.Вставить("ГрузоотправительПредприятие", ПОСсылка.Предприятие);
// Заполняем данные о продукции (берем из первой строки товаров операции)
// В реальной обработке лучше делать цикл по строкам товаров, если их несколько
Если ПОСсылка.Товары.Количество() > 0 Тогда
СтрокаТовара = ПОСсылка.Товары[0];
ДанныеЗаполнения.Вставить("Продукция", СтрокаТовара.Продукция);
ДанныеЗаполнения.Вставить("КоличествоВЕТИС", СтрокаТовара.КоличествоВЕТИС);
ДанныеЗаполнения.Вставить("ЕдиницаИзмеренияВЕТИС", СтрокаТовара.ЕдиницаИзмеренияВЕТИС);
// ... копирование остальных реквизитов (сроки годности, даты выработки)
КонецЕсли;
ДанныеЗаполнения.Вставить("СтранаПроизводства", Справочники.СтраныМира.НайтиПоКоду("643", Истина)); // Россия
// Применяем данные к объекту
ЗаполнитьЗначенияСвойств(ВСД, ДанныеЗаполнения);
// Обязательно добавляем запись в историю статусов, иначе документ может считаться некорректным
ИССтр = Новый Структура;
ИССтр.Вставить("ДатаИзменения", ДанныеЗаполнения.ДатаИзменения);
ИССтр.Вставить("Статус", ДанныеЗаполнения.Статус);
ИССтр.Вставить("ФИО", "Аварийный Режим"); // Можно указать ответственного
ИССтр.Вставить("НаименованиеОрганизации", "Название вашей организации");
ВСДИС = ВСД.ИсторияСтатусов.Добавить();
ЗаполнитьЗначенияСвойств(ВСДИС, ИССтр);
// Записываем созданный ВСД
ВСД.Записать();
// Связываем производственную операцию с созданным ВСД
ПООбъект = ПОСсылка.ПолучитьОбъект();
Если ПООбъект.Товары.Количество() > 0 Тогда
ПООбъект.Товары[0].ВетеринарноСопроводительныйДокумент = ВСД.Ссылка;
ПООбъект.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Особенности для 1С:УНФ:
В конфигурации «Управление нашей фирмой» структура метаданных может немного отличаться. Например, при заполнении дат производства необходимо учитывать наличие серий.
Если вы получаете ошибку Значение не является значением объектного типа (ДатаПроизводства), добавьте проверку на заполненность серии:
Если ЗначениеЗаполнено(ТекущаяСтрока.Серия) Тогда
ДанныеЗаполнения.Вставить("Дата", ТекущаяСтрока.Серия.ДатаПроизводства);
Иначе
ДанныеЗаполнения.Вставить("Дата", ТекущаяДата()); // Или берем дату документа
КонецЕсли;
Если вам необходимо распечатать сопроводительные документы для транспортировки, а реального ВСД нет, можно использовать механизм расширений для подмены данных при печати. Это актуально для 1С:Управление торговлей.
Для этого создается расширение, перехватывающее процедуру заполнения данных печати в модуле КонтурМеркурий_ПечатьСервер (или аналогичном, если используется типовой модуль). Рассмотрим пример аннотации &Вместо для процедуры ЗаполнитьСтрокуПечатьВСД_БезОформления.
&Вместо("ЗаполнитьСтрокуПечатьВСД_БезОформления")
Процедура Доработки_ЗаполнитьСтрокуПечатьВСД_БезОформления(ОбластьВСДСтрока, ДанныеДляПечати, ПовторяющиесяДанныеДляПечати, ДокументСсылка, ПараметрыЗаполнения)
// ... здесь идет стандартный код заполнения упаковок, партий и продукции (см. типовую процедуру) ...
// Основная задача - подменить вывод номера ВСД
// Принудительно устанавливаем нулевые UUID для параметров макета
ОбластьВСДСтрока.Параметры.ВходящийВСД = "00000000-0000-0000-0000-000000000000";
ОбластьВСДСтрока.Параметры.ПроизводственныйВСД = "00000000-0000-0000-0000-000000000000";
// Формируем представление производителя и продукции
// ... (стандартный код формирования строк) ...
ОбластьВСДСтрока.Параметры.Продукция = Продукция;
// Скрываем реальный статус, так как документа нет
ОбластьВСДСтрока.Параметры.ОсобыеОтметки = "АВАРИЙНЫЙ РЕЖИМ ВЕТИС";
// Вызов обработчиков событий, если они есть
ПараметрыПодключаемогоМодуля = Новый Структура("ВСД, ДокументСсылка, Область", ДанныеДляПечати, ДокументСсылка, ОбластьВСДСтрока);
КонтурМеркурий_ПодключаемыйМодульВызов.ОбработкаСобытияПодключаемогоМодуля(
"МеркурийИзменитьПечатьОбластиВСДПечатьБезОформления", , ПараметрыПодключаемогоМодуля);
КонецПроцедуры
После ликвидации аварии необходимо привести учет в соответствие. Проанализируем, что делать с данными.
CIS_INFORMATION_CHANGE), заменив нулевой UUID на реальный, полученный после оформления в ВетИС.В типовых конфигурациях 1С (ERP, КА, УТ) для корректировки сведений можно использовать документ «Уточнение сведений о кодах маркировки ИСМП». Если типовой функционал не позволяет массово изменить привязанный ВСД, может потребоваться небольшая доработка или внешняя обработка, заполняющая табличную часть документа парами «Код Маркировки - Новый UUID».