Как автоматически распределить транспортные расходы в стоимость товара при реализации в 1С:Бухгалтерия 3.0

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

Часто в практике торговых компаний возникает ситуация, когда стоимость доставки товара покупателю необходимо включить непосредственно в цену самого товара. Это может быть обусловлено требованиями контрагента (желание видеть «чистую» цену за единицу без выделения услуг), особенностями управленческого учета (необходимость видеть маржинальность с учетом логистики) или исторически сложившимися бизнес-процессами. В типовой конфигурации 1С:Бухгалтерия 3.0 автоматическое «размазывание» услуг по товарным позициям в документе «Реализация (акт, накладная, УПД)» не предусмотрено, в отличие от процесса поступления товаров. В этой статье мы разберем, как решить эту задачу различными методами.

Методологический аспект: почему это важно

Прежде чем переходить к программной реализации, проанализируем ситуацию с точки зрения бухгалтерского и налогового учета. Согласно ФСБУ 5/2019 «Запасы», расходы на продажу и доставку товаров покупателю являются коммерческими расходами. Они должны отражаться на счете 44 «Расходы на продажу» и не могут увеличивать фактическую себестоимость товаров на счете 41.

Если мы искусственно завышаем цену реализации в базе 1С, мы увеличиваем выручку по конкретным позициям. С точки зрения налогов (НДС и Налог на прибыль) итоговая сумма налога не изменится, если общая сумма документа останется прежней. Однако возникают риски при проверках: если в договоре прописана отдельная стоимость доставки, а в первичных документах (УПД) она «спрятана» в цену товара, налоговая может потребовать объяснений.

Способ 1. Модификация печатной формы (Самый безопасный вариант)

Рассмотрим вариант, когда в самой базе данных 1С мы хотим сохранить корректный учет (отдельная строка «Доставка» на счет 90.01), а покупателю выдать документ, где стоимость доставки распределена по товарам. Проанализируем, как это реализовать:

  1. Создаем внешнюю печатную форму для документа РеализацияТоваровУслуг.
  2. В алгоритме печати считываем все строки таблицы «Товары» и общую сумму из таблицы «Услуги» (где содержится доставка).
  3. Рассчитываем коэффициент распределения. Чаще всего используется распределение пропорционально сумме товаров: Коэффициент = СуммаДоставки / ОбщаяСуммаТоваров.
  4. Увеличиваем цену каждой строки товара в печатной форме на Цена * (1 + Коэффициент).
  5. Важный момент: решаем проблему «лишней копейки». Из-за округлений до двух знаков после запятой итоговая сумма в печатной форме может не совпасть с итогом в базе. Программа должна принудительно корректировать последнюю строку товара на возникшую разницу.

Преимущество: Бухгалтерский учет остается «чистым», выполняются все требования ФСБУ.

Недостаток: При использовании ЭДО (электронного документооборота) данные в файле и данные в вашей базе будут различаться, что приведет к ошибкам сопоставления у контрагента.

Способ 2. Автоматизация распределения в табличной части (Расширение)

Если необходимо, чтобы цены были изменены непосредственно в документе 1С, разберем программный способ. Мы можем создать расширение и добавить кнопку «Распределить услуги» в командную панель документа реализации. Посмотрим на логику работы кода:


