Маркировка лекарств - как передать код маркировки при продаже через ККТ Штрих-М

16.05.20

Интеграция - ККМ

Пример программного кода для вывода чеков на ККМ Штрих-М с передачей информации о маркированных товарах (лекарства).

Многие знают, что при продаже маркированных товаров необходимо передавать информацию о коде маркировки с помощью тега 1162. Про это достаточно много информации.

Для Штрих-М запрограммировать это не составляет большого труда. После операции FNOperation() необходимо добавить несколько строк.

ЗагрузитьВнешнююКомпоненту ("DrvFR.dll");
голеОбъектККМ = СоздатьОбъект("AddIn.DrvFR");
...

голеОбъектККМ.FNOperation();

голеОбъектККМ.MarkingType  = MarkingType; //3 - лекарства
голеОбъектККМ.GTIN         = GTIN;        //14 символов
голеОбъектККМ.SerialNumber = SerialNumber;//13 символов
голеОбъектККМ.FNSendItemCodeData();

Код маркировки включает в себя избыточные данные. Из него необходимо выделить SGTIN длиной 27 символов, который в свою очередь делится на 2 части: первые 14 символов GTIN, остальные 13 символов это серийный номер упаковки (длина серийного номера упаковки указана для группы Лекарства).

Мой вариант функции разбора штрих-кода маркировки:

//******************************************************************************
// глЭтоКодМаркировки(Данные)
//
// Параметры: 
//  Данные
//  SGTIN - выходной параметр для передачи вырезанного из штрихкода SGTIN
//  КодТН_ВЭД - выходной параметр
//  НомерСерии - выходной параметр
//  ДатаИстеченияСрокаГодности - выходной параметр
//
// Возвращаемое значение:
//  1 да, 0 нет
//
// Описание:
//
// Примечание:
//  В настройках сканера желательно включить передачу разделителя с кодом 29
//
Функция глЭтоКодМаркировки(Данные,SGTIN,КодТН_ВЭД="",НомерСерии="",ДатаИстеченияСрокаГодности="") Экспорт
	Перем лДанные,СчЦ,ЧастьДанных,GTIN,ИндивидуальныйСерийныйНомер;
	лДанные = СокрЛП(Данные);
	Если СтрДлина(лДанные) >= 27 Тогда
		лДанные = СтрЗаменить(лДанные,Симв(29),РазделительСтрок);
		Если СтрДлина(лДанные) = 27 Тогда
			SGTIN = Данные;
			Возврат 1;
		КонецЕсли;
		Если Лев(лДанные,2) = "01" Тогда
			GTIN = Сред(лДанные,3,14);
			лДанные = Сред(лДанные,17);
			ИндивидуальныйСерийныйНомер = "";//префикс 21  длина 13
			КодТН_ВЭД                   = "";//префикс 240 длина 4
			НомерСерии                  = "";//префикс 10 длина переменная, принимает что от 4 до 10
			ДатаИстеченияСрокаГодности  = "";//префикс 17 длина 6 
			Для СчЦ = 1 По СтрКоличествоСтрок(лДанные) Цикл
				ЧастьДанных = СтрПолучитьСтроку(лДанные,СчЦ);
				
				флПродолжитьПоиск = 1;
				Пока флПродолжитьПоиск = 1 Цикл
					Если СтрДлина(ЧастьДанных) <= 2 Тогда
						Прервать;
					КонецЕсли;
					Если Лев(Прав(ЧастьДанных,15),2) = "21" Тогда
						ИндивидуальныйСерийныйНомер = Прав(ЧастьДанных,13);
						ЧастьДанных = Лев(ЧастьДанных,СтрДлина(ЧастьДанных)-15);
					ИначеЕсли Лев(ЧастьДанных,2) = "21" Тогда
						ИндивидуальныйСерийныйНомер = Сред(ЧастьДанных,3,13);
						ЧастьДанных = Сред(ЧастьДанных,16);
					ИначеЕсли Лев(ЧастьДанных,2) = "17" Тогда
						ДатаИстеченияСрокаГодности = Сред(ЧастьДанных,3,6);
						ЧастьДанных = Сред(ЧастьДанных,9);
					ИначеЕсли Лев(ЧастьДанных,3) = "240" Тогда
						КодТН_ВЭД = Сред(ЧастьДанных,4,4);
						ЧастьДанных = Сред(ЧастьДанных,8);
					ИначеЕсли Лев(Прав(ЧастьДанных,7),3) = "240" Тогда
						КодТН_ВЭД = Прав(ЧастьДанных,4);
						ЧастьДанных = Лев(ЧастьДанных,СтрДлина(ЧастьДанных)-7);
					ИначеЕсли Лев(ЧастьДанных,2) = "10" Тогда
						Если (СтрДлина(ЧастьДанных) >= 6) И (СтрДлина(ЧастьДанных) <= 12) Тогда //допустим, что длина серии от 4 до 10
						    НомерСерии = Сред(ЧастьДанных,2);
							ЧастьДанных = "";
						Иначе
							флПродолжитьПоиск = 0;
						КонецЕсли;
					ИначеЕсли Лев(ЧастьДанных,2) = "91" Тогда
						ПроверочныйКлюч = Сред(ЧастьДанных,3,4);
						ЧастьДанных = Сред(ЧастьДанных,7);
					ИначеЕсли Лев(ЧастьДанных,2) = "92" Тогда
						ПроверочныйКод = Сред(ЧастьДанных,3,44);
						ЧастьДанных = Сред(ЧастьДанных,47);
					Иначе
						флПродолжитьПоиск = 0;
					КонецЕсли;
				КонецЦикла;
			
			КонецЦикла;
			Если ПустоеЗначение(ИндивидуальныйСерийныйНомер) = 0 Тогда
				SGTIN = GTIN + ИндивидуальныйСерийныйНомер;
				Если ПустоеЗначение(SGTIN) = 0 Тогда
					Если СтрДлина(SGTIN) = 27 Тогда
						Возврат 1;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		Если ПустоеЗначение(SGTIN) = 0 Тогда
			Если СтрДлина(SGTIN) = 27 Тогда
				Возврат 1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат 0;
	
