Имя: Пароль:
1C
1С v8
Тэг 1162 (Маркировка табачной продукции) и Атол ДТО-8
0 igel1969
 
20.06.19
15:13
Здравствуйте!

У меня получилось отправить чек с маркировкой табачной продукции через Атол ДТО-10 и увидеть этот чек в личном кабинете Честного знака.
Но поскольку у меня все торговые точки работают по RDP, а Атол ДТО-10 с RDP не дружит (не поддерживается служба fdsvc),
то я подумываю - а КАК БЫ ПОПРОБОВАТЬ ЗАСТАВИТЬ ОТПРАВЛЯТЬ ИНФОРМАЦИЮ О МАРКИРОВАННОЙ ПРОДУКЦИИ (ТЭГ 1162) ЧЕРЕЗ ДТО-8 ?
(здесь капслоком выделен главный вопрос данной темы).

На ДТО-10 нет необходимости формировать тэг 1162. Достаточно просто послать в драйвер три строчки данных о маркировке и на выходе имеем готовый закодированный тэг.
Я сегодня помучался полдня и научился формировать закодированный тэг в таком же правильном виде.
Т.е. если брать пример отсюда - https://xn--80ajghhoc2aj1c8b.xn--p1ai/upload/iblock/09e/09e9978505dad5ba4a8f814420ab20b7.pdf
то я из строки 00 05 00 00 02 C1 1E 5E 41 44 67 6f 70 53 71 научился получать AAUAAALBHl5BRGdvcFNx
(кому интересно как - обращайтесь, все расскажу).

А вот теперь дальше что с этим делать? Как его передать на кассу?

