ФФД 1.2 на УТ 10.3 маркировка обуви

1. 2 06.10.21 10:57 Сейчас в теме
Нужна помощь в настройке ффд 1.2 на УТ 10.3.71.3 для работы с маркировкой обуви и текстиля. Конфигурация последняя, прошивка ккт атол 5.8.3 , драйвер 10.9.0.4. До перехода на ффд 1.2 ни каких проблем с маркировкой не было. После обновления ни каких ошибок не показывает, чеки в налоговую уходят, даже что то пытается отправить в честный знак
"1059" : [
{
"1023" : 1,
"1030" : "Полотенце пляжное (карта Крыма, морская тематика) (шт)",
"1043" : 380,
"1079" : 380,
"1163" : {
"1305" : "(01)02900003238333(21)LeQnE!YCKZ3DV"
},
но в чз ничего не доходит. Есть мнение что код не должен содержать ковычки.
У кого-то вообще получилось работать в такой конфигурации?
Вознаграждение за ответ
Показать полностью
Найденные решения
153. buka99999 01.12.21 18:18 Сейчас в теме
Добрый день!
Хочу поделиться своим опытом трехдневного запуска ФФД 1.2. )))
Имеем: УТ 10.3.72.2 (все штатно, чеки бьем не из РМК, а из обычного интерфейса самого документа Чека ККМ), Штрих RR-01Ф (версия прошивки: C.3.41963 от 26.08.2021)

Сразу хочу сказать спасибо этой ветки и особенно "andrew.ab" - меня хотя бы направили на путь истинный.
Из коробки естественно ничего не заработало и чем дальше я начал вникать что не так, тем больше понимал, что много что не так. Когда я все для себя финишировал (начали нормально пробиваться чеки), то пришел к выводу, что куча людей доделывают эту программу и каждый из них не может все связать воедино. Элементарный пример:
"ПодключаемоеОборудованиеУниверсальныйДрайверКлиент" функция:"ФискализацияЧека":
Строка:
ДанныеЧека = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека_ТО(ОбщиеПараметры, ВходныеПараметры, СуммаЧека, ШиринаСтроки, НовыйФормат, ВерсияФФД, ПараметрыФискализации);

В этой строке мы получаем XMLку для пробития чека, но на практике мы ее получаем просто так, так как эти данные нигде далее не используются (ну вот зачем вводить людей в заблуждение и загромождать код). Это лирика и эмоции!!!!
Теперь к делу.


1. Допилил обработку ShtrihMkkt.epf (файл прикреплю). А именно: запихнул в макет штриховскую компоненту от дайвера 5.16.0.886 (в драйвере было две компоненты, одна от ФФД1.1, другая от ФФД1.2); добавил три функции: ЗапросКМ; ПолучитьРезультатыЗапросаКМ; ПодтвердитьКМ (что интересно, в поставке Атоловской - они есть); подправил функцию "СоздатьОбъектДрайвера", чтобы попытка не валилась, т.к. компонента от ФФД1.2 теперь называется SMDrvFR1C34.


2. В общем модуле "МенеджерОборудованияВызовСервера" в функции "РевизияИнтерфейсаДрайверов" изменил:
РевизияИнтерфейса = 3004; //MAScorporation - было 3003
Не смотря на то, что после подмены компоненты (от последнего штриховского драйвера), в котором ревизия начинает определяться как 3004 (ФФД1.2), это место возвращает все на 3003 (ФФД1.1).

3. В этом же модуле добавил функцию (для добавление отсутствующего символа GS1, правда "andrew.ab", здесь немного ошибся и написал неверный символ разделения, точней он верный если драйверу напрямую подкидывать марку в виде строки, но в виде Base64 это не прокатывает):
Функция ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара) Экспорт //MAScorporation
    
    Штрихкод = Base64ВШтрихкод(ДанныеКодаТовара.ШтрихкодBase64);
    //РазделительGS1 = "<0x1D>";
	РазделительGS1 = Символ(29);
    
    Если Найти(Штрихкод, РазделительGS1) > 0 Тогда
        Возврат ДанныеКодаТовара.ШтрихкодBase64;
    КонецЕсли;
    
    //ДанныеКодаТовара.СерийныйНомер=5Bm2J/KPuYgVT
    ПозицияСерийногоНомера = Найти(Штрихкод, ДанныеКодаТовара.СерийныйНомер);
    ДлинаСерийногоНомера = СтрДлина(ДанныеКодаТовара.СерийныйНомер);
    
    Если ПозицияСерийногоНомера > 0 Тогда
        
        ЛеваяЧастьШтрихкода = Лев(Штрихкод, (ПозицияСерийногоНомера-1)+ДлинаСерийногоНомера);
        СредняЧастьШтрихкода = РазделительGS1 + Сред(Штрихкод, СтрДлина(ЛеваяЧастьШтрихкода) + 1, 6) + РазделительGS1;
        ПраваяЧастьШтрихкода = Сред(Штрихкод, СтрДлина(ЛеваяЧастьШтрихкода) + 7);
        
        Штрихкод = ЛеваяЧастьШтрихкода + СредняЧастьШтрихкода + ПраваяЧастьШтрихкода;
        
    Иначе    
        Возврат ДанныеКодаТовара.ШтрихкодBase64;
    КонецЕсли;    
    
    Возврат ШтрихкодВBase64(Штрихкод);
    