КонецФункции // глЭтоКодМаркировки()

Но при продаже лекарственных препаратов всё сложнее.

Когда я для теста сделал первый чек с кодом маркировки, то долго ждал когда же статус упаковки сменится с "in_circulation" (в обороте) на "in_sale" (продан в розницу), но этого так и не произошло.

Вот что мне ответил представитель ОФД:

Так же прошу отметить,что 54-ФЗ возлагает обязанности на оператора фискальных данных только в частности доставки кодов маркировки в составе кассового чека, а не контролировать его прием на стороне ЦРПТ.

Т.е. ОФД нет никакого дела, что именно ты передаёшь, правильно или нет.

Вот какой ответ из Честного Знака привёл один из разработчиков:

Отчёт о выбытии препарата при проведении его через ККТ не поступил в ИС "Маркировку" по причине того, что в отправляемом документе:
- отсутствуют теги 1085 и 1086, которые содержат информацию о месте деятельности, с которого происходит вывод ЛП из оборота;
- отсутствует тег 1191, который указывает именно, что производится именно продажа лекарственного препарата.

Читаем документацию и дополняем обработку.

Тег кассового чека 1084 является структурой и содержит следующие теги:
Код Наименование Тега Формат Размер
1085 наименование дополнительного реквизита пользователя Строка CP-866 64
1086 значение дополнительного реквизита пользователя Строка CP-866 256

 

Ниже приведены рекомендации по записи в структуру тега 1084 (дополнительный реквизит пользователя) данных о выбытии лекарственных препаратов.

В теге 1085 необходимо передавать следующие реквизиты:

1. Префикс «mdlp» как признак того, что тег 1086 содержит специфичную для передачи в МДЛП информацию;

2. Опционально 7 символов из диапазона «0..9», указывающих на тип документа, данные которого передаются в теге 1086, в соответствии с ОКУД.
a. Отсутствие этих символов указывает на то, что в чеке передаются данные розничной реализации ЛП по рецепту с частичным дотированием, которые преобразуются в 511 схему данных МДЛП, либо в чеке передаются данные розничной реализации ЛП по рецепту без льготы или отпускаемых без рецепта.
b. Значение «3108805» указывает на то, что в теге 1086 передаются данные льготного рецепта со 100% дотированием (тег 1086 должен содержать реквизит с префиксом «ps»), которые преобразуются в 521 схему данных МДЛП.
c. Другие значения тега 1085 не допускаются.
Все передаваемые в теге 1086 реквизиты необходимо разделять символами-разделителями «&»; каждому реквизиту сопоставить уникальный префикс для упрощения машинной обработки данных:
dn = <номер документа, учитывающего отраслевую специфику>, doc_num, не более 200 символов
dd = <дата документа, учитывающего отраслевую специфику> в формате ГГММДД, doc_date
ps = <номер серии льготного рецепта>, prescription_series

sid = <идентификатор места деятельности субъекта обращения в ИС МДЛП>, subject_id

Для самого простого случая продажи без рецепта в начало добавляем

голеОбъектККМ.CheckType = 0;
голеОбъектККМ.OpenCheck();

голеОбъектККМ.TagNumber = 1084;
голеОбъектККМ.FNBeginSTLVTag();
my_TagID = голеОбъектККМ.TagID;

голеОбъектККМ.TagID = my_TagID;
голеОбъектККМ.TagNumber = 1085;
голеОбъектККМ.TagType = 7;
голеОбъектККМ.TagValueStr = "mdlp";
голеОбъектККМ.FNAddTag();

голеОбъектККМ.TagID = my_TagID;
голеОбъектККМ.TagNumber = 1086;
голеОбъектККМ.TagType = 7;
голеОбъектККМ.TagValueStr = "sid"+subject_id+"&";
голеОбъектККМ.FNAddTag();

голеОбъектККМ.FNSendSTLVTag();

Где subject_id это идентификатор места деятельности.

В теге 1191 передаются следующие реквизиты, порядок их записи описан ниже:

