Как настроить пробитие чеков на онлайн-кассе «Штрих-М» в 1С 7.7 «Торговля и Склад» и исправить ошибки отображения в чеке

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Переход на новые требования фискального законодательства (54-ФЗ) и новые форматы фискальных данных (ФФД 1.05 и 1.2) застал врасплох многих пользователей платформы 1С:Предприятие 7.7. Устаревшие конфигурации, такие как «Торговля и Склад» (ТиС), релиз 7.70.1001, не содержат полноценных современных инструментов для интеграции с онлайн-кассами «из коробки». Тем не менее, настроить стабильную работу со старой доброй версией 7.7 вполне реально. В этой статье мы подробно разберем, как правильно подключить онлайн-кассу семейства «Штрих-М» (включая популярные аппараты «Штрих-Лайт 2.0»), доработать программный код конфигурации для передачи обязательных реквизитов в ОФД и настроить внутренние таблицы кассы, чтобы избавиться от лишнего мусора в печатной форме чека.

Шаг 1. Выбор правильного типа торгового оборудования в 1С 7.7

Типичная ошибка при первоначальной настройке торгового оборудования в обновленной ТиС 1001 — выбор типа оборудования «ККМ онлайн». В терминологии старой платформы 1С 7.7 это понятие относилось к автономным кассовым аппаратам, которые работают в режиме периодического обмена («оффлайн/онлайн» выгрузка товаров и загрузка продаж). Если вы используете полноценный кассовый аппарат, подключенный непосредственно к компьютеру под управлением драйвера, вам необходимо настраивать его как фискальный регистратор.

Правильный алгоритм действий при настройке:

  1. Откройте меню Сервис — Настройка торгового оборудования.
  2. Перейдите на вкладку Фискальный регистратор (а не ККМ!).
  3. Укажите модель вашей кассы и выберите соответствующую обработку обслуживания (например, shrih-m_105.ert или ее обновленный аналог).
  4. Убедитесь, что в справочнике касс для вашей розничной торговой точки выбран признак «Касса ККМ (Фискальный регистратор)». При попытке пробивать розничные чеки по кассе с признаком обычного ФР в старых релизах программа может выдавать предупреждение, что чеки разрешены только для юридических лиц — именно поэтому правильная привязка типа кассы к розничному складу и пользователю критически важна.
  5. Убедитесь, что в настройках текущего пользователя по умолчанию выбран розничный склад и соответствующая касса ККМ.

Шаг 2. Доработка кода 1С 7.7 для отправки реквизитов по ФФД 1.05

Для того чтобы касса не просто печатала бумажную ленту, но и отправляла в ОФД все требуемые законом реквизиты (ФИО кассира, его ИНН, адрес отправки электронного чека покупателю, признак способа расчета), нам потребуется внести изменения в код проведения документа ЧекККМ и глобальный модуль системы.

Рассмотрим пример реализации функции пробития чека непосредственно в модуле документа ЧекККМ:


Функция ПробитьЧекНаККМ()
    Перем НомерЧека;
    
    СписокТоваров = СоздатьОбъект("ТаблицаЗначений");
    СписокТоваров.НоваяКолонка("ТовНаим"   , "Строка");
    СписокТоваров.НоваяКолонка("Цена"      , "Число");
    СписокТоваров.НоваяКолонка("ЦенаТЧ"     , "Число");
    СписокТоваров.НоваяКолонка("Количество", "Число");
    
    Если Продавец.Выбран() = 0 Тогда
        Предупреждение("Не выбран продавец!");
        Возврат 0;
    КонецЕсли;
    
    Если Продавец.Пароль = 0 Тогда
        Пароль = "30"; // Пароль системного администратора по умолчанию
    Иначе
        Пароль = Продавец.Пароль;
    КонецЕсли;  
    
    Если (ОплатаКартой = 1) и (ИтогоПоБанку = 0) Тогда
        Предупреждение("Введите сумму оплаты по банку!");
        Возврат 0;
    КонецЕсли;
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        СписокТоваров.НоваяСтрока();
        // Собираем наименование номенклатуры с артикулом для соответствия требованиям ФНС
        СписокТоваров.ТовНаим    = СокрЛП(Номенклатура.Артикул) + ":" + СокрЛП(Номенклатура.Наименование);
        СписокТоваров.Цена       = Сумма / ?(Количество = 0, 1, Количество);
        СписокТоваров.ЦенаТЧ     = Цена;
        СписокТоваров.Количество = Количество;
    КонецЦикла;
    
    ПризнВозврата = ?(ВидОперации = Перечисление.ВидыОперацийЧекККМ.Чек, 0, 1);
    
    // Вызываем глобальную функцию печати с расширенным списком параметров
    ЧекПробитККМ  = глФРПечататьЧек(СписокТоваров, Итог("Сумма"), Итог("Сумма"), Скидка.Процент, 
                                    ПризнВозврата, Склад.НомерСекции, НомерЧека, ОплатаКартой, 
                                    ТекущийДокумент(), Пароль, СокрЛП(Продавец.ИНН), 
                                    СокрЛП(КудаОтправитьЧек));
                                    
    Если ЧекПробитККМ = 1 Тогда
        ПриЗаписиПерепроводить(0);
        НомерЧекаККМ = НомерЧека;
        Записать();
        ПриЗаписиПерепроводить(1);
        
        // Откроем денежный ящик, если он подключен и настроен
        глДПОткрытьДенежныйЯщик();
    КонецЕсли;
    
    Возврат ЧекПробитККМ;
