|
|
|
Программное списание кодов маркировки в честном знаке ↓ (Волшебник 22.08.2025 21:54) |
☑ | ||
|---|---|---|---|---|
|
0
Nikqwe
22.08.25
✎
17:34
|
Кто-нибудь занимался интеграцией с честным знаком, подскажите с чего начать? Мне нужно сделать обработку списания кодов маркировки. На инфостарте есть много примеров как взаимодействовать с ЧЗ, но примеров как именно списывать что то совсем нет.
|
|||
|
1
mikecool
22.08.25
✎
17:32
|
взять типовую и посмотреть предлагать?
|
|||
|
2
Nikqwe
22.08.25
✎
17:35
|
(1) как вариант можно, но хотелось бы не лазить в коде типовой конфы)
|
|||
|
3
Волшебник
22.08.25
✎
17:36
|
(2) А хотите почитать документацию на API Честный Знак?
|
|||
|
4
MWWRuza
гуру
22.08.25
✎
18:17
|
(0) Под клюшки код тоже не предлагать? :-)
Процедура ОтправитьЧерезАПИ()Процедура ОтправитьЧерезАПИ()
Если ПроверитьПолучитьТокен() = 0 Тогда
Если Вопрос("Отсутствует токен авторизации. Если это рабочее место имеет доступ к ЭЦП, нажмите ""Да"", иначе нажмите ""Нет"" и выполните проверку связи с ЦРПТ с рабочего места, имеющего доступ к ЭЦП.", 4, 15) = 6 Тогда
СтрОшибка = "";
ТекТокен = ПолучитьТокенЦРПТ(глПользователь.ЭЦП, ПрефиксВерсии, СтрОшибка);
Иначе
Записать();
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;
ВремКат = КаталогВременныхФайлов();
СзЗаг = СоздатьОбъект("СписокЗначений");
СзТов = СоздатьОбъект("СписокЗначений");
ТзТов = СоздатьОбъект("ТаблицаЗначений");
СзЗаг.ДобавитьЗначение(СокрЛП(ВыделитьИНН(ЮрЛицо.ИНН)), "inn");
Если ПричВыб = Перечисление.ПричВыбМарки.Развес Тогда
СзЗаг.ДобавитьЗначение("PACKING", "action");
Иначе
СзЗаг.ДобавитьЗначение("EXPIRATION", "action");
КонецЕсли;
СзЗаг.ДобавитьЗначение(ПреобразоватьДатуВСтрХМЛ(ТекущаяДата()), "action_date");
// Если ПричВыб = Перечисление.ПричВыбМарки.Развес Тогда
СзЗаг.ДобавитьЗначение("OTHER", "document_type");
// Иначе
// СзЗаг.ДобавитьЗначение("OTHER", "document_type");
// КонецЕсли;
СзЗаг.ДобавитьЗначение(СокрЛП(Число(НомерДок)), "document_number");
СзЗаг.ДобавитьЗначение(ПреобразоватьДатуВСтрХМЛ(ДатаДок),"document_date");
Если ПричВыб = Перечисление.ПричВыбМарки.Развес Тогда
СзЗаг.ДобавитьЗначение("Акт фасовки товара", "primary_document_custom_name");
Иначе
СзЗаг.ДобавитьЗначение("Акт списания товара", "primary_document_custom_name");
КонецЕсли;
ВыбратьСтроки();
Если ПричВыб = Перечисление.ПричВыбМарки.Развес Тогда
ТзТов.НоваяКолонка("cis");
ТзТов.НоваяКолонка("product_cost");;
Иначе
Если СпосУч = Перечисление.СпособУчета.ОСУ Тогда
ТзТов.НоваяКолонка("gtin");
ТзТов.НоваяКолонка("gtin_quantity");
Иначе
ТзТов.НоваяКолонка("cis");
КонецЕсли;
КонецЕсли;
Пока ПолучитьСтроку() = 1 Цикл
ТзТов.НоваяСтрока();
Марк = СокрЛП(Марка);
Если ПричВыб = Перечисление.ПричВыбМарки.Развес Тогда
ТзТов.cis = Марк;
Иначе
Если СпосУч = Перечисление.СпособУчета.ОСУ Тогда
Если СтрДлина(Марк) > 14 Тогда
ПозРазд = Найти(Марк, "21");
НачМарки = Лев(Марк, ПозРазд - 1);
GTIN = Прав(НачМарки, 14);
Иначе
GTIN = Марк;
КонецЕсли;
ТзТов.gtin = GTIN;
Иначе
ТзТов.cis = ПолучитьКИЗ(СтрЗаменить(Марка, "<GS1>", Симв(29)));
КонецЕсли;
КонецЕсли;
Если ПричВыб = Перечисление.ПричВыбМарки.Развес Тогда
ТзТов.product_cost = ЦенаЕд * 100;
Иначе
Если СпГрупп.ТекущаяСтрока() = 1 Тогда
Если СпосУч = Перечисление.СпособУчета.ОСУ Тогда
ТзТов.gtin_quantity = Количество;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
СзЗаг.ДобавитьЗначение(ТзТов, "products");
Если Сервис = 0 Тогда
Ош = ИзмСпосВывода(1);
СтатусВозврата(0);
Возврат;
КонецЕсли;
СтрДжейсон = Сервис.DecodeToUTF8(ЗначениеВJSON(СзЗаг));
// Тхт = СоздатьОбъект("Текст");
// Тхт.ДобавитьСтроку(СтрДжейсон);
// Тхт.Записать("C:\Temp\Spis.txt");
Кодировка = "base64";
Стр = Кодировать(СтрДжейсон, Кодировка);
Тхт = СоздатьОбъект("Текст");
Тхт.ДобавитьСтроку(СтрДжейсон);
ИсхФайл = ВремКат + "DocJSON.json";
Тхт.Записать(ИсхФайл);
Стр = СтрЗаменить(Стр, Симв(10), "");
СтрДок64 = СтрЗаменить(Стр, Симв(13), "");
ПодпФайл = ВремКат + "DocJSON.json.sig";
Серт = ПолучитьСертификатПоОтпечатку(СокрЛП(глПользователь.ЭЦП.Отпечаток));
ПодписатьФайл(ИсхФайл, Серт, ПодпФайл, 1);
СтрЭЦП = УбратьПереносыСтрок(ПодпФайл);
сзJSONЗапрос = СоздатьОбъект("СписокЗначений");
сзJSONЗапрос.ДобавитьЗначение("MANUAL", "document_format");
сзJSONЗапрос.ДобавитьЗначение(СтрДок64, "product_document");
сзJSONЗапрос.ДобавитьЗначение(СокрЛП(СтрЭЦП), "signature");
Если Причвыб = Перечисление.ПричВыбМарки.Развес Тогда
сзJSONЗапрос.ДобавитьЗначение("LK_RECEIPT", "type");
Иначе
Если СпосУч = Перечисление.СпособУчета.Поэкземплярный Тогда
сзJSONЗапрос.ДобавитьЗначение("LK_RECEIPT", "type");
Иначе
сзJSONЗапрос.ДобавитьЗначение("LK_GTIN_RECEIPT","type");
КонецЕсли;
КонецЕсли;
сзЗаголовки = СоздатьОбъект("СписокЗначений");
сзЗаголовки.ДобавитьЗначение("application/json;charset=utf-8", "Content-Type");
сзЗаголовки.ДобавитьЗначение("no-cache", "cache-control");
сзЗаголовки.ДобавитьЗначение("application/json", "Accept");
СтрОшибка = "";
Url = АдресСервераМОТП + "/" + ПрефиксВерсии + "/lk/documents/create?pg=" + ВернутьГруппуТовара(); // "milk";
Ответ = глКарлик_ВыполнитьЗапрос("POST", Url, ТекТокен, сзЗаголовки, СтрОшибка, сзJSONЗапрос);
УинДокаЦРПТ = СокрЛП(Ответ);
Записать();
ДоступностьКнопкиОтправить();
Форма.кнОтправить.Доступность(0); // На тот случай, если ID из ЧЗ еще не прилетел, заблокируем принудительно от повторных отправок
Если СокрЛП(Ответ) <> "" Тогда
Пока Вопрос("Ожидание проверки статуса документа(~10 сек)......."+РазделительСтрок + "ОК - Проверить статус, Отмена - Прервать", 1,10) <> 2 Цикл
ПроверитьСтатус();
Если СокрЛП(Статус) <> "" Тогда
Провести();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры |
|||
|
5
Волшебник
22.08.25
✎
18:18
|
(4) За применение 7.7 в 2025 году надо ввести штрафы :)
|
|||
|
6
MWWRuza
гуру
22.08.25
✎
20:10
|
(5) За что??? :-))) Нииинадааа!!! Ведь, как ни странно, но все работает👍
|
|||
|
7
Волшебник
22.08.25
✎
20:11
|
(6) "Работает — не трогай!" (у меня именно такая наклейка под монитором на рабочем месте). Если нужен пруф, я сделаю в понедельник :)
|
|||
|
8
MWWRuza
гуру
22.08.25
✎
20:12
|
(3) почитать документацию на API Честный Знак?
Выложить? А то вдруг у него нет... |
|||
|
9
Волшебник
22.08.25
✎
20:18
|
(8) Я ожидал ответа типа "не хочу". Ну не хочет он ничего читать/смотреть, кроме готовых примеров. Сегодня зарегился и хочет всё и сразу.
|
|||
|
10
Nikqwe
22.08.25
✎
20:29
|
(9) Я так понимаю ты тут, самый прожжённый токсик )))
|
|||
|
11
Волшебник
модератор
22.08.25
✎
20:34
|
(10) Да, Вы правильно поняли. Я тут главный.
А вот Вы поставили лишнюю запятую после "тут". Видите, я замечаю. |
|||
|
12
Nikqwe
22.08.25
✎
20:37
|
(11) умница, увидел, ошибку, возьми, пирожок, с, полки, )))
|
|||
|
13
Nikqwe
22.08.25
✎
20:37
|
Короче, тема закрыта, ну вас нафиг )))
|
|||
|
14
Волшебник
22.08.25
✎
20:56
|
Ха! Я смеюсь над вами!
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |