← Назад к вопросам
Товарная ведомость по складам
2.3 Middle🔥 201 комментариев
#СКД и отчёты
Условие
Создайте конфигурацию с товарной ведомостью для учёта движения товаров.
Требования к отчёту:
- Входящий остаток на начало периода
- Приход за период
- Расход за период
- Исходящий остаток на конец периода
- Группировка по складам
- Отображение только количества
Пример результата
| Склад | Товар | Вх.остаток | Приход | Расход | Исх.остаток |
|---|---|---|---|---|---|
| Основной | |||||
| Товар 1 | 100 | 50 | 30 | 120 | |
| Товар 2 | 200 | 0 | 50 | 150 |
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: Товарная ведомость по складам
Запрос для сбора данных
Функция ПолучитьТовраннуюВедомость(ДатаНачала, ДатаОкончания) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Склад,
| Остатки.Номенклатура,
| Остатки.ОстатокНаНачалоПериода,
| СУММА(ВЫБОР КОГДА ПриходРасход.ВидДокумента = \"Приход\"
| ТОГДА ПриходРасход.Количество
| ИНАЧЕ 0 КОНЕЦ) КАК ПриходЗаПериод,
| СУММА(ВЫБОР КОГДА ПриходРасход.ВидДокумента = \"Расход\"
| ТОГДА ПриходРасход.Количество
| ИНАЧЕ 0 КОНЕЦ) КАК РасходЗаПериод,
| (Остатки.ОстатокНаНачалоПериода
| + СУММА(ВЫБОР КОГДА ПриходРасход.ВидДокумента = \"Приход\"
| ТОГДА ПриходРасход.Количество
| ИНАЧЕ 0 КОНЕЦ)
| - СУММА(ВЫБОР КОГДА ПриходРасход.ВидДокумента = \"Расход\"
| ТОГДА ПриходРасход.Количество
| ИНАЧЕ 0 КОНЕЦ)) КАК ОстатокНаКонец
|ИЗ
| (ВЫБРАТЬ
| РегистрОстатков.Склад,
| РегистрОстатков.Номенклатура,
| РегистрОстатков.КоличествоОстаток КАК ОстатокНаНачалоПериода
| ИЗ
| РегистрСведений.ОстаткиТоваров.Остатки(&ДатаНачала) КАК РегистрОстатков
| ) КАК Остатки
|ЛЕВ ПРИСОЕДИНИТЬ
| (ВЫБРАТЬ
| \"Приход\" КАК ВидДокумента,
| ПриходПостав.Склад,
| ПриходПостав_Товары.Номенклатура,
| ПриходПостав_Товары.Количество
| ИЗ
| Документ.ПриходПостав КАК ПриходПостав
| ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ
| Документ.ПриходПостав.Товары КАК ПриходПостав_Товары
| НА ПриходПостав.Ссылка = ПриходПостав_Товары.Ссылка
| ГДЕ
| ПриходПостав.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ПриходПостав.Проведён = Истина
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| \"Расход\" КАК ВидДокумента,
| РасходМат.Склад,
| РасходМат_Товары.Номенклатура,
| РасходМат_Товары.Количество
| ИЗ
| Документ.РасходМатериалов КАК РасходМат
| ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ
| Документ.РасходМатериалов.Товары КАК РасходМат_Товары
| НА РасходМат.Ссылка = РасходМат_Товары.Ссылка
| ГДЕ
| РасходМат.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РасходМат.Проведён = Истина
| ) КАК ПриходРасход
| НА Остатки.Склад = ПриходРасход.Склад
| И Остатки.Номенклатура = ПриходРасход.Номенклатура
|СГРУППИРОВАТЬ ПО
| Остатки.Склад,
| Остатки.Номенклатура,
| Остатки.ОстатокНаНачалоПериода
|УПОРЯДОЧИТЬ ПО
| Остатки.Склад,
| Остатки.Номенклатура";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Результат = Запрос.Выполнить();
Возврат Результат.Выгрузить();
КонецФункции
Формирование табличного документа
Процедура ФормироватьВедомость(ТабличныйДокумент, ДатаНачала, ДатаОкончания) Экспорт
ТабличныйДокумент.Очистить();
Данные = ПолучитьТовраннуюВедомость(ДатаНачала, ДатаОкончания);
// Заголовок отчёта
СтрокаЗаголовка = ТабличныйДокумент.Добавить();
СтрокаЗаголовка.Вставить("Склад", "ТОВАРНАЯ ВЕДОМОСТЬ");
ТабличныйДокумент.Строки[1].Оформление = ОформлениеЗаголовка();
// Строка с периодом
СтрокаПериода = ТабличныйДокумент.Добавить();
СтрокаПериода.Вставить("Склад", "Период: с " + Формат(ДатаНачала, "ДФ=dd.MM.yyyy")
+ " по " + Формат(ДатаОкончания, "ДФ=dd.MM.yyyy"));
// Пустая строка
ТабличныйДокумент.Добавить();
// Заголовок таблицы
СтрокаЗаголовка = ТабличныйДокумент.Добавить();
СтрокаЗаголовка.Вставить("Склад", "Склад");
СтрокаЗаголовка.Вставить("Номенклатура", "Товар");
СтрокаЗаголовка.Вставить("ОстатокНаНачалоПериода", "Вх.остаток");
СтрокаЗаголовка.Вставить("ПриходЗаПериод", "Приход");
СтрокаЗаголовка.Вставить("РасходЗаПериод", "Расход");
СтрокаЗаголовка.Вставить("ОстатокНаКонец", "Исх.остаток");
// Данные по складам
ТекущийСклад = Неопределено;
Для каждого Строка Из Данные Цикл
// Если сменился склад, добавляем название
Если ТекущийСклад <> Строка.Склад Тогда
ТекущийСклад = Строка.Склад;
СтрокаСклада = ТабличныйДокумент.Добавить();
СтрокаСклада.Вставить("Склад", Строка.Склад.Наименование);
ТабличныйДокумент.Строки[ТабличныйДокумент.ВысотаТаблицы()].Оформление = ОформлениеСклада();
КонецЕсли;
// Строка товара
СтрокаТовара = ТабличныйДокумент.Добавить();
СтрокаТовара.Вставить("Склад", "");
СтрокаТовара.Вставить("Номенклатура", Строка.Номенклатура.Наименование);
СтрокаТовара.Вставить("ОстатокНаНачалоПериода", Строка.ОстатокНаНачалоПериода);
СтрокаТовара.Вставить("ПриходЗаПериод", Строка.ПриходЗаПериод);
СтрокаТовара.Вставить("РасходЗаПериод", Строка.РасходЗаПериод);
СтрокаТовара.Вставить("ОстатокНаКонец", Строка.ОстатокНаКонец);
КонецЦикла;
КонецПроцедуры
Оформление таблицы
Функция ОформлениеЗаголовка()
Оформление = Новое Оформление;
Оформление.Шрифт = Новый Шрифт(, 14, Истина, Ложь, Ложь, Ложь);
Оформление.ЦветТекста = ЦветВHTML(Новый Цвет(0, 0, 0));
Возврат Оформление;
КонецФункции
Функция ОформлениеСклада()
Оформление = Новое Оформление;
Оформление.Шрифт = Новый Шрифт(, 12, Истина, Ложь, Ложь, Ложь);
Оформление.ЦветФона = ЦветВHTML(Новый Цвет(230, 230, 230));
Возврат Оформление;
КонецФункции
Ключевые компоненты
Запрос включает:
- Остатки на начало периода из РегистрСведений
- Приход и расход из документов за период
- Группировка по складам и товарам
- Расчёт исходящего остатка
Таблица содержит:
- Входящий остаток
- Приход за период
- Расход за период
- Исходящий остаток
- Группировка по складам