При разработке учетных систем на платформе 1С перед программистом часто встает задача организации суммового учета товарно-материальных ценностей. Вопрос о том, как реализовать методы оценки ФИФО (First In, First Out) и По средней, является базовым для понимания архитектуры регистров накопления и алгоритмов проведения документов. Давайте разберем, что это значит на практике и как спроектировать систему для решения такой задачи.
Для реализации данных методов нам недостаточно просто вести количественный учет товара на складе. Мы должны понимать, как определить стоимость списываемого товара. Суть задачи заключается в разделении количественного учета и стоимостного (суммового). В системе 1С это достигается за счет правильной структуры регистра накопления и логики его заполнения при выполнении движений по регистрам.
Метод оценки По средней предполагает, что стоимость списания товара определяется как средневзвешенная величина. В момент списания мы берем всю накопленную сумму по данной номенклатуре и делим ее на общее количество товара, хранящегося на складе. В результате мы получаем среднюю цену единицы, по которой и списываем товар.
С точки зрения метаданных 1С, для учета По средней нам необходимо:
РегистрНакопления, содержащий ресурсы Количество и Сумма.Номенклатура и Склад.Количеству и Сумме, рассчитать среднюю цену, а затем сформировать движения по списанию, используя этот коэффициент.Партия как разрез учета в регистре не используется, так как все поступления «смешиваются» в одну общую стоимость.Метод ФИФО (первым пришел — первым ушел) требует более детального учета. Здесь мы не можем просто «смешать» цены, так как нам нужно строго соблюдать хронологию списания партий поступления. Каждая единица товара должна «помнить» свою цену закупки, установленную в конкретном документе прихода.
Для реализации ФИФО выполним следующие шаги:
Партия. В качестве типа данных для этого измерения используется ДокументСсылка (конкретные документы прихода, такие как ПоступлениеТоваровУслуг).Периоду (дате документа партии).Рассмотрим, как объединить эти подходы в рамках одной конфигурации. Чтобы система могла выбирать метод оценки, мы вводим настройку (обычно в Константах или в РегистреСведений «Учетная политика»).
В модуле проведения документа используем конструкцию, определяющую способ получения данных для списания:
// Пример логики выбора метода списания в модуле проведения
МетодУчета = УчетнаяПолитика.ПолучитьМетодСписания();
Если МетодУчета = Перечисления.МетодыСписания.ПоСредней Тогда
// Запрос к регистру без учета измерения Партия
ТекстЗапроса = "ВЫБРАТЬ СуммаОстаток, КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(...)";
ИначеЕсли МетодУчета = Перечисления.МетодыСписания.ФИФО Тогда
// Запрос к регистру с учетом измерения Партия, сортировка по периоду
ТекстЗапроса = "ВЫБРАТЬ Партия, СуммаОстаток, КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(...) УПОРЯДОЧИТЬ ПО Партия.МоментВремени";
КонецЕсли;
При реализации методов списания необходимо учитывать следующие нюансы:
Партия в регистре должно быть заполнено всегда (даже при средней, можно указывать ПустаяСсылка). Это позволит системе пересчитывать остатки, опираясь на единый механизм движений.Подводя итог, можно сказать, что реализация методов списания — это вопрос управления измерениями регистра и логикой построения запроса к остаткам в модуле проведения. ФИФО требует хранения аналитики по партиям и строгого соблюдения временного порядка, в то время как По средней требует математической обработки накопленных суммовых показателей.