В начало

Создание Взаимодействий из отчета

 

            Нужно из отчета выбрать нужные записи и создать по ним документ «Взаимодействие».

 

            Отчет будем делать в виде обработки. В обработке будет две формы: одна для вывода отчета, другая – для заполнения данных для документа «Взаимодействия».

Рис. Структура обработки в дереве метаданных

 

            Данные будем выводить в список значений ,который разместим на основной форме.

Рис. Основная форма обработки

 

 

Листинг. Модуль основной формы обработки

 

&НаСервере

Функция ОтобратьНаСервере()  

           

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           Партнеры.Ссылка КАК Абонент,

                        |           Партнеры.F1_УправляющаяКомпания КАК УК,

                        |           Партнеры.УК_ФизЛицо КАК ФИО,

                        |           Партнеры.F1_Дом.Наименование + "", "" + Партнеры.УК_Помещение.НомерПомещенияРЦ КАК Адрес,

                        |           Партнеры.УК_ЛицевойСчетЕИРЦ КАК ЛС,

                        |           Партнеры.F1_Город КАК Город,

                        |           Партнеры.УК_Помещение КАК Помещение,

                        |           Партнеры.F1_ФИО КАК ФИО2,

                        |           Партнеры.F1_Долг КАК СуммаДолга,

                        |           Партнеры.F1_МесяцевДолга КАК ЧислоМесяцевДолга,

                        |           Партнеры.УК_Помещение.НомерПомещенияРЦ КАК НомерПомещенияРЦ,

                        |           Партнеры.F1_Дом.Наименование КАК ДомНаименование,

                        |           Партнеры.Наименование КАК Наименование,

                        |           Партнеры.F1_Дом КАК Дом,

                        |           Партнеры.НетВозможностиОтключения КАК НетВозможностиОтключения

                        |ПОМЕСТИТЬ вт0

                        |ИЗ

                        |           Справочник.Партнеры КАК Партнеры

                        |ГДЕ

                        |           Партнеры.ПометкаУдаления = ЛОЖЬ

                        |           И Партнеры.ЛицевойСчетЗакрыт = ЛОЖЬ

                        |           И НЕ Партнеры.УК_Помещение.Наименование ПОДОБНО ""%машино-место%""

                        |           И НЕ Партнеры.УК_Помещение.Наименование ПОДОБНО ""%кладовая%""

                        |           И НЕ Партнеры.УК_Помещение.Наименование ПОДОБНО ""%нежил%""

                        |           И НЕ Партнеры.УК_Помещение.Наименование ПОДОБНО ""%паркинг%""

                        |           И НЕ Партнеры.УК_Помещение.Наименование ПОДОБНО ""%[a-z]%""

                        |           И Партнеры.НетВозможностиОтключения = ЛОЖЬ

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           Партнеры.Ссылка КАК Абонент,

                        |           F1_СоглашениеОРассрочкеПлатежа.Ссылка КАК СсылкаНаСоглашение,

                        |           F1_СоглашениеОРассрочкеПлатежа.Статус КАК Статус,

                        |           F1_СоглашениеОРассрочкеПлатежа.Должник КАК Должник,

                        |           Партнеры.Наименование КАК Наименование

                        |ПОМЕСТИТЬ вт1

                        |ИЗ

                        |           Документ.F1_СоглашениеОРассрочкеПлатежа КАК F1_СоглашениеОРассрочкеПлатежа

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры

                        |                       ПО F1_СоглашениеОРассрочкеПлатежа.Должник = Партнеры.Ссылка

                        |ГДЕ

                        |           Партнеры.ПометкаУдаления = ЛОЖЬ

                        |           И Партнеры.ЛицевойСчетЗакрыт = ЛОЖЬ

                        |           И ВЫБОР

                        |                                   КОГДА F1_СоглашениеОРассрочкеПлатежа.Ссылка ЕСТЬ NULL

                        |                                                          ИЛИ F1_СоглашениеОРассрочкеПлатежа.Статус = ЗНАЧЕНИЕ(Перечисление.F1_СтатусыРассрочекПлатежа.Действует)

                        |                                              ТОГДА ИСТИНА

                        |                                   ИНАЧЕ ЛОЖЬ

                        |                       КОНЕЦ

                        |           И F1_СоглашениеОРассрочкеПлатежа.ПометкаУдаления = ЛОЖЬ

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           Партнеры.Ссылка КАК Абонент,

                        |           СУММА(ЕСТЬNULL(УК_Оплаты.Сумма, 0)) КАК СуммаОплаты,

                        |           УК_Оплаты.Период КАК Период

                        |ПОМЕСТИТЬ вт2

                        |ИЗ

                        |           Справочник.Партнеры КАК Партнеры

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УК_Оплаты КАК УК_Оплаты

                        |                       ПО (УК_Оплаты.Абонент = Партнеры.Ссылка)

                        |ГДЕ

                        |           Партнеры.ПометкаУдаления = ЛОЖЬ

                        |           И УК_Оплаты.Период > КОНЕЦПЕРИОДА(Партнеры.F1_Месяц, МЕСЯЦ)

                        |           И Партнеры.ЛицевойСчетЗакрыт = ЛОЖЬ

                        |

                        |СГРУППИРОВАТЬ ПО

                        |           Партнеры.Ссылка,

                        |           УК_Оплаты.Период

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           КОЛИЧЕСТВО(Партнеры.Код) КАК КоличествоЛСпоАдресу,

                        |           Партнеры.УК_Помещение КАК Помещение

                        |ПОМЕСТИТЬ вт3

                        |ИЗ

                        |           Справочник.Партнеры КАК Партнеры

                        |ГДЕ

                        |           Партнеры.ПометкаУдаления = ЛОЖЬ

                        |           И Партнеры.ЛицевойСчетЗакрыт = ЛОЖЬ

                        |

                        |СГРУППИРОВАТЬ ПО

                        |           Партнеры.УК_Помещение

                        |;

                        |

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           вт0.ФИО КАК ФИО,

                        |           вт0.Адрес КАК Адрес,

                        |           вт0.Город КАК Город,

                        |           вт0.ЛС КАК ЛС,

                        |           вт3.КоличествоЛСпоАдресу КАК КоличествоЛСпоАдресу,

                        |           ЕСТЬNULL(вт2.СуммаОплаты, 0) КАК СуммаОплаты,

                        |           вт0.ФИО2 КАК ФИО2,

                        |           вт0.СуммаДолга - ЕСТЬNULL(вт2.СуммаОплаты, 0) КАК СуммаДолгаСУчетомОплаты,

                        |           вт0.СуммаДолга КАК СуммаДолга,

                        |           вт0.Помещение КАК Помещение,

                        |           вт0.НомерПомещенияРЦ КАК НомерПомещенияРЦ,

                        |           вт0.Абонент КАК Абонент,

                        |           вт0.УК КАК УК,

                        |           вт1.Статус КАК Статус,

                        |           вт1.СсылкаНаСоглашение КАК СсылкаНаСоглашение,

                        |           вт0.ДомНаименование КАК ДомНаименование,

                        |           вт0.ЧислоМесяцевДолга КАК ЧислоМесяцевДолга,

                        |           вт0.Дом КАК Дом,

                        |           CRM_Взаимодействие.НетДоступаКСчетчику КАК ОтсутствуетВозможностьОтключения,

                        |           вт0.Дом.ПодряднаяОрганизация КАК ПодряднаяОрганизация

                        |ИЗ

                        |           вт0 КАК вт0

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ вт3 КАК вт3

                        |                       ПО вт0.Помещение = вт3.Помещение

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ вт2 КАК вт2

                        |                       ПО вт0.Абонент = вт2.Абонент

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ вт1 КАК вт1

                        |                       ПО вт0.Абонент = вт1.Должник

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ Документ.CRM_Взаимодействие КАК CRM_Взаимодействие

                        |                       ПО вт0.Абонент = CRM_Взаимодействие.Партнер

                        |ГДЕ

                        |           вт3.КоличествоЛСпоАдресу = 1

                        |           И вт0.СуммаДолга - ЕСТЬNULL(вт2.СуммаОплаты, 0) > 0

                        |           И НЕ вт0.Абонент В

                        |                                              (ВЫБРАТЬ

                        |                                                          вт1.Должник КАК Должник

                        |                                              ИЗ

                        |                                                          вт1 КАК вт1)

                        |           И 1 = 1

                        |           И 2 = 2

                        |           И 3 = 3

                        |           И 4 = 4

                        |           И 5 = 5

                        |           И 6 = 6";

           

           

            Если фГород Тогда

                        Запрос.Текст = СтрЗаменить(Запрос.Текст, "1 = 1", "вт0.Город = &Город");

                        Запрос.УстановитьПараметр("Город", ЭтаФорма.Город);

            КонецЕсли;    

           

            Если фПодряднаяОрганизация Тогда

                        Запрос.Текст = СтрЗаменить(Запрос.Текст, "2 = 2", "вт0.Дом.ПодряднаяОрганизация = &ПодряднаяОрганизация");

                        Запрос.УстановитьПараметр("ПодряднаяОрганизация", ЭтаФорма.ПодряднаяОрганизация);

            КонецЕсли;

           

            Если фЧислоМесяцевДолгаБольше Тогда

                        Запрос.Текст = СтрЗаменить(Запрос.Текст, "3 = 3", "вт0.ЧислоМесяцевДолга >= &ЧислоМесяцевДолгаБольше");

                        Запрос.УстановитьПараметр("ЧислоМесяцевДолгаБольше", ЭтаФорма.ЧислоМесяцевДолгаБольше);

            КонецЕсли;   

 

            Если фЧислоМесяцевДолгаМеньше Тогда

                        Запрос.Текст = СтрЗаменить(Запрос.Текст, "4 = 4", "вт0.ЧислоМесяцевДолга <= &ЧислоМесяцевДолгаМеньше");

                        Запрос.УстановитьПараметр("ЧислоМесяцевДолгаМеньше", ЭтаФорма.ЧислоМесяцевДолгаМеньше);

            КонецЕсли;   

 

            Если фСуммаДолгаСУчетомОплатыБольше Тогда

                        Запрос.Текст = СтрЗаменить(Запрос.Текст, "5 = 5", "вт0.СуммаДолга - ЕСТЬNULL(вт2.СуммаОплаты, 0) >= &СуммаДолгаСУчетомОплатыБольше");

                        Запрос.УстановитьПараметр("СуммаДолгаСУчетомОплатыБольше", ЭтаФорма.СуммаДолгаСУчетомОплатыБольше);

            КонецЕсли;

 

            Если фСуммаДолгаСУчетомОплатыМеньше Тогда

                        Запрос.Текст = СтрЗаменить(Запрос.Текст, "6 = 6", "вт0.СуммаДолга - ЕСТЬNULL(вт2.СуммаОплаты, 0) <= &СуммаДолгаСУчетомОплатыМеньше");

                        Запрос.УстановитьПараметр("СуммаДолгаСУчетомОплатыМеньше", ЭтаФорма.СуммаДолгаСУчетомОплатыМеньше);

            КонецЕсли;

           

            Результат = Запрос.Выполнить();

            Выборка = Результат.Выбрать();

            Выгрузка = Результат.Выгрузить();

                       

            СЗ = Новый СписокЗначений;

            ТемпСтр = "                                ";

           

            Пока Выборка.Следующий() Цикл

                        СЗ.Добавить(, Лев(Строка(Выборка.Город) + ТемпСтр, 10) + Символы.Таб +

                                      Лев(Строка(Выборка.ПодряднаяОрганизация) + ТемпСтр, 20) + Символы.Таб +

                                                             Лев(Строка(Выборка.Адрес) + ТемпСтр, 50) + Символы.Таб +

                                                             Лев(Строка(Выборка.ФИО) + ТемпСтр, 30) + Символы.Таб +

                                      Лев(Строка(Выборка.ЛС) + ТемпСтр, 10) + Символы.Таб +

                                                             Лев(Строка(Выборка.ЧислоМесяцевДолга) + ТемпСтр, 3) + Символы.Таб +

                                                             Лев(Строка(Выборка.СуммаДолгаСУчетомОплаты) + ТемпСтр, 20), Ложь);

            КонецЦикла;

           

            Возврат ЗначениеВСтрокуВнутр(Выгрузка); 

                                        

КонецФункции

 

&НаКлиенте

Процедура Отобрать(Команда)

            Объект.стрТЗ = ОтобратьНаСервере(); 

КонецПроцедуры

           

 

&НаСервере

Процедура СоздатьВзаимодействияНаСервере(Результат)  

           

            ТЗ = ЗначениеИзСтрокиВнутр(Объект.стрТЗ); 

           

            Если НЕ ЗначениеЗаполнено(ТЗ) Тогда

                        Возврат;

            КонецЕсли;

 

            Если НЕ ЗначениеЗаполнено(СЗ) Тогда

                        Сообщить("Не выбрано ни одного ЛС!");

                        Возврат;

            КонецЕсли;

           

            Для Каждого Строка Из СЗ Цикл

                       

                        Если Строка.Пометка Тогда

                                  

                                   ТекИндекс = СЗ.Индекс(Строка);  

                                   ТекЛС = ТЗ[ТекИндекс].Абонент;

                                  

                                   ЛС = Справочники.Партнеры.НайтиПоНаименованию(ТекЛС.Наименование, Истина);

                                  

                                   Взаимодействие = Документы.CRM_Взаимодействие.СоздатьДокумент();

                                   Взаимодействие.Дата = ТекущаяДата();

                                   Взаимодействие.Партнер = ЛС;

                                   Взаимодействие.Автор = Пользователи.ТекущийПользователь();

                                   ЗаполнитьЗначенияСвойств(Взаимодействие, Результат);

                                   Взаимодействие.Подразделение = Справочники.СтруктураПредприятия.ОсновноеПодразделение;

                                   Взаимодействие.Организация = Справочники.Организации.ОсновнаяОрганизация;

                                  

                                   НоваяСтрока = Взаимодействие.СторонниеЛица.Добавить();

                                   НоваяСтрока.Партнер = Взаимодействие.Партнер;

                                   НоваяСтрока.КонтактноеЛицо = Взаимодействие.КонтактноеЛицо;

                                   НоваяСтрока.ПосетитМероприятие = 2;

                                  

                                   Попытка

                                               Взаимодействие.Записать();

                                   Исключение

                                               ОбщегоНазначения.СообщитьПользователю( ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

                                   КонецПопытки;       

                                  

                        КонецЕсли;

                       

            КонецЦикла;

 

КонецПроцедуры

 

 

&НаКлиенте

Процедура СоздатьМассовоеВзаимодействие (Результат, Параметры) Экспорт

           

            Если Результат = Неопределено тогда

                        Возврат;

            КонецЕсли;

           

            СоздатьВзаимодействияНаСервере(Результат);

 

КонецПроцедуры

 

&НаКлиенте

Процедура СоздатьВзаимодействияПродолжить (Результат, ДополнительныеПараметры) Экспорт

           

            Если Результат = Неопределено ИЛИ

                        Результат.Значение = КодВозвратаДиалога.Нет Тогда

                                   Возврат;

            КонецЕсли;

           

            Оповещение = Новый ОписаниеОповещения("СоздатьМассовоеВзаимодействие", ЭтотОбъект);       

            ОткрытьФорму("Обработка.СозданиеВзаимодействийИзРеестраОтключений.Форма.ФормаДокументаКраткая",,,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

 

КонецПроцедуры

 

&НаКлиенте

Процедура СоздатьВзаимодействия(Команда)

           

            ДополнительныеПараметры = Новый Структура("ИспользованиеВключено", Истина);      

            ОповещениеПродолжения = Новый ОписаниеОповещения("СоздатьВзаимодействияПродолжить", ЭтотОбъект, ДополнительныеПараметры);

            ТекстВопроса = НСтр("ru = 'Внимание! Вы действительно хотите создать взаимодействие по установленному отбору'");

            ВариантыОтвета = РежимДиалогаВопрос.ДаНет;

            ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();

            ПараметрыВопроса.КнопкаПоУмолчанию = КодВозвратаДиалога.Да;

            ПараметрыВопроса.Заголовок = НСтр("ru = 'Создание взаимодействия'");

            ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;

            ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВопрос;

            СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОповещениеПродолжения, ТекстВопроса, ВариантыОтвета, ПараметрыВопроса);

 

КонецПроцедуры

 

 

&НаКлиенте

Процедура ГородПриИзменении(Элемент)

            фГород = Истина;

КонецПроцедуры

 

 

&НаКлиенте

Процедура ПодряднаяОрганизацияПриИзменении(Элемент)

            фПодряднаяОрганизация = Истина;

КонецПроцедуры

 

 

&НаКлиенте

Процедура ЧислоМесяцевДолгаБольшеПриИзменении(Элемент)

            фЧислоМесяцевДолгаБольше = Истина;

КонецПроцедуры

 

 

&НаКлиенте

Процедура ЧислоМесяцевДолгаМеньшеПриИзменении(Элемент)

            фЧислоМесяцевДолгаМеньше = Истина;

КонецПроцедуры

 

 

&НаКлиенте

Процедура СуммаДолгаСУчетомОплатыБольшеПриИзменении(Элемент)

            фСуммаДолгаСУчетомОплатыБольше = Истина;

КонецПроцедуры

 

 

&НаКлиенте

Процедура СуммаДолгаСУчетомОплатыМеньшеПриИзменении(Элемент)

            фСуммаДолгаСУчетомОплатыМеньше = Истина;

КонецПроцедуры

 

 

 

Листинг. Модуль формы «ФормаДокументаКраткая»

&НаКлиенте

Процедура ЗаписатьИЗакрытьМассВзаимодействие(Команда)

           

            СтруктураПараметров = Новый Структура;  

           

            СтруктураПараметров.Вставить("Автор", Автор);

            СтруктураПараметров.Вставить("Ответственный", Ответственный);

            СтруктураПараметров.Вставить("ПлановаяДата", ПлановаяДата);

            СтруктураПараметров.Вставить("ПлановаяДатаЗавершение", ПлановаяДатаЗавершение);

            СтруктураПараметров.Вставить("НаВесьДень", НаВесьДень);

            СтруктураПараметров.Вставить("Ответственный", Ответственный);

            СтруктураПараметров.Вставить("ВидВзаимодействия", ВидВзаимодействия);

            СтруктураПараметров.Вставить("СтатусВзаимодействия", СтатусВзаимодействия);

            СтруктураПараметров.Вставить("Тема", Тема);

            СтруктураПараметров.Вставить("Содержание", Содержание);

            СтруктураПараметров.Вставить("Результат", Результат);

            СтруктураПараметров.Вставить("УК_РезультатВзаимодействия", УК_РезультатВзаимодействия);

           

            Закрыть(СтруктураПараметров);

           

КонецПроцедуры

 

Рис. Меню обработки в тонком клиенте