sp = <часть потребительской (маркированной) упаковки, подлежащая выводу из оборота>, sold_part
ss = <сумма субсидии>, subsidy_sum (сумма, компенсируемая из федерального или регионального бюджета, при расчете за данный предмет расчета по льготному рецепту). Используется для заполнения параметра МДЛП «discount».
Идентификатор субъекта обращения (sid) - 14 разрядныйM4; номер (строка длиной 14 байт в CP-866, допустимые символы [«0»-«9»]). Завершающий символ при записи строки данных должен быть «&».
При определении максимальной суммарной длины реквизитов dn и ps необходимо учитывать ограничения длины тега 1086, установленные ФФД (256 байт в версии 1.05). Для включения в реквизиты с префиксом dn или ps символа «&» в передаваемых данных должна содержаться подстрока «&&», которая при обработке и передаче в МДЛП не интерпретируется как разделитель или завершающий символ, а заменяется на символ «&».
Реквизит sp включается в тег 1191 сразу после префикса mdlp без указания в качестве префикса названия реквизита в следующем виде: указывается общее количество отпущенных первичных упаковок (целое число в виде строки, лидирующие нули запрещены) и, далее, количество первичных упаковок в маркированной упаковке (целое число в виде строки, лидирующие нули запрещены), разделенные символом «/» с завершающим символом «&», т.е. при отпуске 4 блистеров из 12 указывается строка «4/12&». Если после префикса «mdlp» указание дробной части отсутствует, упаковка считается выведенной из оборота полностью.

Примеры допустимых значений тега 1191: «mdlp», «mdlp2/12&».
Реквизит ss для льготных ЛП содержит сумму, возмещаемую из регионального или федерального бюджета. В реквизитах чека данные суммы должны указываться суммарно по всем позициям чека , как «сумма встречным предоставлением». Передается только для льготных рецептов с частичным дотированием, для рецептов со 100% льготой этот реквизит передавать в составе ФД не нужно. Реквизит ss всегда должен следовать после первого разделителя «&», название реквизита в качестве префикса не указывается. Если тег 1191 не содержит информации о доле отпуска (отпуск полной упаковки), после префикса «mdlp» перед реквизитом ss добавляется разделитель «&».
Реквизит ss всегда завершается символом «&». Значение реквизита ss – строка, в которой допустимы только символы [0..9], которая интерпретируется как десятичное число с фиксированной точностью 2 знака после десятичного разделителя целой и дробной части.

Примеры допустимых значений тега 1191 при субсидии 123,00 руб.: «mdlp&12300&», «mdlp2/12&12300&».

Добавляем к передаче кода маркировки передачу тега 1191:

Если (ПустоеЗначение(MarkingType) = 0) И (ПустоеЗначение(GTIN) = 0) И (ПустоеЗначение(SerialNumber) = 0) Тогда
	голеОбъектККМ.MarkingType  = MarkingType; //3 - лекарства
	голеОбъектККМ.GTIN         = GTIN;        //14 символов
	голеОбъектККМ.SerialNumber = SerialNumber;//13 символов
	голеОбъектККМ.FNSendItemCodeData();
	
	Если СписокТоваров.Количество <> СписокТоваров.ОтоброжениеКоличества Тогда
		голеОбъектККМ.TagNumber      = 1191;
		голеОбъектККМ.TagType        = 7;
		голеОбъектККМ.TagValueStr    = "mdlp"+Окр(СписокТоваров.ОтоброжениеКоличества,0)+"/"+Цел(СписокТоваров.ОтоброжениеКоличества/СписокТоваров.Количество)+"&";//при продаже 1 блистера из 3 должно быть mdlp1/3
		голеОбъектККМ.FNSendTagOperation();
	Иначе
		голеОбъектККМ.TagNumber      = 1191;
		голеОбъектККМ.TagType        = 7;
		голеОбъектККМ.TagValueStr    = "mdlp";
		голеОбъектККМ.FNSendTagOperation();
	КонецЕсли;
КонецЕсли;

Если всё прошло удачно, то в личном кабинете Честного Знака в исходящих документах появится документ с типом 10511 - Розничная продажа с использованием ККТ, тип загрузки в систему - ОФД.

По поводу прошивки и драйверов

Версия драйвера использовалась 4.14.0.772

Прошивка "Сборка ПО: 5190" от 29.04.2019.

Никаких лицензий для ККТ не покупалось, было сделано только обновление прошивки через тест драйвера. Почему я хотел бы заострить на этом внимание - нас по телефону на протяжении нескольких недель терроризировал один продажник, уверяя что если мы у него не купим лицензии на все наши кассы, то маркировка у нас работать не будет.

 

Ссылки на документацию:

Формат записи данных о выбытии ЛП в ФФД (pdf, 537.54 КБ)

Руководство программиста "ШТРИХ-М: Драйвер ККТ" (ZIP, 6.73 MB)

ККТ Маркировка пример кода для

См. также

Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС Системный администратор Программист Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

Поддерживаются новые ставки НДС 5% и 7% для УСН при продаже через ККТ. Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы в соответствии с 54-ФЗ. Поддержка актуальных версий драйверов ККТ: ДТО 10 и ДТО 8 для Атол, 4.15, 5.16 для Штрих-М. Поддержка розничной продажи маркированной продукции (алкоголь, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода и пр.).

