Добрый день, коллеги.
Итак, исходим из того, что
1. У вас есть "обезличенный" ключ ЭЦП для работы с ГИИС ДМДК через веб-сервис
2. Установлен и настроен stunnel, инструкции по интеграции https://dmdk.ru/
3. По адресу 127.0.0.1:1500/ws/v1/exchange.wsdl
(или любому, настроенному вами) вы видите, что веб-сервис отвечает (в общем, вы видите, что XML какой-то по этому адресу отображается).
Наконец, переходим к 1с.
4. Систему вы, разумеется , тоже настроили - по вебинару ( https://youtu.be/y8RDjei6h7w ) или текстовой инструкции Раруса из каталога обновлений
** Обновлено до Розница 8. Ювелирный магазин, редакция 2.3 (2.3.10.61)
---
Основные сложности, с которыми пришлось (на данный момент) столкнуться.
1. Недостаточная информативность списков документов ДМДК
До 15.01.22 было необходимо отправить все партии ювелирных изделий, и получить ИНП (индивидуальные номера партий). В общем, сразу за этим -УИНы (уникальные идентификационные номера) каждого изделия внутри партии.
Так вот! Если мы отправляем разом 50-100- больше партий, то отслеживать их состояние очень сложно, и форма документа выглядит вот так
Что, как нам кажется, максимально неинформативно.
Для начала - советуем через "Еще-Изменить форму" вывести "ИНП"
Дальше - нам кажется, удобно видеть количество УИНов в списке по каждому заказу. Так что слегка модифицируем запрос формирования динамического списка:
ВЫБРАТЬ
ПередачаОстатковЮИГИИСДМДКВложенныеПартии.Ссылка КАК Ссылка,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПередачаОстатковЮИГИИСДМДКВложенныеПартии.НомерСтроки) КАК УИНы
ПОМЕСТИТЬ вт
ИЗ
Документ.ПередачаОстатковЮИГИИСДМДК.ВложенныеПартии КАК ПередачаОстатковЮИГИИСДМДКВложенныеПартии
СГРУППИРОВАТЬ ПО
ПередачаОстатковЮИГИИСДМДКВложенныеПартии.Ссылка
;
//
ВЫБРАТЬ
ДокументПередачаОстатковЮИГИИСДМДК.Ссылка,
ДокументПередачаОстатковЮИГИИСДМДК.ПометкаУдаления,
ДокументПередачаОстатковЮИГИИСДМДК.Номер,
ДокументПередачаОстатковЮИГИИСДМДК.Дата,
ДокументПередачаОстатковЮИГИИСДМДК.Проведен,
ДокументПередачаОстатковЮИГИИСДМДК.Организация,
ДокументПередачаОстатковЮИГИИСДМДК.Магазин,
ДокументПередачаОстатковЮИГИИСДМДК.Склад,
ДокументПередачаОстатковЮИГИИСДМДК.ИНП,
ДокументПередачаОстатковЮИГИИСДМДК.Наименование,
ДокументПередачаОстатковЮИГИИСДМДК.ТипПартии,
ДокументПередачаОстатковЮИГИИСДМДК.ВидПартии,
ДокументПередачаОстатковЮИГИИСДМДК.ОКПД2,
ДокументПередачаОстатковЮИГИИСДМДК.Производитель,
ДокументПередачаОстатковЮИГИИСДМДК.ТипТовара,
ДокументПередачаОстатковЮИГИИСДМДК.Собственник,
ДокументПередачаОстатковЮИГИИСДМДК.КоличествоВсего,
ДокументПередачаОстатковЮИГИИСДМДК.ОбщийВес,
ДокументПередачаОстатковЮИГИИСДМДК.ПробаМеталла,
ДокументПередачаОстатковЮИГИИСДМДК.СостояниеПодтверждения,
ДокументПередачаОстатковЮИГИИСДМДК.ПричинаОтказа,
ДокументПередачаОстатковЮИГИИСДМДК.Описание,
ДокументПередачаОстатковЮИГИИСДМДК.ЕдиницаИзмерения,
ДокументПередачаОстатковЮИГИИСДМДК.Комментарий,
ДокументПередачаОстатковЮИГИИСДМДК.Ответственный,
ДокументПередачаОстатковЮИГИИСДМДК.Основание,
ДокументПередачаОстатковЮИГИИСДМДК.ОстаткиПереданы,
ДокументПередачаОстатковЮИГИИСДМДК.ГруппаНоменклатуры,
ДокументПередачаОстатковЮИГИИСДМДК.ВидНоменклатуры,
ДокументПередачаОстатковЮИГИИСДМДК.ДатаПолученияОстатков,
ДокументПередачаОстатковЮИГИИСДМДК.РучнойВвод,
ДокументПередачаОстатковЮИГИИСДМДК.Товары,
ДокументПередачаОстатковЮИГИИСДМДК.СведенияОСплаве,
ДокументПередачаОстатковЮИГИИСДМДК.СведенияОВставках,
ДокументПередачаОстатковЮИГИИСДМДК.ВложенныеПартии,
ДокументПередачаОстатковЮИГИИСДМДК.МоментВремени,
ЕСТЬNULL(Статусы.ДальнейшееДействие1, ЗНАЧЕНИЕ(Перечисление.ДальнейшиеДействияПоВзаимодействиюГИИСДМДК.НеТребуется)) КАК ДальнейшееДействие1,
ЕСТЬNULL(Статусы.ДальнейшееДействие2, ЗНАЧЕНИЕ(Перечисление.ДальнейшиеДействияПоВзаимодействиюГИИСДМДК.НеТребуется)) КАК ДальнейшееДействие2,
ЕСТЬNULL(Статусы.ДальнейшееДействие3, ЗНАЧЕНИЕ(Перечисление.ДальнейшиеДействияПоВзаимодействиюГИИСДМДК.НеТребуется)) КАК ДальнейшееДействие3,
ЕСТЬNULL(Статусы.ДальнейшееДействие4, ЗНАЧЕНИЕ(Перечисление.ДальнейшиеДействияПоВзаимодействиюГИИСДМДК.НеТребуется)) КАК ДальнейшееДействие4,
ЕСТЬNULL(Статусы.Статус, ЗНАЧЕНИЕ(Перечисление.СтатусыИнформированияГИИСДМДК.Отсутствует)) КАК Статус ,
вт.УИНы КАК УИНы
ИЗ
Документ.ПередачаОстатковЮИГИИСДМДК КАК ДокументПередачаОстатковЮИГИИСДМДК
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыИнформированияГИИСДМДК КАК Статусы
ПО (Статусы.Документ = ДокументПередачаОстатковЮИГИИСДМДК.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ вт КАК вт
ПО (вт.Ссылка = ДокументПередачаОстатковЮИГИИСДМДК.Ссылка)
Так мы сможем привести форму к следующему виду:
2. Печать УИНов (альтернативный вариант)
До релиза 2.3.10.43 в "Рознице" не было функционала по печати этикеток ДМДК.
Потому на момент публикации статьи здесь был описан вариант печати (который, как АЛЬТЕРНАТИВА, может быть актуален и сейчас).
Один хороший человек из тематического чата в телеграмме (посвященного ДМДК вообще) выложил свою небольшую программу - которая умеет считывать текстовый файл определенного формата (примеры в архиве есть), и печатать по ним УИНы.
https://drive.google.com/drive/folders/1zvvIXPQsXssJoKsHo5cpU_pUyb-CjWJj?sort=13&direction=a
Так что - сделаем небольшую модификацию к документу "РегистрацияОстатковЮИГИИСДМДК". Заберем форму документа в расширение, добавим над табличной частью кнопку, вызывающую команду "ВыгрузитьФайлДляПечати"
&НаКлиенте
Процедура Р_МакВыгрузитьФайлДляПечатиПосле(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите имя файла для сохранения";
Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = "Текстовый файл(*.txt)|*.txt";
//Вызов собственно диалога на экран
Если Диалог.Выбрать() Тогда
//Сюда попадем только если пользователь нажал ОК
//Сохранение выбранного имени файла (полного имени, значит включая путь к нему)
ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;
если ИмяФайла<>"" тогда
Файл = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
текст=ПолучитьТекстВыгрузкиНаСервере();
Файл.Записать(текст);
Файл.Закрыть();
конецесли;
КонецПроцедуры
&НаСервере
функция ПолучитьТекстВыгрузкиНаСервере()
ТекстВыгрузки="";
//УИН;ШК;Наименование;Артикул;Размер;Вес;Вставка
//6432200090123456;1234567890123;Наименование;Артикул;Размер;Вес;Вставка
ТЗ = Объект.Товары.Выгрузить();
ТЗ.Колонки.Добавить("ШК");
ТЗ.Колонки.Добавить("Артикул");
ТЗ.Колонки.Добавить("Размер");
ТЗ.Колонки.Добавить("Вес");
ТЗ.Колонки.Добавить("Вставка");
Сч=1;
Для каждого Стр Из ТЗ Цикл
ПолучитьДанныеОНом(Стр);
если сч>1 тогда
ТекстВыгрузки=ТекстВыгрузки+Символы.ПС;
Иначе
ТекстВыгрузки="УИН;ШК;Наименование;Артикул;Размер;Вес;Вставка"+Символы.ПС;
конецесли;
//не должно быть ;!
Строка=""
+Строка(Стр.уин)+";"
+СокрЛП(Стр.ШК)+";"
+лев(Стр.Наименование,25)+";"
+СокрЛП(Стр.Артикул)+";"
+Строка(Стр.Размер)+";"
+Строка(Стр.Вес)+";"
+Строка(Стр.Вставка)+";"
;
ТекстВыгрузки=ТекстВыгрузки+Строка;
Сч = Сч + 1;
КонецЦикла;
//Сообщить("ок");
Возврат ТекстВыгрузки
КонецФункции
Процедура ПолучитьДанныеОНом(стр)
Запрос = новый запрос;
Запрос.Текст = "ВЫБРАТЬ
| Штрихкоды.Владелец КАК Владелец,
| МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод
|ПОМЕСТИТЬ ВТ_МаксШК
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| Штрихкоды.Владелец
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ор_Вставка КАК Вставка,
| Номенклатура.ор_Размер КАК Размер,
| Номенклатура.ор_ВесВГраммах КАК Вес,
| ВТ_МаксШК.Штрихкод КАК ШК
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МаксШК КАК ВТ_МаксШК
| ПО ВТ_МаксШК.Владелец = Номенклатура.Ссылка
|ГДЕ
| Номенклатура.Ссылка = &Ссылка" ;
Запрос.УстановитьПараметр("Ссылка",Стр.Номенклатура);
выборка = запрос.Выполнить().Выбрать();
если выборка.Следующий() тогда
ЗаполнитьЗначенияСвойств(Стр,выборка);
КонецЕсли;
КонецПроцедуры //
Теперь мы можем получить файл из документа, а затем загрузим его в программу "printtags.exe".
Там же и распечатаем (и, при достаточном желании, редактируем в режиме Дизайнер).
3. Небольшая модификация, которая нам позволила быстро заполнить партии.
(под партиями понимаем документы передачи остатков, на которые мы и получаем ИНП)
Дело в том, что некоторые вещи у поставщиков мы уточняли, высылая им xls-файлы, где всегда был идентификатор (артикул или штрихкод). Так что.. я воспользовался другой (своей же) публикацией, в которой описывал, как в УТ11, КА2, ERP (с некоторыми отличиями - и к Рознице 2) к любому документу с табличной частью Товары добавить возможность "загружать из внешнего файла". Пример расширения есть по ссылке, но листинг под Ювелирную Розницу я приведу здесь
&НаКлиенте
Процедура Расш_Загр_ЗагрузитьИзВнешнегоФайлаПосле(Команда)
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ЗагружатьЦены", Истина);
ПараметрыФормы.Вставить("ЗагружатьСуммы", Истина);
ПараметрыФормы.Вставить("ЦенаВключаетНДС", ложь);
ПараметрыФормы.Вставить("ЗагружатьГТД", ложь);
ПараметрыФормы.Вставить("ЗагружатьКоличество", Истина);
ПараметрыФормы.Вставить("ИмяТЧ", "Товары");
ОткрытьФорму(
"Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма",
ПараметрыФормы,
ЭтаФорма,
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура Расш_Загр_ОбработкаВыбораПеред(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма" Тогда
ПолучитьЗагруженныеТоварыИзХранилища(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьЗагруженныеТоварыИзХранилища(РезультатВыбора)
ТоварыИзХранилища = ПолучитьИзВременногоХранилища(РезультатВыбора.АдресТоваровВХранилище);
ИмяТЧ = РезультатВыбора.ИмяТЧ;
Для Каждого СтрокаТоваров Из ТоварыИзХранилища Цикл
СтрокаТЧТовары = Объект[ИмяТЧ].Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧТовары, СтрокаТоваров);
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ОбработкаТабличнойЧастиТоварыКлиентСервер.СтруктураКэшируемыхЗначений();
ОбработкаТабличнойЧастиТоварыСервер.ОбработатьСтрокуТЧСервер(СтрокаТЧТовары, СтруктураДействий, КэшированныеЗначения);
Попытка
СтрокаТЧТовары.вес = СтрокаТЧТовары.Номенклатура.ор_ВесВГраммах;
исключение
КонецПопытки;
КонецЦикла;
СобытияФормРТ.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры