Модификация автоматической скидки для ценовых групп

09.10.12

Разработка - Механизмы типовых конфигураций

В конфигурации УТП 1.2 для Украины есть возможность давать скидку как на сумму покупки, так и на количество товара. Последнее реализовано двумя способами - через прямой выбор позиции Номенклатуры или через "Ценовую группа" (установку признака в элементе Номенклатуры с соотношением одна позиция - одна группа). Мне такое исполнение показалась неудобным - зачем создавать скидки для Ценовых групп, а затем пытаться узнать, а кто же в этой группе находится, если проще установить скидку напрямую - ведь при расчете скидок объединения по признаку "Ценовая группа" не происходит - учитывается количество каждой позиции. Описанные ниже изменения позволяют начислять скидку на всю группу, используя суммарное количество товара в одной ценовой группе.

1. Добавляем Перечисление.УсловияСкидкиНаценки.ПоГрупповомуКоличествуТовара
Синоним - "Кол-во в ценовой группе товаров документа превысило"

2. Документ.УстановкаСкидокНоменклатуры
   - МодульОбъекта
         Функция РассчитыватьАвтоматическиеСкидки(ТекВид) , стр.74
       Дополняем  условие проверкой

ИначеЕсли ТекВид = Перечисления.УсловияСкидкиНаценки.ПоГрупповомуКоличествуТовара Тогда   Результат = ИспользованиеСкидок.ИспользоватьСкидкиПоКоличествуТовара;

   - ФормаДокумента
     Процедура ПередОткрытием() , стр.467
      Добавить строку

ЭлементыФормы.Условие.СписокВыбора.Добавить(Перечисления.УсловияСкидкиНаценки.ПоГрупповомуКоличествуТовара);  

3. Общий модуль.ОбработкаТабличныхЧастей
   Процедура РассчитатьСкидкиПриПродаже
    Дополнить кодом,  стр.1215

УсловиеГруппКво = Перечисления.УсловияСкидкиНаценки.ПоГрупповомуКоличествуТовара;

стр.1220

ТаблицаКоличестваГруппТоваров = ТаблицаТоваров.Скопировать( , Номенклатура, ХарактеристикаНоменклатуры, Количество, Коэффициент");
ТаблицаКоличестваГруппТоваров.Колонки.Добавить("ЦеноваяГруппа",,"Группа");
Для Каждого СтрокаТЧ Из ТаблицаКоличестваГруппТоваров Цикл
СтрокаТЧ.ЦеноваяГруппа=СтрокаТЧ.Номенклатура.ЦеноваяГруппа;
КонецЦикла;

ТаблицаКоличестваГруппТоваров.Колонки.Удалить("Номенклатура");
ТаблицаКоличестваГруппТоваров.Свернуть("Номенклатура, ХарактеристикаНоменклатуры", "Количество");
ТаблицаКоличестваГруппТоваров.Индексы.Добавить("Номенклатура, ХарактеристикаНоменклатуры");
СтруктураПоискаГруппКоличества = Новый Структура("Номенклатура, ХарактеристикаНоменклатуры");

    стр. 1275

СтруктураПоискаГруппКоличества.ЦеноваяГруппа = СтрокаТЧ.Номенклатура.ЦеноваяГруппа;
СтруктураПоискаГруппКоличества.ХарактеристикаНоменклатуры = СтрокаТЧ.ХарактеристикаНоменклатуры;

Если (СтрокаСкидок.НУсловие=УсловиеГруппКво) ИЛИ (СокрЛП(СтрокаСкидок.НУсловие)="") Тогда // Последнее условие для промахнувшихся с описанием скидки
КоличествоНоменклатуры = НайтиСтрокуТабЧасти(ТаблицаКоличестваГруппТоваров, СтруктураПоискаГруппКоличества).Количество;
Иначе
КоличествоНоменклатуры = НайтиСтрокуТабЧасти(ТаблицаКоличестваТоваров, СтруктураПоискаКоличества).Количество;
КонецЕсли;

Если
((СтрокаСкидок.НУсловие = УсловиеКолво ИЛИ СтрокаСкидок.НУсловие = УсловиеГруппКво) И СтрокаСкидок.НЗначениеУсловия < КоличествоНоменклатуры Или (СтрокаСкидок.НУсловие <> УсловиеКолво И СтрокаСкидок.НУсловие <> УсловиеГруппКво))
И
((СтрокаСкидок.ЦУсловие = УсловиеКолво ИЛИ СтрокаСкидок.НУсловие = УсловиеГруппКво)И СтрокаСкидок.ЦЗначениеУсловия < КоличествоНоменклатуры Или (СтрокаСкидок.ЦУсловие <> УсловиеКолво И СтрокаСкидок.ЦУсловие <> УсловиеГруппКво))
Тогда

  Указаны номера строк для стандартной конфигурации 1.2.9.1

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

  Одновременно использовать стандартный механизм скидок и с ценовыми группами по одним и тем же позициям не рекомендую - запутаетесь...

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    914    Vidz    0    

6

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    724    olja-ljaaa    0    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    3116    Serg2000mr    29    

100

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

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    799    tango    5    

3

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

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    681    tango    5    

4

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    988    tango    0    

2

Ценообразование, анализ цен Механизмы типовых конфигураций Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    996    tango    12    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sykoku 101 09.10.12 10:00 Сейчас в теме
На всякий случай - процедура расчета табличной части вызывается у АББИИ целых ТРИ (!!!) раза подряд, поэтому быстродействием для сотен/тысяч позиций документа могут быть проблемы...

Полный текст процедуры РассчитатьСкидкиПриПродаже() во вложении.
Прикрепленные файлы:
1C.txt
2. Sykoku 101 17.10.12 19:55 Сейчас в теме
Придумал себе еще один нюанс - а если скидки вообще нет? Т.е. цена у клиента - расчетная (базовая - %), а надо выставлять по единой цене...


Решение найдено.

ОбщийМодуль.Ценообразование.

Функция ПолучитьЦенуНоменклатуры

...
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
			ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.ВалютаЦены, Валюта, Курс, Кратность, Дата);
		КонецЕсли;

//{SSW 12.10.18}		
		// Глобальная скидка
		Если ПолученнаяЦена = 0 Тогда
			СпрДоговора = Справочники.ДоговорыКонтрагентов;  
			НайденнаяСсылка = СпрДоговора.НайтиПоКоду("000000001"); // Номер моего фиктивного договора
			Запрос.УстановитьПараметр("Договор", НайденнаяСсылка);
			Запрос.Текст = ТекстЗапроса;
			Выборка = Запрос.Выполнить().Выбрать();
			Если Выборка.Следующий() Тогда
				Попытка
					Если ДоговорКонтрагента.Владелец.ПринадлежитЭлементу(Выборка.Регистратор.Контрагент) Тогда
						ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
						ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.ВалютаЦены, Валюта, Курс, Кратность, Дата);
						Сообщить("Глобальная Цена для " + Номенклатура);
					Иначе
	//					Сообщить("Глобальная Цена для " + Выборка.Регистратор.Контрагент + ", а не для элемента " + ДоговорКонтрагента.Владелец);
					КонецЕсли;
				Исключение
//						Сообщить("Сбой Глобальная Цена для " + Выборка.Регистратор.Контрагент + ", элемент " + ДоговорКонтрагента.Владелец);
				КонецПопытки;	
			КонецЕсли;
			Запрос.УстановитьПараметр("Договор", ДоговорКонтрагента);
		КонецЕсли;		
		
		
		// Проверим, не установлены ли по этому договору типы цен для групп.
...
Показать


Теперь все, что необходимо - это создать фиктивного покупателя, например, "Для Акций". Создаем ему договор и даем для этого договора СпецУсловия. После проведения документа "Установка поставок по договорам" берем любой редактор объектов (кроме встроенного) и меняем в этом документе нашего фиктивного клиента на группу. Теперь СпецЦена работает для всей группы Котрагентов.
Оставьте свое сообщение