Подробное описание работы механизма расчета себестоимости в программах начиная с версии ERP 2.1.3 (и соответствующих ей версий КА и УТ)

04.04.18

Учетные задачи - Производство готовой продукции (работ, услуг)

Зачастую, когда встаёт вопрос о валовой прибыли предприятия, то большой проблемой становится корректная оценка себестоимости товаров. Для того, чтобы программисту было понятно, как программа рассчитывает себестоимость, нужно понимать алгоритмы, которых придерживались разработчики. Данная статья описывает, как это работает в актуальных (начиная с версии ERP 2.1.3 (и соответствующих ей версий КА и УТ)) версиях программы, и наиболее полезна для программиста. Данные алгоритмы описаны разработчиками в комментариях расчета себестоимости.

Механизм оффлайнового (неоперативного) расчета себестоимости, движения по регистрам себестоимости, общая информация.

Начиная с версии ERP 2.1.3 (и соответствующих ей версий КА и УТ) различаются два типа движения:

  • "первичные" - формируемые в соответствии с логикой документов при их проведении;
  • "расчетные" - формируемые данным механизмом (идентификатором типа движения является новый реквизит "РасчетСебестоимости" регистров накопления).

Список регистров, обслуживаемых механизмом расчета себестоимости, см. в ИсходящиеДанныеМеханизма()

Регистратором расчетных движений теперь является первичный документ (из реквизита ДокументДвижения), а не документ РасчетСебестоимостиТоваров. Документ РасчетСебестоимостиТоваров больше не делает движений по следующим регистрам: ВыручкаИСебестоимостьПродаж, Закупки, ПрочиеРасходыНезавершенногоПроизводства (есть только в ERP и КА) (документ остается регистратором для этих регистров для обратной совместимости).

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

Начиная с версии ERP 2.1.3 изменился алгоритм формирования и записи движений.
Теперь по каждому обслуживаемому механизмом регистру движения формируются следующим образом:

  •  перед началом расчета старые расчетные движения не очищаются - они остаются в ИБ до окончания расчета;
  •  новые расчетные движения, формируемые механизмом, помещаются в таблицу значений;
  •  при достижении определенного размера таблицы значений или при окончании очередного этапа расчета;
  •  новые движения из таблицы значений перекладываются во временную таблицу;
  •  при окончании расчета сравниваются новые (из временной таблицы) и старые (из данных ИБ) движения:
    •  перезаписываются движения только у тех документов, у которых есть отличия между старыми и новыми расчетными движениями;
    • только документы с перезаписанными движениями регистрируются к отражению в учете.

Данные изменения позволяют:

  • посмотреть себестоимость по документу из самого документа - отчетом "Движения документа";
  • при перерасчете себестоимости перезаписывать только реально измененные расчетные движения;
  • регистрировать к отражению в учете только документы с перезаписанными движениями (в ERP и КА).


Переход на версию ERP 2.1.3 (и соответствующие ей версии КА2 и УТ11)

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


 Запуск расчета себестоимости.

Точкой входа в алгоритм расчета является процедура РассчитатьВсе() в которую предаются параметры:

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

Перед расчетом для каждой организации будет сформирован документ РасчетСебестоимостиТоваров (если его еще не было) со следующим заполнением:

  • в реквизите Организация шапки документа будет указана организация, которой принадлежит данный документ;
  • в табличной части Организации будут указаны все организации, связанные с ней по схеме Интеркампани, в т.ч. и она сама:
    • до версии ERP 2.1.3 (и соответствующих ей версий КА и УТ) такого реквизита шапки не было, а документ расчета себестоимости создавался один на всю группу организаций, связанных по схеме Интеркампани (информация о документах расчета себестоимости в разрезе организаций хранится в общих параметрах расчета - во временной таблице ВТДокументыРасчетаСебестоимости и свойстве ДокументыРасчетаПоОрганизациям).

