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

09.10.12

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

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

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

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

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

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

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

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

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

стр.1220

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

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

    стр. 1275

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

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

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

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

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

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

См. также

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

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

03.06.2024    2407    Serg2000mr    28    

90

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

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

1 стартмани

11.04.2024    705    tango    1    

3

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

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

10 стартмани

11.04.2024    570    tango    5    

4

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

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

08.04.2024    913    tango    0    

2

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

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

1 стартмани

05.04.2024    871    tango    12    

2

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

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    3173    YA_418728146    11    

51

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

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1507    10    2ncom    6    

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

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


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

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

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

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

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


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