Процедура Сформироватьотчет [1](ТаблицаУслуги) Если Общий Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ *, | РеестрДляКлиентовУслуги.Ссылка.Ссылка КАК Реестр |ИЗ | Документ.РеестрДляКлиентов.Услуги КАК РеестрДляКлиентовУслуги |ГДЕ | РеестрДляКлиентовУслуги.Ссылка.Проведен | И РеестрДляКлиентовУслуги.Ссылка.ДатаНач >= &ДатаНач | И РеестрДляКлиентовУслуги.Ссылка.ДатаКон | И РеестрДляКлиентовУслуги.Ссылка.Контрагент = &Контрагент | И РеестрДляКлиентовУслуги.Ссылка.Организация = &Организация"; Запрос.УстановитьПараметр("ДатаНач", НачалоДня(Документ.ДатаНач)); Запрос.УстановитьПараметр("ДатаКон", КонецДня(Документ.ДатаКон)); Запрос.УстановитьПараметр("Контрагент", Документ.Контрагент); Запрос.УстановитьПараметр("Организация", Документ.Организация); Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | *, | РеестрДляКлиентовУслуги.Ссылка.Ссылка КАК Реестр |ИЗ | Документ.РеестрДляКлиентов.Услуги КАК РеестрДляКлиентовУслуги |ГДЕ | РеестрДляКлиентовУслуги.Ссылка.Ссылка = &Документ"; Запрос.УстановитьПараметр("Документ", Документ); КонецЕсли; Если ТипЗнч(Документ) = Тип("ДокументСсылка.Реестр") Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "РеестрДляКлиентов", "Реестр"); КонецЕсли; ТаблицаДокумента = Запрос.Выполнить().Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ"; ТекстРеквизитов = ""; ТекстСоединения = " ПО ("; Для Каждого Реквизит Из Документ.Метаданные().ТабличныеЧасти.Услуги.Реквизиты Цикл Если Реквизит.Имя = "Номер" Тогда Прервать; КонецЕсли; ТекстРеквизитов = ТекстРеквизитов + " | РеестрДляКлиентовУслуги." + Реквизит.Имя + ","; Если Реквизит.Имя > "Содержание" Тогда//строка неограниченной длины не может быть в условии соединения Если НЕ (НеУчитыватьID И Реквизит.Имя = "ИдСтроки") Тогда ТекстСоединения = ТекстСоединения + "ТаблицаДокумента." + Реквизит.Имя + " = " + "ТаблицаУслуги." + Реквизит.Имя + " И "; КонецЕсли; КонецЕсли; // //Заполним поля КД // КонецЦикла; //ТекстРеквизитов = ТекстРеквизитов + " //| РеестрДляКлиентовУслуги.Реестр КАК Реестр"; ТекстРеквизитов = Лев(ТекстРеквизитов, СтрДлина(ТекстРеквизитов)-1);//"," ТекстСоединения = Лев(ТекстСоединения, СтрДлина(ТекстСоединения)-3);//" И " ТекстСоединения = ТекстСоединения + ")"; Запрос.Текст = Запрос.Текст + ТекстРеквизитов + ", " + " | РеестрДляКлиентовУслуги.Реестр КАК Реестр |ПОМЕСТИТЬ ТаблицаДокумента |ИЗ | &ТаблицаДокумента КАК РеестрДляКлиентовУслуги |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ"; Запрос.Текст = Запрос.Текст + ТекстРеквизитов + " |ПОМЕСТИТЬ ТаблицаУслуги |ИЗ | &ТаблицаУслуги КАК РеестрДляКлиентовУслуги |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ"; Запрос.Текст = Запрос.Текст + СтрЗаменить(СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаДокумента"), "ТаблицаДокумента.Содержание", "ВЫРАЗИТЬ(ТаблицаДокумента.Содержание КАК СТРОКА(300)) КАК Содержание") + "," + " | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаДокумента.Реестр) КАК КоличествоПовторов |ПОМЕСТИТЬ ТаблицаДублейДокумента |ИЗ | ТаблицаДокумента КАК ТаблицаДокумента | СГРУППИРОВАТЬ ПО //По содержанию не группируем | " + СтрЗаменить(СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаДокумента"), "ТаблицаДокумента.Содержание", "ВЫРАЗИТЬ(ТаблицаДокумента.Содержание КАК СТРОКА(300))") +" // |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ"; Запрос.Текст = Запрос.Текст + СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаДокумента") + "," + " | ТаблицаДокумента.Реестр КАК Реестр, | ТаблицаУслуги.Сделка КАК Ссылка1 |ПОМЕСТИТЬ ТаблицаДокументаСТаблицаУслуги |ИЗ | ТаблицаДокумента КАК ТаблицаДокумента | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаУслуги КАК ТаблицаУслуги" + " |" + ТекстСоединения + " |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ" + СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаУслуги") + "," + " | ТаблицаДокумента.Реестр КАК Реестр, | ТаблицаДокумента.Сделка КАК Ссылка1 |ПОМЕСТИТЬ ТаблицаУслугиСТаблицаДокумента |ИЗ | ТаблицаУслуги КАК ТаблицаУслуги | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаДокумента КАК ТаблицаДокумента" + " |" + ТекстСоединения + " |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ" + СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаДокументаСТаблицаУслуги") + "," + " | ""Строка будет удалена"" КАК Отличия, | ТаблицаДокументаСТаблицаУслуги.Сумма КАК СуммаБудетУдалена, | 0 КАК СуммаБудетДобавлена, | ТаблицаДокументаСТаблицаУслуги.Реестр КАК Реестр |ИЗ | ТаблицаДокументаСТаблицаУслуги КАК ТаблицаДокументаСТаблицаУслуги |ГДЕ | ТаблицаДокументаСТаблицаУслуги.Ссылка1 ЕСТЬ NULL | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ" + СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаУслугиСТаблицаДокумента") + "," + " | ""Строка будет добавлена"", | 0, | ТаблицаУслугиСТаблицаДокумента.Сумма, | ТаблицаУслугиСТаблицаДокумента.Реестр |ИЗ | ТаблицаУслугиСТаблицаДокумента КАК ТаблицаУслугиСТаблицаДокумента |ГДЕ | ТаблицаУслугиСТаблицаДокумента.Ссылка1 ЕСТЬ NULL | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ" + СтрЗаменить(ТекстРеквизитов, "РеестрДляКлиентовУслуги", "ТаблицаДублейДокумента") + "," + " | ""Строка задублирована в различных реестрах"", | ТаблицаДублейДокумента.Сумма, | 0, | NULL |ИЗ | ТаблицаДублейДокумента КАК ТаблицаДублейДокумента |ГДЕ | ТаблицаДублейДокумента.КоличествоПовторов > 1"; Запрос.УстановитьПараметр("ТаблицаУслуги", ТаблицаУслуги); Запрос.УстановитьПараметр("ТаблицаДокумента", ТаблицаДокумента); Результат = Запрос.Выполнить().Выгрузить(); Если ТипЗнч(Документ) = Тип("ДокументСсылка.РеестрДляКлиентов") Тогда СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКДРеестрДляКлиентов"); Иначе СхемаКомпоновкиДанных = ПолучитьМакет("СхемаКДРеестр"); КонецЕсли; КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ТЗ", Результат); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), , ,); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ); ДокументРезультат = ЭлементыФормы.ПолеРезультатаОтчета; ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры
Ссылки
[1] https://www.mykib.org/article/den-devyatyy-integriroval-samyy-bolshoy-katalog-razrabotok-dlya-platformy-1s