Каталог решений - Исправление ошибок в типовых релизах 1С: УТ 10.3 и Розница 1.0 при отражении продаж в ЕГАИС

Исправление ошибок в типовых релизах 1С: УТ 10.3 и Розница 1.0 при отражении продаж в ЕГАИС

Исправление ошибок в типовых релизах 1С: УТ 10.3 и Розница 1.0 при отражении продаж в ЕГАИС

В наличии

При продаже алкогольной продукции в программах Управление торговлей и Розница возникают ошибки. В статье разберем причины ошибок и способ их решения.

Категория:

Описание

В программе УТ 10.3 на релизе 36.1, а так же в Рознице 1.0.19.16, которые на данный момент являеются последними при попытке продажи алкогольной продукции с отправкой данных в ЕГАИС, возникает ошибка «java.lang.IllegalArgumentException: org.xml.sax.SAXParseException; cvc-pattern-valid: Value ‘0’ is not facet-valid with respect to pattern ‘[1-9][0-9]{0,9}’ for type ‘COUNT'». В процесе анализа ошибки выяснилось, что данная ошибка возникает из-за незаполненых полей в формируемом пакете, который и отправляется в ЕГАИС. Поле номер смены и номер чека ККМ, в программе выгружаются как значение ‘0’. В ЕГАИС по этим данным формируется информация о чеке, они должны быть заполнены обязательно.  Проблема в том, что в общем модуле ИнтеграцияЕГАИСКлиентПредопределенный  в функцию ПодготовитьВходящиеДанныеДляПодписиЧека не передаестя номер чека и смены. Номер смены особого значения не имеет, можно смело ставить 1, просто при загрузке в ЕГАИС нулевое значение не принимается. Так же важно указать номер чека, для этого в модуле функции Чека ККМ в функции ПараметрыЧекаДляПодписиВЕГАИС в параметр чека можно передать и его номер. 

Для исправления текущей ошибки можно исправить две функции, которые я описал выше следующим образом:

1.Функция ПараметрыЧекаДляПодписиВЕГАИС в модуле Чека ККМ. 

