Подгрузка безналичных чеков из мобильной кассы в Розницу 2.3

Я наладил обмен из МК в Розницу через универсальный формат обмена Enterprise Data (ED). Но при тестировании столкнулся с проблемой — все чеки приходили как наличные, оплата картой не учитывалась.

Проверил файл обмена — касса формирует правильный файл:


Но вот типовой код обмена через ED ожидает увидеть для чека раздел ОплатаПлатежнымиКартами:

Но этого раздела нет, поэтому приходится писать свою заплатку.

У клиента не используется частичная оплата, поэтому код замены простой, модуль МенеджерОбменаЧерезУниверсальныйФормат:

&Вместо("ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO")
Процедура дор_ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
	
	ПродолжитьВызов(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена);
	
	//Корректируем оплату картой
	Если ДанныеXDTO.Свойство("ОплатыККМ")
		И ДанныеXDTO.ОплатыККМ.Количество() > 0 Тогда
		
		ОплатаПлатежнымиКартами 	= 0;

		Для Каждого СтрокаXDTO Из ДанныеXDTO.ОплатыККМ Цикл
			ОплатаПлатежнымиКартами = ОплатаПлатежнымиКартами + СтрокаXDTO.Сумма;
		КонецЦикла;
		
		Если ПолученныеДанные.ДополнительныеСвойства.Свойство("Оплата") И ПолученныеДанные.ДополнительныеСвойства.Оплата.Количество() > 0 Тогда
			ПолученныеДанные.ДополнительныеСвойства.Оплата[0].Сумма = ОплатаПлатежнымиКартами;
			ПолученныеДанные.ДополнительныеСвойства.Оплата[0].ВидОплаты = 
			Справочники.ВидыОплатЧекаККМ.НайтиПоНаименованию("Платежная карта", Истина);
		КонецЕсли;
		
	КонецЕсли;
КонецПроцедуры

Оплата загружается корректно:

Можно было бы переконвертировать структуру перед входом в конвертацию, но это лишнее для этой задачи.

UPD 2022-05-16: в коде была обнаружена ошибка, все виды оплаты грузились в безналичные. Заодно реализовал и смешанную оплату:

Чек загружается корректно:

Исправленный код:

&Вместо("ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO")
Процедура дор_ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
	
	ПродолжитьВызов(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена);
	
	//Корректируем оплату картой
	Если ДанныеXDTO.Свойство("ОплатыККМ")
		И ДанныеXDTO.ОплатыККМ.Количество() > 0 Тогда
		
		ОплатаПлатежнымиКартами 	= 0;  
		СуммаОплатыНаличных = ПолученныеДанные.СуммаДокумента;

		Для Каждого СтрокаXDTO Из ДанныеXDTO.ОплатыККМ Цикл   
			Если СтрокаXDTO.ТипОплаты.Значение = "Электронно" Тогда
			ОплатаПлатежнымиКартами = ОплатаПлатежнымиКартами + СтрокаXDTO.Сумма;
			КонецЕсли;
		КонецЦикла;
		
		СуммаОплатыНаличных = СуммаОплатыНаличных - ОплатаПлатежнымиКартами;
		
		Если ПолученныеДанные.ДополнительныеСвойства.Свойство("Оплата") Тогда //И ПолученныеДанные.ДополнительныеСвойства.Оплата.Количество() > 0 Тогда
			
			Оплата = ПолученныеДанные.ДополнительныеСвойства.Оплата;
			Оплата.Очистить();
			
			Если СуммаОплатыНаличных <> 0 Тогда //Может быть и минус при возврате, видимо
				С = Новый Структура;
				С.Вставить("ВидОплаты", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОплатЧекаККМ.Наличные"));
				С.Вставить("Сумма", СуммаОплатыНаличных);
				Оплата.Добавить(С);

			КонецЕсли;

			Если ОплатаПлатежнымиКартами <> 0 Тогда
				С = Новый Структура;
				С.Вставить("ВидОплаты", Справочники.ВидыОплатЧекаККМ.НайтиПоНаименованию("Платежная карта", Истина));
				С.Вставить("Сумма", ОплатаПлатежнымиКартами);
				Оплата.Добавить(С);
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
КонецПроцедуры

Среда: МК: 3.14.7.0 Розница: 2.3.11.33 Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *