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

09.10.12

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

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

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

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

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

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

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

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

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

стр.1220

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

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

    стр. 1275

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

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

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

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

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

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

См. также

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

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    1899    PROSTO-1C    0    

18

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

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

01.07.2024    1936    Vidz    0    

11

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

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

24.06.2024    1187    olja-ljaaa    0    

3

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

Проблемы при создании ресурсной спецификации. Связь настроек спецификации и настроек структуры заказа в ЕРП 2.5.

06.05.2024    1307    It-digit    1    

2

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

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

1 стартмани

11.04.2024    1140    tango    5    

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

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


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

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

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

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

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


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