Luchfan12
16.12.2016, 14:53
Есть справочник где содержатся клиенты. Имеется документ Оказание Услуги, где есть сумма, на которую воспользовался клиент услугами и товарами. Хочу сделать систему скидок, где будут выводиться скидки в зависимости от той суммы, на которую клиент купил товары и воспользовался услугами.
Код документа ОказаниеУслуги (Модуль Менеджера)
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печат� �)
Макет = Документы.ОказаниеУслуги.П олучитьМакет("Печать");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОказаниеУслуги.Дата,
| ОказаниеУслуги.Клиент,
| ОказаниеУслуги.Мастер,
| ОказаниеУслуги.Номер,
| ОказаниеУслуги.Склад,
| ОказаниеУслуги.ПереченьНо� �енклатуры.(
| НомерСтроки,
| Номенклатура,
| Количество,
| Цена,
| Сумма
| )
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Ссылка В (&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать() ;
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПереченьНоменклату рыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклату ры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
ОбластьИтог = Макет.ПолучитьОбласть("Всего");
ТабДок.Очистить();
ВставлятьРазделительСтран иц = Ложь;
СуммаИтог = 0;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтран иц Тогда
ТабДок.ВывестиГоризонталь� �ыйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаго ловок);
Шапка.Параметры.Заполнить(� �ыборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьПере ченьНоменклатурыШапка);
ВыборкаПереченьНоменклату ры = Выборка.ПереченьНоменклат� �ры.Выбрать();
Пока ВыборкаПереченьНоменклату ры.Следующий() Цикл
ОбластьПереченьНоменклату ры.Параметры.Заполнить(Выб� �ркаПереченьНоменклатуры);
ТабДок.Вывести(ОбластьПере ченьНоменклатуры, ВыборкаПереченьНоменклату ры.Уровень());
СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклату ры.Сумма;
КонецЦикла;
ВставлятьРазделительСтран иц = Истина;
ОбластьИтог.Параметры.Всег оПоДокументу = СуммаИтог;
ТабДок.Вывести(ОбластьИтог );
КонецЦикла;
//}}
КонецПроцедуры
В общем я думаю, что надо обойти всю табличную часть данного документа и в зависимости от значения в поле СуммаИтог выводить определённую скидку с использованием условий Если и Иначе.
Есть вопросы:
1) Где лучше выводить скидку: в справочнике Клиенты или документе ОказаниеУслуги?
2) При выводе скидки надо создавать реквизит Скидка?
3) Процедуру установления скидок прописывать в модуле менеджера документа Оказание Услуги или справочнике Клиенты?
СуммаИтог выводится после печати!!!
Код документа ОказаниеУслуги (Модуль Менеджера)
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печат� �)
Макет = Документы.ОказаниеУслуги.П олучитьМакет("Печать");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОказаниеУслуги.Дата,
| ОказаниеУслуги.Клиент,
| ОказаниеУслуги.Мастер,
| ОказаниеУслуги.Номер,
| ОказаниеУслуги.Склад,
| ОказаниеУслуги.ПереченьНо� �енклатуры.(
| НомерСтроки,
| Номенклатура,
| Количество,
| Цена,
| Сумма
| )
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Ссылка В (&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать() ;
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПереченьНоменклату рыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклату ры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
ОбластьИтог = Макет.ПолучитьОбласть("Всего");
ТабДок.Очистить();
ВставлятьРазделительСтран иц = Ложь;
СуммаИтог = 0;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтран иц Тогда
ТабДок.ВывестиГоризонталь� �ыйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаго ловок);
Шапка.Параметры.Заполнить(� �ыборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьПере ченьНоменклатурыШапка);
ВыборкаПереченьНоменклату ры = Выборка.ПереченьНоменклат� �ры.Выбрать();
Пока ВыборкаПереченьНоменклату ры.Следующий() Цикл
ОбластьПереченьНоменклату ры.Параметры.Заполнить(Выб� �ркаПереченьНоменклатуры);
ТабДок.Вывести(ОбластьПере ченьНоменклатуры, ВыборкаПереченьНоменклату ры.Уровень());
СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклату ры.Сумма;
КонецЦикла;
ВставлятьРазделительСтран иц = Истина;
ОбластьИтог.Параметры.Всег оПоДокументу = СуммаИтог;
ТабДок.Вывести(ОбластьИтог );
КонецЦикла;
//}}
КонецПроцедуры
В общем я думаю, что надо обойти всю табличную часть данного документа и в зависимости от значения в поле СуммаИтог выводить определённую скидку с использованием условий Если и Иначе.
Есть вопросы:
1) Где лучше выводить скидку: в справочнике Клиенты или документе ОказаниеУслуги?
2) При выводе скидки надо создавать реквизит Скидка?
3) Процедуру установления скидок прописывать в модуле менеджера документа Оказание Услуги или справочнике Клиенты?
СуммаИтог выводится после печати!!!