Как вывести таблицу номенклатуры в управляемой форме внешней обработки 1С 8.3 УНФ 3 вместо поля ввода?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой
← На главную

Переход от обычных форм к управляемым в платформе 1С:Предприятие версии 8.3 стал стандартом и принес множество изменений в разработке и пользовательском опыте. Одной из частых трудностей, с которой сталкиваются разработчики, особенно при миграции или создании новых внешних обработок, является правильное отображение табличных данных, например, списка номенклатуры. Если в обычных формах мы могли просто «вытянуть» табличную часть или справочник на форму, то в управляемых формах этот подход часто приводит к отображению данных в виде обычного поля ввода. Давайте подробно разберем, как правильно вывести таблицу номенклатуры во внешней обработке 1С 8.3 УНФ 3 и какие инструменты нам для этого понадобятся.

Наш основной помощник в этом вопросе – это элемент "Динамический список". Мы рассмотрим его возможности и пошагово покажем, как его настроить. Также обсудим, чем управляемые формы принципиально отличаются от обычных, чтобы глубже понять суть проблемы и решения.

Основные отличия управляемых форм от обычных форм в 1С:Предприятии

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

  1. Гибкость клиента: Обычные формы были привязаны к "толстому клиенту", что ограничивало возможности развертывания системы. Управляемые же формы универсальны и поддерживают работу в различных клиентских приложениях:
    • Тонкий клиент
    • Веб-клиент
    • Мобильное приложение

    Это обеспечивает унифицированное и адаптивное представление данных независимо от используемого устройства или способа доступа.

  2. Разделение кода на клиентский и серверный: В управляемых формах код явно разделен на выполняемый на клиенте и на сервере. Для этого используются специальные директивы, такие как &НаСервере и &НаКлиенте. Это позволяет оптимизировать производительность и безопасность, а также более четко структурировать логику приложения. Мы должны всегда помнить, что данные из базы данных доступны только на сервере, поэтому для их получения или записи часто приходится обращаться к серверным вызовам.
  3. Использование параметров форм: Для управления функциональностью формы при ее открытии в управляемых формах используются параметры. Это отличается от прямого присваивания значений реквизитам формы в обычных формах. Такой подход делает формы более модульными и переиспользуемыми.
  4. Расширенная пользовательская настройка: Управляемые формы предоставляют пользователям широкие возможности по настройке своего рабочего пространства. Мы можем управлять отображением разделов, команд, расположением панелей, а также составом и порядком полей. Это значительно повышает удобство работы для конечного пользователя, позволяя ему адаптировать интерфейс под свои задачи.

Именно эти различия требуют нового подхода к отображению табличных данных, где "Динамический список" становится ключевым элементом.

Использование элемента "Динамический список" для вывода номенклатуры

"Динамический список" – это мощный реквизит управляемой формы, предназначенный для вывода данных. Он идеально подходит для отображения больших массивов информации, таких как справочники (например, номенклатура), документы или произвольные выборки из базы данных. Мы рассмотрим пошаговую инструкцию по его созданию и настройке.

  1. Создаем реквизит формы типа "ДинамическийСписок":

    Для начала нам необходимо добавить в форму внешний обработки новый реквизит. Давайте сделаем это следующим образом:

    1. Открываем форму нашей внешней обработки в конфигураторе.
    2. Переходим на вкладку "Реквизиты".
    3. Добавляем новый реквизит.
    4. В свойствах нового реквизита указываем его имя (например, СписокНоменклатуры) и выбираем тип данных "ДинамическийСписок".

    Создание этого реквизита является основой для дальнейшей работы.

  2. Настраиваем источник данных для "Динамического списка":

    После создания реквизита, нам нужно указать, откуда он будет брать данные. Существует два основных способа:

    1. Указание "Основной таблицы":

      Это самый простой способ, если мы хотим вывести данные из одного справочника, документа или регистра. Давайте сделаем следующее:

      • Выделяем наш реквизит СписокНоменклатуры.
      • В окне "Свойства" находим свойство "Основная таблица".
      • Нажимаем кнопку выбора и в открывшемся списке выбираем метаданный "Справочник.Номенклатура".

      Таким образом, динамический список автоматически будет отображать все элементы справочника "Номенклатура". Это очень удобно, если нам не нужны сложные фильтры или соединения.

    2. Написание произвольного текста запроса:

      Этот способ предоставляет гораздо большую гибкость и контроль над тем, какие данные будут отображаться. Мы можем:

      • Выбрать конкретные поля из справочника "Номенклатура".
      • Выполнить соединения с другими таблицами, например, для получения текущих цен (из регистра сведений "ЦеныНоменклатуры") или остатков (из регистра накопления "ТоварыНаСкладах").
      • Применить сложную логику выборки, фильтрации и сортировки данных.

      Давайте рассмотрим пример простого запроса для получения номенклатуры с ее артикулом и видом номенклатуры:

      
      ВЫБРАТЬ
          Номенклатура.Ссылка,
          Номенклатура.Код,
          Номенклатура.Наименование,
          Номенклатура.Артикул,
          Номенклатура.ВидНоменклатуры
      ИЗ
          Справочник.Номенклатура КАК Номенклатура
      

      Этот запрос мы должны будем указать в свойстве "Запрос" нашего динамического списка.

  3. Размещаем "Динамический список" на форме:

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

    1. Переходим на вкладку "Элементы" в редакторе формы.
    2. В палитре элементов находим и перетаскиваем на форму элемент "Таблица".
    3. В окне "Свойства" для этого элемента таблицы находим свойство "Путь к данным" и выбираем наш реквизит СписокНоменклатуры.
    4. После этого, система автоматически предложит добавить колонки для всех полей, определенных в "Основной таблице" или в запросе динамического списка. Мы можем выбрать нужные колонки и настроить их порядок и заголовки.

    Особенность "Динамического списка" заключается в том, что он будет автоматически порционно считывать данные по мере навигации пользователя, что очень эффективно для работы с большими объемами информации.

  4. Расширенные возможности "Динамического списка":

    Помимо базового отображения, "Динамический список" предоставляет множество дополнительных функций:

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

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