2000 руб.

28.03.2017    484452    4554    3519    

2478

Кассовые операции ККМ Системный администратор Программист Бухгалтер Платформа 1С v7.7 Платформа 1С v8.3 1C:Бухгалтерия 1C77 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Программа для управления ККМ Атол и Штрих нового поколения (он-лайн ККТ под 54-ФЗ) с помощью текстового файла (ini файла) с изменениями включена 1 лицензия Для любых программ, которые умеют работать с текстовыми файлами. Внутри комплекта есть готовые к использованию обработки

6000 руб.

31.07.2017    173445    599    609    

208

ККМ Эквайринг/ридер магнитных карт Системный администратор Программист Оперативный учет 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Данная обработка предназначена для работы с ККТ АТОЛ на платформе 5.0 с драйверами АТОЛ версии 10.7.0.0 и выше для 1С:Торговля и Склад 9.2 и 1С: Комплексная 4.5 (в соответствии с 54-ФЗ). Проста в установке и настройке. Реализован учет маркируемой продукции по ФФД 1.2. В поставку включена поддержка эквайринга на уровне драйверов (в данный момент – Сбер), реализован учет частичных оплат, добавлены эмуляторы кассы и эквайрингового терминала, добавлена обработка генерации тестовых кодов маркировки. Поддерживаются ставки НДС 5% и 7%.

3000 руб.

20.08.2020    28461    70    81    

66

ККМ Кассовые операции Системный администратор Программист Платформа 1С v7.7 1C77 Россия Платные (руб)

Решение для тех, у кого остались не типовые конфигурации или сильно доработанные. Не все заказчики согласны платить за перенос конфигурации c V 1С 7.7 на V 1С 8 в связи с новым применением ККМ нового поколения (54-ФЗ). Код обработки полностью открыт, поэтому разработчику не составит труда использовать методы данной обработки для привязки фискального регистратора Атол любых моделей к конфигурации Заказчика.

2400 руб.

31.03.2017    54397    44    37    

45

Кассовые операции Розничная торговля ККМ Программист Платформа 1С v7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Обработка позволяет печатать чеки для кассы Штрих Online из 1С 7.7 (Торговля и склад). Есть возможность печать чеков из разных касс. Также можно подставить функционал в любую конфигурацию.

1 стартмани

18.02.2021    9552    4    Drfreeman    10    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. KUAvanesov 11.02.20 07:36 Сейчас в теме
А как же отправка в компоненту xml? На вашей прошивке это можно уже делать.
2. victuan 4288 11.02.20 09:03 Сейчас в теме
(1) Отправка через XML не требуется!
В этом и прелесть родного (нативного) драйвера ФР, что он работает с меньшими проблемами и раньше обновляется, чем версия драйвера "по стандарту 1С".

(0)
голеОбъектККМ.MarkingType = MarkingType; //3 - лекарства

Интересно, сработает без ошибок если передать MarkingType = 17485.
Дело в том, что с 1 марта нужно уже использовать общий префикс для всех групп товара 44 4D(16) = 17485(10) согласно обновленного "Протокол информационного обмена (ОФД)".

Техподдержка Штрих-М меня уверила, что прошивка и драйвер поддержат оба значения. Но хочется лишний раз убедится на практике, что это работает.
3. RustIG 1836 11.02.20 09:13 Сейчас в теме
(0) предыстория какая у вас? обычно кассовое ПО (учетная программа 1С) или ККМ обновляется для целей маркировки, а вы решили сами программировать передачу сведений в ККМ.
Как будто у вас не обновляемая 1с-ка... Что по ситуации у вас? Какая конфа и какой ККМ?
4. victuan 4288 11.02.20 09:59 Сейчас в теме
(3) Верно, имеются не обновляемые конфигурации. Это 1С 7.7. В них не предусмотрен учет маркировки и не будет в типовых релизах.
5. пользователь 24.04.20 15:39
Сообщение было скрыто модератором.
...
6. user747853 29.06.20 17:05 Сейчас в теме
Здравствуйте!
Руководствовался этой статьей, за что вам огромное спасибо.! Но похоже у меня есть ошибка, пока не могу понять, какой должен быть порядок команд при формировании чека. Может кто подсказать? Тестировал продажу ЛС с функцией деления на блистеры. Чек сформировался странно, в нем продажа одного блистера отразилась 3 раза.
примерно так
"1 строка - без наименования, но с ценой и суммой"
"2 строка - уже с наименованием и с ценой и суммой"
"3 строка - с наименованием, с ценой и суммой, и с кодом товара и с признаком mdlp1/5&". Так отразилось и в чеке и в ОФД.
Алгоритм формирования чека:
1. Открытие чека
2. Если в списке товаров есть маркированный, то формируем 1 раз теги 1084,1085 и 1086
3. происходит перебор списка товаров,
Объект.StringForPrinting = СтрокаДляПечати;
Объект.Price = ЦенаСоСкидкой;
Объект.Quantity=...
....
Объект.FNOperation();
4. Если этот товар маркированный, то к нему добавляется формирование тега 1191.
Выполняю команды:
Объект.FNOperation();
Объект.MarkingType = 17485; //=444D Data Matrix
Объект.GTIN = GTIN;
Объект.SerialNumber = SerialNumber;
5. Закрытие чека "Объект.FNCloseCheckEx();"

