Распределение расходов пропорционально продажам

28.03.24

Задачи пользователя - Адаптация типовых решений

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц.

Добрый день!

Демонстрируется применение универсального алгоритма распределения суммы по позициям и решения известной "проблемы копеек". Также демонстрируется одна из задач адаптации программы - финансовая модель из эксель перекочевала в 1С. Что из этого для вас будет более интересным - решать вам.

* * *

В конце каждого месяца подводятся итоги по продажам магазинов. На основе этой информации расходы Администрации распределяются по магазинам пропорционально продажам. Реализован механизм "закрытия месяца" в УТ 10.3 (на платформе 8.3.11.3034 на конфигурации версии УТ 10.3.36.1.).

Для кого статья:

  • для финансового директора - показать, что в 1С можно реализовать свой финансовый расчет и учет, реализовать свою финансовую модель.
  • для программиста 1С - показать, как реализовать подобный расчет.  

Представлено пошаговое внедрение финмодели в УТ 10.3, при которой общие административные расходы текущего месяца распределяются по подразделениям (магазинам) пропорционально продажам каждого подразделения за текущий месяц. 

Подобная финансовая модель не реализована типовым функционалом в УТ 10.3, поэтому потребовалась доработка УТ 10.3. Как и любая модель имеет свои допущения и ограничения. Внедрялась на конкретном предприятии с конкретными бизнес-процессами, и поэтому не претендует на универсальность.

Архитектура решения

1. Представьте 4 розничных магазина и 1 бэк-офис администрации. Магазины учитываются как подразделения организации (справочник "Подразделения") (см. рисунок).

В УТ 10.3 не так много разрезов учета: справочники Склады, Подразделения, Организации, Проекты, Кассы, Контрагенты, Договора и т.д. - для каждого вида учета (товарный, финансовый) имеется свой набор так называемых измерений, относительно которых накапливаются показатели в соответствующих регистрах накопления.  Для модели был выбран справочник "Подразделения" в качестве разреза учета - достаточно "популярный" разрез учета (см. рисунок).

2. Для учета расходов (финансовых) по подразделениям (магазинам) используется регистр накопления "ДвиженияДенежныхСредств". Распределение административных расходов также учитывается движениями по регистру "Движения денежных средств".

Ни один "денежный" регистр накопления не содержит в своем наборе измерений разрез учета "Подразделение", поэтому был расширен тип значений измерения "Проект" на соответствующий справочник. При этом в настройках учета отключен параметр "Вести учет по проектам" - еще раз, учет по проектам не ведется в программе.

3.  В соответствующих документах "Платежное Поручение Исходящее", "Платежный Ордер Списание Денежных Средств", "Расходный Кассовый Ордер" - к имеющемуся типовому полю "Подразделение" была добавлена табличная часть "Распределение Расходов По Подразделениям" с единственным полем "Подразделение" (см. рисунок).

4. Модель строится на следующем принципе:

  • если расход денежных средств (далее ДС) относится на конкретное подразделение, то соответствующее подразделение указывается только в шапке документа в типовом поле документа "Подразделение",
  • если расход ДС необходимо распределить, то в типовом поле "Подразделение" необходимо выбрать подразделение "Администрация", а в табличной части "Распределение Расходов По Подразделениям" указать все подразделения (заполняются автоматом по кнопке на основе месячных продаж). Предполагается, что расходы относятся или только к одному подразделению, или сразу ко всем.

Создан флажок "По всем подразделениям", помогающий заполнить подразделения (магазины) в соответствующей таблице "Распределения расходов по магазинам". При открытии документов выводятся колонки ПродажиЗаМесяц, РаспределениеРасходов для проверки корректности распределения. Данные показатели рассчитываются по алгоритмам определения долей распределения расходов (см. рисунок).

 

Разработка

5. В модуле объекта каждого документа проведение доработано следующим образом - в процедуру общего модуля передается массив подразделений:

 
 Листинг 1
Процедура ДвиженияПоРегистрамУпр(Режим, Отказ, Заголовок, СтруктураШапкиДокумента)

    ... 
	
	//доработка+
    УправлениеДенежнымиСредствами.ПровестиСписаниеДенежныхСредствУпр(
        СтруктураШапкиДокумента, мСтруктураПараметровДенежныхСредств, ТаблицаПлатежейУпр,
        Движения, Отказ, Заголовок, РаспределениеРасходовПоПодразделениям.ВыгрузитьКолонку("Подразделение"));

