Согласен, что пп. 6 и 7 не обязательны, если не хватит времени можно их и не делать, поэтому по очередности они последние. Но их реализация довольно проста, у меня бы на них ушло 5-10 минут, а это может добавить дополнительные очки в вашу пользу.
Добавлено (20.09.2013, 16:30)
---------------------------------------------
А вот и сами обработчики событий:
Процедура ЗаполнениеДопРеквизитаОбработкаЗаполнения(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиентаДополнительныеРеквизиты.НомерСтроки,
| ЗаказКлиентаДополнительныеРеквизиты.Свойство,
| ЗаказКлиентаДополнительныеРеквизиты.Значение,
| ЗаказКлиентаДополнительныеРеквизиты.ТекстоваяСтрока
|ИЗ
| Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
|ГДЕ
| ЗаказКлиентаДополнительныеРеквизиты.Ссылка = &Ссылка
| И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &Свойство";
Запрос.УстановитьПараметр("Ссылка", ДанныеЗаполнения);
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ТорговыйАгент);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НовСтрока = Источник.ДополнительныеРеквизиты.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрока, ВыборкаДетальныеЗаписи);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПроведениеРасчетовСТорговымиАгентамиОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
Если ТипЗнч(Источник) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
//Получим данные документа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| РеализацияТоваровУслугДополнительныеРеквизиты.Значение КАК Агент,
| &ЗаказКлиента
|ПОМЕСТИТЬ ДокРеализации
|ИЗ
| &ТЧДополнительныеРеквизиты КАК РеализацияТоваровУслугДополнительныеРеквизиты
|ГДЕ
| РеализацияТоваровУслугДополнительныеРеквизиты.Свойство = &СвойствоТорговыйАгент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 1
| ЗаказКлиентаДополнительныеРеквизиты.Значение КАК Агент,
| ЗаказКлиентаДополнительныеРеквизиты.Ссылка
|ПОМЕСТИТЬ ДокЗаказ
|ИЗ
| Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты
|ГДЕ
| ЗаказКлиентаДополнительныеРеквизиты.Свойство = &СвойствоТорговыйАгент
| И ЗаказКлиентаДополнительныеРеквизиты.Ссылка = &ЗаказКлиента
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(ДокРеализации.Агент, ДокЗаказ.Агент) КАК Агент
|ПОМЕСТИТЬ ДанныеПоПродажам
|ИЗ
| ДокРеализации КАК ДокРеализации
| ПОЛНОЕ СОЕДИНЕНИЕ ДокЗаказ КАК ДокЗаказ
| ПО ДокРеализации.ЗаказКлиента = ДокЗаказ.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеПоПродажам.Агент,
| ЕСТЬNULL(РазмерКомиссииАгента.Процент, 0) КАК Процент
|ИЗ
| ДанныеПоПродажам КАК ДанныеПоПродажам
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерКомиссииАгента КАК РазмерКомиссииАгента
| ПО ДанныеПоПродажам.Агент = РазмерКомиссииАгента.Партнер";
Запрос.УстановитьПараметр("СвойствоТорговыйАгент", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ТорговыйАгент);
Запрос.УстановитьПараметр("РеализацияТоваров", Источник.Ссылка);
Запрос.УстановитьПараметр("ЗаказКлиента", Источник.ЗаказКлиента);
Запрос.УстановитьПараметр("ТЧДополнительныеРеквизиты", Источник.ДополнительныеРеквизиты.Выгрузить());
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
СуммаВознаграждения = ВыборкаДетальныеЗаписи.Процент * Источник.СуммаДокумента/100;
Если СуммаВознаграждения > 0 Тогда
// регистр РасчетыСТорговымиАгентами Приход
Источник.Движения.РасчетыСТорговымиАгентами.Записывать = Истина;
Источник.Движения.РасчетыСТорговымиАгентами.БлокироватьДляИзменения = Истина;
Движение = Источник.Движения.РасчетыСТорговымиАгентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Источник.Дата;
Движение.Партнер = ВыборкаДетальныеЗаписи.Агент;
Движение.Сумма = СуммаВознаграждения;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Источник) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
Если Источник.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПрочиеРасходы Тогда
ТаблЗн = Источник.РасшифровкаПлатежа.Выгрузить(,"Сумма, СтатьяРасходов, АналитикаРасходов");
ТаблЗн.Свернуть("СтатьяРасходов, АналитикаРасходов", "Сумма");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходныйКассовыйОрдерРасшифровкаПлатежа.АналитикаРасходов КАК Агент,
| РасходныйКассовыйОрдерРасшифровкаПлатежа.Сумма
|ПОМЕСТИТЬ Оплата
|ИЗ
| &ТЧРасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа
|где
| РасходныйКассовыйОрдерРасшифровкаПлатежа.СтатьяРасходов = &СтатьяРасходов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасчетыСТорговымиАгентамиОстатки.Партнер,
| РасчетыСТорговымиАгентамиОстатки.СуммаОстаток
|ПОМЕСТИТЬ Долг
|ИЗ
| РегистрНакопления.РасчетыСТорговымиАгентами.Остатки(
| &ДатаОстатка,
| Партнер В
| (ВЫБРАТЬ
| Оплата.Агент
| ИЗ
| Оплата КАК Оплата)) КАК РасчетыСТорговымиАгентамиОстатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Оплата.Агент,
| Оплата.Сумма КАК СуммаОплаты,
| ЕСТЬNULL(Долг.СуммаОстаток, 0) КАК СуммаДолга,
| ПРЕДСТАВЛЕНИЕ(Оплата.Агент) КАК АгентПредставление
|ИЗ
| Оплата КАК Оплата
| ЛЕВОЕ СОЕДИНЕНИЕ Долг КАК Долг
| ПО Оплата.Агент = Долг.Партнер";
Запрос.УстановитьПараметр("ДатаОстатка", Источник.МоментВремени());
Запрос.УстановитьПараметр("ТЧРасшифровкаПлатежа", ТаблЗн);
Запрос.УстановитьПараметр("СтатьяРасходов", ПланыВидовХарактеристик.СтатьиРасходов.ВознаграждениеТорговымАгентам);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.СуммаОплаты > Выборка.СуммаДолга Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Оплата агенту " + Выборка.АгентПредставление + " в сумме: " + Формат(Выборка.СуммаОплаты, "ЧДЦ=2") + " превышает его долг: " + Формат(Выборка.СуммаДолга, "ЧДЦ=2");
Сообщение.Сообщить();
Отказ = Истина;
Иначе
Если Не Отказ Тогда
// регистр РасчетыСТорговымиАгентами Расход
Источник.Движения.РасчетыСТорговымиАгентами.Записывать = Истина;
Источник.Движения.РасчетыСТорговымиАгентами.БлокироватьДляИзменения = Истина;
Движение = Источник.Движения.РасчетыСТорговымиАгентами.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Источник.Дата;
Движение.Партнер = Выборка.Агент;
Движение.Сумма = Выборка.СуммаОплаты;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры