При разработке собственных отчетов на базе Системы компоновки данных (СКД) в конфигурации 1С:Управление нашей фирмой разработчики нередко сталкиваются с ситуацией, когда итоговые показатели остатков рассчитываются некорректно. Чаще всего это происходит при попытке вывода данных по нескольким складам или при переходе от односкладской структуры к многоскладской. Давайте разберем, какие именно ошибки приводят к неверным цифрам и как их устранить.
Одной из самых распространенных ошибок является выбор функции для вычисления остатков на закладке Ресурсы в СКД. Многие разработчики по невнимательности устанавливают функцию Среднее. Важно понимать, что показатели остатков — это количественные значения на конкретный момент времени, а не среднее арифметическое за интервал.
Чтобы исправить эту ситуацию, выполните следующие действия:
СКД вашего отчета.КоличествоНачальныйОстаток и КоличествоКонечныйОстаток).Среднее(...) на Сумма(...).После этого изменения СКД будет корректно суммировать остатки по всем группировкам и складам, вместо того чтобы вычислять их среднее значение, которое математически бессмысленно для складских остатков.
Для того чтобы СКД «понимала», что выбранные поля являются именно остатками, необходимо правильно назначить им роли. Это позволяет системе корректно обрабатывать временные границы.
Рассмотрим, как правильно настроить роли:
Период или ПериодСекунда). В его роли укажите тип Период и задайте соответствующий параметр периода.Period). Это свяжет их воедино, позволяя СКД правильно сопоставлять данные с временной шкалой.Иногда проблема кроется в самом запросе к регистру накопления. Если вы строите отчет на базе виртуальной таблицы ОстаткиИОбороты, убедитесь, что в запросе присутствует поле периода, например, ПериодСекунда. Без этого поля СКД может неверно определить временной срез, что приведет к ошибкам в расчете начальных и конечных остатков.
Проанализируйте ваш запрос и убедитесь, что он выглядит примерно так:
ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , ) КАК ТоварыНаСкладахОстаткиИОбороты
Если вы выводите склады в колонки, убедитесь, что отчет корректно настроен на группировку по складам. В настройках Отчета на вкладке Настройки проверьте, чтобы для группировки Склад были установлены необходимые параметры вывода. Если при сворачивании итогов вы получаете странные цифры, проверьте настройки ресурсов:
Для полей остатков часто требуется установка параметра Рассчитывать по. Убедитесь, что система пересчитывает итоги по всем ключевым группировкам, а не просто складывает уже вычисленные значения нижнего уровня, что может привести к дублированию данных.
Используйте функцию ЕСТЬNULL() в тексте запроса, если в отчете появляются пустые строки или значения, которые мешают корректному расчету итогов:
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, 0) КАК КоличествоНачальныйОстаток
Применяя эти методы в комплексе, вы сможете добиться точного отображения данных в ваших отчетах и избежать ошибок при расчете остатков товаров по складам в 1С:УНФ.