КонецПроцедуры // ДвиженияПоРегистрамУпр()

 

 

6. В соответствующей процедуре общего модуля были внесены следующие правки:

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

 

 

7. Таблица долей (коэффициентов) реализована следующим образом:

 
 Листинг 3
Функция ПолучитьТаблицуДолей(ТекДата, СписокПодразделений) Экспорт

    Если Не ЗначениеЗаполнено(ТекДата) Тогда
        ТекДата = ТекущаяДата();
    КонецЕсли;

    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Подразделение");
    ТЗ.Колонки.Добавить("Доля");

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |   ПродажиОбороты.Подразделение,
    |   ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
    |ИЗ
    |   РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , Подразделение В (&СписокПодразделений)) КАК ПродажиОбороты
    |
    |УПОРЯДОЧИТЬ ПО
    |   СтоимостьОборот УБЫВ
    |АВТОУПОРЯДОЧИВАНИЕ";

    Запрос.УстановитьПараметр("СписокПодразделений", СписокПодразделений);
    Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекДата));
    Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекДата));

    ОбщиеПродажиЗаМесяц = МодульДоработок.ПолучитьОбщиеПродажиЗаМесяц(ТекДата, СписокПодразделений);

    К = 1;
    СуммаДолей = 0;

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл

        Если К = СписокПодразделений.Количество() Тогда
            Доля = 1 - СуммаДолей;
        Иначе
            ПродажиЗаМесяц = Выборка.СтоимостьОборот;
            Доля = Окр(ПродажиЗаМесяц/ОбщиеПродажиЗаМесяц,7);
            СуммаДолей = СуммаДолей + Доля;
        КонецЕсли;

        Стр = ТЗ.Добавить();
        Стр.Подразделение = Выборка.Подразделение;
        Стр.Доля = Доля;

    КонецЦикла;

    Возврат ТЗ;

КонецФункции

 

 

В данной модели реализован расчет долей так: первые три по сумме продаж  магазина (подразделения) получают долю делением ПродажЗаМесяц на ОбщиеПродажиЗаМесяц, четвертый магазин получает долю = 1-СуммаДолей - так называемый, остаточный принцип. Реализовано упорядочивание по суммам продаж по подразделениям - остаток долей садится на магазин с минимальными продажами.

Округления долей производится до 7 знака после запятой - что позволит избежать расхождений при умножении на семизначные суммы расходов.

Алгоритм расчета долей является универсальным в том плане, что подобный алгоритм можно применять в любой области, где нужно учитывать распределение суммы по неким позициям и нужно учесть копейки. Проблема копеек - известная задача - например, возникает при распределении суммы НДС по товарам, при распределении суммы скидки по товарам.  

Пользовательский интерфейс

8. Распределение административных расходов по подразделениям проводится в момент проведения документа (список документов далее). В конце месяца необходимо запустить групповое перепроведение документов. Для этого разработана обработка группового проведения документов - "Перепроведение документов за месяц" - перепроводятся только документы по административным расходам и имеющие заполненную таблицу "Распределение по подразделениям". В групповом перепроведении участвуют только документы вида Платежное Поручение Исходящее, Платежный Ордер Списание Денежных Средств, Расходный Кассовый Ордер.

9. Отчет по движению денежных средств строится по группировкам "Проект", "Статья движения денежных средств", остальные настройки - опционально при необходимости - "Вид денежных средств" (наличные, безналичные), "Приход, расход".

Представленный механизм был реализован на платформе 8.3.11.3034 на конфигурации версии УТ 10.3.36.1. Механизм был реализован в декабре 2017 года, опубликован в мае 2018 г, актуален в марте 2024 г.

* * *

На этом все. Всем добра! С пользой для клиентов, Rustig

финансовая модель учет расходов проблема копеек

См. также

SALE! 20%

Учет по проектам в 1С:Бухгалтерии 3.0

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

Расширение "Проекты" добавляет в типовую конфигурацию управленческий учет по проектам: позволяет вести список проектов, привязывать проекты к документам, подсчитывать доходы и расходы в разрезе проектов.

