Часто в процессе автоматизации торговых операций возникает потребность создать рабочее место (АРМ), в котором менеджер мог бы видеть список всех активных заявок, «протыкивать» нужные позиции и на их основе массово создавать заказы поставщикам. Разберем, как правильно подойти к этой задаче с точки зрения архитектуры платформы 1С:Предприятие 8.3.
Первое, что важно понять: отчеты в 1С предназначены для анализа данных и вывода печатных форм. Использовать отчет как интерактивный инструмент для транзакционных действий (создания документов) — плохая практика. Вместо этого лучше создать отдельную форму (в составе внешней обработки или конфигурации), где данные будут выводиться в специализированный элемент управления, такой как Дерево значений.
Для создания полноценного функционала мы рекомендуем придерживаться следующей последовательности действий:
При написании кода важно учитывать разделение на клиентский и серверный контекст. Одной из частых ошибок является попытка обращения к Элементы на сервере. Рассмотрим, как правильно организовать получение данных из списка заявок.
Сначала мы получаем список выделенных строк на клиенте, а затем передаем их в серверную функцию:
&НаКлиенте
Процедура СформироватьЗаказ(Команда)
ВыделенныеСтроки = Элементы.СписокЗаявок.ВыделенныеСтроки;
ПолучитьДанныеНаСервере(ВыделенныеСтроки);
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеНаСервере(МассивСсылок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Заявка.нса_Материалы.(
| нса_Номенклатура,
| нса_Количество,
| Ссылка
| ) КАК Материалы
|ИЗ
| Документ.Расш1_Заявка КАК Заявка
|ГДЕ
| Заявка.Ссылка В(&МассивСсылок)";
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Результат = Запрос.Выполнить();
// Обработка результата и помещение в Дерево значений
КонецФункции
Чтобы данные из запроса появились на экране, недостаточно просто выполнить запрос. Вам необходимо выгрузить результат в Дерево значений, а затем обновить данные формы. Для этого используйте метод ЗначениеВРеквизитФормы. Обратите внимание, что целевой реквизит на форме должен иметь соответствующие колонки, иначе платформа не сможет отобразить данные.
Для выгрузки результата запроса в дерево удобнее всего использовать метод:
Результат.Выгрузить(ОбходРезультатаЗапроса.Дерево)
Если ваша конфигурация позволяет, рассмотрите возможность использования типового механизма Обработка заполнения. Вместо того чтобы вручную прописывать логику создания каждого объекта, вы можете передать массив выбранных позиций в новый документ ЗаказПоставщику. В этом случае стандартный метод ОбработкаЗаполнения автоматически подхватит номенклатуру, количество и единицы измерения, что значительно сэкономит время разработки и избавит от потенциальных ошибок.
Также перед началом разработки рекомендуем проверить наличие встроенного функционала «Формирование заказов по потребностям», если вы работаете в типовых конфигурациях (УТ, ERP, КА). Часто подобные задачи уже решены разработчиками фирмы 1С и требуют лишь правильной настройки, а не написания кода с нуля.
Подводя итог, можно сказать, что создание АРМ — это задача по правильной организации взаимодействия пользователя с данными. Используйте Дерево значений для визуализации, разделяйте логику получения данных и интерфейсную часть, и всегда старайтесь использовать стандартные механизмы заполнения документов. Это сделает вашу систему более устойчивой, понятной для поддержки и легкой в обновлении.