КонецФункции // ПробитьЧекНаККМ

Для обеспечения связи между документом и обработкой обслуживания кассы, проанализируем структуру глобальной функции глФРПечататьЧек, которую необходимо разместить в Глобальном модуле конфигурации:


Функция глФРПечататьЧек(СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека, ОплатаКартой = 0, Док = "", Пароль = "", ИННПродавца = "", КудаОтправитьЧек = "") Экспорт
    
    Рез = 0;
    
    Если глФРВкл = 1 Тогда
        Параметры = СоздатьОбъект("СписокЗначений");
        Параметры.Установить("Процесс"             , "печатать_чек");
        Параметры.Установить("Объект"              , глФР);
        
        Если ПустоеЗначение(Пароль) = 1 Тогда
            Параметры.Установить("ПарольПользователя", глФРПарольПользователя);
        Иначе 
            Параметры.Установить("ПарольПользователя", Пароль);
        КонецЕсли;
        
        Параметры.Установить("СписокТоваров"       , СписокТоваров);
        Параметры.Установить("СуммаЧека"          , СуммаЧека);
        Параметры.Установить("Получено"            , Получено);
        Параметры.Установить("Скидка"              , Скидка);
        Параметры.Установить("Возврат"             , ПризнВозврата);
        Параметры.Установить("НомерСекции"         , НомерСекции);
        Параметры.Установить("ПриемНаличныхОтЮрЛиц", глФРДляПриемаНаличныхОтЮрЛиц);
        Параметры.Установить("ОплатаКартой"        , ОплатаКартой);
        Параметры.Установить("Док"                 , Док);
        Параметры.Установить("ИННПродавца"         , ИННПродавца);
        Параметры.Установить("КудаОтправитьЧек"    , КудаОтправитьЧек);
        
        РезТекст = глОборудованиеКоманда("ФР", глФРОбработка, Параметры);
        
        Если ПустоеЗначение(РезТекст) = 0 Тогда
            Сообщить(РезТекст);
        Иначе
            Если Параметры.Получить("Результат") = 0 Тогда
                Сообщить("Фискальный регистратор: ошибка при печати чека");
                Сообщить(Параметры.Получить("ОписаниеРезультата"));
            Иначе
                НомерЧека = Параметры.Получить("НомерЧека");
                Рез = 1;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Возврат Рез;
КонецФункции // глФРПечататьЧек

Важное примечание по закрытию чека: Чтобы фискальный документ гарантированно уходил в ОФД, обработка обслуживания ККМ должна использовать метод драйвера FNCloseCheckEx() или последнюю версию метода CloseCheck(), которая полностью поддерживает фискальный накопитель и корректно передает все тэги ФФД.

Шаг 3. Решение проблемы с печатью символа «1.......» перед суммой (Номер секции)

Часто после успешного сопряжения 1С 7.7 и онлайн-кассы «Штрих-М» на бумажном чеке в строке итога по позиции начинает печататься непонятный символ 1....... [Сумма]. Выясним причину этого поведения.

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

