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

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С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

15000 12000 руб.

30.11.2021    23539    131    54    

96

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

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

25000 руб.

16.12.2019    36156    78    69    

45

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

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

29400 руб.

29.06.2023    5678    14    5    

24

SALE! 50%

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

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

70000 35000 руб.

30.11.2022    13493    20    24    

24

SALE! 50%

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

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

70000 35000 руб.

08.12.2021    26238    21    73    

32

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

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

12000 руб.

28.03.2022    13337    31    26    

37

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

Мы доработали типовой платежный календарь, добавив в него планируемые постоянные расходы. Теперь можно видеть картину денежных средств в совокупности с текущей динамикой ожидаемых поступлений и расходов. Отчет позволяет увидеть остатки денежных средств в кассе и банке, их движение в разрезе статей ДДС с возможностью выбрать любой период (день, неделя, месяц). Данный отчет подходит для всех основных конфигураций линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289): 1С:Бухгалтерия предприятия, редакция 3.0 (3.0.77.95), 1С:Управление торговлей, 1С:Комплексная автоматизация 2 (2.4.11.67), Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2 (2.4.13.111). Также есть возможность адаптации отчета под другие конфигурации. Мобильное приложение работает как на Android, так и на IOS.

2880 руб.

16.03.2021    21879    13    13    

28

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

Комплект внешних управленческих отчетов для учета в разрезе проектов в БП 3.0. Отчеты показывают доходы и расходы, продажи и валовую прибыль, движение денежных средств и товарно-материальных ценностей по каждому проекту.

9000 руб.

08.02.2024    1963    11    16    

8