При работе с партионным учетом в системах 1С, особенно при использовании метода ФИФО (FIFO), пользователи часто сталкиваются с задачей увидеть фактическую себестоимость списываемых товаров непосредственно в табличной части документа списания еще до его проведения. Стандартный функционал большинства типовых конфигураций 1С не предоставляет такого прямого отображения, что вызывает вопросы о реализации и возможных обходных путях. Давайте подробно разберем эту ситуацию, проанализируем причины такого поведения системы и рассмотрим доступные методы решения.
Основная сложность заключается в том, что расчет фактической себестоимости в 1С, особенно при партионном учете и использовании методов оценки типа ФИФО или средней, является динамическим и часто производится только после проведения документа или даже регламентной операцией по окончании отчетного периода (например, месяца). Это означает, что данные о себестоимости могут быть изменены другими документами, проведенными до или после текущего, что делает предварительный расчет в табличной части документа ненадежным.
Для начала, давайте вспомним, как работает партионный учет и расчет себестоимости в 1С. В большинстве современных конфигураций, таких как Управление торговлей (УТ), Комплексная автоматизация (КА) и ERP Управление предприятием, эти процессы построены на следующих принципах:
Себестоимость товаров. При выборе метода ФИФО в учетной политике, к счетам учета запасов автоматически подключается субконто "Партии", что позволяет отслеживать движение товаров в разрезе документов поступления.Как мы уже выяснили, видеть себестоимость по партиям в табличной части документа до его проведения является нетривиальной задачей в типовых решениях. Давайте рассмотрим основные причины, по которым это так:
Несмотря на вышеуказанные ограничения, существуют подходы и некоторые функциональные возможности, которые могут помочь приблизиться к решению задачи или предоставить необходимую информацию. Рассмотрим их подробнее.
В некоторых конфигурациях, например, в 1С:Управление торговлей, реализован механизм "ручного списания партий". Этот функционал позволяет пользователю самостоятельно выбирать конкретные партии товаров, которые должны быть списаны. Это не автоматическое разбиение строк с расчетом себестоимости, но это дает возможность:
Для использования этой возможности обычно требуется перейти в режим выбора партий из формы документа. Пользователь может указать номенклатуру, а затем система предложит список доступных партий с их количеством и себестоимостью (которая является актуальной на момент выбора). При этом, если в одной строке табличной части вы указали 10 единиц товара, а они фактически списываются из двух разных партий (например, 5 из одной по 100 руб. и 5 из другой по 110 руб.), вам придется вручную разбить эту строку на две и указать для каждой выбранную партию и количество. Себестоимость при этом будет известна из формы выбора партий, но в самой табличной части до проведения она, скорее всего, не отобразится автоматически как "цена списания".
Некоторые специализированные или доработанные конфигурации (например, упоминается Рарус ААА) могут иметь в табличной части документа колонку "сумма списания". Важно понимать, что эта сумма обычно становится видимой и актуальной после проведения документа. Если данные меняются (например, восстанавливается последовательность), то и сумма списания в документе при его повторном открытии может измениться. Это полезно для контроля уже списанной себестоимости, но не решает задачу видеть ее *до* проведения.
Подобный механизм встречается, например, при работе с документами, связанными с таможенными декларациями (ГТД). Пользователь может запросить остатки по партиям ГТД, заполнить ими табличную часть документа, а затем попытаться провести. В случае, если выбранные партии уже были списаны другими документами или возникли отрицательные остатки, система выдаст ошибку проведения. Это вынуждает пользователя перезаполнять табличную часть заново, но дает возможность работать с предположительными данными до проведения. Это ближе к тому, что хочет автор, но требует ручного контроля и потенциально многократных попыток проведения.
Механизм мог бы выглядеть следующим образом:
Этот подход требует серьезной доработки конфигурации, поскольку автоматическое разбиение строк и их заполнение по партиям не является типовым функционалом для отображения себестоимости до проведения.
В настройках учета можно установить режим, при котором себестоимость товара или материала списывается "При проведении документов", а не только "При закрытии месяца". Это позволяет получить более актуальные данные по себестоимости непосредственно после проведения документа, но все еще не гарантирует детализированного отображения по партиям в табличной части *до проведения*. Однако, в режиме "При проведении документов", при перепроведении документа расхода в движениях документа должны появиться записи регистра себестоимости с расчетом сумм, что делает себестоимость более оперативной.
Для контроля и анализа себестоимости уже после проведения документов, мы можем использовать стандартные отчеты, такие как "Себестоимость товаров организаций" или "Себестоимость товаров предприятия". Эти отчеты позволяют детализировать себестоимость по партиям, включая дополнительные расходы, и сверить данные партионного учета.
Для реализации желаемого функционала – видеть разные цены для одной и той же номенклатуры, но из разных партий, еще до проведения документа и с возможностью разделения строк – потребуется значительная доработка конфигурации:
ТоварыНаСкладах, ПартииТоваровНаСкладах) для получения остатков по партиям и их предполагаемой себестоимости. Этот алгоритм должен учитывать метод оценки МПЗ (например, ФИФО) и распределять количество по доступным партиям.Пример гипотетического кода для предварительного расчета (упрощенно, без учета всех сложностей и ТЗР):
// В модуле объекта документа или обработке
Процедура ЗаполнитьСебестоимостьПоПартиям()
Для Каждого СтрокаТЧ Из ТабличнаяЧасть Документа Цикл
// Здесь мы предполагаем, что у нас есть Номенклатура и Количество
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПартииТоваровНаСкладахОстатки.Партия КАК Партия,
| ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК СтоимостьОстаток
|ИЗ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
| &МоментВремени,
| Номенклатура = &Номенклатура
| И Склад = &Склад) КАК ПартииТоваровНаСкладахОстатки
|УПОРЯДОЧИТЬ ПО
| Партии.ДатаПоступления"; // Для FIFO
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
Запрос.УстановитьПараметр("Склад", СтрокаТЧ.Склад); // Предполагаем, что Склад есть в ТЧ или в шапке
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ОсталосьСписать = СтрокаТЧ.Количество;
// Удаляем текущую строку, чтобы потом добавить новые по партиям
// Или модифицируем текущую, если все списывается из одной партии
// Это упрощенный пример, в реальной ситуации нужно аккуратно работать с ТЧ
Пока ОсталосьСписать > 0 И ВыборкаДетальныеЗаписи.Следующий() Цикл
СписываемоеКоличество = Мин(ОсталосьСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);
Если СписываемоеКоличество > 0 Тогда
НоваяЦена = ВыборкаДетальныеЗаписи.СтоимостьОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток;
// Добавляем новую строку в ТЧ или модифицируем текущую, если это первая партия
// В реальной ситуации здесь будет добавление новой строки в копию ТЧ
// или в коллекцию для последующей замены оригинальной строки
Сообщить("Списать " + СписываемоеКоличество + " из партии "
+ ВыборкаДетальныеЗаписи.Партия + " по цене " + НоваяЦена);
// Здесь должны быть действия по добавлению строки в ТЧ документа с Номенклатурой, Количеством,
// Ценой (НоваяЦена) и, возможно, ссылкой на Партию.
ОсталосьСписать = ОсталосьСписать - СписываемоеКоличество;
КонецЕсли;
КонецЦикла;
Если ОсталосьСписать > 0 Тогда
Сообщить("Недостаточно остатков по партиям для номенклатуры " + СтрокаТЧ.Номенклатура, СтатусСообщения.Важное);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Это лишь схематичный пример, который демонстрирует логику получения партий и их себестоимости. Реализация будет значительно сложнее, особенно в части работы с табличной частью документа (добавление, удаление, изменение строк) и учетом потенциальных ошибок.
В некоторых конфигурациях, таких как 1С:ERP и Комплексная автоматизация, существует понятие "обособленного учета товаров". Это позволяет жестко привязать товар к определенному назначению или сделке. Если себестоимость должна отслеживаться строго для конкретного заказа или проекта, обособленный учет может быть полезен. Однако, это скорее механизм контроля, а не способ автоматического отображения себестоимости по партиям в табличной части до проведения.
Таким образом, мы видим, что прямое, автоматическое отображение разных цен для одной строки списываемых товаров, принадлежащих разным партиям, до проведения документа не является стандартным функционалом в большинстве типовых конфигураций 1С. Однако, существуют следующие подходы:
1С:УТ), это позволит пользователю самостоятельно выбирать партии и видеть их стоимость в окне выбора. Для отображения в ТЧ придется вручную разбивать строки.В целом, принятие решения о необходимости такой доработки должно основываться на реальной бизнес-потребности и готовности к инвестициям в разработку и поддержку функционала, который выходит за рамки типовых возможностей 1С. Всегда учитывайте, что ручная установка цен списания в типовых конфигурациях 1С обычно невозможна, так как себестоимость рассчитывается автоматически по выбранному методу учета.