И вот только сейчас понимаю, что проблема м.б. в повторном вызове команды "Объект.FNOperation(); ". Или может быть другая причина?
И можете подсказать, если продажа "Без НДС", то как правильно это указать или вообще не требуется? Сейчас чек печатается без таких сведений.
Прикрепленные файлы:
8. vovaapril 47 29.06.20 20:15 Сейчас в теме
(6) FNOperation() для каждой строки чека выполняется только один раз. Передача кода маркировки идёт после FNOperation()!
user747853; +1 Ответить
7. Klen2005 29.06.20 18:24 Сейчас в теме
добрый день.
Как использовать Ваше тайное знание?
Напишите по пунктам для простых людей.
Открываем.... находим вставляем сохраняем.
9. leonidt84 477 16.07.20 11:03 Сейчас в теме
А через стандартную библиотеку подключаемого оборудования можно передавать эти данные? Кто-нибудь знает?
10. user747853 05.08.20 17:24 Сейчас в теме
добрый день!
Столкнулись с проблемой , что в Честном знаке товар не ушел с остатков.
Техподдержка ответила:
"В полученном чеке отсутствуют обязательные теги: "nds" и "ndsSum".
Обратитесь к поставщику кассового оборудования, для прошивки кассы."
Это теги 1199 и 1200. У нас ЕНВД, налога нет. А командой Tax1 не пользовались, по умолчанию 0= "Без НДС" (но в чеке в подвале есть "итого без НДС=хххх"). Может есть какая хитрость и ставку надо специально отправлять? В ЧЗ по инструкции "Формат записи при выбытии Лекарств":
"Реквизит «ставка НДС» (тег 1199) включается в состав реквизита «предмет расчета», (тег 1059) за исключением случаев осуществления расчетов пользователями, не являющимися налогоплательщиками налога на добавленную стоимость" , т.е. у нас не должен включаться , но формирование тега 1200 - "Для ставок НДС 0% и без НДС ..... в самом предмете расчета необходимо указывать в теге 1200 сумму расчета, а не ноль".
Не ясно, этот тег на стороне ККМ автоматически формироваться , на стороне ОФД или мы сами ?
11. Samir 16 26.08.20 11:41 Сейчас в теме
14. user747853 26.08.20 18:10 Сейчас в теме
19. BobbieTT 10.09.20 14:03 Сейчас в теме
12. Samir 16 26.08.20 11:50 Сейчас в теме
Люди подскажите в чем может быть беда, не выбывают медикаменты. Может в Коде где ошибся?
Если Маркировка=1 Тогда
ДрайверККМ.TagNumber = 1084;
ДрайверККМ.FNBeginSTLVTag();
my_TagID = ДрайверККМ.TagID;

ДрайверККМ.TagID = my_TagID;
ДрайверККМ.TagNumber = 1085;
ДрайверККМ.TagType = 7;
ДрайверККМ.TagValueStr = "mdlp";
ДрайверККМ.FNAddTag();

ДрайверККМ.TagID = my_TagID;
ДрайверККМ.TagNumber = 1086;
ДрайверККМ.TagType = 7;
ДрайверККМ.TagValueStr = "sid"+Отдел.ИД+"&";
ДрайверККМ.FNAddTag();

ДрайверККМ.FNSendSTLVTag();
КонецЕсли;
ВыбратьСтроки();
Пока ПолучитьСтроку()>0 Цикл
ДрайверККМ.Tax1 = 4;
ДрайверККМ.FNOperation();
Если ПустоеЗначение(СГТИН)=0 Тогда
гтин=Сред(СокрЛП(СГТИН),1,14);
серия=Сред(СокрЛП(СГТИН),15,13);
ДрайверККМ.MarkingType = 17485;//3; //3 - лекарства
ДрайверККМ.GTIN = гтин;
ДрайверККМ.SerialNumber = серия;
ДрайверККМ.FNSendItemCodeData();
ДрайверККМ.StringForPrinting = ""+гтин+Серия;
ДрайверККМ.PrintString();

ДрайверККМ.TagNumber = 1191;
ДрайверККМ.TagType = 7;
ДрайверККМ.TagValueStr = "mdlp";
ДрайверККМ.FNSendTagOperation();
КонецЕсли;
КонецЦикла;
ДрайверККМ.FNCloseCheckEx();
13. wel_ko 222 26.08.20 12:53 Сейчас в теме
Попробуй
ДрайверККМ.StringForPrinting = ""+гтин+Серия;
ДрайверККМ.PrintString();

поставить после передачи тега 1191

было такое, что как печатаешь строку, теги к операции уже не прикреплялись.
15. Samir 16 27.08.20 18:08 Сейчас в теме
Тема с вознаграждением https://forum.infostart.ru/forum9/topic246801/
(13) в json ОФД Ярус появилась новая строка:
"propertiesItem": "mdlp",

Вот весь json, может увидите ошибку:

