Новый запрос и новая таблица значений как функции
Предлагается две простые функции, использование которых уменьшает объем кода в конфигурациях на платформе «1С:Предприятие 8». Эти функции можно добавлять к своему общему модулю, что сделает процесс программирования более эффективным.
- Описание
- Подробнее
Описание
Программы на языке программирования платформы «1С:Предприятие» довольно многословны. В них часто повторяются одни и те же шаблоны. Например, постоянно приходится видеть повторение конструкций вида:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«ИмяПараметра1», ЗначениеПараметра1);
…
Запрос.УстановитьПараметр(«ИмяПараметраN», ЗначениеПараметраN);
Запрос.Текст = «ВЫБРАТЬ … «;
Или конструкций вида:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(ИмяКолонки1);
…
ТЗ.Колонки.Добавить(ИмяКолонкиN);
Для ускорения ввода конструкций языка по шаблонам есть соответствующие средства. Однако существует и другой путь справиться со ставшей уже привычной избыточностью кода. Этот путь – использование функций.
Для получения готового к выполнению запроса можно использовать функцию:
Функция НовыйЗапрос(Текст, Параметры = 0) Экспорт
Результат = Новый Запрос(Текст);
Для Каждого Параметр Из Результат.НайтиПараметры() Цикл Результат.Параметры.Вставить(Параметр.Имя)
КонецЦикла;
Если Параметры <> 0 Тогда ЗаполнитьЗначенияСвойств(Результат.Параметры, Параметры)
КонецЕсли;
Возврат Результат
КонецФункции
Здесь параметрами является текст запроса и структура или объект, реквизиты которого содержат значения параметров запроса. В модуле объекта удобнее использовать в качестве параметра значение «ЭтотОбъект». А параметры запроса именовать также как реквизиты этого объекта.
Примеры использования функции:
Для получения количества всех элементов справочника можно использовать код:
ВсегоВНоменклатуре = НовыйЗапрос(«ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура»).Выполнить().Выгрузить().Количество();
Для получения таблицы значений из табличной части «Товары» документа «РеализацияТоваровИУслуг» можно использовать код:
Товары_ = НовыйЗапрос(«ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг.Товары ГДЕ Ссылка = &Ссылка», ЭтотОбъект).Выполнить().Выгрузить();
Также, например, в обработке заполнения табличной части для удаления строк с нулевой суммой в модуле объекта обработки достаточно будет записать такую короткую процедуру:
Процедура Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
Объект.Товары.Загрузить(
НовыйЗапрос(«ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг.Товары ГДЕ Ссылка = &Ссылка И Сумма > 0»
, Объект).Выполнить().Выгрузить())
КонецПроцедуры
Конечно, это только небольшая часть возможных примеров. После того, как использование этой функции входит в привычку, к обычному варианту через повторение «УстановитьЗначениеПараметра» возвращаться уже не хочется. В редких случаях, когда объекта-параметра с походящим набором свойств подобрать не удается, в качестве параметра можно использовать Новый Структура(«ИмяПараметра1, … «, ЗначениеПараметра1, … ). Все равно за счет возможности записать после функции через точку метод «Выполнить» код получается короче.
Для получения таблицы значений, имена колонок которой перечислены в строке через запятую, можно использовать функцию:
Функция НоваяТаблицаЗначений(ИменаКолонокЧерезЗапятую) Экспорт
Результат = Новый ТаблицаЗначений;
Для Каждого Элемент Из Новый Структура(ИменаКолонокЧерезЗапятую) Цикл Результат.Колонки.Добавить(Элемент.Ключ)
КонецЦикла;
Возврат Результат
КонецФункции
Пример использования функции:
ВзаимоРасчетыФИФО = НоваяТаблицаЗначений(«ДокументОтгрузки, ДокументОплаты, Сумма»);