Для выполнения расчета без падения в случае возникновении ошибки, есть функция-обертка РассчитатьВсеВПопыткеИсключении() параметры аналогичны процедуре РассчитатьВсе(), но функция возвращает значение - Булево - признак успешного выполнения расчета.


Выполнение расчета себестоимости.

Непосредственный расчет выполняется в функции РассчитатьСебестоимостьПоГруппеОрганизаций()
Схематически расчет выглядит следующим образом:

  • выполняется инициализация общих параметров для всего алгоритма (см. ИнициализироватьПараметрыРасчета());
  • последовательно вызываются процедуры-этапы расчета (подробнее ниже)
    • некоторые этапы могут быть пропущены из-за настроек системы и/или параметров запуска расчета;
    •  результатом выполнения этапа являются сформированные расчетные движени и/или "глобальные" временные таблицы (используемые на следующих этапах);
  • выполняется запись измененных расчетных движений;
    • запись может выполняться в несколько потоков, с использованием фоновых заданий (см. свойство "МаксимальноеКоличествоФЗ");
  • выполняется отражение измененных документов в учете.


Структура этапа расчета.

Схематически процедура-этап расчета выглядит следующим образом:

  • создается запрос выборки исходных данных для этапа; заполняются его свойства; запрос выполняется;
    • если целью этапа является только формирование "глобальных" временных таблиц, дальнейшее к нему не относит;
  • по данным запроса выполняется формирование расчетных движений по регистрам расчета себестоимости;
    • некоторые этапы движений не формируют - формируют только "глобальные" временные таблицы;
    • код формирования движений вынесен в процедуры вида СформироватьДвижения<Имя регистра><Уточнение операции>();
    • внутри этих процедур для добавления движения обязательно используется процедура ДобавитьЗаписьВТаблицуДвижений();
  • удаляются "локальные" временные таблицы, используемые только внутри этапа (см. УничтожитьВременныеТаблицы());
  • сформированные движения перекладываются из таблиц значений во временные таблицы (см. КэшироватьСформированныеДвижения());
    • при этом также выполняется обновление служебных кэшей оборотов и остатков (подробнее ниже);
    • т.о. в промежутке между выборкой исходных данных и окончанием этапа обращаться к кэшам нельзя - они не актуализированы.


Обращение к данным ИБ в запросах.

Поскольку новые расчетные движения по регистрам себестоимости записываются в ИБ только в конце расчета,
то в ходе расчета при обращении к таблицам этих регистров (реальным или виртуальным) надо соблюдать некоторые правила (касается только регистров, перечисленных в ИнициализироватьРегистры()).
1. Обороты (движения) регистра за период должны получаться объединением:

  • основной таблицы регистра с отбором "Т.РасчетСебестоимости = Ложь" (первичные движения);
  • временной таблицы ВТКэш<Имя регистра> (новые расчетные движения);

Для удобства, по некоторым регистрам эти данные автоматически кэшируются во временной таблице ВТКэшЗаписи<Имя регистра>.
Список регистров указан в свойстве "РегистрыСРасчетнымиЗаписями" общих параметров расчета.

2. Остатки регистра (для регистров остатков) на конец периода должны получаться объединением:

  • остатков регистра на начало периода;
  • основной таблицы регистра с отбором "Т.РасчетСебестоимости = Ложь" (первичные движения за период);
  • временной таблицы ВТКэш<Имя регистра> (новые расчетные движения за период).

Для удобства, по некоторым регистрам эти данные автоматически кэшируются во временной таблице ВТКэшРасчетныеОстатки<Имя регистра>.
Список регистров указан в свойстве "РегистрыСРасчетнымиОстатками" общих параметров расчета.

3. Новые движения, сформированные на предыдущих этапах расчета, хранятся во временной таблице ВТКэш<Имя регистра>.
Данная временная таблица создается для всех регистров, обслуживаемые механизмом расчета себестоимости.

Также имеются ряд дополнительных особенностей работы с запросами (причины: оптимизация, платформа и т.д.).

