Организация функционала наценок по позициям либо сегментам номенклатуры в УТ 11.4

07.08.19

Задачи пользователя - Адаптация типовых решений

В статье описан один из методов реализации задачи установки скидок/наценок в соответствии с заданным процентом по позициям/сегментам номенклатуры. Так-же продемонстрирован принцип создания произвольного запроса к ИБ в виде цен. Протестировано на релизе Управление торговлей, редакция 11.4.8.92.

Скачать файлы

Наименование Файл Версия Размер
Организация функционала наценок по позициям либо сегментам номенклатуры в УТ 11.4:
.xml 23,48Kb
4
.xml 23,48Kb 4 Скачать

В моей организации отдел маркетинга поставил следующую задачу: необходимо организовать установку цен в соответствии с заданным в настройках процентом для сегмента либо определенной позиции номенклатуры.

Хочу поделиться тем, каким образом данная задача была решена.

Сразу хочу оговориться, что в нашей системе есть справочник так называемых «Собственных констант», куда мы заносим различные предопределенные элементы и другие настройки.

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

Для реализации данного функционала мы добавили в конфигурацию два объекта: Определяемый тип «ОС_СобственныеКонстанты» (в нем задали составной тип, указав справочники «Номенклатура» и «Сегменты номенклатуры») и справочник «ОС_СобственныеКонстанты» с реквизитами Значение и ДополнительноеЗначение (у обоих реквизитов определяемый тип: ОС_СобственныеКонстанты). Так-же добавили табличную часть с аналогичными реквизитами (префикс добавлен чтобы видно было собственные доработки и при обновлении не возник конфликт имен).

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

Добавим в справочник элемент "Наценка на инструмент". В табличной части зададим сегмент номенклатуры "Инструмент" с наценкой 30% и выделим отдельно позицию "Вентилятор настольный", наценка 25%:

Если позиция номенклатуры есть в сегменте, но помимо этого выделена отдельно, приоритетом будет процент, установленный на позицию отдельно.

Теперь создаем вид цены "Наценка на инструмент", где установим способ задания цены "Произвольный запрос к данным ИБ". При чем для корректной работы нашей создаваемой СКД необходимо установить значение "Произвольный". Если корректировать типовую СКД, то система будет отрабатывать по своим правилам и велика вероятность ошибки.

За основу можно взять любую подходящую СКД.

Логика запроса следующая:

  1. Т.к. наценка будет устанавливаться на базовый вид цены, формируем выборку по регистру сведений "Цены номенклатуры" срез последних, где в условии задаем базовый вид цены;
  2. Выбираем из табличной части справочника "Собственные константы" элементы номенклатуры. В условии задаем ссылку на элемент этого справочника, чтобы для любого вида цены можно было задать свои различные варианты наценок.
  3. Аналогично формируем выборку из нашего справочника по сегментам (при соединении таблиц будет установлен приоритет на элемент).
  4. Соединяем и группируем данные (в моем случае в группировке средняя цена).
  5. И в итоговой таблице считаем цену позиций с учетом полученного процента.

Таблицы запроса:

Часть запроса СКД выложу в виде текста. Вы сможете по этим данным сами соединить таблицы и сформировать итоговый расчет. Готовая СКД есть в прикреплении. Можете ее скачать и просто загрузить в настройках вида цены:

ВЫБРАТЬ РАЗЛИЧНЫЕ
	Сегменты.Номенклатура КАК Номенклатура,
	Сегменты.Характеристика КАК Характеристика,
	ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
	РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
	Сегменты.Сегмент.* КАК СегментНоменклатуры,
	Сегменты.Номенклатура.* КАК Номенклатура,
	Сегменты.Характеристика.* КАК Характеристика}

ИНДЕКСИРОВАТЬ ПО
	Сегменты.Номенклатура,
	Сегменты.Характеристика,
	ИспользуетсяОтборПоСегментуНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
	ЦеныНоменклатурыСрезПоследних.Упаковка КАК Упаковка,
	&Валюта КАК Валюта,
	1 КАК Коэффициент,
	(ВЫРАЗИТЬ(ВЫБОР
			КОГДА ВидыЦен.ЦенаВключаетНДС
						И ЦеныНоменклатурыСрезПоследних.ВидЦены.ЦенаВключаетНДС
					ИЛИ НЕ ВидыЦен.ЦенаВключаетНДС
						И НЕ ЦеныНоменклатурыСрезПоследних.ВидЦены.ЦенаВключаетНДС
				ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
			КОГДА ВидыЦен.ЦенаВключаетНДС
					И НЕ ЦеныНоменклатурыСрезПоследних.ВидЦены.ЦенаВключаетНДС
				ТОГДА ЦеныНоменклатурыСрезПоследних.Цена + ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
							ТОГДА 0.2
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
							ТОГДА 0.18
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
							ТОГДА 0.1
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС0)
							ТОГДА 0
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС)
							ТОГДА 0
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20_120)
							ТОГДА 0.2
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18_118)
							ТОГДА 0.18
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10_110)
							ТОГДА 0.1
						ИНАЧЕ 0
					КОНЕЦ
			КОГДА НЕ ВидыЦен.ЦенаВключаетНДС
					И ЦеныНоменклатурыСрезПоследних.ВидЦены.ЦенаВключаетНДС
				ТОГДА ЦеныНоменклатурыСрезПоследних.Цена - ЦеныНоменклатурыСрезПоследних.Цена * ВЫБОР
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)
							ТОГДА 20 / 120
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
							ТОГДА 18 / 118
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10)
							ТОГДА 10 / 110
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС0)
							ТОГДА 0
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС)
							ТОГДА 0
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20_120)
							ТОГДА 20 / 120
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18_118)
							ТОГДА 18 / 118
						КОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС10_110)
							ТОГДА 10 / 110
						ИНАЧЕ 0
					КОНЕЦ
		КОНЕЦ КАК ЧИСЛО(15, 2))) * ВЫБОР
		КОГДА &Валюта <> ЦеныНоменклатурыСрезПоследних.Валюта
			ТОГДА ВЫБОР
					КОГДА ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) > 0
							И ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) > 0
							И ЕСТЬNULL(КурсыВалюты.Кратность, 0) > 0
							И ЕСТЬNULL(КурсыВалюты.Курс, 0) > 0
						ТОГДА КурсыВалютыЦены.Курс * КурсыВалюты.Кратность / (КурсыВалюты.Курс * КурсыВалютыЦены.Кратность)
					ИНАЧЕ 0
				КОНЕЦ
		ИНАЧЕ 1
	КОНЕЦ КАК Цена
