Как исправить ошибку «Поле объекта не обнаружено (Тип)» при загрузке отчета из Frontol 5 в 1С:Розница

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При интеграции кассового ПО Frontol 5 с конфигурацией 1С:Розница 2.2 (или аналогичными версиями) системные администраторы и программисты часто сталкиваются с критической ошибкой при попытке загрузить отчет о закрытии смены (Z-отчет). В процессе обмена 1С внезапно прерывает работу с сообщением: «Поле объекта не обнаружено (Тип)». В этой статье мы подробно разберем, почему возникает эта проблема, как ее диагностировать с помощью отладчика и какие существуют способы решения — от простых настроек операционной системы до внесения правок в программный код.

Анализ проблемы и поиск причины

Проанализируем ситуацию: ошибка возникает в общем модуле, отвечающем за работу с подключаемым оборудованием (обычно это ПодключаемоеОборудованиеАтолККМOfflineКлиент). Программа пытается обработать файл выгрузки sales.txt, который формирует кассовая программа Frontol. В момент разбора строки транзакции 1С ожидает получить структуру, содержащую поле Тип, но вместо этого происходит сбой.

Если мы заглянем в отладчик, то увидим, что функция ЗаполнитьТранзакцию пытается извлечь данные из текстовой строки, разделенной символами точки с запятой (;). Проблема заключается в том, что 1С «спотыкается» на полях даты и времени. Если формат этих полей не соответствует ожиданиям парсера 1С, последующие поля (включая тип транзакции) либо сдвигаются, либо вовсе не попадают в результирующую структуру Транзакция.

Причина №1: Региональные настройки Windows

Выясним главную причину такого поведения. Frontol при формировании файла выгрузки использует системные настройки даты и времени операционной системы, на которой он запущен. Если на кассовом компьютере в Панели управления установлены региональные стандарты «Английский (США)», то дата в файле sales.txt будет записана через слэш (4/11/2018), а время — с суффиксами AM/PM (например, 5:12:10 PM).

Стандартная обработка 1С жестко ориентирована на российский стандарт: ДД.ММ.ГГГГ и ЧЧ:ММ:СС. Встретив символ / или пробел перед PM, алгоритм обработки строк выдает ошибку преобразования типа Число, прерывает заполнение структуры, и поле Тип остается неопределенным. Это и приводит к ошибке «Поле объекта не обнаружено (Тип)» при обращении к Транзакция.Тип.

Решение: Самый простой и правильный способ — зайти в настройки Windows на кассовом узле и установить формат «Русский (Россия)». После этого Frontol начнет выгружать даты в понятном для 1С виде, и правка кода не потребуется.

Причина №2: Несоответствие версий формата обмена

Рассмотрим еще один важный момент. Frontol 5 постоянно обновляется, и в новых версиях (например, выше 5.20) могут добавляться новые поля в структуру транзакции. Если в настройках оборудования в 1С выбран старый формат обмена, индексы колонок могут не совпадать. Проверьте, чтобы в Frontol в разделе «Настройки обмена» стояла версия формата, совместимая с вашей версией 1С (обычно это 4.0 или 5.0).

Решение через модификацию кода 1С

Если изменить региональные настройки на кассе по каким-то причинам невозможно, мы можем программно адаптировать 1С под входящий формат данных. Для этого нам потребуется изменить функцию ЗаполнитьТранзакцию в общем модуле ПодключаемоеОборудованиеАтолККМOfflineКлиент (или аналогичном в вашей версии).

Разберем пример кода, который корректно обрабатывает дату со слэшами и время в формате AM/PM, переводя его в 24-часовой формат. Рассмотрим фрагмент кода, который нужно внедрить:


// Извлекаем сырые данные даты и времени из соответствующих колонок строки
ДатаТр = СтрПолучитьСтроку(Строка, 2); 
ВремяТр = СтрПолучитьСтроку(Строка, 3);

// Обработка даты: заменяем слэши на переносы строк для дальнейшего разбора или на точки
Если СтрНайти(ДатаТр, "/") > 0 Тогда
    ДатаТранзакции = СтрЗаменить(ДатаТр, "/", Символы.ПС);
ИначеЕсли СтрНайти(ДатаТр, ".") > 0 Тогда
    ДатаТранзакции = СтрЗаменить(ДатаТр, ".", Символы.ПС);
КонецЕсли;

// Обработка времени с учетом AM/PM
ПервРазд = СтрНайти(ВремяТр, ":");
Если СтрНайти(ВремяТр, " PM") > 0 Тогда
    // Если PM, добавляем 12 часов к первому сегменту времени
    Часы = Число(Лев(ВремяТр, ПервРазд - 1));
    Если Часы < 12 Тогда
        Часы = Часы + 12;
    КонецЕсли;
    ВремяТр = Строка(Часы) + Прав(ВремяТр, СтрДлина(ВремяТр) - ПервРазд + 1);
    ВремяТр = СтрЗаменить(ВремяТр, " PM", "");            
ИначеЕсли СтрНайти(ВремяТр, " AM") > 0 Тогда
    ВремяТр = СтрЗаменить(ВремяТр, " AM", "");            
КонецЕсли;

// Теперь 1С сможет корректно прочитать время, разделенное двоеточиями
ВремяТранзакции = СтрЗаменить(ВремяТр, ":", Символы.ПС);

Этот код позволяет «нормализовать» данные до того, как система попытается преобразовать их в объекты типа Дата. После нормализации заполнение структуры Транзакция продолжится успешно, и поле Тип будет обнаружено.

Проблема повторной загрузки отчетов

Проанализируем сопутствующую проблему: иногда после исправления ошибки парсинга пользователи замечают, что один и тот же отчет загружается дважды, создавая дубли документов «Отчет о розничных продажах». Это происходит по следующим причинам:

  1. Файл не очищается: В настройках Frontol («Исходящие данные») может быть не установлен флаг «Удалять файл после успешной выгрузки». 1С считывает файл, но не может его удалить (например, из-за нехватки прав доступа в сетевой папке), и при следующем обмене видит те же данные.
  2. Транзакции входа (Тип 64): Во Frontol 5 транзакция с кодом 64 означает «Вход пользователя». Типовая 1С часто не умеет их обрабатывать. Если ваша доработка кода «спотыкается» на сервисных транзакциях, 1С может считать сеанс обмена незавершенным.
  3. Права доступа: Убедитесь, что пользователь, под которым запущена 1С, имеет права «Изменение» и «Удаление» в папке обмена. Если 1С не сможет переместить файл в папку Backup после загрузки, она загрузит его снова.

Рекомендации по настройке Frontol 5

Для стабильной работы связки Frontol 5 + 1С:Розница рекомендуем придерживаться следующих правил:

Таким образом, мы рассмотрели комплексный подход к решению ошибки. Помните, что прежде чем править код конфигурации, всегда стоит проверить настройки окружения (Windows), так как в 90% случаев проблема кроется именно в «нестандартном» формате текстового файла sales.txt.

← На главную