При разработке и сопровождении конфигураций на платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с техническими ограничениями платформы. Одной из типичных задач является сохранение текста неограниченной длины (например, рекламной информации или описаний) в константах, а также безопасная подстановка такого текста или специальной секции макета в печатную форму товарного чека без возможности редактирования на кассах. Проанализируем, как решить обе эти задачи.
В платформе 1С 7.7 тип данных константы имеет строгое ограничение по длине строки (максимум 255 символов). Тип неограниченной длины (Memo-поля) стандартно доступен только для реквизитов справочников или документов. Рассмотрим основные практические варианты обхода этого ограничения.
Наиболее удобным архитектурным решением является создание специального справочника. Разберем порядок действий по шагам:
Сообщения или ТекстовыеКонстанты).Строка неограниченной длины (текстовое поле).Справочник.Сообщения.При необходимости получить текст в коде используем следующее обращение:
ТекстРекламы = Константа.РекламныйТекст.РеквизитТекст;
Разберем вариант работы с текстовыми файлами через встроенный объект Текст или системные процедуры сохранения значений.
Для загрузки текста из внешнего файла можно применить следующий код:
ОбъектТекст = СоздатьОбъект("Текст");
ОбъектТекст.Открыть(КаталогИБ() + "ExtFiles\PromoText.txt");
ТекстРекламы = "";
Для Сч = 1 По ОбъектТекст.КоличествоСтрок() Цикл
ТекстРекламы = ТекстРекламы + ОбъектТекст.ПолучитьСтроку(Сч) + Симв(13) + Симв(10);
КонецЦикла;
Также платформа позволяет выгружать переменные на диск с помощью функций ЗначениеВФайл и ЗначениеИзФайла.
Если текст редко меняется и его требуется надежно защитить от редактирования на местах, рассмотрим хранение закодированной строки в модуле формы или глобальном модуле (например, в формате Base64). В этом случае константы вовсе не используются, а текст декодируется динамически при вызове печатной формы.
Вторая часть задачи заключается в том, чтобы вставить готовую секцию макета (например, с рекламной информацией от центрального офиса) в итоговый товарный чек так, чтобы кассиры или другие пользователи не могли внести изменения в отредактированный документ.
Выясним основные способы решения этой проблемы:
Таблица для загрузки внешнего или служебного макета рекламного блока и выводим его секцию в основную таблицу печатной формы.Рассмотрев пример реализации в коде, можно совместить вывод основной таблицы и защищенного рекламного блока:
ТабОсновная = СоздатьОбъект("Таблица");
ТабОсновная.ИсходнаяТаблица("Чек");
ТабОсновная.ВывестиСекцию("Шапка");
ТабОсновная.ВывестиСекцию("Строка");
// Подключаем макет рекламного блока
ТабРеклама = СоздатьОбъект("Таблица");
ТабРеклама.ИсходнаяТаблица("МакетРекламы");
ТабОсновная.ВывестиСекцию(ТабРеклама.ПолучитьСекцию("СекцияРеклама"));
ТабОсновная.ВывестиСекцию("Подвал");
// Блокируем редактирование ячеек пользователем
ТабОсновная.ТолькоПросмотр(1);
ТабОсновная.Защита(1);
ТабОсновная.Показать("Товарный чек");
Использование методов ТолькоПросмотр(1) и Защита(1) гарантирует, что сформированный документ нельзя отредактировать вручную перед печатью прямо на рабочем месте кассира.