С переходом на онлайн-кассы по требованиям 54-ФЗ у многих пользователей и разработчиков возник вопрос: возможно ли продолжать работу на платформе 1С:Предприятие 7.7 («Торговля и Склад», «Бухгалтерский учет», «Комплексная конфигурация») или переход на 1С 8 является строго обязательным? Разберем реальное положение дел, технические ограничения платформы и практические варианты подключения современной контрольно-кассовой техники (ККТ).
Платформа 1С 7.7 успешно работает с большинством современных онлайн-касс (Атол, Штрих-М, Меркурий и др.). Архитектура торгового оборудования в семерке достаточно компактна: взаимодействие с фискальным регистратором обычно сосредоточено в одной внешней обработке обслуживания, код которой значительно проще и прозрачнее, чем в современных конфигурациях на платформе 1С 8.
Прежде чем приступать к интеграции, проанализируем ключевые особенности платформы 1С 7.7, о которых важно помнить разработчику:
WinHttp.WinHttpRequest.5.1 или MSXML2.ServerXMLHTTP).Рассмотрим классический вариант: подключение ККТ через родной COM-драйвер производителя (например, Атол или Штрих-М). В этом случае обработка обслуживания 1С инициализирует объект драйвера, открывает чек, передает товарные позиции и закрывает документ.
Посмотрим на пример вызова методов фискального регистратора из кода 1С 7.7:
// Создание COM-объекта драйвера ККТ
ДрайверККТ = СоздатьОбъект("AddIn.FprnM45");
Если ПустоеЗначение(ДрайверККТ) = 1 Тогда
Сообщить("Не удалось загрузить драйвер ККТ!", "!");
Возврат;
КонецЕсли;
// Установка параметров соединения
ДрайверККТ.DeviceEnabled = 1;
Если ДрайверККТ.ResultCode <> 0 Тогда
Сообщить("Ошибка подключения к кассе: " + ДрайверККТ.ResultDescription, "!");
Возврат;
КонецЕсли;
// Открытие чека продажи
ДрайверККТ.Mode = 1; // Режим регистрации
ДрайверККТ.SetMode();
ДрайверККТ.CheckType = 1; // Чек прихода (продажа)
ДрайверККТ.OpenCheck();
При регистрации позиций в старых конфигурациях 7.7 частой проблемой была передача итоговых сумм со скидками. В онлайн-кассах фискальный накопитель строго контролирует равенство: Количество * Цена = Сумма позиции. Если в типовой обработке выполнялся отдельный вызов скидки на позицию или чек, драйвер возвращает ошибку арифметики.
Для исправления достаточно скорректировать расчет в обработке: передавать в кассу уже конечную цену с учетом всех скидок и наценок, исключив вызовы устаревших команд распределения скидок.
Рассмотрим более современный и универсальный подход. На компьютере с подключенной ККТ разворачивается локальный кассовый сервис (веб-сервер), принимающий чеки через HTTP POST-запросы. В этом случае 1С 7.7 не зависит от разрядности библиотек и конкретной модели кассы, а просто отправляет JSON-пакет чека.
Разберем пример отправки чека через системный объект Windows HTTP:
HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
URL = "http://127.0.0.1:5000/api/v1/printCheck";
HTTP.Open("POST", URL, 0);
HTTP.SetRequestHeader("Content-Type", "application/json; charset=utf-8");
// Формирование строки JSON с реквизитами чека
ТекстJSON = "{""type"": ""sale"", ""taxVariant"": ""usn_income"", ""items"": ["
+ "{""name"": ""Товар 1"", ""price"": 150.00, ""quantity"": 1, ""tax"": ""none""}"
+ "], ""payments"": [{""type"": 1, ""sum"": 150.00}]}";
HTTP.Send(ТекстJSON);
Если HTTP.Status = 200 Тогда
Ответ = HTTP.ResponseText;
Сообщить("Чек успешно отправлен на печать.");
Иначе
Сообщить("Ошибка печати чека. Код ответа: " + HTTP.Status, "!");
КонецЕсли;
Еще один надежный вариант интеграции — файловый шлюз. При проведении документа 1С 7.7 выгружает текстовый файл (или XML/JSON) с параметрами чека в заданную папку обмена. Сторонняя фоновая служба считывает файл, пробивает чек на кассе и формирует файл-ответ с фискальными признаками (номером документа, ФД, ФПД), который затем считывается обратно в 1С.
Проанализируем нюансы законодательства:
Таким образом, утверждения о невозможности работы 1С 7.7 с онлайн-кассами не соответствуют действительности. Конфигурации 7.7 успешно фискализируют чеки, а за счет простоты кассового модуля адаптация системы под требования 54-ФЗ требует минимальных трудозатрат.