Как программно изменить ФИО кассира в таблицах ККТ Штрих-М из 1С:Предприятие

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

При автоматизации торговых точек на базе 1С:Розница или других конфигураций часто возникает необходимость динамически изменять данные в памяти фискального регистратора. Одной из самых частых задач является актуализация списка кассиров в Таблице №2 (Пароли кассиров и администраторов) устройства «Штрих-М». Это нужно для того, чтобы в чеке печаталась фамилия реального сотрудника, работающего в текущей смене.

Однако при попытке выполнить запись стандартными средствами 1С программисты часто сталкиваются с ошибками доступа к свойствам объекта или некорректными параметрами команды. В этой статье мы подробно разберем, как правильно организовать взаимодействие с драйвером, какие компоненты использовать и как избежать типичных ошибок.

Анализ проблемы: почему не работает стандартная компонента 1С

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

Важный момент: компоненты, созданные по стандарту 1С для БПО, имеют строго ограниченный набор методов и свойств, необходимых только для типовых операций (печать чека, открытие смены, X-отчет). Прямой доступ к низкоуровневым таблицам настроек ККТ в таких компонентах зачастую закрыт или реализован иначе. Для полноценного управления внутренними параметрами устройства нам необходимо использовать «родную» ActiveX-компоненту драйвера — AddIn.DrvFR.

Выбор правильного метода подключения драйвера

Выясним, чем отличаются способы создания объекта драйвера. Вместо создания объекта через стандартную компоненту 1С, мы будем использовать прямое обращение к COM-серверу драйвера «Штрих-М». Рассмотрим пошагово, как инициализировать соединение:

  1. Убедимся, что на компьютере установлен драйвер ККТ «Штрих-М» (версии 4.x или 5.x).
  2. Зарегистрируем библиотеку DrvFR.dll в системе, если это не было сделано автоматически.
  3. В коде 1С заменим создание объекта на использование COMОбъект или подключение нативной компоненты.

Посмотрим на пример кода для инициализации объекта драйвера:


// Вместо AddIn.SMDrvFR1C22 используем нативный драйвер
Попытка
    ПодключитьВнешнююКомпоненту("AddIn.DrvFR");
    ФР = Новый ("AddIn.DrvFR");
Исключение
    Сообщить("Не удалось загрузить компоненту DrvFR. Проверьте установку драйвера.");
    Возврат;
КонецПопытки;

Работа с таблицами ККТ: структура и параметры

Теперь разберем внутреннее устройство памяти «Штрих-М». Все настройки кассы хранятся в пронумерованных таблицах. Список кассиров — это всегда Таблица №2. Проанализируем структуру этой таблицы:

Одной из ошибок в исходном коде была установка FieldNumber = 30. Это приводило к ошибке 51 (Некорректные параметры в команде), так как в таблице №2 нет поля с таким индексом. Для изменения фамилии мы должны всегда использовать FieldNumber = 2.

Алгоритм записи данных в таблицу кассы

Рассмотрим правильную последовательность действий для записи ФИО кассира. Крайне важно не просто установить параметры, но и установить физическую связь с устройством перед выполнением команды записи.

Разберем процесс по шагам:

  1. Установка параметров связи: указываем номер COM-порта и скорость.
  2. Соединение: вызываем метод Connect().
  3. Авторизация: устанавливаем системный пароль (свойство Password). По умолчанию для администрирования таблиц в Штрих-М используется пароль 30.
  4. Позиционирование: задаем номер таблицы, ряда и поля.
  5. Передача значения: помещаем строку в свойство ValueOfFieldString.
  6. Запись: вызываем метод WriteTable().

Пример программного кода для 1С

Ниже приведен исправленный и проверенный программный код, который решает задачу записи ФИО кассира во вторую строку таблицы кассиров:


Процедура ЗаписатьКассираВККМ(ИмяКассира, НомерПорта)
    
    // Создаем объект драйвера
    Попытка
        ФР = Новый COMОбъект("AddIn.DrvFR");
    Исключение
        Сообщить("Ошибка создания COM-объекта DrvFR");
        Возврат;
    КонецПопытки;

    // Настраиваем параметры связи (если не используются настройки по умолчанию)
    ФР.ComNumber = НомерПорта;
    ФР.BaudRate = 6; // Скорость 115200 (индексы зависят от версии драйвера)
    
    // Пытаемся установить связь
    ФР.Connect();
    
    Если ФР.ResultCode <> 0 Тогда
        Сообщить("Ошибка связи с ККТ: " + ФР.ResultCodeDescription);
        Возврат;
    КонецЕсли;

    // Устанавливаем системный пароль администратора (по умолчанию 30)
    ФР.Password = 30;
    
    // Настраиваем адрес ячейки в памяти ККТ
    ФР.TableNumber = 2; // Таблица кассиров
    ФР.RowNumber   = 2; // Номер кассира (строка)
    ФР.FieldNumber = 2; // Поле "Имя кассира"
    
    // Ограничиваем длину строки (старые модели Штрих-М не принимают более 30 символов)
    ФР.ValueOfFieldString = Лев(СокрЛП(ИмяКассира), 30);
    
    // Выполняем запись
    ФР.WriteTable();
    
    Если ФР.ResultCode = 0 Тогда
        Сообщить("Данные кассира успешно обновлены!");
    Иначе
        Сообщить("Ошибка записи в таблицу: " + ФР.ResultCodeDescription);
    КонецЕсли;

    // Разрываем соединение
    ФР.Disconnect();
    
КонецПроцедуры

Анализ дополнительных нюансов

Выясним причины возникновения некоторых специфических ошибок, которые могут встретиться в процессе работы. Рассмотрим ситуацию с методом GetFieldStruct(). Этот метод используется для получения структуры поля (длины, типа), но он не является обязательным для выполнения простой записи. Если вы вызываете его и получаете ошибку 51, это верный признак того, что вы указали несуществующий TableNumber или FieldNumber.

Важные рекомендации при работе с драйвером:

Таким образом, мы проанализировали основные причины неудач при записи в таблицы Штрих-М и выработали надежный алгоритм решения задачи. Использование прямого COM-интерфейса вместо БПО-обертки дает программисту полный контроль над аппаратной частью устройства и позволяет реализовывать нестандартные задачи по настройке оборудования.

← На главную