В типовых конфигурациях 1С (таких как Бухгалтерия предприятия) счет 62 «Расчеты с покупателями и заказчиками» не имеет субконто «Номенклатура». Это создает определенные трудности, когда необходимо получить аналитический отчет в разрезе оказанных услуг или проданных товаров, чтобы понять, какая именно позиция была оплачена. В данной статье мы разберем методику получения этих данных и алгоритм пропорционального распределения оплат.
Разберем ситуацию, с которой сталкивается разработчик при попытке получить данные напрямую из регистра бухгалтерии. Если мы обратимся к виртуальной таблице Обороты счета 62, мы увидим субконто «Контрагенты», «Договоры» и «Документы расчетов». Номенклатура здесь отсутствует, так как она фигурирует только на счетах учета доходов (90.01) или в регистрах накопления «Продажи».
Следовательно, задача разделяется на три этапа:
Проанализируем структуру запроса для получения выручки. Нам необходимо найти корреспонденцию Дебета 62 счета с Кредитом 90 счета. Именно в Кредите 90 счета (в его субконто) хранится информация о номенклатуре.
Рассмотрим пример формирования временной таблицы с начислениями:
ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
ХозрасчетныйОбороты.Субконто2 КАК Договор,
ХозрасчетныйОбороты.Субконто3 КАК ДокументРеализации,
ХозрасчетныйОбороты.КорСубконто3 КАК Номенклатура,
ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаНачисления
ПОМЕСТИТЬ ВТ_Начисления
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = &Счет62_01, , , КорСчет В ИЕРАРХИИ (&Счет90), ) КАК ХозрасчетныйОбороты
;
Важный момент: использование конструкции через точку, например, Субконто2.Код, замедляет выполнение запроса. Профессиональным подходом считается получение ссылок на объекты, а представление (коды, наименования) следует выводить уже в финальной части отчета или в СКД.
Выясним причину, по которой в первоначальных запросах сумма оплаты часто оказывается нулевой. Оплата — это движение по Кредиту счета 62 в корреспонденции со счетами денежных средств (50, 51, 52) или счетом авансов (62.02) при зачете.
Посмотрим, как собрать данные об оплатах в отдельную временную таблицу:
ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
ХозрасчетныйОбороты.Субконто2 КАК Договор,
ХозрасчетныйОбороты.Субконто3 КАК ДокументРеализации,
ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОплаты
ПОМЕСТИТЬ ВТ_Оплаты
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = &Счет62_01, , , КорСчет В (&СчетаОплаты), ) КАК ХозрасчетныйОбороты
ГДЕ
ХозрасчетныйОбороты.СуммаОборотКт > 0
;
В список &СчетаОплаты следует включить 50.01, 51, а также 62.02 (для случаев, когда происходит регламентный зачет аванса).
Теперь рассмотрим самую сложную часть — распределение. Если в одном документе реализации было три услуги на разные суммы, а клиент оплатил лишь половину счета, нам нужно распределить эту оплату пропорционально стоимости каждой услуги.
Формула распределения:
СуммаОплатыПоНоменклатуре = (СуммаНачисленияПоНоменклатуре / ОбщаяСуммаДокумента) * СуммаПоступившейОплаты
Проанализируем пример итогового запроса, который объединяет начисления и оплаты:
ВЫБРАТЬ
ВТ_Начисления.Контрагент,
ВТ_Начисления.Договор,
ВТ_Начисления.ДокументРеализации,
ВТ_Начисления.Номенклатура,
ВТ_Начисления.СуммаНачисления КАК СуммаВыставлено,
ЕСТЬNULL(ВТ_Оплаты.СуммаОплаты, 0) * (ВТ_Начисления.СуммаНачисления / ИтогиПоДокументам.ОбщаяСуммаДокумента) КАК СуммаОплачено
ИЗ
ВТ_Начисления КАК ВТ_Начисления
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
ДокументРеализации,
СУММА(СуммаНачисления) КАК ОбщаяСуммаДокумента
ИЗ
ВТ_Начисления
СГРУППИРОВАТЬ ПО
ДокументРеализации
) КАК ИтогиПоДокументам ПО ВТ_Начисления.ДокументРеализации = ИтогиПоДокументам.ДокументРеализации
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Оплаты КАК ВТ_Оплаты ПО ВТ_Начисления.ДокументРеализации = ВТ_Оплаты.ДокументРеализации
Выясним нюансы, которые характерны для отраслевых решений, упомянутых в обсуждении (ЖКХ). В этой сфере часто встречается ситуация, когда оплата должна сначала гасить пени, а только потом основные услуги. В таком случае простое пропорциональное распределение может не подойти, и в запрос нужно будет вводить приоритеты (например, через ВЫБОР КОГДА).
Основные технические сложности, которые нужно учитывать:
ВЫБОР КОГДА ИтогиПоДокументам.ОбщаяСуммаДокумента = 0 ТОГДА 0 ИНАЧЕ ... КОНЕЦ.ВТ_Начисления нужно включать не только обороты за период, но и остатки на начало периода.Проанализируем советы экспертов из обсуждения. Для повышения производительности и точности данных:
(&НачалоПериода, &КонецПериода, , Счет = &Счет62) работает значительно быстрее, чем фильтрация через ГДЕ после получения всех данных.Таким образом, мы рассмотрели механизм, позволяющий «виртуально» детализировать 62 счет до номенклатуры. Несмотря на то, что в плане счетов такая аналитика отсутствует, использование временных таблиц и связей по документам расчетов позволяет построить полноценный отчет об оплатах услуг.