Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   1C7.7: Полный цикл работы с маркировкой Честного Знака (табак, обувь, МДЛП и пр.) (http://forums.kuban.ru/f1040/1c7_7_polnyj_cikl_raboty_s_markirovkoj_chestnogo_znaka_tabak_obuv-_mdlp_i_pr-8973600.html)

Zlop 17.01.2020 01:37

хотя.. хрен его знает что там в двумерных ШК могут запихнуть.. туда же килобайт инфы влезть может а то и больше

Sanichsm 17.01.2020 07:30

37-android >Рассчитываю приходы подтверждать на сайте Честный знак.

USSR 08.02.2020 14:26

А на 8-ых дровах атола это все будет работать ? и какая нужна минимальная прошивка для печати признака маркировки "М" ?

Zlop 09.02.2020 21:34

а про лиспеты будет?
[url]https://buh.ru/news/uchet_nalogi/95621/[/url]

SergeyY 14.02.2020 13:08

Пробую в УТ11 на последнем релизе потестировать работу с маркировкой. Сделал заказ на выпуск марок. Все пришло. Напечатал ее. Тип кода стоит GS1 DataMatrix. Пробую привязать марку к товару. Ругается что штрихкод марки имеет неверный формат.
Сканер Newland-Nls-Hr200c. Подключен как "клавиатура". Еще пробовал какойто китайский дешевый сканер. Аналогично. Как проверить что марка напечана корректно? Или как сканер проверить? На сайте ЧЗ есть проверка сканера. Оба сканера ее проходят успешно. Может сканер не может работать как клавиатурный и надо включать эмуляцию ком-порта?

victuan 15.02.2020 11:31

43-USSR >Будет, прошивка 83хх

victuan 15.02.2020 11:58

45-SergeyY >Проверка содержимого ШК парой приложений:
1) Приложение от коллег из [url=http://files.atol.ru/temp/54-FZ/MobileSMARTS.v3.CHK.apk]Клеверенс[/url]
2) [url=https://play.google.com/store/apps/details?id=com.barValid.app&hl=ru]barValid- GS1 Barcode scanner & Verifier[/url]

SergeyY 16.02.2020 14:39

47-victuan > ШК свой проверил. Он норм сделан
Оказалось все дело все-таки в сканере. Его надо подключать как эмуляция ком-порта. Тогда он передает данные корректно. Через эмуляцию клавиатуры отрезает спец-символы внутри ШК.

SergeyY 28.02.2020 13:09

Чем перевести в 7ке ШК обувной в последовательность байт для ккт? Для 8ки примеров кучу вижу. Для 7ки только платное от товарища Виктуана :(
Поделитесь решением.

USSR 28.02.2020 13:19

(45)Сканер скорее всего надо еще и обучать )

SergeyY 28.02.2020 13:59

50-USSR >Со сканером то проблем нет. В режим эмуляции перевел и добавил префикс чтоб формировал.
Вот не могу пока победить передачу в ккт. Как перевести в байты этот код. Все перелопатил уже.

zveruga 02.03.2020 03:42

49-SergeyY > просто вырезать часть строки из КМ

GTIN = Сред(КМ,3,14);
SerialNumber = Сред(КМ,19,13);

// тип маркировки для обуви
MarkingType = 5408;

SergeyY 02.03.2020 07:49

52-zveruga > ДТО 8 атола не передает строку в тег 1162. Ему нужна последовательность в байтах.
Нашел на форуме атола вариант:

NetObject = Новый COMОбъект("NetObjectToIDispatch45");
NetObject.ПолучитьТип("System.Text.Encoding").UTF8.GetBytes(СокрЛП(КодМаркировки)));

Вроде получает массив байт как и надо. Буду пробовать его передать

zveruga 02.03.2020 12:04

53-SergeyY > Если всё равно мучаешься с программирование драйвера, перепиши для ДТО 10
[url]http://integration.atol.ru/api/?pascal#obschaya-informatsiya[/url]

zveruga 02.03.2020 12:09

