Исправление ошибки 1С УТ 11 (версия 11.3.2.157) с транспортным модулем УТМ ЕГАИС

Опубликовал Дмитрий Цветков (janibeck@mail.ru) в раздел Программирование - Универсальные функции

В конфигурации 1C "Управление торговлей" (по крайней мере, в версии 11.3.2.157) после настройки соединения с фискальным регистратором и транспортным модулем "УТМ" ЕГАИС при попытке пробить чек на продажу единицы алкогольной продукции выдается ошибка (скрин приложен).

    Название модуля, содержащего ошибку - "ИнтеграцияЕГАИС". В этом модуле формируется форматное сообщение о продаваемой единице продукции. Функция, формирующая сообщение - "ТекстXMLВыгрузкиЧека". В формируемом сообщении ошибка: в поле "смена" ("shift") передается значение "0" что не позволяется форматом (номер смены должен быть хотя бы "1"). 
Новый текст функции:

// Функция возвращает текст XML, который нужно выгрузить в ЕГАИС.
//
Функция ТекстXMLВыгрузкиЧека(ВидДокумента, ШапкаЧека, СтрокиЧека, ТекстОшибки) Экспорт

    ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(ВидДокумента, Неопределено, ТекстОшибки);
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    
    ЧекXDTO = ОбъектXDTOПоИмениСвойства(ПространствоИмен, "Cheque");
    
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "inn", ШапкаЧека.ИНН, ТекстОшибки);
    
    Если ЗначениеЗаполнено(ШапкаЧека.КПП) Тогда
        УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "kpp", ШапкаЧека.КПП, ТекстОшибки);
    КонецЕсли;
    
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "address" , ШапкаЧека.АдресМагазина                         , ТекстОшибки);
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "name"    , ШапкаЧека.НаименованиеМагазина                  , ТекстОшибки);
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "kassa"   , ШапкаЧека.ЗаводскойНомерККМ                     , ТекстОшибки);
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "shift"   , ШапкаЧека.НомерСменыККМ                         , ТекстОшибки);
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "number"  , ШапкаЧека.НомерЧекаККМ                          , ТекстОшибки);
    УстановитьЗначениеСвойстваXDTO(ЧекXDTO, "datetime", Формат(ШапкаЧека.ДатаВремяЧека, "ДФ=ddMMyyHHmm"), ТекстОшибки);
    
    Если НЕ ПустаяСтрока(ТекстОшибки) Тогда
        Возврат "";
    КонецЕсли;
    
    Для Каждого СтрокаЧека Из СтрокиЧека Цикл
        
        Цена = Формат(?(ШапкаЧека.Свойство("Возврат") И ШапкаЧека.Возврат, -1, 1) * СтрокаЧека.Цена, "ЧДЦ=2; ЧРД=.; ЧГ=0");
        Объем = Формат(СтрокаЧека.Объем, "ЧДЦ=4; ЧРД=.; ЧГ=0");
        
        СтрокаЧекаXDTO = ОбъектXDTOПоИмениСвойства(ПространствоИмен, "Bottle");
        УстановитьЗначениеСвойстваXDTO(СтрокаЧекаXDTO, "price"  , Цена, ТекстОшибки);
        УстановитьЗначениеСвойстваXDTO(СтрокаЧекаXDTO, "barcode", СтрокаЧека.КодАкцизнойМарки, ТекстОшибки);
        
        Если ЗначениеЗаполнено(СтрокаЧека.Штрихкод) Тогда
            УстановитьЗначениеСвойстваXDTO(СтрокаЧекаXDTO, "ean", СтрокаЧека.Штрихкод, ТекстОшибки);
        КонецЕсли;
        
        Если ЗначениеЗаполнено(Объем) Тогда
            УстановитьЗначениеСвойстваXDTO(СтрокаЧекаXDTO, "volume" , Объем, ТекстОшибки);
        КонецЕсли;
        
        ЧекXDTO.Bottle.Добавить(СтрокаЧекаXDTO);
        
    КонецЦикла;
    
    Если НЕ ПустаяСтрока(ТекстОшибки) Тогда
        Возврат "";
    КонецЕсли;
    
    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ЧекXDTO, "Cheque");
    
    ТекстXML = ЗаписьXML.Закрыть();
    ТекстXML = СтрЗаменить(ТекстXML, "xmlns=""" + ПространствоИмен + """ ", "");
    ТекстXML = СтрЗаменить(ТекстXML, "shift=""0""" , "shift=""1""");
    
    Возврат ТекстXML;

КонецФункции

См. также

В этой теме еще нет сообщений.