Как правильно проверять заполнение реквизитов и организовать выбор нескольких складов в обработке 1С?

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

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

Проверка заполнения реквизитов в модуле объекта

Многие начинающие разработчики сталкиваются с тем, что привычная проверка Объект.Склад <> Неопределено не срабатывает. Причина кроется в архитектуре платформы: для ссылочных типов данных «пустым» состоянием является не Неопределено, а специальная Пустая ссылка. Попытка сравнения с Неопределено в данном контексте всегда будет приводить к ложному результату.

Для универсальной проверки любого реквизита — будь то строка, число, дата или ссылка — используйте встроенную функцию ЗначениеЗаполнено(). Она корректно обрабатывает все типы данных, возвращая Истина, если значение заполнено, и Ложь в противном случае.

Рассмотрим пример правильной проверки:


Если ЗначениеЗаполнено(Объект.Склад) Тогда
    // Действия, если склад выбран
Иначе
    // Вывод предупреждения пользователю
    Сообщить("Поле Склад не заполнено!");
КонецЕсли;

Важно помнить, что в контексте модуля объекта переменная Объект доступна всегда. Если вы получаете ошибку при обращении к Объект, проверьте, в каком модуле выполняется код. Если вы работаете в модуле команды или ином месте, где контекст объекта недоступен, сначала получите его с помощью метода РеквизитФормыВЗначение("Объект").

Реализация выбора нескольких складов

Если возникла необходимость выбирать не один, а несколько складов (или даже целую группу иерархии), стандартного реквизита с типом СправочникСсылка.Склады будет недостаточно. Оптимальное решение — использование реквизита формы с типом СписокЗначений.

  1. Создайте на форме реквизит (например, СписокСкладов) с типом СписокЗначений.
  2. В настройках типа элемента списка укажите СправочникСсылка.Склады.
  3. Для выбора пользователем используйте стандартный механизм добавления элементов в этот список на форме.

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

Использование иерархии в запросах

Когда пользователю нужно выбрать не только конкретные элементы, но и целые группы, мы используем оператор В ИЕРАРХИИ. Этот механизм позволяет платформе автоматически «развернуть» выбранную группу и включить в результат все вложенные элементы.

Пример кода для запроса:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Товары.Склад
    |ИЗ
    |   Справочник.Склады КАК Товары
    |ГДЕ
    |   Товары.Склад В ИЕРАРХИИ (&СписокСкладов)";

Запрос.УстановитьПараметр("СписокСкладов", СписокСкладов.ВыгрузитьЗначения());

Важные рекомендации по работе со списками:

Применяя эти простые методы, вы сделаете интерфейс своих обработок более гибким, а код — устойчивым к ошибкам. Помните, что ЗначениеЗаполнено() — ваш лучший помощник при проверке данных, а СписокЗначений в сочетании с В ИЕРАРХИИ — стандарт де-факто для реализации сложных отборов в системе 1С.

← На главную