Как распределить сумму оплаты по счету 62 по номенклатуре в запросе 1С

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Сфера услуг, туризм и социальный сектор
← На главную

В типовых конфигурациях 1С (таких как Бухгалтерия предприятия) счет 62 «Расчеты с покупателями и заказчиками» не имеет субконто «Номенклатура». Это создает определенные трудности, когда необходимо получить аналитический отчет в разрезе оказанных услуг или проданных товаров, чтобы понять, какая именно позиция была оплачена. В данной статье мы разберем методику получения этих данных и алгоритм пропорционального распределения оплат.

Анализ проблемы: почему прямой запрос не работает

Разберем ситуацию, с которой сталкивается разработчик при попытке получить данные напрямую из регистра бухгалтерии. Если мы обратимся к виртуальной таблице Обороты счета 62, мы увидим субконто «Контрагенты», «Договоры» и «Документы расчетов». Номенклатура здесь отсутствует, так как она фигурирует только на счетах учета доходов (90.01) или в регистрах накопления «Продажи».

Следовательно, задача разделяется на три этапа:

  1. Получение данных о реализации (какая номенклатура на какую сумму была отгружена).
  2. Получение данных об оплате (какая сумма пришла от клиента по конкретному документу или договору).
  3. Сопоставление и математическое распределение оплаты по строкам реализации.

Шаг 1: Получение данных о начислениях (реализации)

Проанализируем структуру запроса для получения выручки. Нам необходимо найти корреспонденцию Дебета 62 счета с Кредитом 90 счета. Именно в Кредите 90 счета (в его субконто) хранится информация о номенклатуре.

Рассмотрим пример формирования временной таблицы с начислениями:


ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
    ХозрасчетныйОбороты.Субконто2 КАК Договор,
    ХозрасчетныйОбороты.Субконто3 КАК ДокументРеализации,
    ХозрасчетныйОбороты.КорСубконто3 КАК Номенклатура,
    ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаНачисления
ПОМЕСТИТЬ ВТ_Начисления
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = &Счет62_01, , , КорСчет В ИЕРАРХИИ (&Счет90), ) КАК ХозрасчетныйОбороты
;

Важный момент: использование конструкции через точку, например, Субконто2.Код, замедляет выполнение запроса. Профессиональным подходом считается получение ссылок на объекты, а представление (коды, наименования) следует выводить уже в финальной части отчета или в СКД.

Шаг 2: Получение данных об оплатах

Выясним причину, по которой в первоначальных запросах сумма оплаты часто оказывается нулевой. Оплата — это движение по Кредиту счета 62 в корреспонденции со счетами денежных средств (50, 51, 52) или счетом авансов (62.02) при зачете.

Посмотрим, как собрать данные об оплатах в отдельную временную таблицу:


ВЫБРАТЬ
    ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
    ХозрасчетныйОбороты.Субконто2 КАК Договор,
    ХозрасчетныйОбороты.Субконто3 КАК ДокументРеализации,
    ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОплаты
ПОМЕСТИТЬ ВТ_Оплаты
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = &Счет62_01, , , КорСчет В (&СчетаОплаты), ) КАК ХозрасчетныйОбороты
ГДЕ
    ХозрасчетныйОбороты.СуммаОборотКт > 0
;

В список &СчетаОплаты следует включить 50.01, 51, а также 62.02 (для случаев, когда происходит регламентный зачет аванса).

Шаг 3: Пропорциональное распределение суммы оплаты

Теперь рассмотрим самую сложную часть — распределение. Если в одном документе реализации было три услуги на разные суммы, а клиент оплатил лишь половину счета, нам нужно распределить эту оплату пропорционально стоимости каждой услуги.

Формула распределения:
СуммаОплатыПоНоменклатуре = (СуммаНачисленияПоНоменклатуре / ОбщаяСуммаДокумента) * СуммаПоступившейОплаты

Проанализируем пример итогового запроса, который объединяет начисления и оплаты:


ВЫБРАТЬ
    ВТ_Начисления.Контрагент,
    ВТ_Начисления.Договор,
    ВТ_Начисления.ДокументРеализации,
    ВТ_Начисления.Номенклатура,
    ВТ_Начисления.СуммаНачисления КАК СуммаВыставлено,
    ЕСТЬNULL(ВТ_Оплаты.СуммаОплаты, 0) * (ВТ_Начисления.СуммаНачисления / ИтогиПоДокументам.ОбщаяСуммаДокумента) КАК СуммаОплачено
ИЗ
    ВТ_Начисления КАК ВТ_Начисления
    ЛЕВОЕ СОЕДИНЕНИЕ (
        ВЫБРАТЬ
            ДокументРеализации,
            СУММА(СуммаНачисления) КАК ОбщаяСуммаДокумента
        ИЗ
            ВТ_Начисления
        СГРУППИРОВАТЬ ПО
            ДокументРеализации
    ) КАК ИтогиПоДокументам ПО ВТ_Начисления.ДокументРеализации = ИтогиПоДокументам.ДокументРеализации
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Оплаты КАК ВТ_Оплаты ПО ВТ_Начисления.ДокументРеализации = ВТ_Оплаты.ДокументРеализации

Особенности учета в сфере ЖКХ и работе с авансами

Выясним нюансы, которые характерны для отраслевых решений, упомянутых в обсуждении (ЖКХ). В этой сфере часто встречается ситуация, когда оплата должна сначала гасить пени, а только потом основные услуги. В таком случае простое пропорциональное распределение может не подойти, и в запрос нужно будет вводить приоритеты (например, через ВЫБОР КОГДА).

Основные технические сложности, которые нужно учитывать:

  1. Деление на ноль: Всегда добавляйте проверку ВЫБОР КОГДА ИтогиПоДокументам.ОбщаяСуммаДокумента = 0 ТОГДА 0 ИНАЧЕ ... КОНЕЦ.
  2. Округление: При распределении суммы оплаты на несколько строк могут возникнуть погрешности в копейках. Для идеального баланса разницу (хвост) обычно «докидывают» на последнюю строку в наборе. В чистом запросе 1С это реализовать сложно, чаще это дорабатывается уже при выводе в таблицу значений или коллекцию результата.
  3. Начальное сальдо: Если на начало периода уже висел долг, то входящие оплаты за период будут гасить именно его (метод FIFO). Чтобы учесть это, в ВТ_Начисления нужно включать не только обороты за период, но и остатки на начало периода.

Рекомендации по оптимизации

Проанализируем советы экспертов из обсуждения. Для повышения производительности и точности данных:

Таким образом, мы рассмотрели механизм, позволяющий «виртуально» детализировать 62 счет до номенклатуры. Несмотря на то, что в плане счетов такая аналитика отсутствует, использование временных таблиц и связей по документам расчетов позволяет построить полноценный отчет об оплатах услуг.

← На главную