PDA

Просмотр полной версии : Скидки для клиентов



Luchfan12
16.12.2016, 13:53
Есть справочник где содержатся клиенты. Имеется документ Оказание Услуги, где есть сумма, на которую воспользовался клиент услугами и товарами. Хочу сделать систему скидок, где будут выводиться скидки в зависимости от той суммы, на которую клиент купил товары и воспользовался услугами.
Код документа ОказаниеУслуги (Модуль Менеджера)



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

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПереченьНоменклату рыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклату ры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
ОбластьИтог = Макет.ПолучитьОбласть("Всего");
ТабДок.Очистить();

ВставлятьРазделительСтран иц = Ложь;
СуммаИтог = 0;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтран иц Тогда
ТабДок.ВывестиГоризонталь� �ыйРазделительСтраниц();
КонецЕсли;

ТабДок.Вывести(ОбластьЗаго ловок);

Шапка.Параметры.Заполнить(� �ыборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());

ТабДок.Вывести(ОбластьПере ченьНоменклатурыШапка);
ВыборкаПереченьНоменклату ры = Выборка.ПереченьНоменклат� �ры.Выбрать();
Пока ВыборкаПереченьНоменклату ры.Следующий() Цикл
ОбластьПереченьНоменклату ры.Параметры.Заполнить(Выб� �ркаПереченьНоменклатуры);
ТабДок.Вывести(ОбластьПере ченьНоменклатуры, ВыборкаПереченьНоменклату ры.Уровень());
СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклату ры.Сумма;
КонецЦикла;

ВставлятьРазделительСтран иц = Истина;
ОбластьИтог.Параметры.Всег оПоДокументу = СуммаИтог;
ТабДок.Вывести(ОбластьИтог );
КонецЦикла;
//}}
КонецПроцедуры


В общем я думаю, что надо обойти всю табличную часть данного документа и в зависимости от значения в поле СуммаИтог выводить определённую скидку с использованием условий Если и Иначе.
Есть вопросы:
1) Где лучше выводить скидку: в справочнике Клиенты или документе ОказаниеУслуги?
2) При выводе скидки надо создавать реквизит Скидка?
3) Процедуру установления скидок прописывать в модуле менеджера документа Оказание Услуги или справочнике Клиенты?
СуммаИтог выводится после печати!!!

avm3110
16.12.2016, 14:21
Есть справочник где содержатся клиенты. Имеется документ Оказание Услуги, где есть сумма, на которую воспользовался клиент услугами и товарами. Хочу сделать систему скидок, где будут выводиться скидки в зависимости от той суммы, на которую клиент купил товары и воспользовался услугами.
Код документа ОказаниеУслуги (Модуль Менеджера)



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

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПереченьНоменклату рыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклату ры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
ОбластьИтог = Макет.ПолучитьОбласть("Всего");
ТабДок.Очистить();

ВставлятьРазделительСтран иц = Ложь;
СуммаИтог = 0;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтран иц Тогда
ТабДок.ВывестиГоризонталь� �ыйРазделительСтраниц();
КонецЕсли;

ТабДок.Вывести(ОбластьЗаго ловок);

Шапка.Параметры.Заполнить(� �ыборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());

ТабДок.Вывести(ОбластьПере ченьНоменклатурыШапка);
ВыборкаПереченьНоменклату ры = Выборка.ПереченьНоменклат� �ры.Выбрать();
Пока ВыборкаПереченьНоменклату ры.Следующий() Цикл
ОбластьПереченьНоменклату ры.Параметры.Заполнить(Выб� �ркаПереченьНоменклатуры);
ТабДок.Вывести(ОбластьПере ченьНоменклатуры, ВыборкаПереченьНоменклату ры.Уровень());
СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклату ры.Сумма;
КонецЦикла;

ВставлятьРазделительСтран иц = Истина;
ОбластьИтог.Параметры.Всег оПоДокументу = СуммаИтог;
ТабДок.Вывести(ОбластьИтог );
КонецЦикла;
//}}
КонецПроцедуры


В общем я думаю, что надо обойти всю табличную часть данного документа и в зависимости от значения в поле СуммаИтог выводить определённую скидку с использованием условий Если и Иначе.
Есть вопросы:
1) Где лучше выводить скидку: в справочнике Клиенты или документе ОказаниеУслуги?
2) При выводе скидки надо создавать реквизит Скидка?
3) Процедуру установления скидок прописывать в модуле менеджера документа Оказание Услуги или справочнике Клиенты?
СуммаИтог выводится после печати!!!

Плохой вариант...

Типовое решение 1С для таких случаях использовать регистр накопления (документы двигают туда-обратно регистр, а механизм скидок использует значение регистр "на дату")

Luchfan12
16.12.2016, 14:27
Плохой вариант...

Типовое решение 1С для таких случаях использовать регистр накопления (документы двигают туда-обратно регистр, а механизм скидок использует значение регистр "на дату")

У меня есть регистр накопления Остатки Материалов. Каким образом использовать механизм скидок? И что нужно прописать в данном регистре накопления?

avm3110
16.12.2016, 15:19
У меня есть регистр накопления Остатки Материалов.

Э-э-э.. Ну вообще-то "Остатки материалов" и "Взаиморасчеты с контрагентами" это не одно и тоже :mad:

Судя по изложенному в топике алгоритму Скидки зависят исключительно от объема заказов контрагента (причем в суммовом, а не в количественном измерении). Следовательно регистр оборотов "Остатки материалов" нам явно не подходят :blush:

Luchfan12
16.12.2016, 16:10
Э-э-э.. Ну вообще-то "Остатки материалов" и "Взаиморасчеты с контрагентами" это не одно и тоже :mad:

Судя по изложенному в топике алгоритму Скидки зависят исключительно от объема заказов контрагента (причем в суммовом, а не в количественном измерении). Следовательно регистр оборотов "Остатки материалов" нам явно не подходят :blush:

А можно сделать систему скидок через регистр сведений "Цены", который имеется у меня в конфигурации? Если да, то как? В данном регистре сведений есть цены на товары и услуги, которые используются в документе Оказание услуги, когда в него добавляют товары и услуги.

avm3110
16.12.2016, 23:57
А можно сделать систему скидок через регистр сведений "Цены", который имеется у меня в конфигурации? Если да, то как? В данном регистре сведений есть цены на товары и услуги, которые используются в документе Оказание услуги, когда в него добавляют товары и услуги.
А смысл меня уговаривать? :blush:

У вас в топике написано "есть сумма, на которую воспользовался клиент услугами и товарами"
Ну а какая может быть связь между вашим прайсом (регистром сведений "Цена" - что ботинки стоят 10 тыр) и тем, что клиент Рога и Копыта закупил на лям этих ботинок и ему скидон 20% за опт, а Вася Пупкин купил 1 пару и ему скидон 5 руб.? :confused: