База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как оптимизировать запрос 1С для остатков и оборотов с временными таблицами?
- В этой теме 1 ответ, 2 участника, последнее обновление 14 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
8 июля 2026 в 12:26 #38088
Остатки по аналитики получили — Да. Тут Обороты берем все без учета аналитики остатков. Потом соединяем таблицы. Оптимизируй запрос. Добавь необходимые условия. Переделай на использование временных таблиц, без вложенных запросов. Для Удобства отладки
-
8 июля 2026 в 12:26 #38089
Вот оптимизированный вариант запроса с использованием временных таблиц (временных таблиц 1С — через ПОМЕСТИТЬ), без вложенных подзапросов, с необходимыми условиями и удобный для отладки.
|////////////////////////////////////////////////////////////////////////////////
|// 1. Помещаем остатки по счету и аналитике во временную таблицу
|ПОМЕСТИТЬ ВТ_Остатки
|ВЫБРАТЬ
| Остатки.Счет КАК Счет,
| Остатки.Субконто1 КАК Субконто1,
| Остатки.Субконто2 КАК Субконто2,
| Остатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет = &Счет, , ) КАК Остатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|// 2. Помещаем все обороты по счету (без аналитики) во временную таблицу
|ПОМЕСТИТЬ ВТ_Обороты
|ВЫБРАТЬ
| Обороты.Счет КАК Счет,
| Обороты.Период КАК Период,
| Обороты.Регистратор КАК Регистратор
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНачала, &Дата, , Счет = &Счет, , , ) КАК Обороты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|// 3. Находим последний период по каждой аналитике из остатков, используя ВТ_Обороты
|ПОМЕСТИТЬ ВТ_ПоследнийПериод
|ВЫБРАТЬ
| Остатки.Счет КАК Счет,
| Остатки.Субконто1 КАК Субконто1,
| Остатки.Субконто2 КАК Субконто2,
| МАКСИМУМ(Обороты.Период) КАК ПоследнийПериод
|ИЗ
| ВТ_Остатки КАК Остатки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Обороты КАК Обороты
| ПО Остатки.Счет = Обороты.Счет
|ГРУППИРОВАТЬ ПО
| Остатки.Счет,
| Остатки.Субконто1,
| Остатки.Субконто2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|// 4. Соединяем остатки с последним периодом и получаем регистратор из ВТ_Обороты
|ВЫБРАТЬ
| Остатки.Счет КАК Счет,
| Остатки.Субконто1 КАК Субконто1,
| Остатки.Субконто2 КАК Субконто2,
| Остатки.СуммаОстаток КАК СуммаОстаток,
| Обороты.Регистратор КАК ПоследнийДокумент
|ИЗ
| ВТ_Остатки КАК Остатки
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПоследнийПериод КАК ПоследнийПериод
| ПО Остатки.Счет = ПоследнийПериод.Счет
| И Остатки.Субконто1 = ПоследнийПериод.Субконто1
| И Остатки.Субконто2 = ПоследнийПериод.Субконто2
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Обороты КАК Обороты
| ПО Обороты.Счет = ПоследнийПериод.Счет
| И Обороты.Период = ПоследнийПериод.ПоследнийПериод
|;
|
|ГДЕ
| Остатки.Счет = &Счет—
Пояснения:
— ВТ_Остатки — остатки по аналитике и счету.
— ВТ_Обороты — все обороты по счету без аналитики (чтобы не дублировать аналитики, берем только счет и период, регистратор).
— ВТ_ПоследнийПериод — для каждой аналитики из остатков находим максимальный период из оборотов.
— В итоговом запросе соединяем остатки с последним периодом и получаем регистратор (документ) по этому периоду.
— Условие по счету везде для фильтрации.—
Параметры запроса:
— &Дата — дата, на которую берутся остатки (например, КонецДня(ТекущаяДата))
— &ДатаНачала — дата начала периода для оборотов (например, НачалоДня(ДатаНачалаПериода))
— &Счет — счет плана счетов, по которому нужна аналитика—
Такой запрос проще читать и отлаживать, т.к. все логические части вынесены во временные таблицы.
—
Пример установки параметров в 1С:
1С (Код)123456Запрос = Новый Запрос;Запрос.Текст = " ... (текст запроса выше) ... ";Запрос.УстановитьПараметр("Дата", КонецДня(ТекущаяДата));Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачалаПериода));Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ОсновнойСчет);Результат = Запрос.Выполнить();—
Если нужно добавить больше субконто — добавьте их в выборку и группировку в ВТ_Остатки и ВТ_ПоследнийПериод.
—
Если нужна помощь с конкретными субконто — уточни, помогу подкорректировать.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.