1. Данные, используемые для отборов во всех запросах механизма расчета, хранятся 

  • в общих параметрах расчета (организации, период, значения функциональных опций и т.п.);
  • в "глобальных" временных таблицах (например, ВТОтборАналитикаПоПартнерам - см. ИнициализироватьВременныеТаблицыДляОтборов()).

 Для установки этих параметров используется универсальная процедура ИнициализироватьСвойстваЗапроса()
 В результате, все запросы механизма расчета гарантировано используют одинаковые отборы.
 Эта же процедура устанавливает запросу общий менеджер временных таблиц, в котором хранятся все перечисленные выше таблицы кэшей.

2. Существует ошибка Платформы 30025997, в результате которой возникают проблемы с полем ВидДвижения во временных таблицах.
Для обхода ошибки во всех временных таблицах вида ВТКэш, ВТКэшЗаписи, ВТКэшРасчетныеОстатки
вместо стандартного поля ВидДвижения хранится техногенное поле СлужебноеВидДвиженияПриход с типом "Булево" алгоритм работы с ним следующий:

  • в запросах к этим временным таблицам следует обращаться только к полю СлужебноеВидДвиженияПриход;
  • в таблицах значений, в которых предварительно накапливаются новые расчетные записи, есть только стандартное поле ВидДвижения;
  • преобразование поля между таблицей значения и временной таблицей выполняется автоматически, дополнительных действий не требуется.

 
Отладка и поиск проблем.

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

  • при начале очередного этапа расчета в журнал регистрации делает запись - для отслеживания прогресса выполнения расчета;
  • при окончании расчета в журнал регистрации выводится подробный протокол расчета.

Также реализована возможность переопределения некоторых параметров расчета (см. РассчитатьВсе(), параметр ПараметрыОтладки).

P.S. Данная статья наиболее полезной будет для программистов. За её основу былим взяты комментарии программистов 1С в решении 1С: Предприятие: "Управление торговлей" редакции 11.2.3.

УТ ERP КА Себестоимость

См. также

АРМ Начальника производства и АРМ Рабочего цеха для 1С:УНФ. Цифровое производство малого и среднего бизнеса

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

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

14400 руб.

15.09.2017    48809    79    41    

83

УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

12000 руб.

13.03.2018    56269    176    76    

112

Пульт управления производством для 1С:УНФ

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

Разработка содержит цифровые инструменты для производственного и технологического обеспечения - подсистему Технологического контроля с АРМ Контролёра, Учет рекламации, АРМ Начальника производства, АРМ Рабочего цеха

36000 руб.

22.02.2022    16006    4    1    

15

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    11311    9    22    

13

"Автосервис" для 1С:УТ 11.5, КА 2.5, ERP 2.5

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

Расширение, добавляющее в Вашу УТ 11 или КА 2.5 автомобили, марки, модели, нормо-часы. Есть запись на ремонт, документ заказ наряд, вывод ведомости по заказ нарядам, вывод выработки мастеров.

7200 руб.

