При выполнении операции Разукомплектация в программе 1С:Управление производственным предприятием 1.3 одной из самых трудоемких задач является корректное заполнение колонки «Доля стоимости». Эта колонка определяет, какая часть себестоимости исходного изделия перейдет на каждый полученный в результате разборки компонент. Если оставить эти поля пустыми или заполнить их некорректно, себестоимость выходных изделий будет далека от реальности, что приведет к искажению финансового результата и складских остатков.
В этой статье мы подробно разберем, какую логику можно заложить в алгоритм автоматического заполнения долей, проанализируем математические формулы и рассмотрим различные методики распределения затрат, применяемые на практике.
В 1С:УПП 1.3 документ КомплектацияНоменклатуры с видом операции «Разукомплектация» работает по следующему принципу: общая себестоимость списываемого комплекта распределяется между комплектующими пропорционально указанным долям. Важно понимать, что система не требует, чтобы сумма долей была равна 100 или 1. Программа воспринимает эти значения как весовые коэффициенты. Однако для удобства анализа и во избежание путаницы мы рекомендуем приводить их к общей сумме 100 или 1000.
Это наиболее распространенный и логичный способ. Рассмотрим ситуацию: мы разбираем станок, и нам нужно, чтобы полученные запчасти имели цену, близкую к их обычной закупочной стоимости. Разберем по шагам, как реализовать такой алгоритм.
Проанализируем формулу, которую предложили участники обсуждения:
Доля = (ТекущаяЦена / ОбщаяЦена) * Количество * 1000
Где:
ЦеныНоменклатуры).Рассмотрим пример программной реализации этого алгоритма в коде. Предположим, мы создаем обработку заполнения табличной части:
// Пример получения цен для расчета долей
Для Каждого СтрокаТЧ Из ТабличнаяЧастьКомплектующие Цикл
// Получаем цену из регистра сведений по нужному типу цен
СтруктураПараметров = Новый Структура("Номенклатура, ТипЦен", СтрокаТЧ.Номенклатура, НужныйТипЦен);
ЦенаЕдиницы = Ценообразование.ПолучитьЦенуНоменклатуры(ТекущаяДата(), СтруктураПараметров);
СтрокаТЧ.ЦенаДляРасчета = ЦенаЕдиницы;
СуммарнаяСтоимостьВсех = СуммарнаяСтоимостьВсех + (ЦенаЕдиницы * СтрокаТЧ.Количество);
КонецЦикла;
// Распределяем доли
Для Каждого СтрокаТЧ Из ТабличнаяЧастьКомплектующие Цикл
Если СуммарнаяСтоимостьВсех > 0 Тогда
СтрокаТЧ.ДоляСтоимости = (СтрокаТЧ.ЦенаДляРасчета * СтрокаТЧ.Количество) / СуммарнаяСтоимостьВсех * 100;
Иначе
СтрокаТЧ.ДоляСтоимости = 1; // Дефолтное значение
КонецЕсли;
КонецЦикла;
Для отраслей, связанных с разделкой сырья (металлообработка, деревообработка, мясная промышленность), метод рыночных цен не всегда применим. В таких случаях мы используем распределение по весу или объему. Это логично: если мы разбираем бревно на доски и опилки, стоимость должна распределяться пропорционально массе полученных материалов.
Выясним, как это реализовать:
Номенклатура должен быть заполнен реквизит ВесЧистый (или аналогичное свойство).Этот метод позволяет избежать ситуации, когда побочный продукт (например, обрезь или лом) получает неоправданно высокую себестоимость только потому, что его рыночная цена временно выросла.
Если на предприятии установлены жесткие нормативы, мы можем использовать данные из Спецификаций номенклатуры. Несмотря на то, что спецификация обычно описывает сборку, ее данные можно инвертировать для разборки.
Проанализируем ситуацию: в 1С:УПП можно создать спецификацию вида «Сборочная». При программном заполнении документа разукомплектации мы можем:
Иногда разукомплектация производится для выделения годных запчастей из бракованного изделия. В этом случае мы рекомендуем следующий подход:
Чтобы не изменять типовую конфигурацию УПП 1.3, наиболее правильным путем будет создание внешней обработки заполнения табличных частей. Это позволит пользователю нажать кнопку «Заполнить доли» и выбрать нужный алгоритм прямо в документе.
Посмотрим на структуру такой обработки:
Комплектующие.ЦеныНоменклатуры.СрезПоследних.ДоляСтоимости.Важный нюанс: при разработке алгоритма всегда учитывайте единицы измерения. Если цена в регистре указана за штуку, а в документе стоят коробки, необходимо обязательно использовать коэффициент пересчета из справочника ЕдиницыИзмерения, иначе расчет долей будет в корне неверным.
Используйте функцию ОбщегоНазначения.ФорматСумм() для округления полученных долей, так как слишком большое количество знаков после запятой в колонке «Доля стоимости» иногда может приводить к ошибкам округления при проведении документа в режиме РАУЗ (Расширенная аналитика учета затрат).
Таким образом, комбинируя рыночные цены и физические характеристики, мы можем добиться максимально точного и автоматизированного распределения себестоимости при операциях разборки.