{
"dateTime": 1598527560,
"provisionSum": 0,
"fiscalDocumentFormatVer": 2,
"code": 3,
"fiscalDriveNumber": "9287440300581591",
"shiftNumber": 277,
"operator": "ХХХХХХ",
"requestNumber": 32,
"fnsUrl": "www.nalog.ru",
"ecashTotalSum": 0,
"fiscalDocumentNumber": 15823,
"ndsNo": 21512,
"userInn": "ХХХХ",
"kktRegId": "0004038926006828",
"creditSum": 0,
"cashTotalSum": 21500,
"appliedTaxationType": 4,
"totalSum": 21500,
"retailAddress": "ХХХХХ",
"fiscalSign": 1214452323,
"operationType": 1,
"prepaidSum": 0,
"items": [
{
"quantity": 1,
"productCode": "RE0D3Z3Dui42MzI2OTA5NzQ3OTA5",
"price": 21512,
"propertiesItem": "mdlp",
"name": "1. Ренни мятный без сахара N12 Делф",
"sum": 21512,
"productType": 1,
"paymentType": 4
}
],
"retailPlace": "ХХХ",
"user": "ООО \"ХХХ\""
}

Не вижу заполнение тега 1084
16. wel_ko 222 28.08.20 08:15 Сейчас в теме
В общем с тегом 1084 такая история. Он формируется сам исходя и заполнения тегов 1085 и 1086
Тегу 1085 соответствует поле 13 17-й таблицы.
Устанавливаю его при открытии смены.
	               // Установить тэг 1085
			//голеОбъектККМ.Password = 30;
			голеОбъектККМ.TableNumber = 17;
			голеОбъектККМ.RowNumber = 1;	
			голеОбъектККМ.FieldNumber = 13;
			голеОбъектККМ.GetFieldStruct();
			голеОбъектККМ.ReadTable();
			ЗначРез = голеОбъектККМ.ValueOfFieldString;
			//Меняем значение если не mdlp
			Если СокрЛП(ЗначРез) <> "mdlp" Тогда
				голеОбъектККМ.ValueOfFieldString =  "mdlp";
				голеОбъектККМ.WriteTable();                          
			КонецЕсли;  
Показать


А с тегом 1086 следущее - на каком-то из форумов прочитал, что заполнить его как 15000.
делаю так. уже после того как пробежался по строкам таблицы
  // Тег 1086
 		голеОбъектККМ.TagNumber = 15000;    //TagNumber 15000 это внутренний тэг Штрих соответствует тегу 1086
		голеОбъектККМ.TagType = 7;            //TagType
		голеОбъектККМ.TagValueStr = "sid"+СокрЛП(М_ИДМестаДеятельности)+"&";  //TagValueStr    
		голеОбъектККМ.FNSendTag();


В Драйвере ФН в разделе 11 на вкладке данные можно посмотреть формирование этих тегов в пробитом чеке.
17. Samir 16 31.08.20 10:29 Сейчас в теме
А с тегами 1199 и 1200 никто не решил?
Может тоже внутренний тег штриха есть?
20. BobbieTT 10.09.20 14:04 Сейчас в теме
Не нашли в чём проблема?
18. Samir 16 03.09.20 14:55 Сейчас в теме
Походу надо настраивать таблицы Штриха. Не пойму как.
21. vovaapril 47 16.09.20 16:28 Сейчас в теме
(18) Возможная причина кроется вот в чём:
Код продажи примерно выглядит так
голеОбъектККМ.StringForPrinting 	= НаименованиеТовара;
гОлеОбъектККМ.CheckType        = 1;
голеОбъектККМ.Price          = Цена;
голеОбъектККМ.Quantity 	   = Количество;
голеОбъектККМ.Department 	 =  Отдел;
голеОбъектККМ.Tax1            = НомерНалоговойГруппы;
голеОбъектККМ.PaymentTypeSign = ПризнакСпособаРасчета;//  (1. Предоплата 100%, 3.Аванс 4. Полный расчет)
голеОбъектККМ.PaymentItemSign  = ПризнакПредметаРасчета;// (1. Товар, 10.Платеж)
голеОбъектККМ.FNOperation();
Показать

Возможно у вас НомерНалоговойГруппы имеет значение 0, а должен быть 4
В настройках ФР надо настроить ставки:
Налог 1 = 20% - НДС 20%
Налог 2 = 10% - НДС 10%
Налог 3 = 0% - НДС 0%
Налог 4 = 0% - Без налога
Налог 5 = 20% - НДС 20/120%
Налог 6 = 10% - НДС 10/110%
22. user747853 26.09.20 20:10 Сейчас в теме
(21) Вы были правы! У нас проблема оказалась в том, что из-за некорректного условия вообще не выполнялась команда
голеОбъектККМ.Tax1 = НомерГруппы

После того как это исправили и сделали продажу, чек появился в личном кабинете ЧЗ, а через сутки проданный sgtin сменил статус на "Реализован в розницу"
24. user605691_sejkoED 08.10.20 13:36 Сейчас в теме
(22)
Можно прислать полный пример для вывода, а то та же проблема
и нужно ли заполнять