КонецФункции
Показать



4. В этом же модуле в процедуре "СформироватьXMLПакетДляФискализацияЧека" изменил:
 Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
						//MAScorporation - закоментил условие и добавил свое условие
						//Если Не ПустаяСтрока(ТекущаяПозиция.КонтрольнаяМарка) Тогда
						//	ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ТекущаяПозиция.КонтрольнаяМарка));
						//КонецЕсли;
						Если НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихкодBase64) Тогда
							ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ТекущаяПозиция.ШтрихкодBase64, Истина);
							РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
							Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
	                			ШтрихкодBase64 = ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
								ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ШтрихкодBase64));
							КонецЕсли;
						КонецЕсли;
						
						Если Не ПустаяСтрока(ТекущаяПозиция.КодЕдиницыИзмерения) Тогда
Показать




5. В модуле "МенеджерОборудованияКлиент" в процедуре "НачатьВыполнениеКомандыТО" вставил попытку перед выполнением команды:
Попытка
				Если ЗначениеЗаполнено(ВходныеПараметры.КонтрольнаяМарка) Тогда	//MAScorporation - запишим правильно ШК
					ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ВходныеПараметры.КонтрольнаяМарка, Истина);
					РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
					Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
		    			ШтрихкодBase64 = МенеджерОборудованияВызовСервера.ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
						ВходныеПараметры.КонтрольнаяМарка	= ШтрихкодBase64;					
					КонецЕсли;  				
				КонецЕсли;
			Исключение	КонецПопытки;
			
			Если Команда = "RequestKM" Тогда
				Результат = ОбработкаОбслуживания.ЗапросКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
			ИначеЕсли Команда = "GetProcessingKMResult" Тогда
				Результат = ОбработкаОбслуживания.ПолучитьРезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
			ИначеЕсли Команда = "ConfirmKM" Тогда
				Результат = ОбработкаОбслуживания.ПодтвердитьКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
			КонецЕсли;
Показать




6. В модуле "РозничныеПродажиКлиент" процедура "ПроверитьКодМаркировкиСредствамиККТ" поставил попытку (обратил внимание, что всегда проверяемая марка имеет один и тотже статус и не важно продажа это или возврат):
  ПараметрыСканирования = ШтрихкодированиеИСКлиент.ПараметрыСканирования(ФормаВладелец);
	Попытка //MAScorporation - иначе всегда будет "Возврат в оборот при розничной реализации"
		Если ФормаВладелец.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
			ПараметрыСканирования.ВидОперацииИСМП	= Перечисления.ВидыОперацийИСМП.ВыводИзОборотаРозничнаяПродажа; 
		КонецЕсли
	Исключение КонецПопытки;
	Если ФормаПросмотра <> Неопределено



7. В модуль справочника "КассыККМ" функцию "ПараметрыКассыККМ" сделал правку в запросе, т.к. без этой правки всегда возвращается первая попавшаяся Касса ККМ и не факт что нужная вам.
Запрос.Текст ="ВЫБРАТЬ
	              |	КассыККМ.Ссылка КАК КассаККМ,
	              |	КассыККМ.Владелец КАК Организация,
	              |	КассыККМ.СерийныйНомер КАК СерийныйНомер,
	              |	ТорговоеОборудование.Идентификатор КАК ИдентификаторУстройства
	              |ИЗ
	              |	Справочник.КассыККМ КАК КассыККМ
	              |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТорговоеОборудование КАК ТорговоеОборудование
	              |		ПО КассыККМ.Ссылка = ТорговоеОборудование.КассаККМ
	              |ГДЕ
	              |	КассыККМ.Ссылка = &Ссылка
	              |	И ТорговоеОборудование.Компьютер = &Компьютер
	              |	И ТорговоеОборудование.Подключено = ИСТИНА"; 
	
	Запрос.УстановитьПараметр("Ссылка", КассаККМ);
	Запрос.УстановитьПараметр("Компьютер", ИмяКомпьютера());//MAScorporation - добавил это условие и еще: |	И ТорговоеОборудование.Подключено = ИСТИНА