ПОМЕСТИТЬ ЦеныНоменклатурыПоБазовомуВиду
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ))}, ВидЦены = &БазовыйВидЦены {((Номенклатура, Характеристика) В
			    (ВЫБРАТЬ
			        ОтборПоСегментуНоменклатуры.Номенклатура,
			        ОтборПоСегментуНоменклатуры.Характеристика
			    ИЗ
			        ОтборПоСегментуНоменклатуры
			    ГДЕ
			        ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры))}) КАК ЦеныНоменклатурыСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних({(КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ))}, ) КАК КурсыВалютыЦены
		ПО ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютыЦены.Валюта
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних({(КОНЕЦПЕРИОДА(&ДатаДокумента, ДЕНЬ))}, Валюта = &Валюта) КАК КурсыВалюты
		ПО (ИСТИНА)
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
		ПО (ВидыЦен.Ссылка = &ВидЦены)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ОС_СобственныеКонстантыДанные.Значение КАК Номенклатура,
	ВЫРАЗИТЬ(ЕСТЬNULL(ОС_СобственныеКонстантыДанные.ДополнительноеЗначение, 0) КАК ЧИСЛО(15, 2)) КАК ПроцентПоНоменклатуре
ПОМЕСТИТЬ ПроцентыПоНоменклатуре
ИЗ
	Справочник.ОС_СобственныеКонстанты.Данные КАК ОС_СобственныеКонстантыДанные
ГДЕ
	НЕ ОС_СобственныеКонстантыДанные.Значение ССЫЛКА Справочник.СегментыНоменклатуры
	И ОС_СобственныеКонстантыДанные.Ссылка = &Наценка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ОС_СобственныеКонстантыДанные.Значение КАК НоменклатураСегмент,
	ВЫРАЗИТЬ(ЕСТЬNULL(ОС_СобственныеКонстантыДанные.ДополнительноеЗначение, 0) КАК ЧИСЛО(15, 2)) КАК ПроцентПоСегменту
ПОМЕСТИТЬ ПроцентыПоСегментам
ИЗ
	Справочник.ОС_СобственныеКонстанты.Данные КАК ОС_СобственныеКонстантыДанные
ГДЕ
	ОС_СобственныеКонстантыДанные.Значение ССЫЛКА Справочник.СегментыНоменклатуры
	И ОС_СобственныеКонстантыДанные.Ссылка = &Наценка
;

В параметрах зададим базовый вид цены "Себестоимость" и нашу наценку:

Для простоты примера установил себестоимость вручную для 3-х элементов сегмента и рассчитал данные:

При формировании цен расчет автоматически не выполняется (не могу сказать почему) и для пересчета необходимо выбрать пункт меню "Рассчитать вычисляемые (по данным ИБ и формулам)":

Все три позиции есть в сегменте. Однако 1-й Вентилятор рассчитался исходя из установленной наценки в 25, а не 30%, т.к. он был в справочнике выделен отдельно.

Произвольный запрос к ИБ виды цен настройка цены видов установка

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4453    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2956    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1995    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Alexey-Alyosha 08.08.19 18:18 Сейчас в теме
Статья очень помогла. Спасибо!
Сначала хотел сделать аналогично, но используя доп реквизиты номенклатуры и сегмента, задавая в них процент наценки. Однако в этом случае не получилось бы при расчете нескольких видов цен для одной и той-же позиции либо сегмента номенклатуры задать различные проценты наценок. А так - все универсальненько. И типовые объекты не задеты. Да и справочник "Собственные константы" думаю еще не раз пригодиться. В том числе и при разработке обменов.
cheiser1982; +1 Ответить
2. cheiser1982 210 08.08.19 18:21 Сейчас в теме
(1) Рад что пригодилась! У нас кстати данный справочник так-же принимает участие в различных обменах между системами.
Alexey-Alyosha; +1 Ответить
Оставьте свое сообщение