Как сохранить строку неограниченной длины и вставить защищенную секцию в печатную форму в 1С 7.7

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

При разработке и сопровождении конфигураций на платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с техническими ограничениями платформы. Одной из типичных задач является сохранение текста неограниченной длины (например, рекламной информации или описаний) в константах, а также безопасная подстановка такого текста или специальной секции макета в печатную форму товарного чека без возможности редактирования на кассах. Проанализируем, как решить обе эти задачи.

Ограничения платформы 1С 7.7 при работе с константами

В платформе 1С 7.7 тип данных константы имеет строгое ограничение по длине строки (максимум 255 символов). Тип неограниченной длины (Memo-поля) стандартно доступен только для реквизитов справочников или документов. Рассмотрим основные практические варианты обхода этого ограничения.

Способ 1. Хранение длины через служебный справочник

Наиболее удобным архитектурным решением является создание специального справочника. Разберем порядок действий по шагам:

  1. В конфигураторе создадим служебный справочник (например, Сообщения или ТекстовыеКонстанты).
  2. Добавим в данный справочник реквизит типа Строка неограниченной длины (текстовое поле).
  3. Для константы укажем тип данных Справочник.Сообщения.
  4. В режиме 1С:Предприятие создадим необходимый элемент и выберем его в качестве значения константы.

При необходимости получить текст в коде используем следующее обращение:

ТекстРекламы = Константа.РекламныйТекст.РеквизитТекст;

Способ 2. Хранение текста во внешнем файле или использование функции ЗначениеВФайл

Разберем вариант работы с текстовыми файлами через встроенный объект Текст или системные процедуры сохранения значений.

Для загрузки текста из внешнего файла можно применить следующий код:


ОбъектТекст = СоздатьОбъект("Текст");
ОбъектТекст.Открыть(КаталогИБ() + "ExtFiles\PromoText.txt");
ТекстРекламы = "";
Для Сч = 1 По ОбъектТекст.КоличествоСтрок() Цикл
    ТекстРекламы = ТекстРекламы + ОбъектТекст.ПолучитьСтроку(Сч) + Симв(13) + Симв(10);
КонецЦикла;

Также платформа позволяет выгружать переменные на диск с помощью функций ЗначениеВФайл и ЗначениеИзФайла.

Способ 3. Кодирование текста в Base64 или хранение в модуле

Если текст редко меняется и его требуется надежно защитить от редактирования на местах, рассмотрим хранение закодированной строки в модуле формы или глобальном модуле (например, в формате Base64). В этом случае константы вовсе не используются, а текст декодируется динамически при вызове печатной формы.

Защита рекламного макета и вывод секции в товарный чек

Вторая часть задачи заключается в том, чтобы вставить готовую секцию макета (например, с рекламной информацией от центрального офиса) в итоговый товарный чек так, чтобы кассиры или другие пользователи не могли внести изменения в отредактированный документ.

Выясним основные способы решения этой проблемы:

  1. Вшивание макета в файл конфигурации (MD): Создаем единый общий макет в конфигураторе. Пользователь без прав на изменение конфигурации не сможет поправить его содержимое.
  2. Использование нескольких объектов таблиц: Создаем отдельный объект Таблица для загрузки внешнего или служебного макета рекламного блока и выводим его секцию в основную таблицу печатной формы.
  3. Установка защиты печатной формы: Применяем методы запрета редактирования выведенного документа.

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


ТабОсновная = СоздатьОбъект("Таблица");
ТабОсновная.ИсходнаяТаблица("Чек");
ТабОсновная.ВывестиСекцию("Шапка");
ТабОсновная.ВывестиСекцию("Строка");

// Подключаем макет рекламного блока
ТабРеклама = СоздатьОбъект("Таблица");
ТабРеклама.ИсходнаяТаблица("МакетРекламы");
ТабОсновная.ВывестиСекцию(ТабРеклама.ПолучитьСекцию("СекцияРеклама"));

ТабОсновная.ВывестиСекцию("Подвал");

// Блокируем редактирование ячеек пользователем
ТабОсновная.ТолькоПросмотр(1);
ТабОсновная.Защита(1);
ТабОсновная.Показать("Товарный чек");

Использование методов ТолькоПросмотр(1) и Защита(1) гарантирует, что сформированный документ нельзя отредактировать вручную перед печатью прямо на рабочем месте кассира.

← На главную