Программный вывод произвольных табличных данных с использованием "Таблицы значений"

В некоторых случаях нам может потребоваться вывести на форму данные, которые не привязаны напрямую к объектам метаданных или требуют сложной обработки на сервере. В таких ситуациях мы можем использовать "Таблицу значений". Это несохраняемый в базе данных объект, который позволяет динамически формировать наборы значений.

Давайте рассмотрим, как это сделать:

  1. Создаем реквизит формы типа "ТаблицаЗначений":

    Подобно "Динамическому списку", нам сначала потребуется реквизит формы:

    • Добавляем новый реквизит формы.
    • Присваиваем ему имя (например, МояТаблицаДанных) и выбираем тип "ТаблицаЗначений".

    Этот реквизит будет служить контейнером для наших данных.

  2. Программно заполняем "Таблицу значений":

    Самое интересное здесь – это программное заполнение. Обычно эти действия выполняются на сервере, например, в обработчике события формы ПриСозданииНаСервере или в команде формы. Давайте посмотрим на пример:

    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        // Добавляем колонки в таблицу значений
        МояТаблицаДанных.Колонки.Добавить("КодНоменклатуры", Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(9)));
        МояТаблицаДанных.Колонки.Добавить("НаименованиеНоменклатуры", Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(100)));
        МояТаблицаДанных.Колонки.Добавить("ЦенаПродажи", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
    
        // Пример заполнения данными (можно использовать запрос)
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    Номенклатура.Код КАК Код,
            |    Номенклатура.Наименование КАК Наименование,
            |    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
            |        ПО Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура";
    
        РезультатЗапроса = Запрос.Выполнить().Выгрузить();
                
        // Переносим данные из результата запроса в таблицу значений формы
        Для Каждого СтрокаЗапроса Из РезультатЗапроса Цикл
            НоваяСтрока = МояТаблицаДанных.Добавить();
            НоваяСтрока.КодНоменклатуры = СтрокаЗапроса.Код;
            НоваяСтрока.НаименованиеНоменклатуры = СтрокаЗапроса.Наименование;
            НоваяСтрока.ЦенаПродажи = СтрокаЗапроса.Цена;
        КонецЦикла;
    
    КонецПроцедуры
    

    В этом примере мы сначала определяем структуру нашей таблицы значений, добавляя необходимые колонки с их типами, а затем заполняем ее данными, полученными с помощью запроса.

  3. Создаем на форме элемент типа "ТаблицаФормы" и связываем его с реквизитом:

    Чтобы вывести нашу программно заполненную "Таблицу значений" на форму, мы должны сделать следующее:

    • Переходим на вкладку "Элементы" формы.
    • Добавляем элемент "Таблица".
    • В свойствах этого элемента в поле "Путь к данным" указываем наш реквизит МояТаблицаДанных.
    • После этого вручную добавляем колонки в элемент "Таблица" на форме, соответствующие колонкам нашей "Таблицы значений" (например, КодНоменклатуры, НаименованиеНоменклатуры, ЦенаПродажи), и настраиваем их заголовки.

    Таким образом, мы получаем полностью контролируемую нами таблицу с данными.

Внешние обработки в 1С:УНФ 3

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

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

Мы видим, что в мире управляемых форм 1С 8.3 подход к отображению табличных данных кардинально изменился. Элемент "Динамический список" является основным и наиболее эффективным инструментом для вывода информации из базы данных в виде таблицы, позволяя гибко настраивать источник данных и внешний вид. В то же время, "Таблица значений" предоставляет полный программный контроль для вывода произвольных данных. Освоив эти механизмы, мы сможем эффективно создавать функциональные и удобные внешние обработки для 1С:УНФ 3 и других конфигураций на управляемых формах.

← На главную