12000 9600 руб.

30.11.2021    20242    81    41    

70

Модуль Фонды: Простое управление финансами для УНФ, УТ 10/11, КА, УПП / ERP, КА, БП

Учет доходов и расходов БДР, БДДС Бюджетный учет 8.3.14 Конфигурации 1cv8 1С:Управление торговлей 11 Беларусь Россия Казахстан Бюджетный учет Управленческий учет Платные (руб)

Как держать деньги под контролем с помощью 1С УНФ, УТ, КА, ERP или БП и 2 часов в неделю без внедрения бюджетирования и найма финансиста. Дополнение для 1С 8.3 Модуль реализован в виде конфигурации и рассчитан для собственников компаний с чистой прибылью до 10 млн руб. / мес. То есть, пока вам не рентабельно вести сложные модули типа «Бюджетирование», «Казначейство», но нужно знать, сколько платить на этой неделе и хватит ли средств, чтобы отложить в дивиденды, обучение сотрудников, закупку и ремонт оборудования

45000 руб.

20.07.2023    3493    4    0    

33

SALE! 50%

Отчет "Полный анализ себестоимости реализованной продукции" для 1С:ERP (ЕРП), 1С:КА, 1С:ERP УХ

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

Данный отчет показывает себестоимость реализованной продукции в разузлованном виде, как с выделением входящих в нее полуфабрикатов любых уровней, так и свернутый до статей затрат и материалов, видов работ. Отчет работает независимо от метода оценки стоимости товаров и подходит для любых производственных компаний с многопередельным производством. Отчет можно использовать как в типовой 1С:ERP, так и в отраслевых решениях на ее базе (например, 1С:ERP Управление птицеводческим предприятием, Молокозавод и т.д.).Отчет подходит для анализа затрат на гособоронзаказы ГОЗ.

70000 35000 руб.

30.11.2022    11384    10    22    

15

SALE! 50%

Отчет "Полный анализ себестоимости выпущенной продукции" для 1С:ERP (ЕРП), 1С:КА, 1С:ERP УХ

Производство готовой продукции (работ, услуг) Учет доходов и расходов Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Бухгалтерский учет Управленческий учет Платные (руб)

Данный отчет показывает себестоимость выпущенной продукции с разузлованием полуфабрикатов любых уровней, входящих в ее состав, до статей затрат и материалов. Отчет работает независимо от метода оценки стоимости товаров и подходит для любых производственных компаний с многопередельным производством. Отчет можно использовать как в типовой 1С:ERP, так и в отраслевых решениях на ее базе (например, 1С:ERP Управление птицеводческим предприятием и т.д.). Отчет подходит для анализа затрат на гособоронзаказы ГОЗ.

70000 35000 руб.

08.12.2021    23743    16    72    

23

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4451    9    4    

18

Убираем НДС из прибыли в 1С:УНФ

Учет доходов и расходов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Убрали НДС из всех операций, где налог влияет на прибыль. Учли это во всех нужных регистрах и отчётах, сделали нужные проводки. Так как расширение влияет на расчёт прибыли, мы особенно внимательно отнеслись к его тестированию. Проверили всё на фреймворке Vanessa Automation. Это позволяет избежать ошибок и защищает учёт.

12000 руб.

28.03.2022    12304    24    26    

32

Обработка "Списание доходов будущих периодов" и расширение

Учет доходов и расходов Закрытие периода Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Решение регламентирует учет доходов будущих периодов(ДБП) в организации: сохраняет подробную информацию о объекте ДБП. По окончании месяца на основе введенной информации формируются проводки списания ДБП, отчеты для бухгалтерского и налогового учета. Подходит как для различных версий Бухгалтерии 8.3, так и для ERP и КА.

5500 руб.

09.10.2020    18710    40    18    

36

Дополнительный анализ расходов УСН в 1С:Бухгалтерии 3.0

Учет доходов и расходов Анализ учета Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет УСН Платные (руб)

Мы добавили девять новых проверок в Экспресс-проверку учета. Цель таких проверок — узнать, есть ли потенциальные проблемы в учёте УСН.

7200 руб.

27.09.2021    13501    26    11    

35