Как отобразить себестоимость товаров по партиям в складских документах 1С до проведения?

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

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

Основная сложность заключается в том, что расчет фактической себестоимости в 1С, особенно при партионном учете и использовании методов оценки типа ФИФО или средней, является динамическим и часто производится только после проведения документа или даже регламентной операцией по окончании отчетного периода (например, месяца). Это означает, что данные о себестоимости могут быть изменены другими документами, проведенными до или после текущего, что делает предварительный расчет в табличной части документа ненадежным.

Основные принципы партионного учета и расчета себестоимости в 1С

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

  1. Методы оценки МПЗ: В учетной политике организации устанавливается метод оценки материально-производственных запасов (МПЗ). Наиболее распространенные методы – по средней себестоимости и по себестоимости первых по времени поступления товаров (ФИФО). Метод ФИФО, например, является обязательным для организаций на УСН (доходы минус расходы).
  2. Расчет себестоимости: Окончательный расчет фактической себестоимости, особенно по методам средней и ФИФО, чаще всего выполняется регламентной операцией "Закрытие месяца". Это означает, что до выполнения этой операции себестоимость в оперативном учете может быть предварительной, плановой или вовсе отсутствовать в детализированном по партиям виде.
  3. Партионный учет в регистрах: Партионный учет реализован посредством регистров оперативного учета, таких как Себестоимость товаров. При выборе метода ФИФО в учетной политике, к счетам учета запасов автоматически подключается субконто "Партии", что позволяет отслеживать движение товаров в разрезе документов поступления.

Почему отображение себестоимости по партиям до проведения документа затруднено

Как мы уже выяснили, видеть себестоимость по партиям в табличной части документа до его проведения является нетривиальной задачей в типовых решениях. Давайте рассмотрим основные причины, по которым это так:

  1. Динамичность данных: На момент заполнения документа и до его проведения, остатки товаров и их себестоимость могут измениться под воздействием других документов. Если мы рассчитаем себестоимость и разобьем строки по партиям, а затем кто-то проведет документ задним числом или просто раньше текущего, наши предварительные данные станут неактуальными. После проведения нашего документа, система все равно пересчитает себестоимость на актуальный момент.
  2. Расчет после проведения: В большинстве случаев, фактическое определение того, с какой партии списывается товар и по какой себестоимости, происходит в момент проведения документа. Программа анализирует остатки партий на момент проведения, применяет выбранный метод учета (например, ФИФО) и формирует движения по регистрам.
  3. Регламентные операции: Окончательная корректировка себестоимости, включающая распределение дополнительных расходов (ТЗР) и прочие корректировки, часто выполняется только в конце месяца в рамках процедуры "Закрытие месяца". До этого момента себестоимость может быть ориентировочной.

Возможные подходы и функциональные возможности 1С

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

1. Ручное списание партий

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

  1. Визуально видеть, какие партии доступны к списанию.
  2. Выбирать конкретные партии из списка, указывая количество к списанию для каждой.

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

2. Отображение "суммы списания" после проведения

Некоторые специализированные или доработанные конфигурации (например, упоминается Рарус ААА) могут иметь в табличной части документа колонку "сумма списания". Важно понимать, что эта сумма обычно становится видимой и актуальной после проведения документа. Если данные меняются (например, восстанавливается последовательность), то и сумма списания в документе при его повторном открытии может измениться. Это полезно для контроля уже списанной себестоимости, но не решает задачу видеть ее *до* проведения.

3. Заполнение табличной части по остаткам с последующей проверкой

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

Механизм мог бы выглядеть следующим образом:

  1. Создается обработка или кнопка в документе для предварительного заполнения табличной части.
  2. Обработка запрашивает актуальные остатки по партиям для номенклатуры, указанной в документе, и их себестоимость.
  3. Если для одной строки номенклатуры необходимо списать количество из нескольких партий, обработка автоматически разбивает исходную строку на несколько, заполняя каждую строкой партии, количеством и себестоимостью.
  4. Пользователь просматривает заполненную табличную часть.
  5. При проведении документа система выполняет стандартный контроль и расчет. Если данные изменились или возникли ошибки, документ не проводится.

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

4. Настройка расчета себестоимости при проведении документов

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

5. Использование отчетов для анализа себестоимости

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

