При работе с интернет-магазинами или крупными каталогами в 1С:УТ 11.4 штатный функционал работы с изображениями часто оказывается недостаточным. Пользователям требуется наглядный интерфейс, где можно быстро оценить состав галереи товара, изменить порядок фотографий простым перетаскиванием или назначить главную картинку. В этой статье мы разберем, как создать собственный редактор картинок, обойдя стандартные ограничения платформы 1С.
Первое, что приходит в голову при разработке такого инструмента — использовать ДинамическийСписок или ТаблицуЗначений. Однако на практике разработчики сталкиваются с серьезной проблемой: свойство Масштаб и РазмерКартинки в ячейках таблиц часто ведет себя непредсказуемо. Рассмотрим основные сложности:
Для решения этих задач проанализируем альтернативные способы реализации интерфейса.
Вместо использования жесткой структуры таблицы мы можем использовать Реквизит формы типа ТаблицаЗначений, но визуализировать данные через динамически создаваемые группы и поля. Проанализируем ситуацию: для каждой номенклатуры мы можем программно создавать горизонтальную группу, внутри которой будут располагаться элементы типа ПолеФормы с видом ПолеКартинки.
Пример логики формирования такого интерфейса:
// Пройдем в цикле по выбранным товарам
Для Каждого СтрокаТовара Из СписокНоменклатуры Цикл
ИмяГруппы = "Группа_Товар_" + СтрокаТовара.УникальныйИдентификатор;
НоваяГруппа = Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), ЭтаФорма.Элементы.ГруппаКаталог);
НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
// Добавляем 8 ячеек для картинок
Для Индекс = 1 По 8 Цикл
ИмяПоля = ИмяГруппы + "_Картинка_" + Индекс;
НовоеПоле = Элементы.Добавить(ИмяПоля, Тип("ПолеФормы"), НоваяГруппа);
НовоеПоле.Вид = ВидПоляФормы.ПолеКартинки;
НовоеПоле.ПутьКДанным = "Объект.Картинки[" + Индекс + "].Данные";
КонецЦикла;
КонецЦикла;
Такой подход позволяет зашить в имя элемента индекс картинки и идентификатор товара, что упрощает обработку событий нажатия и перетаскивания.
Это наиболее современный и гибкий способ. Мы можем вывести всю таблицу товаров и их изображений через ПолеHTMLДокумента. Разберем преимущества этого метода:
Для реализации этого метода нам нужно подготовить HTML-шаблон и передать в него данные в формате JSON или через навигационные ссылки 1С.
Выясним, как правильно взаимодействовать с хранилищем файлов в конфигурации. В УТ 11.4 изображения хранятся в справочнике НоменклатураПрисоединенныеФайлы.
При смене порядка картинок в вашем редакторе важно помнить о реквизите ФайлКартинки в самой карточке Номенклатура. Рассмотрим алгоритм сохранения изменений:
НоменклатураПрисоединенныеФайлы.ФайлКартинки объекта Номенклатура.Посмотрим на пример кода для получения навигационной ссылки, которую удобно использовать в ПолеHTMLДокумента или в динамических элементах:
// Получение ссылки для отображения на форме
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(ОбъектПрисоединенныйФайл, "ДанныеФайла");
// Эту ссылку можно напрямую присваивать пути к данным ПоляКартинки
Современные версии платформы 8.3 позволяют значительно упростить жизнь пользователю. Разберем, как добавить поддержку вставки из буфера:
Используйте событие ПриВставке для элемента формы. Это позволит пользователю просто скопировать картинку в браузере или графическом редакторе и нажать Ctrl+V прямо в ячейку вашего редактора. Платформа преобразует данные буфера в объект Картинка, который вы затем сохраните как новый присоединенный файл.
Также рекомендуем реализовать «миниатюры» на лету. Чтобы форма не зависала, при загрузке картинок в редактор их можно программно уменьшать, используя метод ОбработатьКартинку(). Это создаст легкие копии только для отображения в таблице редактора.
Важный момент: если вы решите реализовать решение через стандартную таблицу, как предлагалось в обсуждении, используйте «кружочки» или цветовые индикаторы наличия фото вместо самих фото для очень больших списков, и подгружайте превью только при активизации строки. Это компромиссный вариант, если бюджет разработки сильно ограничен.
Создание качественного редактора изображений в 1С — это задача на стыке проектирования интерфейсов и оптимизации работы с БД. Наилучший результат дает сочетание программного создания элементов формы для управления логикой 1С и использования механизмов платформы для прямой работы с буфером обмена. Если же требуется максимальная визуальная эстетика — выбирайте путь интеграции с HTML.