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

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) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы (в соответствии с 54-ФЗ). Поддержка крайних версий драйверов ККТ: ДТО 10 и ДТО 8 для Атол, 4.15, 5.16 для Штрих-М. Поддержка протоколов ФФД 1.0, 1.05, 1.1 и 1.2, развитые настройки для применения частичных оплат и авансов в оптовой и розничной торговле. Поддержка чеков коррекции всех версий. Поддержка розничной продажи маркированной продукции (ЕГАИС, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода и пр.). Вывод электронного чека (на е-майл, телефон) по требованию покупателя, поддерживаются комбинированные типы оплаты, режим эмуляции печати чека на ФР. Полный цикл работы из 1С 7.7 с маркировкой Честный ЗНАК (ГИСМТ, ЦРПТ) из 1С 7.7. ЭДО (табак, обувь, шины, одежда, молочная продукция, вода и прочие группы товаров) для розницы и опта (приемка и оптовая отгрузка маркированной продукции). Поддерживается как объемно-сортовой учет (ОСУ) так и поштучный (поэкземплярный) учет.

2000 руб.

28.03.2017    478447    4445    3488    

2457

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

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

4800 руб.

31.07.2017    170874    589    605    

204

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

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

2000 руб.

20.08.2020    27740    61    79    

60

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

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

1200 руб.

31.03.2017    53632    39    36    

42

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

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

1 стартмани

18.02.2021    9365    4    Drfreeman    10    

1

Файловый обмен (TXT, XML, DBF), FTP ККМ Бухгалтер Пользователь Оперативный учет 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Данная обработка предназначена для выгрузки файла из программы 1С: Предприятие 7.7 Конфигурации «Торговля и Склад 9.2» в файл CSV для загрузки в кассу МТС. Тестирование проводилось на релизах 937 и 998. В теории должна работать на всех типовых релизах конфигурации «Торговля и Склад 9.2».

1 стартмани

07.02.2021    10334    5    Kuzya_brаtsk    1    

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

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

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

Техподдержка Штрих-М меня уверила, что прошивка и драйвер поддержат оба значения. Но хочется лишний раз убедится на практике, что это работает.
3. RustIG 1747 11.02.20 09:13 Сейчас в теме
(0) предыстория какая у вас? обычно кассовое ПО (учетная программа 1С) или ККМ обновляется для целей маркировки, а вы решили сами программировать передачу сведений в ККМ.
Как будто у вас не обновляемая 1с-ка... Что по ситуации у вас? Какая конфа и какой ККМ?
4. victuan 4266 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 213 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 213 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 24 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 116 30.08.23 09:07 Сейчас в теме
Прошу подсказать :
с маркировкой я как таково не в теме ....
у 1С есть ряд конфигураций где уже есть реализация маркировки но нету в них вида МЕДИКАМЕНТЫ
не достаточно будет в карточке выставить вид маркировки ( к примеру шины) а при печати чека делать подмену на MDLP? мне надо только пробитие чеков ......
38. vovaapril 47 01.09.23 11:33 Сейчас в теме
(37) Во-первых сейчас есть маркировка лекарств и маркировка БАДов. Маркировка лекарств стоит обособленно. Своя система, отличная от других систем маркировки.
При продаже через ККМ отличий может и не быть, но товар должен быть сначала принят. Есть набор своих документов, например "Регистрация сведений о приемке лекарственных препаратов на склад получателя - Схема 416", это XML, которые посылаются при помощи API. Если начать продавать лекарства без должной приёмки, то это будет нарушением.
Если же это БАДы, то у них своя система, но она уже больше похожа на шины, т.к. там коды маркировки идут через операторов ЭДО
39. Tarlich 116 01.09.23 11:48 Сейчас в теме
(38) Да . возможно не все понимаю ...
я думал что выбытие через ккм у всех маркированных товаров одинаковое .
дополнительно 2 тега это вид маркировки (вид товара) и марка (джитин) ...
ну и 3 тег - если мы продаем вскрытие пачки блистерами сколько из скольки
сам этап приема и работа с МДЛП - это центральный офис пусть думает - моя задача только конечные кассы
40. vovaapril 47 01.09.23 16:08 Сейчас в теме
(39) Почти одинаковое. Для лекарственных средств при продаже через ККМ передают полный код маркировки с криптохвостом. Вид товара был на первом этапе, но сейчас это только в 1С осталось. Не знаю какие кассы у вас. Я работал с Штрих-М.
Скачайте руководство программиста Штрих-м и посмотрите как так выглядит команды
FNSendItemBarcode
ФНОтправитьШКТовара
FNSendItemCodeData
ФНОтправитьКТН
По Атолу не подскажу.
41. Tarlich 116 03.09.23 19:45 Сейчас в теме
(40) подскажите пожалуйста :
1 - где узнать инфу про крипто хвост необходимый
2 - про команды ККМ - так если БСП - какая разница какая касса - я если правильно понимаю формируется ХМЛ и передается кассе ..... я вот и думал что взять к примеру УНФ розница или еще что либо от 1с - отлавливать данное формирование ХМЛ файла до передачи на ккм и в нем сделать нужные мне поправочки (ну к примеру в программме указывать что товар одного вида маркировка а уже в этом файле подменивать на медикаменты)
42. Tarlich 116 05.09.23 07:43 Сейчас в теме
а можно в эту ветку еще вопрос про изменения с 01,09,23 - не пойму - Рецепт -это тег чека ккм ?
Оставьте свое сообщение