Цитирую текст из вышеуказанной ссылки:
При использовании COM-объекта ваш язык может не поддерживать получение из драйвера параметра типа bytearray. В этом случае можно использовать обходной вариант. Нужно запросить такой параметр через getParamStringHex(), он вернет строку с последовательностью байтов вида "01 02 FF AA". Далее, эту строку можно записать во входной параметр любого метода через методы setParamStrHex() или setNonPrintableParamStrHex(), и она запишется в драйвер как bytearray.

zveruga 02.03.2020 12:15

т.е. сначала конвертишь в HEX через Объект.getParamStringHex()
а затем передаешь параметр 1162 через
Объект.setParamStrHex(1162, "44 4D .......... ")

zveruga 02.03.2020 12:16

там же еть вот такой вариант (описан доп.параметр позиции)

LIBFPTR_PARAM_MARKING_CODE - массив с данными штрихкода маркировки. По умолчанию не передается в ККТ. В этом параметре можно передать данные от сканера. ККТ их разберет в реквизит 1162 самостоятельно.

zveruga 02.03.2020 12:18

Для разбора кода маркировки, полученного от сканера, необходимо вызвать метод parseMarkingCode() и указать в параметре LIBFPTR_PARAM_MARKING_CODE значение штрихкода. Если передаётся марки ЕГАИС 2.0 или ЕГАИС 3.0, это нужно указать в параметре LIBFPTR_PARAM_MARKING_CODE_TYPE. Он принимает следующие значения:

LIBFPTR_MCT_EGAIS_20 - ЕГАИС 2.0
LIBFPTR_MCT_EGAIS_30 - ЕГАИС 3.0
LIBFPTR_MCT_OTHER - другая марка, кроме перечисленных выше

Сформированное значение реквизита 1162 будет записано в параметр 1162.

zveruga 02.03.2020 12:18

Этот метод не записывает значение в ФН, а только возвращает пользователю значение реквизита 1162, расчитанное на базе переданных данных. Для записи кода маркировки в ФН нужно использовать метод регистрации позиции и параметр LIBFPTR_PARAM_MARKING_CODE.

zveruga 02.03.2020 12:27

Для затравки:
54-ФЗ: Онлайн-кассы для 1С 7.7 нетиповая
[url]https://infostart.ru/public/991465/[/url]

zveruga 02.03.2020 12:33

Обработка для ККТ Атол 10.Х
[url]https://infostart.ru/public/1093323/[/url]

zveruga 02.03.2020 12:40

Вот здесь, думаю, более конкретно расписано, с двумя вариантами
[url]http://forum.foxclub.ru/read.php?29,819747[/url]

1 вариант:
*-* cFullKod - считанный маркировочный код
*-* cGtin - первые 14 байт кода, т.н. GTIN

cGtin = LEFT(cFullKod, 14)

cSerial = SUBSTR(cFullKod, 15, 13) - код товара (для лекарств - 13 байт)

*-* FP - это объект, полученный при инициализации драйвера:
FP = CREATEOBJECT("AddIn.Fptr10")

*-* Идет формирование тэга 1162 для последующей отправки на ОФД:

FP.setParam(LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_MEDICINES)
FP.setParam(LIBFPTR_PARAM_GTIN, cGtin)
FP.setParam(LIBFPTR_PARAM_SERIAL_NUMBER, cSerial)
FP.utilFormNomenclature()
cTag1162 = FP.getParamString(LIBFPTR_PARAM_TAG_VALUE)


При этом cTag1162 получает значение типа "03 02 01 ..."

.... далее регистрируется товарная позиция наименование, цена, количество...налоги, виды оплат...

*-* отправка на ОФД:
FP.setParamStrHex(1162, cTag1162)

zveruga 02.03.2020 12:43

Второй вариант:

FP.setParamStrHex(LIBFPTR_PARAM_MARKING_CODE, cFullKod) - для данного метода cFullKod должен быть записан в виде последовательности байтов типа "03 02 01 ..."

Документация атола , мягко говоря, выдает неверную инфу . getParamString() вернет не строку вида "01 02 FF AA" , а исходную строку текста.


