Задача:
Для передачи эВСД в Торговую Сеть через 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 с Меркурий через Ветис. Код открыт но к сожалению часть кода не читабельно (писалось не для изучения), можно использовать для своих проектов. Если понравилась идея, обращайтесь, что-нибудь придумаем.