29.07.2021    15579    20    16    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. PerlAmutor 129 16.10.17 12:04 Сейчас в теме
В прошлом месяце считали себестоимость в ERP 2.1.3.93, но она сваливалась из-за ошибки SQL "Arithmetic overflow error converting int to data type numeric". Не могли закрыть месяц, 2 дня отлаживали. В итоге нашли один из документов, где была подозрительная цифра. Сама по себе она была не большой, но в цикле решения СЛУ превращалась в нечто большее чем Число(32,32). Непонятно как в будущем ловить или избегать таких ситуаций...
YPermitin; +1 Ответить
2. feva 513 17.10.17 14:56 Сейчас в теме
(1)Ну тут самым рациональным решением будет положить отрубленную голову быка к идолу 1с на алтарь из журналов ИТС...
А если серьёзно практика показывает, что если соблюдать методологию ведения учёта согласно регламенту 1с то в целом всё работает адекватно. Ввод документов по порядку (Поступление-Реализация), выполнение регламентых операций в срок и ДатаЗапретаИзменений = КонецВчерашнегоДня();
3. tva120 3 17.10.17 17:55 Сейчас в теме
(2) А где такой чистый регламент достать? Помахать бухгалтерам, которые не верят. :)
4. feva 513 17.10.17 18:18 Сейчас в теме
(3)Согласно старой еврейской поговорке "Если в барделе плохо идут дела нужно не кровати двигать, а проституток менять" =) и самое главное ДатаЗапретаИзменений = КонецВчерашнегоДня()!!
Strannik777; itriot11; manlak; tva120; +4 Ответить
5. feva 513 23.10.17 10:39 Сейчас в теме
(3)А если серьёзно то есть такое понятие у 1с как Справочник хозяйственных операций. Доступ к сие чуду есть только с подпиской ИТС техно и выше.
6. feva 513 23.10.17 10:41 Сейчас в теме
(3)Небыло возможности ответить. В этом справочнике описывается весь порядок работы с базой в картиночках и с отсылками к законодательству и комментариями.
20. RibD 27.10.23 13:10 Сейчас в теме
(1) Получали такую ошибку из-за "закольцованного" производственного документа, когда на входе в производство и на выходе из производства одно и то же количество.
Но проблема возникает не из-за таких документов, а в случае, когда к дате-времени этого документа ничего на складе нет. (а должно быть).
Вылечили смещением Перемещения товаров (с производственного склада) на время - после производственного документа.
7. bendarik 30.03.18 17:52 Сейчас в теме
...За её основу былим взяты комментарии программистов 1С...

Наглый копипаст!
Читатель, ожидая "подробного описания", наталкивается на плагиат, вплоть до запятых. Очевидно, что в своем P.S. аффтар таки расскрывает тему статьи утверждая, что "взято" только за "основу" и только "комментарии".

Источник: описание разработчиков, с которого начинается общий модуль "РасчетСебестоимости".

P.S.
Мы создаём...

...ничего

P.P.S.
Ждем новых плагиатов статей из "Синтакс-помощника"!
Прикрепленные файлы:
skeptik2105; mivari; feva; +3 Ответить
8. feva 513 04.04.18 10:50 Сейчас в теме
(7)Доброго времени суток. Не у всех есть доступ к просмотру или желание "копаться" в модулях 1с. На 13к просмотров более 100 лукасов и 1 отрицательный комментарий - тоже результат.
RibD; Strelka007; Strannik777; slnoff@mail.ru; +4 Ответить
9. bendarik 05.04.18 18:06 Сейчас в теме
(8) Владислав, вы или передергиваете, или не понимаете сути выложенного вами текста.

Не у всех есть доступ к просмотру или желание "копаться" в модулях 1с

Дело в том, что это описание будет полезно только для тех кому предстоит копаться в этих модулях, независимо от их желания.
Описание точки входа расчета, схемы выполнения расчета, структуры этапа расчета, нюансы обращения к данным и т.д. - кому это надо как не разрабу перед погружением?!

13к просмотров

Могу предположить, что эти тысячи, как и я, оказались тут только из-за "Подробного описания...". И тут нет элемента просвещения чтобы приводить это в качестве аргумента.
romankop; RustIG; +2 Ответить
11. feva 513 06.04.18 13:23 Сейчас в теме
(9) Да, всё правильно! Я так и написал это в аннотации статьи, что это всё описано в комментариях, и что это больше полезно для разработчиков.
Зачастую, когда встаёт вопрос о валовой прибыли предприятия, то большой проблемой становится корректная оценка себестоимости товаров. Для того, чтобы программисту было понятно, как программа рассчитывает себестоимость, нужно понимать алгоритмы, которых придерживались разработчики. Данная статья описывает, как это работает в актуальных (начиная с версии ERP 2.1.3 (и соответствующих ей версий КА и УТ)) версиях программы, и наиболее полезна для программиста.
Данные алгоритмы описаны разработчиками в комментариях расчета себестоимости.
10. bendarik 05.04.18 18:10 Сейчас в теме
(8)
...тоже результат

