Приветствую, Форумчане!
1с8.3.12, УФ, самопис
Имеется некий запрос объект, в модуле которого прописывается код поиска остатка позиций по Регистру накопления.
РезультатСЗ = Запрос.Выполнить().Выгрузить();
РезультатСЗ.Колонки.Добавить("ОстатокСклада", ОбщегоНазначения.ОписаниеТипаЧисло(15,2));
РезультатСЗ.Колонки.Добавить("Проблема", ОбщегоНазначения.ОписаниеТипаСтрока(100));
Для Каждого СТР Из РезультатСЗ Цикл
Если СТР.Параметр = "СТЛ" Тогда
СТР.ОстатокСклада = ОстатокСтел(СТР.Номенклатура, СТР.Модель, СТР.РазмерИзделия, СТР.ПолировкаИзделия, СТР.Склад, СТР.Период);
ИначеЕсли СТР.Параметр = "ОСН" Тогда
СТР.ОстатокСклада = ОстатокНоменклатуры(СТР.Номенклатура, СТР.РазмерИзделия, СТР.ПолировкаИзделия, СТР.Склад, СТР.Период);
ИначеЕсли СТР.Параметр = "ДОП" Тогда
СТР.ОстатокСклада = ОстатокДопов(СТР.Номенклатура, СТР.Склад, СТР.Период);
КонецЕсли;
КонецЦикла;
Функция ОстатокСтел(Номенклатура, Модель, Размер, Полировка, Склад, Период)
Результат = 0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвижениеТМЦОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ДвижениеТМЦ.Остатки(
| &Дата,
| Номенклатура = &Номенклатура
| И Модель = &Модель
| И Размеры = &Размеры
| И Полировка = &Полировка
| И Склад = &Склад) КАК ДвижениеТМЦОстатки
|ГДЕ
| ДвижениеТМЦОстатки.КоличествоОстаток > 0";
Запрос.УстановитьПараметр("Дата", Период);
Запрос.УстановитьПараметр("Модель", Модель);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Полировка", Полировка);
Запрос.УстановитьПараметр("Размеры", Размер);
Запрос.УстановитьПараметр("Склад", Склад);
.....................
КонецФункции
Я обычно в таких случаях определяю Мин/Макс период, беру остатки на Мин дату + обороты за интервал
Constantus @ Сегодня, 12:44
,
У вас запрос в цикле - не есть хорошо.
Сделайте так чтобы запрос выполнялся 1 раз и потом работайте с таблицей результата - будет вам ускорение
Bernet @ Сегодня, 17:36
,
А как мне сделать "универсальный отчет" по определению остатка позиций, если этот запрос по определению остатков зависит от периода
(он разный в строках основного отчета
РезультатСЗ = Запрос.Выполнить().Выгрузить();
)Constantus @ Сегодня, 16:13
,
Дата - это не проблема, можно сделать запрос в котором сможете получить остатки по дням, т.е. на каждую вашу дату. Аналитика тоже думаю не проблема - сформируйте таблицу значений с этими всеми параметрами, передайте её в запрос в качестве основной таблицы и к ней прицепите остатки
Пример получения запрос остатков по дням:
Текст запроса
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua