Как реализовать простой производственный учет и расчет себестоимости готовой продукции в 1С 8.3?

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

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

Архитектура учетных регистров

Рассмотрим оптимальную структуру метаданных для учета движения материалов и выпуска продукции. Для решения задачи прямого производственного учета достаточно использовать два регистра накопления с типом Остатки:

  1. Регистр накопления «ОстаткиТМЦ» (или «ОстаткиНоменклатуры»):

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

    Измерения: Номенклатура, Склад.

    Ресурсы: Количество (Число), Сумма (Число — себестоимость).

  2. Регистр накопления «МатериалыВПроизводстве» (НЗП — незавершенное производство):

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

    Измерения: Продукция (номенклатура готового изделия), Материал (номенклатура сырья).

    Ресурсы: Количество (Число), Сумма (Число).

Схема движения документов и расчет себестоимости

Проанализируем цепочку хозяйственных операций и принципы формирования движений в модулях документов:

  1. Поступление материалов:

    Документ ПриходнаяНакладная делает движение Приход в регистр ОстаткиТМЦ с указанием поступившего количества и покупной суммы.

  2. Передача материалов в производство:

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

    — Проверяются остатки материалов на складе и рассчитывается текущая себестоимость списания по средней стоимости (или FIFO);

    — Формируется движение Расход по регистру ОстаткиТМЦ (списываются количество и сумма);

    — Формируется движение Приход по регистру МатериалыВПроизводстве с заполнением измерений Продукция, Материал и ресурсов Количество, Сумма.

  3. Выпуск готовой продукции:

    В документе указывается выпускаемая номенклатура (с видом «Готовая продукция»), количество и склад-получатель. В момент проведения система определяет накопленные прямые затраты:

    — Запрашиваются остатки из регистра МатериалыВПроизводстве с отбором по выпущенной продукции;

    — Формируется движение Расход по регистру МатериалыВПроизводстве, полностью или пропорционально списывающее зависшие затраты по данному изделию;

    — Накопленная сумма затрат переносится в движение Приход регистра ОстаткиТМЦ (на склад готовой продукции поступает количество выпущенных изделий с рассчитанной совокупной себестоимостью).

  4. Реализация готовой продукции:

    Документ РасходнаяНакладная списывает готовую продукцию со склада движением Расход из регистра ОстаткиТМЦ (списывается количество и рассчитанная при выпуске себестоимость).

Алгоритм проведения документа «Выпуск продукции»

Разберем пример программного кода в модуле документа ВыпускПродукции в процедуре ОбработкаПроведения. Обратите внимание на установку управляемых блокировок и корректное списание копеечных остатков.


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    Движения.МатериалыВПроизводстве.Записывать = Истина;
    Движения.ОстаткиТМЦ.Записывать = Истина;
    
    // Устанавливаем управляемую блокировку
    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.МатериалыВПроизводстве");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.УстановитьЗначение("Продукция", Продукция);
    Блокировка.Заблокировать();
    
    // Запрос остатков материалов в производстве
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Остатки.Материал КАК Материал,
        |	Остатки.КоличествоОстаток КАК КоличествоОстаток,
        |	Остатки.СуммаОстаток КАК СуммаОстаток
        |ИЗ
        |	РегистрНакопления.МатериалыВПроизводстве.Остатки(&МоментВремени, Продукция = &Продукция) КАК Остатки";
    
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Продукция", Продукция);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    ОбщаяСебестоимостьВыпуска = 0;
    
    Пока Выборка.Следующий() Цикл
        // Списываем все зависшие в НЗП затраты под данную продукцию
        Движение = Движения.МатериалыВПроизводстве.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Продукция = Продукция;
        Движение.Материал = Выборка.Материал;
        Движение.Количество = Выборка.КоличествоОстаток;
        Движение.Сумма = Выборка.СуммаОстаток;
        
        ОбщаяСебестоимостьВыпуска = ОбщаяСебестоимостьВыпуска + Выборка.СуммаОстаток;
    КонецЦикла;
    
    // Приходуем готовую продукцию на склад
    ДвижениеТМЦ = Движения.ОстаткиТМЦ.ДобавитьПриход();
    ДвижениеТМЦ.Период = Дата;
    ДвижениеТМЦ.Склад = Склад;
    ДвижениеТМЦ.Номенклатура = Продукция;
    ДвижениеТМЦ.Количество = Количество;
    ДвижениеТМЦ.Сумма = ОбщаяСебестоимостьВыпуска;
    
КонецПроцедуры

Реализация разграничения доступа по складам (RLS)

Рассмотрим, как настроить условие, при котором кладовщики видят документы и остатки только своего склада, а пользователи с полными правами управляют всей базой:

  1. Создание параметра сеанса:

    В ветке метаданных создаем параметр сеанса ТекущийСклад (тип: СправочникСсылка.Склады).

  2. Инициализация в модуле сеанса:

    В предопределенной процедуре УстановкаПараметровСеанса модуля сеанса определяем склад текущего пользователя:

    
    Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
        Если ТребуемыеПараметры.Найти("ТекущийСклад") <> Неопределено Тогда
            ПараметрыСеанса.ТекущийСклад = ПользователиИнформационнойБазы.ТекущийПользователь().Склад;
        КонецЕсли;
    КонецПроцедуры
    
  3. Настройка ограничений прав (RLS):

    Для пользовательской роли настраиваем ограничение доступа к данным на чтение и изменение документов и регистров со складами:

    ГДЕ Склад = &ТекущийСклад

    Для общей нормативно-справочной информации (справочники Номенклатура, ЕдиницыИзмерения) ограничения RLS не задаются. Для роли ПолныеПрава RLS также не настраивается, что обеспечивает беспрепятственный доступ ко всем данным.

← На главную