Показать




8. В модуле справочника "ТорговоеОборудование" в функции "ПолучитьПараметрыРегистрацииУстройства" в конце добавил:
 РезультатОперации.ВерсияФФДККТ           = "1.2";	 //MAScorporation
	РезультатОперации.ВерсияФФДФН            = "1.2";	 //MAScorporation
	Возврат РезультатОперации;

Дело в том, что запрос который в этой функции отрабатывает, всегда будет возвращать пустоту, т.к. идет обращение к таблице справочника, которая на данный момент всегда пустая. Если не сделать эту правку (в моем случае), то не будет инициироваться процесс проверки кодов марки фискальником.


9. И на последок абсурдный косяк. В модуле документа "ЧекККМ" в функции "ПараметрыОперацииФискализацииЧека"
вместо строки:
ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств");


написал условие (без него всегда будут пробиваться чеки прихода ))))) ):

Если ВидОперации=Перечисления.ВидыОперацийЧекККМ.Возврат Тогда //MAScorporation
		ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств");
	Иначе
		ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств");
	КонецЕсли;


10. Небольшой совет. Если идет попытка пробить некорректную марку и фискальник стопориться с ошибкой:
"d3h код товара не распознан", то зайдите в свойства фискильника и исправьте:
Таблица 17 строка 41 "RUS принимать все КТ" = 1
В этом случае независимо от корректности марки чек будет печататься.



Вот как то так.
1carbon; корум; The Ant; naboko; andrew.ab; user1444721; lenwood; +7 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
201. Natali_77 10.01.22 17:58 Сейчас в теме
Ребята, а кроме драйвера ккт штрихМ ( кстати какой лучше использовать), исправленного обновления и исправленной обработки для оборудования, нужно ещё в базечто-то делать? Например библиотеку какую-нибудь обновлять или ещё что-то?
202. dir-kbs41 13.01.22 08:35 Сейчас в теме
Удалось ли кому-нибудь на релизе УТ 10.3.73.1 пробить чек с маркой, используя новую типовую обработку обслуживания ККТ Атол и новый драйвер ККТ?

Я ради интереса пробил этот же товар с этой маркой в базе УНФ. Все пробивается, марка проходит проверку успешно. И чек на возврат тоже пробивается.

А в УТ 10 выдает ошибку "Контрольная марка не проверена". Хотя эта проверка на стороне ккт должна выполняться, предполагаю, что УТ 10 этого до сих пор не умеет определять.
203. dir-kbs41 13.01.22 12:09 Сейчас в теме
(202)
Получилось пробить чек ККМ на продажу, но чек ККМ на возврат не пробивается. Решение:
Название ККТ должно быть стандартное: ККТ "АТОЛ: ККТ с передачей данных"
И в регистре сведений "Торговое оборудование" тоже
204. webandroid 2 13.01.22 12:14 Сейчас в теме
(202)а вы ветку прочитайте, если бы сразу работало не было бы 200 сообщений в теме
205. dir-kbs41 13.01.22 12:18 Сейчас в теме
(204)
Да, я прочитал, про релиз 10.3.73.1 не было информации. Но он кстати хоть и пробил с признаком М+, марка все равно в Честный знак не дошла.
206. Aleks.spb 19.01.22 12:18 Сейчас в теме
Добрый день.
Не получается сделать возврат без КМ, выходит сообщение "Контрольная марка не проверена". Кто-нибудь разбирался как отключить?
207. enwony 1 21.01.22 15:42 Сейчас в теме
По ревизии, которую нужно менять по умолчанию в конфигурации - проверил - драйвер возвращает правильную ревизию, но в обработке обслуживания ошибка, при попытке получения ревизии:

Попытка
    Объект.ПолучитьРевизиюИнтерфейса()
Иначе
КонецПопытки


Т.е ошибки игнорируются.

Объект в том случае - это структура, нужно:
Попытка
    Объект.Драйвер.ПолучитьРевизиюИнтерфейса()
Иначе
КонецПопытки
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Аналитик 1С
Санкт-Петербург
зарплата до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 220 000 руб.
Полный день

1С Программист по 1С:Управление торговлей
Кострома
зарплата от 100 000 руб. до 110 000 руб.
Полный день

Руководитель отдела разработки
Москва
зарплата от 200 000 руб. до 230 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день