При работе с пакетными запросами в 1С:Предприятие часто возникают ситуации, когда суммы, рассчитанные в отдельных запросах, перестают совпадать после выполнения соединения (LEFT JOIN, FULL JOIN). Рассмотрим, как выявить причины таких расхождений и как правильно строить запросы к виртуальным таблицам регистра бухгалтерии.
Основными факторами, приводящими к ошибкам в итоговых расчетах, являются:
Артикул), приводит к тому, что система соединяет несколько разных записей в одну, что искажает итоговую сумму СУММА(Сумма).ГДЕ) наложены после выборки данных, а не в параметрах виртуальной таблицы, система может обрабатывать избыточный объем данных с неопределенными типами субконто.Всегда старайтесь накладывать условия на счета и виды субконто непосредственно в параметрах виртуальной таблицы ДвиженияССубконто. Это не только повышает производительность, но и гарантирует, что в выборку попадут только нужные записи.
ВЫБРАТЬ
ХозрасчетныйДвиженияССубконто.Регистратор,
ХозрасчетныйДвиженияССубконто.СубконтоКт3 КАК Номенклатура,
СУММА(ХозрасчетныйДвиженияССубконто.Сумма) КАК Сумма
ПОМЕСТИТЬ Выручка
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
&НачалоПериода,
&КонецПериода,
Счет В (&СписокСчетов),
,
СубконтоКт3 ССЫЛКА Справочник.Номенклатура
) КАК ХозрасчетныйДвиженияССубконто
СГРУППИРОВАТЬ ПО
ХозрасчетныйДвиженияССубконто.Регистратор,
ХозрасчетныйДвиженияССубконто.СубконтоКт3
Вместо Артикул всегда используйте ссылочные типы данных (Ссылка). Это гарантирует однозначное соответствие записей. Если в базе существуют дубли номенклатуры с одинаковым артикулом, связь по артикулу приведет к непредсказуемым результатам.
Чтобы понять, на каком этапе «теряются» или «дублируются» строки, воспользуйтесь методом ОБЪЕДИНИТЬ ВСЕ. Это позволяет увидеть все записи из двух пакетов в одном списке. Добавьте «техническое» поле, чтобы идентифицировать источник данных.
ВЫБРАТЬ 1 КАК Источник, Регистратор, Номенклатура, Сумма ИЗ Себес
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2 КАК Источник, Регистратор, Номенклатура, Сумма ИЗ Выручка
УПОРЯДОЧИТЬ ПО Регистратор, Номенклатура
Выполнив такой запрос, вы сможете построчно сравнить данные. Если для одного регистратора и номенклатуры в первой таблице есть одна сумма, а во второй — две, вы сразу увидите проблему в группировке одного из подзапросов.
Для исключения ошибок при разработке придерживайтесь следующих правил:
Regi и Art), должны присутствовать в секции СГРУППИРОВАТЬ ПО каждого предыдущего пакета.SumX «взлетает» при соединении — ищите дубликаты в исходных выборках.РегистрБухгалтерии, тем меньше вероятность случайного захвата записей с другими субконто, которые могут влиять на группировку.Помните, что аккуратная подготовка промежуточных данных — залог точности вашего отчета. Если суммы не сходятся, последовательно исключайте пакеты из соединения, пока не найдете тот, который возвращает «грязные» данные.