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