При переходе на партионный учет многие пользователи 1С ожидают, что система автоматически начнет предлагать цены, основанные на стоимости последней закупки. Однако на практике часто возникает ситуация, когда документ Установка цен номенклатуры продолжает рассчитывать цену по «средней» себестоимости, даже если в учетной политике выбран метод ФИФО. В этой статье мы подробно разберем, почему так происходит и как реализовать расчет цены по последней партии с учетом всех дополнительных расходов.
Прежде всего, проанализируем работу стандартной схемы компоновки данных (СКД) «Себестоимость с дополнительными расходами». По умолчанию эта схема обращается к виртуальной таблице остатков регистра накопления СебестоимостьТоваров. Рассмотрим алгоритм ее работы:
Даже если у вас включен партионный учет версии 2.2 и метод оценки ФИФО (скользящая оценка), для документа установки цен целью является определение единой цены продажи для всего имеющегося товара. Типовая логика 1С предполагает, что цена должна покрывать среднюю стоимость остатка, а не ориентироваться только на последнюю поставку. Именно поэтому программист при анализе запроса видит «среднюю» цену — это результат математического усреднения всех партий в регистре.
Важно понимать фундаментальное различие: метод ФИФО управляет порядком списания стоимости при продаже (выбытии) товара. Он гарантирует, что при реализации сначала будет списана себестоимость первой пришедшей партии. Однако этот метод напрямую не диктует правилам ценообразования, какую цену ставить в документе Установка цен номенклатуры. Для получения стоимости последней закупки нам необходимо изменить саму логику выборки данных из информационной базы.
Ситуация осложняется, когда к цене поставщика нужно добавить распределенные транспортно-заготовительные расходы (ТЗР). В системе 1С данные распределяются следующим образом:
Регистр «Закупки» хранит «чистую» цену поставщика из документа поступления. Здесь легко найти последнюю закупку, но здесь нет информации о доп. расходах.
Регистр «Себестоимость товаров» хранит уже распределенные расходы, но после закрытия месяца и выполнения регламентных операций. Доп. расходы привязываются к партии, но стандартный запрос их агрегирует.
Выясним причину: чтобы получить «Цену поступления + Доп. расходы», нам нужно соединить данные о последней партии и данные о распределенных на нее затратах, игнорируя при этом остатки предыдущих, более дешевых или дорогих партий.
Поскольку типового «переключателя» для решения этой задачи не существует, нам потребуется создать новый Вид цены с произвольным запросом. Рассмотрим этот процесс по шагам.
Шаг 1. Создание нового вида цены
Перейдем в раздел CRM и маркетинг — Настройки и справочники — Виды цен. Создадим новый элемент и установим способ задания цены: Произвольный запрос к данным ИБ. В качестве схемы компоновки данных выберем «Произвольную» и откроем конструктор запроса.
Шаг 2. Написание запроса для выборки последней партии
Нам необходимо получить данные из регистра СебестоимостьТоваров, но не через таблицу остатков, а через таблицу оборотов или среза последних записей в контексте партий. Рассмотрим пример логики запроса, который может использовать программист:
ВЫБРАТЬ
Себестоимость.Номенклатура КАК Номенклатура,
Себестоимость.Характеристика КАК Характеристика,
Себестоимость.Стоимость / Себестоимость.Количество КАК ЦенаПоследнейПартии
ИЗ
РегистрНакопления.СебестоимостьТоваров КАК Себестоимость
ГДЕ
Себестоимость.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
И Себестоимость.Период В (
ВЫБРАТЬ
МАКСИМУМ(Т.Период)
ИЗ
РегистрНакопления.СебестоимостьТоваров КАК Т
ГДЕ
Т.Номенклатура = Себестоимость.Номенклатура
)
Проанализируем этот код: мы ищем максимальную дату записи в регистре себестоимости, которая была порождена документом закупки. Это позволяет нам вычислить стоимость единицы товара именно для самого свежего поступления.
Шаг 3. Учет распределенных доп. расходов
Чтобы в цену попали доп. расходы, запрос должен обращаться к данным после выполнения процедуры Распределение расходов. Рассмотрим более надежный вариант — использование данных регистра Детализация партий товаров для налогов (в версии 2.2). Этот регистр содержит максимально подробную информацию о стоимости партии, включая ТЗР. Проанализируем структуру запроса к нему:
РегистрНакопления.ДетализацияПартийТоваровДляНалогов.МАКСИМУМ(Период) или МАКСИМУМ(Партия.Дата).При реализации данного подхода следует учитывать несколько критических моментов:
1. Закрытие месяца: В 1С:УТ 11 окончательная себестоимость (с учетом всех доп. расходов и корректировок) формируется только после завершения всех этапов закрытия месяца. Если вы пытаетесь установить цену на основе последней партии «день в день», данные о доп. расходах могут быть еще не распределены, и система выдаст только цену из документа закупки.
2. Версия партионного учета: Убедитесь, что в настройках (НСИ и администрирование — Финансовый результат и контроллинг) используется Партионный учет 2.2. В старых версиях (2.1) структура регистров отличается, и запрос придется переписывать под регистр ПартииТоваровНаСкладах.
3. Отсутствие остатка: Если вы хотите устанавливать цену по последней закупке даже тогда, когда товара нет в наличии, запрос должен обращаться к оборотам или документам поступления, а не к таблице остатков.
Для реализации задачи «Цена последней закупки + доп. расходы» в 1С:УТ 11 не подходит стандартная настройка СКД, так как она ориентирована на среднюю стоимость остатка. Рассмотрим краткий итог наших действий:
СебестоимостьТоваров или Детализация партий товаров для налогов.МАКСИМУМ по дате партии, чтобы отсечь старые приходы.Такой подход позволит автоматизировать ценообразование и всегда поддерживать актуальные цены, оперативно реагируя на изменение стоимости закупок и логистики.