// Пример упрощенного алгоритма распределения суммы доставки
&НаСервере
Процедура РаспределитьУслугиНаТовары(ДанныеФормы)
    
    СуммаУслуг = 0;
    СтрокиДляУдаления = Новый Массив;
    
    // 1. Ищем услуги доставки и суммируем их
    Для Каждого СтрокаУслуг Из ДанныеФормы.Услуги Цикл
        Если Найти(СтрокаУслуг.Номенклатура.Наименование, "Доставка") > 0 Тогда
            СуммаУслуг = СуммаУслуг + СтрокаУслуг.Сумма;
            СтрокиДляУдаления.Добавить(СтрокаУслуг);
        КонецЕсли;
    КонецЦикла;
    
    Если СуммаУслуг = 0 Тогда Возврат; КонецЕсли;
    
    // 2. Распределяем сумму по товарам пропорционально сумме строк
    ОбщаяСуммаТоваров = ДанныеФормы.Товары.Итог("Сумма");
    Распределено = 0;
    КоличествоСтрок = ДанныеФормы.Товары.Количество();
    
    Для Индекс = 0 По КоличествоСтрок - 1 Цикл
        СтрокаТовар = ДанныеФормы.Товары[Индекс];
        
        Если Индекс = КоличествоСтрок - 1 Тогда
            // Последняя строка забирает остаток из-за округлений
            Добавка = СуммаУслуг - Распределено;
        Иначе
            Добавка = Окр((СтрокаТовар.Сумма / ОбщаяСуммаТоваров) * СуммаУслуг, 2);
            Распределено = Распределено + Добавка;
        КонецЕсли;
        
        СтрокаТовар.Сумма = СтрокаТовар.Сумма + Добавка;
        // Пересчитываем цену, так как сумма изменилась
        СтрокаТовар.Цена = СтрокаТовар.Сумма / СтрокаТовар.Количество;
    КонецЦикла;
    
    // 3. Удаляем строки услуг, которые мы распределили
    Для Каждого Строка Из СтрокиДляУдаления Цикл
        ДанныеФормы.Услуги.Удалить(Строка);
    КонецЦикла;

КонецПроцедуры

При использовании этого метода мы фактически меняем данные документа. Проанализируем последствия: в отчете «Анализ продаж» менеджер увидит выручку по товару, которая уже включает в себя доставку. Это решает задачу «управленческого» уменьшения прибыли в глазах менеджера, так как себестоимость (счет 41) остается прежней, а выручка (счет 90.01) растет вместе с ценой реализации.

Способ 3. Использование агентской схемы

Выясним причину, по которой иногда требуется выделить доставку особым образом. Если компания не оказывает услуги доставки сама, а перевыставляет услуги транспортной компании (ТК), можно воспользоваться механизмом агентских услуг. Рассмотрим алгоритм:

  1. В документе «Реализация» переходим на вкладку «Агентские услуги».
  2. Указываем услугу доставки, поставщика (ТК) и сумму.
  3. В этом случае сумма доставки не пойдет в доходы (счет 90) и расходы вашей компании, а отразится транзитом через счет 76.

Это методологически верно, если вы действуете как агент. Однако это не решает задачу «спрятать» доставку в стоимость товара.

Проблема округления и «копеек»

Разберем подробнее техническую сложность, упомянутую в коде. Предположим, у нас есть 3 штуки товара по 1000 рублей и доставка 500 рублей. 500 на 3 нацело не делится (166.666...). Если мы запишем по 166.67 руб., итоговая сумма доставки станет 500.01 руб. Если запишем по 166.66 руб. — 499.98 руб.

Решение: Всегда рассчитывайте сумму распределения для последней строки как Остаток = ОбщаяСуммаДоставки - УжеРаспределено. Это гарантирует, что итоговая сумма документа (и НДС) в точности совпадет с исходными данными, что критически важно для бухгалтерского баланса и сдачи отчетности.

Управленческий анализ без изменения документов

Если цель — видеть чистую прибыль в отчетах менеджеров, не обязательно менять первичные документы. Рассмотрим альтернативный вариант:

  1. Используйте механизм «Дополнительные сведения» для документов реализации.
  2. Создайте сведение «Транспортные расходы (план)» и заполняйте его в каждом документе.
  3. Настройте отчет «Продажи» (через «Изменить вариант»), добавив это дополнительное сведение в выбранные поля.
  4. Создайте вычисляемое поле ВаловаяПрибыль - ТранспортныеРасходы.

Проанализировав ситуацию, можно сделать вывод: выбор метода зависит от того, кому нужно видеть распределение. Если покупателю — меняем печатную форму. Если менеджеру для аналитики — используем доп. сведения или отчеты. Если «все и сразу» — используем программное распределение в табличной части с учетом рисков округления.

← На главную