Как реализовать указание размеров прямо на чертеже в 1С (обычные формы)

Программист 1С v8.3 (Обычные формы)
← На главную

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

Метод 1: Использование табличного документа и графических объектов

Самый доступный и быстрый способ реализации — это использование Табличного документа. Этот объект позволяет не только выводить текст, но и размещать поверх ячеек графические элементы (рисунки). Проанализируем, как настроить такой интерфейс по шагам.

Шаг 1. Создание макета чертежа

Для начала создадим Макет в обработке или документе. В этом макете мы размещаем основной чертеж. Важно понимать, что сам чертеж может быть статичной картинкой, а области для ввода параметров мы наложим сверху. Разберем два варианта размещения зон ввода:

  1. Ячейки таблицы: Если чертеж можно вписать в сетку, ввод данных в обычные ячейки — самый простой путь.
  2. Графические объекты (Рисунки): Если подписи должны располагаться под углом или в специфических местах, используем объект типа РисунокТабличногоДокумента с типом Текст.

Шаг 2. Настройка интерактивности

Чтобы пользователь мог редактировать текст в рисунке, необходимо в свойствах рисунка на макете (или программно) установить флаг Разрешить редактирование. Проанализируем ситуацию: когда пользователь открывает форму, он видит табличный документ. Нам нужно вывести его программно:


// Пример вывода макета на форму
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
Макет = ПолучитьМакет("ЧертежСРазмерами");
ОбластьЧертеж = Макет.ПолучитьОбласть("ОсновнаяЧасть");
ТабДок.Вывести(ОбластьЧертеж);
ТабДок.ТолькоПросмотр = Ложь; // Разрешаем редактирование для ввода данных

Как получить введенные пользователем данные

После того как пользователь ввел значения (например, "500 мм") в текстовые блоки на чертеже, нам нужно считать эти данные для записи в базу. Выясним, как обратиться к этим значениям. Каждый рисунок в табличном документе имеет имя. Если мы назвали объект D2, то доступ к нему в модуле формы будет выглядеть следующим образом:


// Получение значения из конкретного графического объекта
ВведеннаяДлина = ЭтаФорма.ТабДок.Рисунки.D2.Текст;
Сообщить("Пользователь ввел длину: " + ВведеннаяДлина);

Если на чертеже много параметров, мы можем обойти их все в цикле, чтобы не обращаться к каждому по имени:


Для Каждого ТекРисунок Из ТабДок.Рисунки Цикл
    Если Найти(ТекРисунок.Имя, "Размер_") > 0 Тогда
        // Сохраняем введенное значение в структуру или регистр
        ЗначениеРазмера = ТекРисунок.Текст;
        // Логика сохранения...
    КонецЕсли;
КонецЦикла;

Визуальное оформление и проверка заполнения

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

  1. При формировании чертежа устанавливаем серый фон или особый цвет шрифта для "пустых" параметров.
  2. В процессе работы (или перед сохранением) проверяем заполненность и меняем оформление.

Для ячеек таблицы это реализуется свойством ЦветФона, а для рисунков — свойствами линии и текста. Посмотрим на пример кода:


// Изменение цвета рисунка при проверке
Рисунок = ТабДок.Рисунки.D2;
Если ПустаяСтрока(Рисунок.Текст) Тогда
    Рисунок.ЦветТекста = ЦветаСтиля.ТекстВторостепеннойНадписи; // Серый
Иначе
    Рисунок.ЦветТекста = WebЦвета.Черный;
КонецЕсли;

Альтернативные способы реализации

Если задача требует более сложной графики (например, динамического изменения формы чертежа при вводе размеров), рассмотрим другие варианты:

1. Графическая схема (Graphical Schema)

В 1С существует объект Графическая схема. Хотя она предназначена для бизнес-процессов, ее можно использовать как холст. Она позволяет программно создавать линии, стрелки и текстовые блоки. Каждый элемент схемы имеет свойство Значение, куда можно сохранить дополнительные данные.

2. Поле HTML-документа и SVG

Для продвинутых решений разберем вариант с SVG. Мы можем сформировать XML-строку SVG-изображения и вывести ее в поле HTML-документа на форме 1С. Это дает полный контроль над визуализацией:

Для передачи данных обратно в 1С из HTML-поля обычно используется перехват события ПриНажатии или анализ навигации браузера.

3. Сохранение результата

Чтобы сохранить чертеж именно в том виде, в котором его заполнил пользователь (со всеми подписями), воспользуемся методом Записать() объекта ТабличныйДокумент. Выясним, какие форматы наиболее подходят:


// Сохранение в PDF для отправки клиенту
ПутьКФайлу = "C:\Drawings\Result.pdf";
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

// Сохранение во внутренний формат 1С для последующего редактирования
ТабДок.Записать(ПутьКФайлуMXL, ТипФайлаТабличногоДокумента.MXL);

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

Подведем итог: для реализации ввода размеров на обычных формах связка Табличный документ + Рисунки с типом Текст является наиболее оптимальной по соотношению "затраты/результат". Она не требует внешних компонент и легко поддерживается программистами 1С.

← На главную