Конечно, зависит от того какие цели вы перед собой ставите.
12. MaCCapAkIII 25.04.20 21:39 Сейчас в теме
Есть ли на просторах или на ИС действительно подробное описание процесса расчета себестоимости? Мне бы подошел разбор расчета себестоимости на одном товаре. То есть был Товар 1, поступал в течение месяца в таком-то количестве, продавался рознично и оптово в течение месяца в таком-то количестве. В начале следующего месяце решили посчитать себестоимость. Берем движения отсюда, остатки за такой-то период отсюда, по формуле ххх высчитываем и записываем, сравниваем, формируем... Что-то в этом роде.
Столкнулся с необходимостью (вернее, поставили задачу) сформировать руками документ РасчетСебестоимостиТоваров (предварительный) с корректным расчетом стоимостей (УТ 11 сейчас рассчитывает их, стоимости, некорректно при расчете себестоимости через РЗ). И я понятия не имею об алгоритме работы документа РасчетСебестоимости. Очень пригодился бы подробный разбор, действительно "для чайников".
Понимаю, что перед решением подобного рода задач необходимо получить высшее бухгалтерское образование и иметь кучу сертификатов 1С, но вдруг все-таки есть подобная информация где-то...
13. feva 513 27.04.20 09:28 Сейчас в теме
(12) Добрый день! Не натыкался в свое время, но писал статью давненько. Думаю, если такой фидбэк есть, могу подготовить подобного рода разбор
Sergik_D; Saintinel; MaCCapAkIII; +3 Ответить
14. MaCCapAkIII 27.04.20 10:13 Сейчас в теме
(13) Если в качестве фидбэка считать мою творческую и материальную заинтересованность. Буду признателен.
15. bmk74 233 06.05.20 17:01 Сейчас в теме
(12)
То есть был Товар 1, поступал в течение месяца в таком-то количестве, продавался рознично и оптово в течение месяца в таком-то количестве. В начале следующего месяце решили посчитать себестоимость

(12)
Столкнулся с необходимостью (вернее, поставили задачу) сформировать руками документ РасчетСебестоимостиТоваров (предварительный)


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

А вообще сам механизм довольно таки сложный, и основан на расчете графов, при том графы строятся именно запросами, И отдельно сделан расчет по партиям, и отдельно расчет себестоимости...
Если по простому...Сначала рассчитываются партии при помощи тех же графов, потом считается предварительная себестоимости товаров
и записывается в регистр стоимость товаров, там же и доп расходы просчитываются, потом доп расходы раскидываются на рассчитанные партии, и в конце еще раз запускается расчет себестоимости но уже с учетом партионки

Это если у вас по фифо стоит , если по средней там попроще, партионка не считается,
Бухгалтерское образование там ни к чему, а вот теорию графов знать нужно...
19. Saintinel 14.11.21 00:57 Сейчас в теме
(15) Очень интересно как работать с расчетом графов. По коду понять сходу не вышло. Есть какая нибудь статья или литература с помощью которой можно понять механизм? Конкретно интересует расчёт партий.
16. Vanch90 24.07.20 11:28 Сейчас в теме
Добрый день. Не сталкивались с подобным? в движениях себестоимости, а именно в полях количества неверные данные. В документе 14, а регистре себестоимости 25 например. Ечли сделать отмену проведения и провести заного, встают нормально количество. Тестировал на тестовых базах, такой ошибки поймать не смог.
Возможно это из-за кэша? Или есть другие причины?
17. doom2good 136 09.09.20 12:19 Сейчас в теме
Хотел написать коммент про отладку расчета себестоимости, но получилась целая статья https://infostart.ru/public/1291127/
18. koronador 29.09.21 15:38 Сейчас в теме
(16.) Дополнительные движения, появляются после закрытия месяца , я так предполагаю. Не нашли причину - решение ?
Оставьте свое сообщение