а тэги 1191 - propertiesItem
1084 - properties
1085 - propertyName
1086 - propertyValue

надо прописывать, если можно пример
27. dmitry_sizonenko 25 18.10.20 23:05 Сейчас в теме
(22) Подскажите, пожалуйста. Удалось ли добиться отправки тегов 1199 и 1200 в ОФД? Что для этого сделали? Какие-то настройки в штрихе?
28. user747853 20.10.20 11:42 Сейчас в теме
(27) Здравствуйте!
Как я понял надо всегда выполнять команду, и указывать свою ставку
Объект.Tax1 = 4; //Без НДС 

В штрих не лазили, там была настроена таблица ставок. 4 строчка соответствовала "Без НДС"
23. user605691_sejkoED 08.10.20 13:35 Сейчас в теме
т.е. НомерГруппы =4 ,
а в самомо драйвере надо выставить ставки ,
а тэги 1191 - propertiesItem
1084 - properties
1085 - propertyName
1086 - propertyValue

надо прописывать, если можно пример на почту sejkoed*gmail.com
25. user747853 08.10.20 18:02 Сейчас в теме
(23)
	Объект.Password          = Пароль;
	Если ПризнВозврата = 0 Тогда
		Объект.CheckType = 0;
	ИначеЕсли ПризнВозврата = 1 Тогда
		Объект.CheckType = 2;
	КонецЕсли;

	Объект.OpenCheck();
	
	Тег1021_Кассир(Объект);
	
	СписокТоваров.ВыбратьСтроки();
	
	Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
		
		Если (СтрДлина(СписокТоваров.SGTIN) > 13) Тогда
			
			Объект.TagNumber = 1084;
			Объект.FNBeginSTLVTag();
			my_TagID = Объект.TagID;
			
			Объект.TagID = my_TagID;
			Объект.TagNumber = 1085;
			Объект.TagType = 7;
			Объект.TagValueStr = "mdlp";
			Объект.FNAddTag();
			
			Объект.TagID = my_TagID;
			Объект.TagNumber = 1086;
			Объект.TagType = 7;
			Объект.TagValueStr = "sid"+ИдентификаторМД+"&";
			Объект.FNAddTag();
			
			Объект.FNSendSTLVTag();
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	СписокТоваров.ВыбратьСтроки();
	        
	Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
		
		ЦенаСоСкидкой = Окр(СписокТоваров.Сумма / СписокТоваров.Количество, 2); //
		СуммаСкидки = СписокТоваров.Цена * СписокТоваров.Количество - СписокТоваров.Сумма;
		СтрокаДляПечати = СписокТоваров.ТовНаим;
		
		Объект.Password          = Пароль;
		Объект.StringForPrinting = СтрокаДляПечати;
		Объект.Price             = ЦенаСоСкидкой; //СписокТоваров.Цена;
		Объект.Quantity          = СписокТоваров.Количество;
		Объект.Department        = НомерСекции;
		
		Объект.Tax1 = 4; //у нас всегда "Без НДС"
		Объект.Tax2 = 0;
		Объект.Tax3 = 0;
		Объект.Tax4 = 0;
		Объект.TaxValue1 = 0;
		Объект.TaxValue2 = 0;
		Объект.TaxValue3 = 0;
		Объект.TaxValue4 = 0;
		Объект.TaxValue5 = 0;
		Объект.TaxValue6 = 0;
		
        Объект.TaxType = ПУП;
		Объект.FNOperation(); 
		
		Если ПустаяСтрока(СписокТоваров.SGTIN) = 0 Тогда
			Если СтрДлина(СписокТоваров.SGTIN) = 13 Тогда // маски, перчатки
				Объект.MarkingType = 17677; //EAN-13
				Объект.BarCode = СписокТоваров.SGTIN;
				Объект.FNSendItemCodeData();
				
			ИначеЕсли СтрДлина(СписокТоваров.SGTIN) = 27 Тогда
				//MarkingType = 444Dh;
				GTIN = Лев(СписокТоваров.SGTIN, 14);
				SerialNumber = Сред(СписокТоваров.SGTIN, 15, 13);
				
				Объект.MarkingType = 17485; //=444D Data Matrix
				Объект.GTIN = GTIN;
				Объект.SerialNumber = SerialNumber;
				Объект.FNSendItemCodeData();
				
				Если СписокТоваров.КоличествоПервичныхУпаковок <> СписокТоваров.КоличествоПервичныхУпаковокВУпаковке Тогда
					Объект.TagNumber      = 1191;
					Объект.TagType        = 7;
					Объект.TagValueStr    = "mdlp"+СписокТоваров.КоличествоПервичныхУпаковок+"/"+СписокТоваров.КоличествоПервичныхУпаковокВУпаковке+"&";//при продаже 1 блистера из 3 должно быть mdlp1/3
					Объект.FNSendTagOperation();
				Иначе
					Объект.TagNumber      = 1191;
					Объект.TagType        = 7;
					Объект.TagValueStr    = "mdlp";
					Объект.FNSendTagOperation();
				КонецЕсли;
			
			
			Иначе
				Сообщить("Неизвестный код - "+СписокТоваров.SGTIN);
			КонецЕсли;
			
		КонецЕсли;
		
		Если Объект.ResultCode <> 0 Тогда
			ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект);
			АннулированиеЧека(Объект, Пароль);
			ОтключитьсяОтФР(Объект, Пароль, 0);
			Возврат 0;
		КонецЕсли;

	КонецЦикла;
		
	Объект.Password = Пароль; 
	если опл=0 тогда
		
		Объект.Summ1    = 0; 
		Объект.Summ2    = суммачека-Скидка; 
		Объект.Summ3    = 0; 
		Объект.Summ4    = 0; 
	иначе
		Объект.Summ1    = Получено; 
		Объект.Summ2    = 0; 
		Объект.Summ3    = 0; 
		Объект.Summ4    = 0; 
	конецесли;
	
	Объект.StringForPrinting="";
	Объект.FNCloseCheckEx();