Функция ПараметрыЧекаДляПодписиВЕГАИС(ТаблицаТоваров, СуммаНал, СуммаБезНал, ТранспортныйМодуль = Неопределено)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ЧекККМ.Организация.ИНН 		  КАК ИНН,
	|	ЧекККМ.Организация.КПП 		  КАК КПП,
	|	"""" 						  КАК АдресМагазина,
	|	ЧекККМ.Склад.Наименование 	  КАК НаименованиеМагазина,
	|	0							  КАК ЗаводскойНомерККМ,
	|	ВЫБОР
	|		КОГДА ЧекККМ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ 					      КАК Возврат,
	|	ЧекККМ.Организация   		  КАК Организация,
	|	ЧекККМ.Склад 				  КАК Склад
	|ИЗ
	|	Документ.ЧекККМ КАК ЧекККМ		
	|ГДЕ
	|	ЧекККМ.Ссылка = &Ссылка";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	
	ПараметрыЧека = Новый Массив;
	ПараметрыЧека.Добавить(ТаблицаТоваров);
	ПараметрыЧека.Добавить(СуммаНал);
	ПараметрыЧека.Добавить(СуммаБезНал);
	ПараметрыЧека.Добавить(Выборка.Возврат);
	ПараметрыЧека.Добавить(Выборка.ИНН);
	ПараметрыЧека.Добавить(Выборка.КПП);
	ПараметрыЧека.Добавить(Выборка.АдресМагазина);
	ПараметрыЧека.Добавить(Выборка.НаименованиеМагазина);
	ПараметрыЧека.Добавить(Выборка.ЗаводскойНомерККМ);
	
	ТранспортныйМодуль = ИнтеграцияЕГАИСПереопределяемый.ИспользуемыйТранспортныйМодуль(Выборка.Склад, Выборка.Организация);
	ПараметрыЧека[6] = ТранспортныйМодуль.Адрес;
	ПараметрыЧека[9] = Прав(Ссылка.Номер,5);

	Возврат ПараметрыЧека;
КонецФункции

Прав(Ссылка.Номер,5) — применяется для того, чтобы исбавиться от префикса в номере чека. Если у Вас в программе установлен префикс в номере документов, то это не позволит использовать номер при передачи в ЕГАИС, так как в стандарте обмена прописано, что номер чека является числовым значением.

2. Функция ПодготовитьВходящиеДанныеДляПодписиЧека в общем модуле ИнтеграцияЕГАИСКлиентПредопределенный.

Функция ПодготовитьВходящиеДанныеДляПодписиЧека(ПараметрыЧека, НомерЧека = 0, НомерСмены = 1, РезультатПодготовки = Неопределено) Экспорт

	РезультатПодготовки = Новый Структура("Результат, ОписаниеОшибки", Ложь, "");
	
	ВходящиеДанные = СтруктураДанныхЧекаККМ();
	
	ТаблицаТоваров = ПараметрыЧека[0];
	
	Если ТаблицаТоваров.Колонки.Найти("ПараметрыАлкогольнойПродукции") = Неопределено Тогда
		РезультатПодготовки.ОписаниеОшибки = НСтр("ru = 'В процедуру подготовки входящих данных передана некорректная структура параметров.'");
		Возврат ВходящиеДанные;
	КонецЕсли;
	
	ВыгружатьНемаркируемуюПродукцию = ИнтеграцияЕГАИСКлиентПовтИсп.ВыгружатьПродажиНемаркируемойПродукцииВЕГАИС();
	
	ВходящиеДанные.ИНН                  = ПараметрыЧека[4];
	ВходящиеДанные.КПП                  = ПараметрыЧека[5];
	ВходящиеДанные.АдресМагазина        = ПараметрыЧека[6];
	ВходящиеДанные.НаименованиеМагазина = ПараметрыЧека[7];
	ВходящиеДанные.ЗаводскойНомерККМ    = ПараметрыЧека[8];
	ВходящиеДанные.НомерСменыККМ        = НомерСмены;
	ВходящиеДанные.НомерЧекаККМ         = ПараметрыЧека[9];
	ВходящиеДанные.ДатаВремяЧека        = ТекущаяДата();
	ВходящиеДанные.Возврат              = ПараметрыЧека[3];
	
	Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
		
		ПараметрыАлкогольнойПродукции = СтрокаТаблицы.ПараметрыАлкогольнойПродукции;
		
		Если ТипЗнч(ПараметрыАлкогольнойПродукции) <> Тип("Структура") Тогда
			РезультатПодготовки.ОписаниеОшибки = НСтр("ru = 'В процедуру подготовки входящих данных передана некорректная структура параметров.'");
			Возврат ВходящиеДанные;
		КонецЕсли;
		
		Если НЕ ПараметрыАлкогольнойПродукции.Свойство("АлкогольнаяПродукция")
			ИЛИ НЕ ПараметрыАлкогольнойПродукции.Свойство("Маркируемая")
			ИЛИ НЕ ПараметрыАлкогольнойПродукции.Свойство("Штрихкод")
			ИЛИ НЕ ПараметрыАлкогольнойПродукции.Свойство("Объем") Тогда
			РезультатПодготовки.ОписаниеОшибки = НСтр("ru = 'В процедуру подготовки входящих данных передана некорректная структура параметров.'");
			Возврат ВходящиеДанные;
		КонецЕсли;
		
		Если НЕ ПараметрыАлкогольнойПродукции.АлкогольнаяПродукция Тогда
			Продолжить;
		КонецЕсли;
		
		Если ПараметрыАлкогольнойПродукции.Маркируемая Тогда
			
			Если НЕ ПараметрыАлкогольнойПродукции.Свойство("ШтрихкодМарки") Тогда
				РезультатПодготовки.ОписаниеОшибки = НСтр("ru = 'Отсутствует обязательное поле ""Штрихкод марки"".'");
				Возврат ВходящиеДанные;
			КонецЕсли;
			
		Иначе
			
			Если НЕ ВыгружатьНемаркируемуюПродукцию Тогда
				Продолжить;
			КонецЕсли;
			
			Если НЕ ПараметрыАлкогольнойПродукции.Свойство("Крепость") Тогда
				РезультатПодготовки.ОписаниеОшибки = НСтр("ru = 'Отсутствует обязательное поле ""Крепость"".'");
				Возврат ВходящиеДанные;
			КонецЕсли;
			
			Если НЕ ПараметрыАлкогольнойПродукции.Свойство("КодВидаПродукции") Тогда
				РезультатПодготовки.ОписаниеОшибки = НСтр("ru = 'Отсутствует обязательное поле ""Код вида алкогольной продукции"".'");
				Возврат ВходящиеДанные;
			КонецЕсли;
			
		КонецЕсли;
		
		КоличествоСтрок = ?(ПараметрыАлкогольнойПродукции.Маркируемая, СтрокаТаблицы.Количество, 1);
		
		Для Сч = 1 По КоличествоСтрок Цикл
			СтрокаЧека = СтруктураДанныхСтрокиЧекаККМ();
			СтрокаЧека.Наименование   = СтрокаТаблицы.Наименование;
			СтрокаЧека.Количество     = ?(ПараметрыАлкогольнойПродукции.Маркируемая, 1, СтрокаТаблицы.Количество);
			
			Если СтрокаТаблицы.Количество = 0 ИЛИ СтрокаТаблицы.Скидка = 0 Тогда
				СтрокаЧека.Цена = СтрокаТаблицы.Цена;
			Иначе
				СтрокаЧека.Цена = Окр(СтрокаТаблицы.Цена * СтрокаТаблицы.Скидка * 0.01, 2);
			КонецЕсли;
			
			СтрокаЧека.ШтрихкодТовара = ПараметрыАлкогольнойПродукции.Штрихкод;
			СтрокаЧека.Объем          = ПараметрыАлкогольнойПродукции.Объем;
			
			Если НЕ ПараметрыАлкогольнойПродукции.Маркируемая Тогда
				СтрокаЧека.Крепость = ПараметрыАлкогольнойПродукции.Крепость;
				СтрокаЧека.КодВидаПродукции = ПараметрыАлкогольнойПродукции.КодВидаПродукции;
				ВходящиеДанные.ТаблицаТоваровБезМарки.Добавить(СтрокаЧека);
			Иначе
				Если ТипЗнч(ПараметрыАлкогольнойПродукции.ШтрихкодМарки) = Тип("Массив") Тогда
					СтрокаЧека.ШтрихкодМарки = ?(ПараметрыАлкогольнойПродукции.ШтрихкодМарки.ВГраница() < Сч - 1, "", ПараметрыАлкогольнойПродукции.ШтрихкодМарки[Сч - 1]);
				ИначеЕсли ТипЗнч(ПараметрыАлкогольнойПродукции.ШтрихкодМарки) = Тип("Строка") И Сч = 1 Тогда
					СтрокаЧека.ШтрихкодМарки = ПараметрыАлкогольнойПродукции.ШтрихкодМарки;
				КонецЕсли;
				
				ВходящиеДанные.ТаблицаТоваров.Добавить(СтрокаЧека);
			КонецЕсли;
		КонецЦикла;
		
	КонецЦикла;
	
	РезультатПодготовки.Результат = Истина;
	
	Возврат ВходящиеДанные;

КонецФункции // ПодготовитьВходящиеДанныеДляПодписиЧека()

 

Еще в рознице может возникать ошибка:

java.lang.IllegalArgumentException: org.xml.sax.SAXParseException; cvc-pattern-valid: Value » is not facet-valid with respect to pattern ‘\S{1,128}’ for type ‘NOEMPTY’

Как и с предыдущей ошибкой из текста ясно лишь одно, что какое-то поле из передаваемых данных не заполнено или заполнено не корректно. Как оказалось после анализа отправляеммых данных, что проблема в незаполненных данных кассы. В рознице в кассе проставляются данные «Серийный номер» и «Регистрационный номер» кассового аппарата. Данные эти не выжны, но не должны быть пустыми, можно поставить просто 1, после этого ошибка исчезнет и данные будут отправляться нормально. В управлении торговлей данная ошибка не возникает, т.к. в настройках кассы нет серийного номера и 1с передает в ЕГАИС значение по умолчанию «0», а это удовлетворяет требованиям выгрузки.

Публикации конфигураций с возможностью подключать к одному рабочему месту двух кассовых аппаратов уже не содержат данных ошибок и могут отправлять данные о продажах в ЕГАИС.


P.S. Если у Вас есть еще какие-либо ошибки, с которыми Вы столкнулись в момент начала продаж алкогольной продукции через систему ЕГАИС, пишите в комментариях, с радостью добавлю описание и решение их в статью.

has been added to your cart:
Оформление заказа