Получение эВСД из ФГИС Меркурий по Ветис API 2.0 для 1С 7.7 ТиС 7.70.932 (измененной) + внешняя печатная форма


Пример получения информации в 1С 7.7 (7.70.019) ТиС 7.70.932 (изменена) из ФГИС Меркурий (Ветис API 2.0)

Задача:

Для передачи эВСД в Торговую Сеть через EDI нужно получить и сохранить УИД ВСД в доп. поле документа Реализация (ТиС) из ФГИС Меркурий используя Ветис API. (с Меркурием работает отдельный человек не связаный с 1С, ВСД формирует заранее на основании ранее переданых данных о предстоящих отгрузках)

Решение:

Добавлено свойство номенклатуры "Требуется ВСД" со значениями "Да" и "Нет"

Добавлена константа "БезВСД" типа "Справочник.ЗначениеСвойств" (для отметки номенклатуры которая не подлежит Вет. Контролю)

Для работы с Торговой Сетью создан Справочник.Грузополучатели подчиненый Контрагенты для выбора точки доставки.

Изменен документ "Реализация", добавлен реквизит шапки "Грузополучатель" Справочник.Грузополучатели, добавлен реквизит табличной части "ВСД" строка 36, добавлено текстовое поле в ТЧ на форме "ОткрытьВСД" с формулой "ВСД()", кнопка "Заполнить ВСД" функ. "ЗаполнитьВСД()", изменен модуль формы:

Добавлено

// Возвращает значок присутствия ВСД
// "" ВСД ненужна
// + ВСД есть
// ? нету нужна
// ! неопределено надо или нет
Функция ВСД()
Рез = "!";
СвВСД = СоздатьОбъект("Справочник.СвойстваНоменклатуры");
СвВСД.ИспользоватьВладельца(Номенклатура);
ЕстьСвВСД = СвВСД.ВыбратьЭлементыПоРеквизиту("ВидСвойства",Константа.БезВСД.Владелец);
Если ЕстьСвВСД = 1 Тогда
СвВСД.ПолучитьЭлемент();
Рез = ?(СвВСД.ЗначениеСвойства = Константа.БезВСД," ",?(ПустоеЗначение(ВСД)=1,"?","+"));
Пока СвВСД.ПолучитьЭлемент()=1 Цикл
Сообщить("Не однозначный тип ВСД "+Номенклатура.Наименование);
КонецЦикла;
КонецЕсли;
Возврат Рез;
КонецФункции

Функция ЗаполнитьВСД()
Парам = СоздатьОбъект("СписокЗначений");
Парам.ДобавитьЗначение(Контекст,"ФормаДок");
ОткрытьФормуМодально("Отчет",Парам,КаталогИБ() + "ExtForms"+"ПодборВСД.ert");
Возврат "";
КонецФункции

Изменено

Процедура ПриНачалеРедактированияСтроки()

Если (Форма.ТекущаяКолонка() = "ТекстПартия") и (Номенклатура.Выбран()=1) Тогда

...

ИначеЕсли (Форма.ТекущаяКолонка() = "ОткрытьВСД") Тогда
Если ((ОткрытьВСД="?")или(ОткрытьВСД="+")) Тогда
СписВариантов = СоздатьОбъект("СписокЗначений");
СписВариантов.ДобавитьЗначение(0, "Подбор ВСД");
СписВариантов.ДобавитьЗначение(1, "Редактировать ВСД");
Если ОткрытьВСД="+" Тогда
СписВариантов.ДобавитьЗначение(2, "Открыть ВСД");
КонецЕсли;
ВариантЗап = 0;
Если СписВариантов.ВыбратьЗначение(ВариантЗап,,,60,1) <> 1 Тогда
Возврат;
КонецЕсли;
Если ВариантЗап = 0 Тогда
Парам = СоздатьОбъект("СписокЗначений");
Парам.ДобавитьЗначение(Контекст,"ФормаДок");
Парам.ДобавитьЗначение("Подбор","Команда");
ОткрытьФормуМодально("Отчет",Парам,КаталогИБ() + "ExtForms"+"ПодборВСД.ert");
ИначеЕсли ВариантЗап = 1 Тогда
сВСД = ВСД;
Если ВвестиСтроку(сВСД,"Ид ВСД",39,,60)=1 Тогда
сВСД = СтрЗаменить(СтрЗаменить(Нрег(СокрЛП(сВСД)),"-","")," ","");
Если СтрДлина(сВСД)=32 Тогда
Для Сч=1 По 32 Цикл с = Сред(сВСД,Сч,1);
Если Найти("0123456789abcdef",с)=0 Тогда Сообщить("Не верный формат"); Возврат; КонецЕсли;
КонецЦикла;
ВСД = Лев(сВСД,8)+"-"+Сред(сВСД,9,4)+"-"+Сред(сВСД,13,4)+"-"+Сред(сВСД,17,4)+"-"+Прав(сВСД,12);
ИначеЕсли СтрДлина(сВСД)=0 Тогда
ВСД = "";
Иначе
Сообщить("Не верный формат");
КонецЕсли;
КонецЕсли;
ИначеЕсли ВариантЗап = 2 Тогда
ЗапуститьПриложение("https://mercury.vetrf.ru/pub/operatorui?_action=findVetDocumentFormByUuid&uuid="+Лев(ВСД,4)+"-"+Сред(ВСД,5,24)+"-"+Сред(ВСД,29,4)+"-"+Прав(ВСД,4));
Иначе
Возврат;
КонецЕсли;
ИначеЕсли ОткрытьВСД="!" Тогда
СвВСД = СоздатьОбъект("Справочник.СвойстваНоменклатуры");
СвВСД.ИспользоватьВладельца(Номенклатура);
СвВСД.Новый();
СвВСД.ВидСвойства = Константа.БезВСД.Владелец;
ЗнВСД = СоздатьОбъект("Справочник.ЗначенияСвойств");
ЗнВСД.ИспользоватьВладельца(СвВСД.ВидСвойства);
Если ЗнВСД.Выбрать("","ФормаСписка")=1 Тогда
СвВСД.ЗначениеСвойства = ЗнВСД.ТекущийЭлемент();
СвВСД.Записать();
КонецЕсли;
КонецЕсли;
ИначеЕсли (Форма.ТекущаяКолонка() = "ОткрытьПартию") Тогда
...

Внешняя обработка "ПодборВСД.ert" реализовано получение и подбор ВСД из ФГИС Меркурий.

Все данные хранятся в списках значений и сохраняются в файлы.

Для редактирования/сохранения настроек и связи справочников с данными из Ветис API можно воспользоваться внешней обработкой "ветис.ert" (из другого проекта)

Внешняя печатная форма ВСДшек к накладной: Т.к. данные в ИБ и в Меркурий отличаются то данные для печати беру через веб с сайта (тот что в QR) .

QR рисуется с помощью ВК FormEx http://www.dorex.pro спасибо АЛьФу.

Результат близок к оригинальной печатной форме Меркурия "сжатое с расширенной информацией".

Результат:

Проект внедрен, работает для одного ХС/Площадки и одной Торговой сети, но APLM 12 трепит нервы манагерам.

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

ЗЫ:

Это просто пример реализации взаимодействия 1С 7.7 с Меркурий через Ветис. Код открыт но к сожалению часть кода не читабельно (писалось не для изучения), можно использовать для своих проектов. Если понравилась идея, обращайтесь, что-нибудь придумаем.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *