Есть отчёт СКД в образно:
Водитель/Номер пропуска/
Хочу добавить в него во время компоновки колонку /Время прихода/, которое получить совершенно с другой системы.
Для этого мне нужно что бы когда пользователь нажмет кнопку "Сформировать" - получить готовый отчёт формата: "Водитель/Номер пропуска/", после чего проанализировать по каким "Номер пропуска" мне нужно время - обратиться в другую БД и после чего добавить колонку и заполнить ее полученным временем.
Вообще не могу понять как такое сделать. Может кто то реализовывал что то подобное - подскажите пожалуйста.
Водитель/Номер пропуска/
Хочу добавить в него во время компоновки колонку /Время прихода/, которое получить совершенно с другой системы.
Для этого мне нужно что бы когда пользователь нажмет кнопку "Сформировать" - получить готовый отчёт формата: "Водитель/Номер пропуска/", после чего проанализировать по каким "Номер пропуска" мне нужно время - обратиться в другую БД и после чего добавить колонку и заполнить ее полученным временем.
Вообще не могу понять как такое сделать. Может кто то реализовывал что то подобное - подскажите пожалуйста.
По теме из базы знаний
Найденные решения
1. Перехватываешь событие компоновки (при компоновке результата) и получаешь данные по водителям обычным запросом в таблицу значений.
2. Там же делаешь запрос во внешнюю БД по полученным номерам пропуска и получаешь данные во вторую таблицу значений
3. Передаешь обе таблицы значений в параметры компоновки
4. Сама схема СКД будет выглядеть как два набора данных вида "Объект" (куда попадут таблицы значений) и настройка их связи по номеру пропуска на закладке связей наборов данных
5. Ну а остальное все штатно
ЗЫ. Ну или просто попробовать подтянуть данные внешней БД в качестве внешнего источника данных
2. Там же делаешь запрос во внешнюю БД по полученным номерам пропуска и получаешь данные во вторую таблицу значений
3. Передаешь обе таблицы значений в параметры компоновки
4. Сама схема СКД будет выглядеть как два набора данных вида "Объект" (куда попадут таблицы значений) и настройка их связи по номеру пропуска на закладке связей наборов данных
5. Ну а остальное все штатно
ЗЫ. Ну или просто попробовать подтянуть данные внешней БД в качестве внешнего источника данных
(18) Спасибо за помощь ещё раз.
Для тех, кто наткнется на тему прилагаю код компоновки:
В самом СКД создается набор данных - "объект". Кусок приведен на скрине ниже.
Для тех, кто наткнется на тему прилагаю код компоновки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ********ТЕКСТ ЗАПРОСА*************";
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Период=Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
ПараметрДатаНачала=Период.Значение.ДатаНачала;
ПараметрДатаКонец=Период.Значение.ДатаОкончания;
Запрос.УстановитьПараметр("ДатаНачачала", ПараметрДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ПараметрДатаКонец);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаРезультат=РезультатЗапроса.Выгрузить().Скопировать();
ТаблицаРезультат.Колонки.Добавить("ВремяВПути");
ТаблицаРезультат.Колонки.Добавить("ОтклонениеПоГрафику");
ТаблицаРезультат.Колонки.Добавить("ОтклонениеПоВыезду");
ТаблицаРезультат.Колонки.Добавить("ВремяПрихода");
Для каждого СтрокаТаблицы Из ТаблицаРезультат Цикл
СтрокаТаблицы.ВремяВПути=ОбщийМодульСервер.ВычислитьВремя(СтрокаТаблицы.ВремяВыезда,СтрокаТаблицы.ВремяЗаезда);
СтрокаТаблицы.ОтклонениеПоГрафику=ОбщийМодульСервер.ВычислитьВремя(ОбщийМодульСервер.ВычислитьВремя(СтрокаТаблицы.ВремяВыезда,СтрокаТаблицы.ВремяЗаезда),СтрокаТаблицы.ВремяОбслуживанияМаршрута,Истина);
СтрокаТаблицы.ОтклонениеПоВыезду=ОбщийМодульСервер.ВычислитьВремя(СтрокаТаблицы.ВремяВыезда,СтрокаТаблицы.ВремяВыездаРегламентированое,Истина);
Если ЗначениеЗаполнено(СтрокаТаблицы.ВремяВыездаРегламентированое) Тогда
СтрокаТаблицы.ВремяПрихода=ОбщийМодульСервер.СторонняяБДПолучитьВремяПрихода(НачалоДня(СтрокаТаблицы.ДатаЯрлыка)+(СтрокаТаблицы.ВремяВыездаРегламентированое-Дата(1,1,1))-60*60*4,НачалоДня(СтрокаТаблицы.ДатаЯрлыка)+(СтрокаТаблицы.ВремяВыездаРегламентированое-Дата(1,1,1))+60*60*4,СтрокаТаблицы.НомерПропуска);
КонецЕсли;
КонецЦикла;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("АналитикаВремени", ТаблицаРезультат);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
ПоказатьВ самом СКД создается набор данных - "объект". Кусок приведен на скрине ниже.
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1. Перехватываешь событие компоновки (при компоновке результата) и получаешь данные по водителям обычным запросом в таблицу значений.
2. Там же делаешь запрос во внешнюю БД по полученным номерам пропуска и получаешь данные во вторую таблицу значений
3. Передаешь обе таблицы значений в параметры компоновки
4. Сама схема СКД будет выглядеть как два набора данных вида "Объект" (куда попадут таблицы значений) и настройка их связи по номеру пропуска на закладке связей наборов данных
5. Ну а остальное все штатно
ЗЫ. Ну или просто попробовать подтянуть данные внешней БД в качестве внешнего источника данных
2. Там же делаешь запрос во внешнюю БД по полученным номерам пропуска и получаешь данные во вторую таблицу значений
3. Передаешь обе таблицы значений в параметры компоновки
4. Сама схема СКД будет выглядеть как два набора данных вида "Объект" (куда попадут таблицы значений) и настройка их связи по номеру пропуска на закладке связей наборов данных
5. Ну а остальное все штатно
ЗЫ. Ну или просто попробовать подтянуть данные внешней БД в качестве внешнего источника данных
(4) Сформировал кодом "Объект" - вывелось. В объекте есть поля "Поле1" и "Поле2".
В вычисляемые поля добавил поле "ПолеРасчёта" в выражение которого написал
"НазваниеОбщегоМодуля.ИмяФункции"(Поле1,Поле2)".
В результате получаю ошибку формирования. Поставил точку остановы на первой строке в функции "ИмяФункции" и даже на нее не попадаю, то есть проблема кроется ещё перед вызовом... Подскажите что это может быть?
В вычисляемые поля добавил поле "ПолеРасчёта" в выражение которого написал
"НазваниеОбщегоМодуля.ИмяФункции"(Поле1,Поле2)".
В результате получаю ошибку формирования. Поставил точку остановы на первой строке в функции "ИмяФункции" и даже на нее не попадаю, то есть проблема кроется ещё перед вызовом... Подскажите что это может быть?
(9) Хороший вопрос на который у меня есть глупый ответ.
У меня уже есть рабочий отчёт СКД, который основан на наборе данных типа запрос и в нем уже приписаны эти вычисляемые поля.
Для шаблона использовал его. В нем это все работало, а тут не работает. Уже понял в какую сторону смотреть благодаря вашему комментарию.
У меня уже есть рабочий отчёт СКД, который основан на наборе данных типа запрос и в нем уже приписаны эти вычисляемые поля.
Для шаблона использовал его. В нем это все работало, а тут не работает. Уже понял в какую сторону смотреть благодаря вашему комментарию.
(11) В своем шаблонном отчёте у меня нет кода в "ПриКомпоновкеРезультата".
Обычный отчёт СКД:
1. создаем отчёт;
2. создаем СКД;
3. создаем объект типа "Набор данных";
4. пишем запрос;
5. добавил вычисляемые поля в СКД;
6. формируем параметры вывода... все работает :)
Ничего дополнительно не писал :)
Обычный отчёт СКД:
1. создаем отчёт;
2. создаем СКД;
3. создаем объект типа "Набор данных";
4. пишем запрос;
5. добавил вычисляемые поля в СКД;
6. формируем параметры вывода... все работает :)
Ничего дополнительно не писал :)
(13)
Вы уверены что модуль объекта у этого отчета пустой? Тогда я без малейшего представления, как он у вас работал.
У меня уже есть рабочий отчёт СКД, который основан на наборе данных типа запрос и в нем уже приписаны эти вычисляемые поля. Для шаблона использовал его. В нем это все работало, а тут не работает.
Вы уверены что модуль объекта у этого отчета пустой? Тогда я без малейшего представления, как он у вас работал.
(16) Да нет, я работаю как на файловой так и на клиент-сервере. Все отрабатывает.
Думаю стандартная обработка компоновки все учитывает. Но когда я отключил ее и сам написал свою компоновку, то не учёл что то и в результате получил плохое сообщение. В любом случае сейчас переписываю что бы сразу добавить то что нужно в ТЗ "перед заводом" данных в компоновщик. Спасибо Вам за помощь уже в который раз :)
Надеюсь получится реализовать по окончанию то, что за задумал.
Думаю стандартная обработка компоновки все учитывает. Но когда я отключил ее и сам написал свою компоновку, то не учёл что то и в результате получил плохое сообщение. В любом случае сейчас переписываю что бы сразу добавить то что нужно в ТЗ "перед заводом" данных в компоновщик. Спасибо Вам за помощь уже в который раз :)
Надеюсь получится реализовать по окончанию то, что за задумал.
(18) Спасибо за помощь ещё раз.
Для тех, кто наткнется на тему прилагаю код компоновки:
В самом СКД создается набор данных - "объект". Кусок приведен на скрине ниже.
Для тех, кто наткнется на тему прилагаю код компоновки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ********ТЕКСТ ЗАПРОСА*************";
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Период=Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
ПараметрДатаНачала=Период.Значение.ДатаНачала;
ПараметрДатаКонец=Период.Значение.ДатаОкончания;
Запрос.УстановитьПараметр("ДатаНачачала", ПараметрДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ПараметрДатаКонец);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаРезультат=РезультатЗапроса.Выгрузить().Скопировать();
ТаблицаРезультат.Колонки.Добавить("ВремяВПути");
ТаблицаРезультат.Колонки.Добавить("ОтклонениеПоГрафику");
ТаблицаРезультат.Колонки.Добавить("ОтклонениеПоВыезду");
ТаблицаРезультат.Колонки.Добавить("ВремяПрихода");
Для каждого СтрокаТаблицы Из ТаблицаРезультат Цикл
СтрокаТаблицы.ВремяВПути=ОбщийМодульСервер.ВычислитьВремя(СтрокаТаблицы.ВремяВыезда,СтрокаТаблицы.ВремяЗаезда);
СтрокаТаблицы.ОтклонениеПоГрафику=ОбщийМодульСервер.ВычислитьВремя(ОбщийМодульСервер.ВычислитьВремя(СтрокаТаблицы.ВремяВыезда,СтрокаТаблицы.ВремяЗаезда),СтрокаТаблицы.ВремяОбслуживанияМаршрута,Истина);
СтрокаТаблицы.ОтклонениеПоВыезду=ОбщийМодульСервер.ВычислитьВремя(СтрокаТаблицы.ВремяВыезда,СтрокаТаблицы.ВремяВыездаРегламентированое,Истина);
Если ЗначениеЗаполнено(СтрокаТаблицы.ВремяВыездаРегламентированое) Тогда
СтрокаТаблицы.ВремяПрихода=ОбщийМодульСервер.СторонняяБДПолучитьВремяПрихода(НачалоДня(СтрокаТаблицы.ДатаЯрлыка)+(СтрокаТаблицы.ВремяВыездаРегламентированое-Дата(1,1,1))-60*60*4,НачалоДня(СтрокаТаблицы.ДатаЯрлыка)+(СтрокаТаблицы.ВремяВыездаРегламентированое-Дата(1,1,1))+60*60*4,СтрокаТаблицы.НомерПропуска);
КонецЕсли;
КонецЦикла;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("АналитикаВремени", ТаблицаРезультат);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
ПоказатьВ самом СКД создается набор данных - "объект". Кусок приведен на скрине ниже.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот