Как запросы в цикле экономят бюджет клиента

Всем известна почти религиозная вера сотрудников 1С в то, что запросы в цикле — это зло.

А на практике очень даже не зло.

Вот например я делал платежный календарь и мне нужно было понять, какая часть заказа оплачена.

Для этого я использовал функцию:

Функция ОпределитьСуммуОплатыДляПлана(Период, Заказ, СуммаПлан) Экспорт
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	ТК.СуммаОплатыОборот КАК СуммаОплаты
	|ИЗ
	|	РегистрНакопления.ДвиженияДенежныеСредстваКонтрагент.Обороты(, &Дата2, , ОбъектРасчетов = &Заказ) КАК ТК");
	//Проверяем факт до даты планового платежа
	З.УстановитьПараметр("Дата2", Период);
	З.УстановитьПараметр("Заказ", Заказ);
	
	СуммаОплаты = 0;
	Выборка = З.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		СуммаОплаты = Выборка.СуммаОплаты;
	КонецЕсли;
	Если СуммаОплаты > 0 Тогда
		Результат = Макс(0, СуммаПлан - СуммаОплаты);
		Сообщить("По заказу: " + Заказ + " (" + Заказ.Партнер + ") плановая оплата: " +  СуммаПлан + " уменьшена на факт оплаты: " + СуммаОплаты + " Остаток: " + XMLСтрока(Результат));
		возврат Результат;
	КонецЕсли;
	
	Возврат СуммаПлан;
	
КонецФункции

Понятно, что эта функция вызывается для каждой даты оплаты по заказу. Казалось бы зло и настоящий адепт «всё делать через запросы» должен написать один общий запрос по всем заказам.

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

По трудоемкости это заняло бы лишний час.

А что мы видим по замеру производительности?

Оказывается, вызовы запроса по заказам занимают мало времени. Всего полсекунды на 13 запросов. Если в день планируется в кредит 20 заказов, а отсрочка заказов 10 дней, там максимум 200 заказов будет в плане. Т.е. 20 секунд максимум.

Жаль, что не всегда это можно объяснить аудиторам Fresh, которые молятся на единые запросы, как на «святую корову». Но тут слава богу не Fresh.

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

Среда: УТ 11.4.13.46

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. НастоящийПрограммист:

    А если планируется больше?

    • Мастерство программиста в выборе инструмента — что брать — лопату, самосвал или динамит.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *