Разработка интерфейсов в среде 1С:Предприятие 7.7 часто сопряжена с определенными трудностями, особенно когда речь идет о формах с огромным количеством реквизитов. Одной из типичных задач является обеспечение удобного ввода длинных текстовых описаний (например, характеристик товара или содержания договора), когда стандартное поле на форме слишком мало для комфортной работы. В этой статье мы разберем несколько эффективных способов решения этой задачи: от простых стандартных функций до архитектурных изменений формы.
Рассмотрим самый быстрый и простой способ — вызов стандартного модального окна для ввода текста. Этот метод идеально подходит, если вы не хотите менять структуру слоев формы, но пользователю нужно периодически вводить или редактировать большой объем данных.
Проанализируем ситуацию: у нас есть реквизит Описание. Мы можем разместить рядом с ним небольшую кнопку (например, с картинкой или текстом "..."). В формуле этой кнопки пропишем вызов функции. Разберем по шагам реализацию в модуле формы:
Процедура ВвестиБольшойТекст()
// Создаем переменную для хранения текста
Перем ТекстДляРедактирования;
ТекстДляРедактирования = Описание;
// Вызываем стандартное окно ввода
// Параметр 1 — многострочный режим (0 - нет, 1 - да)
Если ВвестиСтроку(ТекстДляРедактирования, "Введите описание товара", 0, 1) = 1 Тогда
Описание = ТекстДляРедактирования;
КонецЕсли;
КонецПроцедуры
Функция ВвестиСтроку позволяет открыть отдельное окно, которое пользователь может растягивать, что значительно упрощает работу с текстом из нескольких абзацев. Важно отметить, что четвертый параметр функции, установленный в значение 1, как раз отвечает за многострочность.
Если вы хотите сделать интерфейс более профессиональным и избежать загромождения формы лишними кнопками, воспользуемся стандартным механизмом «педальки» (кнопки выбора) у самого текстового поля. Для этого в свойствах реквизита на форме необходимо установить галочку "Имеет кнопку выбора".
После этого мы сможем использовать предопределенную процедуру ПриНачалеВыбораЗначения. Рассмотрим пример кода:
Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога, ФлагСтандОбр)
Если ИдентЭлемДиалога = "Описание" Тогда
// Отключаем стандартную обработку выбора (так как для строки ее нет)
ФлагСтандОбр = 0;
// Вызываем наше окно редактирования
ВвестиСтроку(Описание, "Редактирование описания", 0, 1);
КонецЕсли;
КонецПроцедуры
Выясним причину, по которой этот метод удобнее: пользователю не нужно искать специальную кнопку, достаточно нажать на привычную кнопку выбора прямо в поле ввода. Чтобы предотвратить случайное удаление текста в узком поле на основной форме, вы можете дополнительно установить свойство "Только просмотр" для этого элемента диалога — тогда редактирование будет возможно исключительно через широкое окно ввода.
Проанализируем ситуацию, когда данных настолько много, что форма превращается в "привет из 90-х". В этом случае лучшим решением будет использование механизма слоев. Это позволит разгрузить основную закладку и выделить под текстовое поле практически всю площадь формы.
Рассмотрим алгоритм действий:
ОписаниеТовара.Такой подход считается "золотым стандартом" в типовых конфигурациях (например, "Торговля и Склад 7.7"), так как он не требует открытия дополнительных модальных окон и позволяет видеть текст в контексте всей формы.
Для продвинутых задач, когда объема стандартной строки (даже неограниченной длины) не хватает или требуется внешнее форматирование, программисты часто используют метод временного файла. Посмотрим на пример логики:
1. При нажатии кнопки текст выгружается во временный файл .txt с помощью объекта Текст.
Т = СоздатьОбъект("Текст");
Т.ДобавитьСтроку(Описание);
Т.Записать(КаталогВременныхФайлов() + "desc.txt");
2. Файл открывается внешним редактором через ЗапуститьПриложение.
3. После редактирования текст загружается обратно. Этот метод позволяет использовать возможности полноценных текстовых редакторов.
При работе с большими текстами в 1С 7.7 следует помнить о нескольких особенностях:
Симв(13) + Симв(10). В "семерке" одиночный символ перевода строки может отображаться как пустой квадрат или не отрабатывать вовсе..DBT, что позволяет не "раздувать" основной файл таблицы.ВвестиСтроку или отдельного слоя с растянутым полем является критически важным для проверки полноты данных.Подводя итог, мы проанализировали три основных подхода. Для быстрой правки "на лету" идеально подходит ВвестиСтроку, для эстетичного интерфейса — ПриНачалеВыбораЗначения, а для серьезной работы с большими описаниями — разделение формы на слои. Выбор зависит от конкретных задач ваших пользователей и загруженности текущей формы реквизитами.