Выполним отключение печати номера секции аппаратным методом через драйвер кассы:

  1. Закройте программу 1С:Предприятие 7.7 (чтобы освободить COM-порт).
  2. Запустите утилиту «Тест драйвера ФР» (обычно поставляется вместе с основным пакетом драйверов Штрих-М).
  3. Установите связь с вашей ККТ в меню «Настройка свойств».
  4. Перейдите в меню Таблицы (в правой части экрана или в левом списке разделов).
  5. Откройте двойным кликом Таблицу № 1 «Тип и режим кассы».
  6. Найдите строку (поле) с наименованием «Печать номера отдела» (или «Печать секции»).
  7. Замените текущее значение на 0 (отключено).
  8. Примените изменения и закройте таблицу. Теперь касса перестанет выводить секцию на чековую ленту.

Шаг 4. Решение проблемы с печатью символа «_г» после суммы (Код ставки НДС)

Еще один частый вопрос при настройке розничных продаж на спецрежимах — появление загадочной приписки _г (или _Г) в конце суммовой строки чека.

Проанализируем ситуацию: символ _г — это не системная ошибка 1С, а буквенный код ставки налога, запрограммированный в самом фискальном аппарате. Согласно стандартным таблицам Штрих-М:

Для розничного магазина на спецрежиме печать индекса _г выглядит неэстетично. Мы можем либо полностью отключить печать кода ставки налога, либо заменить букву на красивое текстовое обозначение «БЕЗ НДС».

Пошаговая настройка в Тесте драйвера ФР:

  1. Откройте утилиту «Тест драйвера ФР» и подключитесь к аппарату.
  2. Откройте раздел Таблицы.
  3. Найдите и откройте Таблицу № 17 «Региональные настройки».
  4. Обратите внимание на Поле 16 «Rus печать налога в операции» (в некоторых версиях прошивки поле может называться «Печать налога»). По умолчанию там установлено значение 2 (печать только буквенного кода налога).
  5. Измените это значение:
    • Установите 3, чтобы полностью убрать печать кодов налогов с чековой ленты. В строке чека останется только чистая сумма.
    • Установите 1, если вы хотите, чтобы вместо букв выводилось полноценное текстовое название налоговой ставки.
  6. Если вы выбрали значение 1, обязательно перейдите в Таблицу № 6 «Налоговые ставки» и убедитесь, что напротив строки 4 (группа «Г») прописан понятный текст, например, БЕЗ НДС или БЕЗ НАЛОГА.
  7. Сохраните изменения в таблицах ККТ.

Шаг 5. Настройка вывода реального ФИО кассира на кассе

Согласно требованиям Федерального закона № 54-ФЗ, в фискальном чеке обязательно должно фигурировать настоящее ФИО кассира (продавца), который осуществляет расчет. Оставлять значение по умолчанию «системный администратор» в рабочих условиях категорически запрещено налоговой службой.

Для того чтобы касса автоматически подставляла нужные имена при отправке команды из 1С 7.7, настроим таблицы кассиров:

  1. В «Тесте драйвера ФР» откройте Таблицу № 2 «Пароли кассиров и администраторов» (в некоторых прошивках — «Кассиры»).
  2. В этой таблице сопоставлены порядковые номера кассиров (от 1 до 30), их пароли доступа и имена. Пропишите реальные ФИО ваших продавцов напротив соответствующих строк. К примеру:
    • Строка 1 (Кассир 1): Пароль — 1, Имя — Иванова А.А.
    • Строка 2 (Кассир 2): Пароль — 2, Имя — Петрова Б.Б.
  3. В карточке физического лица (справочник «Сотрудники» или «Физические лица» в 1С) добавьте реквизит Пароль (тип Число) и укажите там пароль, соответствующий сотруднику в таблице кассы (например, для Ивановой — 1, для Петровой — 2).
  4. При вызове функции ПробитьЧекНаККМ() программа считает пароль выбранного продавца и передаст его в качестве аргумента на кассовый аппарат. Фискальный регистратор автоматически определит, под каким номером работает кассир, и напечатает на чеке правильное ФИО.

Таким образом, комбинируя небольшую доработку программного кода конфигурации «Торговля и Склад» 7.7 и правильную аппаратную настройку таблиц ККТ «Штрих-М» через тест драйвера, мы получаем полностью рабочее решение розничных продаж, соответствующее всем современным требованиям законодательства.

← На главную