Как в УТ 11 реализовать заполнение цен по последней реализации?

Программист 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Способ 1. Использование расширения и перехват события изменения номенклатуры

Это самый оперативный метод для пользователя. Идея заключается в том, чтобы в момент выбора товара в табличную часть документа РеализацияТоваровУслуг система мгновенно находила последнюю цену и подставляла ее в колонку «Цена». Разберем, как это реализовать через расширение конфигурации.

Нам необходимо расширить модуль формы документа (например, ФормаДокумента или ФормаВыбораДинамическая) и создать процедуру-обработчик для события НоменклатураПриИзменении. Основная задача — написать запрос, который обратится к истории продаж.

Проанализируем структуру данных: в УТ 11 информацию о продажах лучше всего получать из регистра накопления ВыручкаИСебестоимостьПродаж или напрямую из документов РеализацияТоваровУслуг. Использование регистра предпочтительнее с точки зрения производительности.

Рассмотрим пример кода для получения цены:


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

Важный нюанс: при реализации этого метода обязательно нужно учитывать характеристики номенклатуры. Если учет ведется в разрезе характеристик, запрос должен содержать условие по АналитикаУчетаНоменклатуры.Характеристика, иначе менеджер может получить неверную цену для другого исполнения товара.

Способ 2. Автоматическое создание документов «Установка цен номенклатуры»

Если клиент хочет остаться в рамках типового механизма (чтобы цены попадали в отчет «Прайс-лист»), можно автоматизировать создание документов установки цен. Проанализируем схему: при проведении документа РеализацияТоваровУслуг система должна проверять, отличается ли цена в документе от текущей цены в регистре. Если отличается — создается новый документ Установка цен номенклатуры.

Для реализации этого метода выполним следующие шаги:

  1. Создадим отдельный Вид цены, например, «Цена последней реализации».
  2. В модуле объекта документа РеализацияТоваровУслуг в процедуре ПередЗаписью или через подписку на событие ОбработкаПроведения добавим логику формирования нового документа установки цен.
  3. В новом документе зафиксируем текущую цену из реализации для данного вида цены.

Этот подход позволяет использовать стандартные механизмы скидок и наценок УТ 11, так как в документе реализации цена будет считаться «официальной» ценой прайс-листа. Однако помните, что это приведет к лавинообразному росту количества документов в базе, если цены меняются часто.

Способ 3. Полуавтоматическое заполнение через кнопку «Заполнить»

Иногда автоматическая подстановка при каждом изменении строки мешает менеджеру (например, если он хочет ввести специфическую цену вручную, а система ее перебивает). В этом случае рассмотрим вариант с добавлением команды в меню «Заполнить» табличной части «Товары».

Выясним преимущества этого метода:

Для реализации используйте механизм дополнительных отчетов и обработок. В функции СведенияОВнешнейОбработке укажите тип ЗаполнениеОбъекта для документа РеализацияТоваровУслуг.

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

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

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

ЦенаЗаЕдиницу = ЦенаИзПрошлогоДокумента / КоэффициентУпаковкиИзПрошлогоДокумента * КоэффициентТекущейУпаковки;

2. Валютный учет. Проанализируем ситуацию: прошлая реализация была в долларах, а текущая — в рублях. Необходимо использовать функции типовой конфигурации для пересчета валюты по курсу на дату нового документа. В УТ 11 для этого удобно использовать методы общего модуля РаботаСКурсамиВалют.

3. Флаг «Цена включает НДС». Проверьте, совпадает ли настройка налогообложения в старом и новом документах. Если в одном документе цена указана с НДС, а во втором — без, прямая подстановка приведет к потере или излишнему начислению налога.

Рекомендации по внедрению

Рассмотрим рекомендации, которые помогут избежать конфликтов с пользователями и руководством:

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

← На главную