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

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

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

Принцип работы учета по продажным ценам

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

Рассмотрим порядок действий для реализации этой схемы:

  1. Хранение продажных цен в периодическом регистре сведений (например, ЦеныНоменклатуры).
  2. Получение актуальной розничной цены на дату документа поступления с помощью метода СрезПоследних.
  3. Расчет продажной стоимости для каждой строки табличной части и формирование движений по регистру.

Шаг 1. Организация регистра сведений для хранения цен

Для хранения установленных розничных цен создадим или задействуем периодический регистр сведений ЦеныНоменклатуры (периодичность — В пределах секунды или В пределах дня).

Измерения и ресурсы регистра сведений:

  1. Измерения: Номенклатура (Тип: СправочникСсылка.Номенклатура), ТипЦен (Тип: СправочникСсылка.ТипыЦен, если используется несколько типов цен).
  2. Ресурсы: Цена (Тип: Число, точность 2).

Шаг 2. Корректировка структуры регистров накопления

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

Рекомендуется объединить учет в один регистр накопления остатков УчетТоваров со следующей структурой:

  1. Измерения: Номенклатура (Тип: СправочникСсылка.Номенклатура), Склад (Тип: СправочникСсылка.Склады).
  2. Ресурсы: Количество (Тип: Число), СтоимостьПродажная (Тип: Число).

Шаг 3. Доработка процедуры проведения документа «Приходная накладная»

Разберем алгоритм получения розничной цены и формирования движений в процедуре ОбработкаПроведения модуля документа. Нам потребуется обратиться к регистру сведений ЦеныНоменклатуры через выборку или запрос.

Рассмотрим пример кода с использованием метода СрезПоследних объекта РегистрыСведений.ЦеныНоменклатуры:


Процедура ОбработкаПроведения(Отказ, Режим)
	
	Движения.УчетТоваров.Записывать = Истина;
	Движения.УчетТоваров.Очистить();
	
	Для Каждого ТекСтрока Из СписокТоваров Цикл
		
		// 1. Получаем актуальную продажную цену из регистра сведений
		Отбор = Новый Структура;
		Отбор.Вставить("Номенклатура", ТекСтрока.Номенклатура);
		Отбор.Вставить("ТипЦен", Справочники.ТипыЦен.Розничная);
		
		СрезЦен = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(Дата, Отбор);
		
		Если СрезЦен.Количество() = 0 Или СрезЦен[0].Цена = 0 Тогда
			Сообщить("Для товара """ + ТекСтрока.Номенклатура + """ не задана розничная цена!");
			Отказ = Истина;
			Возврат;
		КонецЕсли;
		
		ПродажнаяЦена = СрезЦен[0].Цена;
		ПродажнаяСумма = ТекСтрока.Количество * ПродажнаяЦена;
		
		// 2. Формируем движение по регистру остатков в продажных ценах
		Движение = Движения.УчетТоваров.ДобавитьПриход();
		Движение.Период = Дата;
		Движение.Номенклатура = ТекСтрока.Номенклатура;
		Движение.Склад = Склад;
		Движение.Количество = ТекСтрока.Количество;
		Движение.СтоимостьПродажная = ПродажнаяСумма;
		
	КонецЦикла;
	
КонецПроцедуры

Для повышения производительности при проведении документов с большим количеством строк рекомендуется делать не отдельные обращения к СрезПоследних в цикле, а один запрос к таблице РегистрыСведений.ЦеныНоменклатуры.СрезПоследних по всем позициям из табличной части документа.

Особенности и подводные камни учета по продажным ценам

Выясним важные нюансы, которые необходимо учитывать при проектировании системы с такой моделью учета:

  1. Изменение розничной цены (переоценка): Если продажная цена товара меняется, сумма остатков в регистре перестает соответствовать новой цене. Для актуализации стоимости потребуется ввод документа ПереоценкаТоваров, который делает корректировочные движения (дооценку или уценку) по ресурсу СтоимостьПродажная.
  2. Контроль проведения: Если розничная цена на дату проведения документа не установлена, проведение должно блокироваться с установкой Отказ = Истина, иначе учетная стоимость оприходованного товара станет нулевой.
  3. Списание при продаже и перемещении: При списании (в расходной накладной или чеке ККМ) списывается количество и соответствующая продажная стоимость, рассчитанная по текущей розничной цене или по средней стоимости остатка в регистре.
← На главную