Я делаю так - преобразовываю текст марки к виду "03 02 01 ..." ( делаю через Strconv(marka,15) и добавление пробелов) и записать полученный результат в LIBFPTR_PARAM_MARKING_CODE через метод setParamStrHex. Более ничего делать не надо , parseMarkingCode не нужен , но только устанавливать LIBFPTR_PARAM_MARKING_CODE нужно после задания LIBFPTR_PARAM_COMMODITY_NAME. Считать тег 1162 в фоксе для проверки можно так Transform(.getParamByteArray(1162))

zveruga 02.03.2020 12:55

0-victuan > Немного запоздалый ответ, однако...

Считаю, что спрос на 7.7 будет отчасти порождаться предложением со стороны программистов.

У меня есть несколько клиентов на ТиС 9.2, Бух 3.5!!!, и переход на платформу 8.3 для них будет просто адом.
Там столько понавернуто...

Очень удобно бы было получать товар сразу через api в 7.7., проверять наличие, и отправлять сообщение о его приемке в ЧЗ.

Так что повозиться смысл есть, тем более что переход на маркировку будет массовым для всех категорий.

Кроме того, зная методы Api и общую логику процесса, можно это потом внедрять и на v8 в обычных формах.
А уж на них точно много народа сидит.

victuan 02.03.2020 16:18

64-zveruga >Да, делаем сейчас работу с ЧЗ из 1С 7.7 через АПИ. По готовности, выложим универсальное тиражное решение.

victuan 02.03.2020 16:27

63-zveruga >Не первый ни второй вариант не могут передать общий префикс маркированных товаров 44 4D.
Хотя новая прошивка Атола (85хх) по слухам, умеет сама конвертировать все переданные из кода префиксы в 44 4D.
Но не проверял, т.к. сразу передаю в тег 1162 подготовленную в нужном виде последовательность байт.

Букву [М] в чек также можно выводить нефискальным текстом.

Всё сделано для того, чтобы пользователи могли не нарушая работать с 01.03.20, даже на старых прошивках ККТ.

SergeyY 03.03.2020 08:04

66-victuan > Про букву М - вы ее после вывода товара печатаете? Штатно атол выводит при продаже маркированного товара строку КТ после товара. Вроде как в новых прошивках вместо этой строки и выводит букву М. Не? Или одно другому не будет мешать и чек будет соответствовать новым требованиям?

victuan 04.03.2020 06:35

67-SergeyY >В требованиях не сказано где именно должен выводиться признак [М] относительно напечатанного в чеке товара. Поэтому любое расположение этой буквы будет законно, если видно к какой именно позиции он относится.

Прошивка Атола никогда не выводила сама в чек КТ, а вот новая прошивка 8502 выводит текст [М].

Если прошивка не обновлена, то можно через нефискальную строку выводить этот признак. Раньше мое ПО выводило КТ, теперь добавил в него настройку, чтобы выводить нефискальной строкой на выбор:
0 - ничего (прошивка ККТ обновлена, сама выведет [М])
1 - печатать [М] (если прошивка ККТ не обновлена и не умеет печатать [М])
2 - печатать [М] и КТ (для того чтобы визуально контролировать по чеку выбытие КТ, например для контроля возвратов, если покупатель принесет товар, на котором будет указан чужой КТ, не тот что распечатан в чеке продажи).

SergeyY 04.03.2020 12:42

Вот поборол. Вдруг кому пригодится ШтрихкодМарки=СокрЛП(СписокТоваров.Товар.Маркировка);

ГТИН = Сред(ШтрихкодМарки,3,14);
Серия = Сред(ШтрихкодМарки,19,13);

Попытка
ГТИНЧислом = Число(ГТИН);
ГТИНБайтами = "";
Пока ГТИНЧислом > 0 Цикл
ГТИНБайтами = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ГТИНЧислом%16 + 1, 1) + ГТИНБайтами;
ГТИНЧислом = Цел(ГТИНЧислом/16) ;
КонецЦикла;
Исключение
ОписаниеРезультата = "Ошибка получения кода маркировки";
Возврат -1;
Конецпопытки;
Пока СтрДлина(ГТИНБайтами)<12 Цикл
ГТИНБайтами = "0"+ГТИНБайтами;
КонецЦикла;

