Как обновить обработку обмена АТОЛ РМК для работы в 1С 8.3 на управляемых формах

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

Переход с платформы 1С 8.2 на 8.3 и использование современных конфигураций (таких как Управление торговлей для Казахстана 3.2 или УТ 11) часто вызывает сложности с поддержкой старого торгового оборудования и внешних обработок. Основная проблема заключается в том, что старые механизмы были ориентированы на «Обычные формы» и «Толстый клиент», тогда как новые системы работают в режиме «Управляемого приложения» с жестким разделением на клиентский и серверный контексты.

В этой статье мы подробно разберем, почему старая обработка АТОЛ выдает ошибки, и как адаптировать ее под современные требования платформы 8.3.

Разбор основных ошибок компиляции

Проанализируем типичный список ошибок, который возникает при попытке регистрации или открытия старой обработки в управляемом приложении. Чаще всего система выдает сообщения следующего вида:

Разберем причину их возникновения. В управляемом приложении модуль объекта внешней обработки выполняется на сервере. На сервере в 1С принципиально отсутствуют любые элементы интерфейса. Переменные КодВозвратаДиалога, а также функции Вопрос() и Предупреждение() являются клиентскими. Когда серверный код пытается к ним обратиться, система закономерно выдает ошибку, так как в серверном контексте их просто не существует.

Шаг 1: Адаптация контекста выполнения

Чтобы исправить ситуацию, первым делом необходимо разделить логику. Рассмотрим код процедуры, приведенный в обсуждении:


Процедура НастроитьОборудование(Модель, Параметры) Экспорт
    Форма = ПолучитьФорму("ФормаНастройки");
    Форма.мМодель = Модель;
    Форма.мПараметры = Параметры;
    Ответ = Форма.ОткрытьМодально();
    Если Ответ = КодВозвратаДиалога.OK Тогда
        Параметры = Форма.мПараметры;
    КонецЕсли;
КонецПроцедуры

Проанализируем этот участок. Процедура ОткрытьМодально() и метод ПолучитьФорму() в модуле объекта на сервере работать не будут. Нам необходимо перенести все вызовы диалогов на сторону клиента. Если конфигурация работает в режиме «Запрет модальных вызовов» (что является стандартом для 8.3), использование ОткрытьМодально(), Вопрос() и Предупреждение() вовсе запрещено.

Для исправления необходимо заменить синхронные вызовы на асинхронные, используя ОписаниеОповещения. Однако для внешней обработки обмена это потребует полной переработки логики. В качестве временного решения для тестирования в свойствах конфигурации можно включить режим «Использовать модальные вызовы», но для стабильной работы в веб-клиенте это не поможет.

Шаг 2: Реализация функции СведенияОВнешнейОбработке

Для того чтобы современная конфигурация на базе БСП (Библиотеки стандартных подсистем) смогла подключить обработку через справочник «Дополнительные отчеты и обработки», в модуле объекта обязательно должна присутствовать функция СведенияОВнешнейОбработке().

Рассмотрим пример реализации этой функции, которую нужно добавить в самое начало модуля объекта:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
    ПараметрыРегистрации.Вставить("Наименование", "Обмен с АТОЛ РМК (обновленная)");
    ПараметрыРегистрации.Вставить("Версия", "2.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Обработка обмена данными с ПО АТОЛ");
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Открыть обработку", "ОткрытьОбработку", "ОткрытиеФормы", Истина);
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

Шаг 3: Исправление глобальных функций и переменных

В старых конфигурациях часто использовалась функция глЗначениеПеременной(). В УТ 11 или УТ 3.2 для Казахстана этот механизм заменен на другие вызовы (например, через модули ПараметрыСеанса или общие модули настроек).

Выясним причину ошибки: Процедура или функция с указанным именем не определена (глЗначениеПеременной). В управляемом приложении этой функции просто нет. Вам следует заменить код:

мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");

на прямой запрос к константам или функциональным опциям, актуальным для вашей конфигурации.

Шаг 4: Решение проблемы с типами форм

Самое важное ограничение: обработка от 1С 8.2 содержит обычные формы. Управляемое приложение 1С 8.3 не может отображать обычные формы внутри своего интерфейса. Вы можете запустить их только в режиме «Толстого клиента», что крайне неудобно для современных систем.

Рассмотрим правильную стратегию действий:

  1. Создание управляемой формы: Вам придется создать новую форму «с нуля» в редакторе управляемых форм.
  2. Перенос реквизитов: Скопируйте реквизиты старой обработки в новую.
  3. Перенос кода: Основную логику формирования файлов (goods.txt) можно оставить, но функции взаимодействия с пользователем (сообщения, прогресс-бары через Состояние()) нужно переписать с учетом директив &НаСервере и &НаКлиенте.

Альтернативный вариант: Использование стандартного функционала ККМ Offline

Вместо того чтобы тратить время на адаптацию обработки десятилетней давности, проанализируем штатные возможности УТ для Казахстана 3.2. В конфигурацию уже встроена поддержка обмена с ПО АТОЛ (Frontol) через механизм «ККМ Offline».

Разберем по шагам, как настроить обмен без внешней обработки:

  1. Перейдите в раздел «Администрирование» — «Подключаемое оборудование».
  2. Установите флаг «Использовать подключаемое оборудование».
  3. Выберите пункт «ККМ Offline» и создайте новый экземпляр оборудования.
  4. В качестве драйвера выберите «АТОЛ: ККМ Offline».
  5. В настройках укажите пути к папкам обмена.

Относительно запроса пользователя об обмене через Email:

Штатный механизм 1С обычно работает через локальные папки или FTP. Если вам критически важно использовать почту, мы рекомендуем не переписывать обработку 1С, а воспользоваться «транспортными» утилитами. Например, настройте на кассовом компьютере и на сервере 1С облачное хранилище (Яндекс.Диск, Dropbox), которое создаст виртуальную папку. 1С будет выгружать файл в эту папку, а облачный клиент автоматически отправит его через интернет. Для программы это будет выглядеть как обычный файловый обмен, что гораздо надежнее, чем настройка SMTP/POP3 внутри 1С.

Вывод: Попытка обновить старую обработку АТОЛ с 8.2 на 8.3 «в лоб» — задача трудозатратная из-за несовместимости интерфейсов. Наилучшим решением будет переход на встроенные механизмы обмена ККМ Offline, которые поддерживают актуальные требования законодательства (маркировка, новые типы чеков) и стабильно работают на платформе 8.3.

← На главную