Пробовал писать
ЗаписьXML.ЗаписатьАтрибут("productCode"   , XMLСтрока(ТекущаяПозиция.КодТоварнойНоменклатуры));
где ТекущаяПозиция.КодТоварнойНоменклатуры как раз имеет строковое значение AAUAAALBHl5BRGdvcFNx.
Не помогло (((( В ОФД чеки показывает без маркировки.

Причем если верить этой статье: https://atoldriver.ru/izmeneniya-v-versii-drajverov-atol-8-16-2-ot-27-03-2018/
то для лекарств тэг 1162 передается через ДТО-8.
Цитата:
Исправленные ошибки:
1. Не удается передать правильный реквизит 1162 для лекарственных товаров.
Способ решения: исправлен тип реквизита со строкового на массив байтов.


Может есть у кого какие мысли?
Как передать тэг 1162 через Атол ДТО-8?
1 Garykom
 
гуру
20.06.19
15:21
>Как передать тэг 1162 через Атол ДТО-8?

Нанять программиста
2 igel1969
 
20.06.19
15:33
(1) программиста чего? 1С или драйвера?
3 igel1969
 
21.06.19
08:03
видимо надо просто нанять тупого комментатора, который во всех темах будет только гадить (называть больными людьми, предлагать нанять программиста и пр.), а сам ничего не предлагать, ввиду просто незнания.
4 NorthWind
 
21.06.19
08:36
(3) через ECR.WriteAttribute можно прописать любой тег. Расковыряйте место, где разбирается и передается в драйвер ваш XML, и сделайте, чтобы объекту драйвера прописывался нужный тег.
5 Сияющий в темноте
 
21.06.19
08:44
ну в чем проблема?
читаем руководство программиста на Атол 8.
ищем таи какие теги он умеет,и как они передаются,пробуем указать свой таг.
если не взлетело,то читает протокол ккт 3.0 оь Атола и смотрим,а как же там передаются теги,после этого пробуем передать свой таг через SendBytes,или как там команда низкоуровневой передачи.

p.s.можнл подключить Атол через tcp и через Proxy и посмотреть,что там и куда передается.
6 Сияющий в темноте
 
21.06.19
08:46
а на этого (1)не обижайтесь
он как раз и предлагает ему заплатить,чтобы он все быстро сделал.
7 igel1969
 
24.06.19
13:54
(4) в том то и дело, что делаю по всей конфигурации глобальный поиск на WriteAttribete и нигде не нахожу (((
8 igel1969
 
24.06.19
13:56
(6) да я бы  заплатил, если бы результат был гарантирован. я тут одну обработку скачал за стартмани (чтобы работать в ДТО10 через Web-службу), а она только на 8.3 работает, а у нас 8.2 ((((
9 Somebody
 
24.06.19
14:01
(7) ищете не с опиской, как здесь? не WriteAttribete, а WriteAttribute.
10 igel1969
 
24.06.19
14:05
(9) да, конечно, руками набирал. Ну сейчас еще раз перепроверил на всякий случай (((
11 igel1969
 
24.06.19
14:12
Я вот такую вещь не могу понять:
АТОЛ пишет что надо в драйвер посылать так:
Driver.BeginItem();

Driver.StreamFormat = 5;
Driver.AttrNumber = 1162;
Driver.AttrValue = "00 05 00 00 02 C0 BE D3 65 4E 25 44 38 6A 5F";
Driver.WriteAttribute();

Driver.Name = "Winston";
Driver.Price = 150;
Driver.Quantity = 1;
Driver.ItemType = 2;
Driver.PaymentMode = 4;
Driver.TaxTypeNumber = 2;
Driver.EndItem()

А в 1С, когда формируется XML-документ для отправки в драйвер кассы такие строки:
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
                    ЗаписьXML.ЗаписатьАтрибут("Name"      , XMLСтрока(ТекущаяПозиция.Наименование));
                    ЗаписьXML.ЗаписатьАтрибут("Quantity"         , XMLСтрока(ТекущаяПозиция.Количество));
                    ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", XMLСтрока(ТекущаяПозиция.ЦенаСоСкидками));
                    ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount"  , XMLСтрока(ТекущаяПозиция.Сумма));
                    ЗаписьXML.ЗаписатьАтрибут("DiscountSum"      , XMLСтрока(ТекущаяПозиция.СуммаСкидок));
                    ЗаписьXML.ЗаписатьАтрибут("Department"       , XMLСтрока(ТекущаяПозиция.НомерСекции));


вот с обычными аттрибутами (Name, Quantity) все вроде похоже и понятно.
А если взять пример из АТОЛа, там у них есть такая вещь как AttrNumber - в 1С у аттрибутов XML нет такого понятия как номер аттрибута ((((((
12 igel1969
 
24.06.19
14:13
(11) и я не могу понять как записать этот самый аттрибут с номером 1162
13 Somebody
 
24.06.19
14:15
это два разных подхода. или делается напрямую через драйвер, как в примере от Атола, или через xml-обертку, как в типовых 1с (извращение ИМХО). совместить ужа с ежом вряд ли получится.
14 igel1969
 
24.06.19
14:17
(13) а напрямую из 1с в драйвер минуя XML (т.е. через ECR) принято работать? кто-то так делал?
15 NorthWind
 
24.06.19
14:21
(14) может, имеет смысл посмотреть код обработки обслуживания для вашей ККМ?
16 igel1969
 
24.06.19
14:23
(15) смотрел вдоль и поперек - он же просто использует функцию драйвера ФискализироватьЧек и посылает туда данные, а сама функция в dll-ке зашита.
17 Somebody
 
24.06.19
14:24
(14) конечно, делал. что-то типа
ОбъектECR.Mode = 1;
ОбъектECR.Password = Пароль;
ОбъектECR.NewDocument();
ОбъектECR.CheckType = ТипЧека;
ОбъектECR.CheckMode = 0;
ОбъектECR.OpenCheck();

ОбъектECR.AttrNumber = 1203;
ОбъектECR.AttrValue = ИННКассира;
ОбъектECR.WriteAttribute();

ОбъектECR.BeginItem();
       // что-то по конкретной позиции товара

ОбъектECR.EndItem();
18 igel1969
 
24.06.19
14:28
(17) т.е. Вам пришлось полностью переписать функции работы с ККМ - открытие смены, X-отчет, Z-отчет и фискализация чека?
В принципе я готов, если так вообще делают.
19 Somebody
 
24.06.19
14:41
(18) я встречал в инете подобные вещи, значит, делаю не один )). но, признаться, только для поддержания штанов в собственных древних самописках на 7.7.
20 Garykom
 
гуру
24.06.19
14:53
Да че там было переписывать то для 8-го драйвера?
Многие не только на нативный атол но еще и для штриха и прочих переписали.


https://github.com/Garykom/xml2atol/blob/master/xml2atol.lpr
Это готовая утилита командной строки на бесплатном Lazarus, умеющая XML по формату 1С в нативный драйвер атол 8-й версии.
21 Garykom
 
гуру
24.06.19
14:58
(20)+ Понятно никаких тегов для маркировки нет и даже СНО коды вроде старые в том что выложено, но поправить никаких проблема за полчаса.
22 igel1969
 
24.06.19
15:01
(21) т.е. Ваш совет - допилить данную программу под свои нужды, скомпилировать ее и вызывать как внешний экзешник с параметрами командной строки из 1С для отправки чека на печать?
23 igel1969
 
24.06.19
15:02
(19) я прошу прощения, но очень устал и хочется сэкономить время, поэтому спрошу - а как Вы создавали объект драйвера?
Я пишу как в примере:
Попытка
    ЗагрузитьВнешнююКомпоненту("FPRNM1C.dll");
    ECR = Новый("AddIn.FprnM45");
исключение
    Предупреждение("Ошибка загрузки внешней компоненты FPRNM1C.dll");
    ЗавершитьРаботуСистемы();
конецпопытки;

У меня все-время выходит Ошибка загрузки внешней компоненты FPRNM1C.dll
24 igel1969
 
24.06.19
15:04
(23) сработало, когда явно указал путь к dll-ке
25 Somebody
 
24.06.19
15:05
(24) да, а можно dll просто держать в каталоге с базой или в каталоге с запускаемым файлом, находит без проблем.
26 Garykom
 
гуру
24.06.19
15:07
(24) Не надо ничего там указывать, просто драйвер должен быть правильно поставлен инсталлятором а не копированием.
27 Garykom
 
гуру
24.06.19
15:08
(26)+
ECR = Новый("AddIn.FprnM45");
и все
28 Garykom
 
гуру
24.06.19
15:10
(22) Никто не мешает переписать код на 1С 7.7 он будет абсолютно аналогичный.

Но лучше отсюда переписывать сразу под 10-й драйвер атол
http://integration.atol.ru/api/?pascal#2308df468c
29 Garykom
 
гуру
24.06.19
15:13
(27) Тьфу, вместо "Новый" надо "Новый COMОбъект" а в 7.7 просто СоздатьОбъект("AddIn.FprnM45")

Или
fptr = СоздатьОбъект('AddIn.Fptr10');
для 10-го

Это же обычный COM/ActiveX/OLE
30 igel1969
 
24.06.19
15:16
(29) спасибо. я пока по этому пути попробую пойти. Извини, что нахамил ((((((((( просто я эту фразу (Наймите программиста") видел и в других темах тоже - некрасивая она.
31 Garykom
 
гуру
24.06.19
15:18
(30) Какой вопрос - такой ответ ))
32 Trotter
 
24.06.19
15:19
а почему все работают непосредственно с драйвером, а не с dll от 1с ?
33 Garykom
 
гуру
24.06.19
15:24
(32) Потому что оно глючное и медленно обновляется с херовой поддержкой.
34 igel1969
 
24.06.19
15:30
(33) отказался от dll - подключается нормально, окно свойств выводит. сейчас буду учиться открыть смену
35 igel1969
 
24.06.19
16:59
(33) (25)  Я дико прошу прощения за назойливость - открываю и закрываю смену на ККМ. Она один раз успешно откроется и закроется, а потом очень долго (от 15 минут до почти часа) не хочет открываться. Потом вроде ничего не менял в программе - раз, и опять открылась смена. Что ей надо? Почему так? Что я не обнуляю? Уж пробовал снимать галочку "устройство включено" - ничего не изменилось. Включать-выключать ккм, перезаходить в 1С - ничего не помогает ((((
36 igel1969
 
24.06.19
17:00
(35) т.е. команда OpenSession как бы проходит, но впустую, не открывается смена
37 igel1969
 
24.06.19
17:04
(36) Ой, не надо, не напрягайтесь - разобрался
38 tppmail
 
28.06.19
22:16
День добрый. Проявлю может немного наглости, но можете дать код получения вот этого AAUAAALBHl5BRGdvcFNx из того, что считывает сканер. Спасибо)
39 Garykom
 
гуру
28.06.19
22:30
(38) От типа продукции/маркировки/кода зависит.
Что сканируете то табачка/лекарства или что еще?
40 TaSo
 
17.07.19
19:40
(37) Подскажете, а как вы преобразовали код маркировки в строку вида: AAUAAALBHl5BRGdvcFNx?
Ошибка? Это не ошибка, это системная функция.