Технические аспекты и возможности доработки

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

  1. Разделение строк табличной части: Начиная с версии платформы 1С 8.3.6, появилась возможность программно разделять и соединять строки в табличных частях. Это может быть использовано для автоматического разбиения одной строки номенклатуры на несколько, каждая из которых будет представлять отдельную партию.
  2. Предварительный расчет себестоимости: Необходимо будет разработать алгоритм, который при заполнении или изменении табличной части документа будет обращаться к регистрам накопления (например, ТоварыНаСкладах, ПартииТоваровНаСкладах) для получения остатков по партиям и их предполагаемой себестоимости. Этот алгоритм должен учитывать метод оценки МПЗ (например, ФИФО) и распределять количество по доступным партиям.
  3. Отображение в табличной части: После разбиения строк и определения себестоимости каждой партии, эти данные должны быть отображены в дополнительных колонках табличной части документа (например, "Цена партии", "Сумма по партии").
  4. Учет дополнительных расходов (ТЗР): Необходимо предусмотреть, как будут учитываться транспортно-заготовительные расходы (ТЗР). В типовых конфигурациях они часто распределяются при закрытии месяца. Если требуется их включение в предварительную себестоимость, это усложнит расчет и потребует собственной логики распределения.
  5. Контроль актуальности: Важно понимать, что даже при такой доработке, предварительно рассчитанная себестоимость может стать неактуальной, если другие пользователи проведут документы, влияющие на остатки и себестоимость партий. Возможно, потребуется механизм оповещения или повторного пересчета при изменении данных. Рекомендуется не отключать контроль оперативных остатков, так как это помогает избежать нарушения последовательности документов и ошибок в расчетах.

Пример гипотетического кода для предварительного расчета (упрощенно, без учета всех сложностей и ТЗР):


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

        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
        Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
        Запрос.УстановитьПараметр("Склад", СтрокаТЧ.Склад); // Предполагаем, что Склад есть в ТЧ или в шапке

        РезультатЗапроса = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

        ОсталосьСписать = СтрокаТЧ.Количество;
        
        // Удаляем текущую строку, чтобы потом добавить новые по партиям
        // Или модифицируем текущую, если все списывается из одной партии
        // Это упрощенный пример, в реальной ситуации нужно аккуратно работать с ТЧ

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

                ОсталосьСписать = ОсталосьСписать - СписываемоеКоличество;
            КонецЕсли;
        КонецЦикла;

        Если ОсталосьСписать > 0 Тогда
            Сообщить("Недостаточно остатков по партиям для номенклатуры " + СтрокаТЧ.Номенклатура, СтатусСообщения.Важное);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

Обособленный учет товаров

В некоторых конфигурациях, таких как 1С:ERP и Комплексная автоматизация, существует понятие "обособленного учета товаров". Это позволяет жестко привязать товар к определенному назначению или сделке. Если себестоимость должна отслеживаться строго для конкретного заказа или проекта, обособленный учет может быть полезен. Однако, это скорее механизм контроля, а не способ автоматического отображения себестоимости по партиям в табличной части до проведения.

Выводы и рекомендации

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

  1. Используйте ручное списание партий: Если такая функциональность доступна в вашей конфигурации (например, в 1С:УТ), это позволит пользователю самостоятельно выбирать партии и видеть их стоимость в окне выбора. Для отображения в ТЧ придется вручную разбивать строки.
  2. Настройте расчет себестоимости при проведении: Установив опцию расчета себестоимости "При проведении документов", вы получите более оперативную информацию о себестоимости сразу после проведения, что сократит зависимость от регламентной операции "Закрытие месяца".
  3. Рассмотрите индивидуальную доработку: Если задача критична и требует точного отображения себестоимости по партиям в табличной части до проведения, а также автоматического разбиения строк, скорее всего, потребуется разработка дополнительного функционала. Это включает в себя запрос остатков по партиям, предварительный расчет себестоимости (с учетом выбранного метода, например, ФИФО), разбиение строк табличной части и отображение рассчитанных значений. Помните, что такая доработка потребует тщательного тестирования и учета всех возможных сценариев, включая изменения данных другими документами.
  4. Анализируйте после проведения: Для проверки и анализа уже списанной себестоимости используйте стандартные отчеты по себестоимости, которые предоставляют полную информацию, включая распределенные дополнительные расходы.

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

← На главную