Показать
26. user605691_sejkoED 08.10.20 23:42 Сейчас в теме
29. пользователь 21.11.20 15:28
Сообщение было скрыто модератором.
...
30. user952963 11.02.21 14:40 Сейчас в теме
Добрый день!

Подскажите пожалуйста. откуда берется subject_id, sid, doc_date и тд. Это все берется из ЛК аптеки в системе маркировки ил это надо как то выделять из кода маркировки? спорим тут с коллегами)
31. vovaapril 47 11.02.21 15:14 Сейчас в теме
(30) Сейчас код маркировки содержит только GTIN, Серийный номер и проверочные данные (криптохвост). Вся остальная информация (где числится, статус и прочее) хранится в базе данных Честного знака. С проигравшего спор 0.5л.
32. user952963 11.02.21 17:46 Сейчас в теме
(31) Ахахха, жаль мы на удаленке)

Спасибо!
33. user952963 01.04.21 15:47 Сейчас в теме
Коллеги, такой вопрос:
Sid и subject_id _ это одно и тоже или нет?

непонятно
35. vovaapril 47 01.04.21 20:11 Сейчас в теме
36. user952963 01.04.21 20:43 Сейчас в теме
34. user952963 01.04.21 16:49 Сейчас в теме
просто в описании формирования тега 1191
откуда то берется Sid
что это за sid
тот который subject_id или какой то другой?
37. Tarlich 118 30.08.23 09:07 Сейчас в теме
Прошу подсказать :
с маркировкой я как таково не в теме ....
у 1С есть ряд конфигураций где уже есть реализация маркировки но нету в них вида МЕДИКАМЕНТЫ
не достаточно будет в карточке выставить вид маркировки ( к примеру шины) а при печати чека делать подмену на MDLP? мне надо только пробитие чеков ......
38. vovaapril 47 01.09.23 11:33 Сейчас в теме
(37) Во-первых сейчас есть маркировка лекарств и маркировка БАДов. Маркировка лекарств стоит обособленно. Своя система, отличная от других систем маркировки.
При продаже через ККМ отличий может и не быть, но товар должен быть сначала принят. Есть набор своих документов, например "Регистрация сведений о приемке лекарственных препаратов на склад получателя - Схема 416", это XML, которые посылаются при помощи API. Если начать продавать лекарства без должной приёмки, то это будет нарушением.
Если же это БАДы, то у них своя система, но она уже больше похожа на шины, т.к. там коды маркировки идут через операторов ЭДО
39. Tarlich 118 01.09.23 11:48 Сейчас в теме
(38) Да . возможно не все понимаю ...
я думал что выбытие через ккм у всех маркированных товаров одинаковое .
дополнительно 2 тега это вид маркировки (вид товара) и марка (джитин) ...
ну и 3 тег - если мы продаем вскрытие пачки блистерами сколько из скольки
сам этап приема и работа с МДЛП - это центральный офис пусть думает - моя задача только конечные кассы
40. vovaapril 47 01.09.23 16:08 Сейчас в теме
(39) Почти одинаковое. Для лекарственных средств при продаже через ККМ передают полный код маркировки с криптохвостом. Вид товара был на первом этапе, но сейчас это только в 1С осталось. Не знаю какие кассы у вас. Я работал с Штрих-М.
Скачайте руководство программиста Штрих-м и посмотрите как так выглядит команды
FNSendItemBarcode
ФНОтправитьШКТовара
FNSendItemCodeData
ФНОтправитьКТН
По Атолу не подскажу.
41. Tarlich 118 03.09.23 19:45 Сейчас в теме
(40) подскажите пожалуйста :
1 - где узнать инфу про крипто хвост необходимый
2 - про команды ККМ - так если БСП - какая разница какая касса - я если правильно понимаю формируется ХМЛ и передается кассе ..... я вот и думал что взять к примеру УНФ розница или еще что либо от 1с - отлавливать данное формирование ХМЛ файла до передачи на ккм и в нем сделать нужные мне поправочки (ну к примеру в программме указывать что товар одного вида маркировка а уже в этом файле подменивать на медикаменты)
42. Tarlich 118 05.09.23 07:43 Сейчас в теме
а можно в эту ветку еще вопрос про изменения с 01,09,23 - не пойму - Рецепт -это тег чека ккм ?
Оставьте свое сообщение