sc=СоздатьОбъект("MSScriptControl.ScriptControl");
sc.language="VBscript";
СерияБайтами="";
Для ид=1 по СтрДлина(Серия) Цикл
СерияБайтами=СерияБайтами+sc.eval("hex("+КодСимв(Сред(Серия,ид,1))+")");
КонецЦикла;

Марка = "444D"+ГТИНБайтами+СерияБайтами;
МассивБайт = "";
Для ид=1 По СтрДлина(Марка) Цикл
Если ид/2=Окр(ид/2) Тогда
МассивБайт = МассивБайт+Сред(Марка,ид,1);
Иначе
МассивБайт = МассивБайт+" "+Сред(Марка,ид,1);
КонецЕсли;
КонецЦикла;

МассивБайт=СокрЛП(МассивБайт);


Объект.StreamFormat = 5;
Объект.AttrValue = МассивБайт;
Объект.AttrNumber = 1162;
Объект.WriteAttribute();

На прошивке 8502 буква М выводится. Данные в ЧЗ уходят.

K Michael 04.03.2020 13:47

[b]Правительство перенесло сроки перехода на обязательную маркировку обуви[/b]

Источник: [url]https://buh.ru/news/uchet_nalogi/105334/[/url]

victuan 04.03.2020 17:49

69-SergeyY >VBscript то зачем, можно же простую функцию на языке 1с написать для перевода в Hex (на мисте есть).

SergeyY 05.03.2020 12:54

71-victuan > Дак я спрашивал тут - все молчат. У вас же есть решение явно, но вы его в общее обозрение не выкладываете - понимаю что это ваш хлеб.
Искал везде - нашел только такой вариант через скрипт.
В переводах из систему в систему не силен - не тру-программист я - я 1Сник :)))

victuan 05.03.2020 20:11

72-SergeyY >Напишите в личку, я вам вышлю.

SergeyY 10.03.2020 10:45

73-victuan > Не отправляет в личку. Пишу, жму отправить, окошко закрывается и в отправленных пусто.
Кстати в УТ 11 в крайнем релизе пробовал сделать возврат товара от покупателя. УТ марку не спрашивает даже. И естественно она в оборот не возвращается. По ходу даже не предусмотрено такая возможность.
В моей самописке в возвратном чеке я марку указал которая возвращается и она прошла через офд и в ЧЗ прошла операция возврат товара в оборот.

Buhta 16.03.2020 17:32

А бухсправками в БП можно пользоваться? Все регистры правильно заполнятся? Требуется отразить реализацию нескольким сотням физических лиц, без НДС и печати первички, но с детализацией по физикам

Buhta 16.03.2020 17:33

Не в ту тему попала с телефона:( но если кто сможет ответить...

victuan 24.06.2020 19:12

Сегодня выложили решение для работы с маркированным товаров через ЭДО на приемку и отгрузку из 1С 7.7, есть бесплатная демо-версия.
Видео-инструкция [url]https://youtu.be/t48Fo_dDyX4[/url]

serpent 09.07.2020 13:30

77-victuan > Здравствуйте, только видео выложили?

qweqwe123123 13.07.2020 16:18

розница отказывается продавать сиги, трудозатраты несоизмеримы с финансовым выхлопом

Блондинка в шок 13.07.2020 17:34

[quote=Зелёный тролль;47778578] розница отказывается продавать сиги, трудозатраты несоизмеримы с финансовым выхлопом [/quote] Замечательно. Меньше станут курить, больше бегать трусцой.

зы:
а у нас не то что цыгане из-под полы (про этих вообще молчу) Киоск!!! нагло стоит на улице и торгует контрабандными сигами из Украины (ДНР?) и Армении.
И плевать и цыганчатам и киоску под крышей на вообще маркировку.


Текущее время: 18:16. Часовой пояс GMT +3.