Добавление данных из других отчетов

27.08.14

Разработка - Универсальные функции

Бывает, что в отчет нужно включить какие-то данные из другого отчета, что же делать?

Идея наверное не нова, но не могу не поделиться:


Итак, мы пишем какой-то отчет (СКД или руками - неважно) и нужно получить какие-то данные из других отчетов (я буду называть их “чужой отчет”).


Вариант первый, хороший:


Находим вызовы общих модулей в чужом отчете, из которых получаются нужные нам данные и вызываем их. Если нам повезло со структурой - всё хорошо.


Вариант второй, тоже хороший:


Пишем что-то вроде этого:


	    ЧужойОтчет = Отчеты.ЧужойОтчет.Создать();

	    ЧужойОтчет.ДатаНач = НачалоМесяца(ДатаОтчета);

	    ЧужойОтчет.ДатаКон = КонецДня(ДатаОтчета);

	    ЧужойОтчет.Подразделение = Подразделение;

	    ЧужойОтчет.ГрафикРаботы = ГрафикРаботы;

	    ТабличныйДокумент = Новый ТабличныйДокумент;

	    ЧужойОтчет.СформироватьОтчет(ТабличныйДокумент);
   


- всё, табличный документ получили, теперь можем наковырять из него данных либо вывести весь отчет в свой (бывает нужно сделать как раз это)


Вариант третий, плохой (зато часто используемый):


Копируем в свой отчет код из чужого отчета, исправляем, чтобы работало и получаем необходимые данные. Естественно, когда меняется чужой отчет, данные начинают расходиться.


Почему используется третий вариант, когда есть второй?

Во-первых, когда чужой отчет формирует не совсем те данные, которые нужны либо слишком много данных. Естественно, тут другими вариантами не обойтись.

Во-вторых, когда в чужом отчете не содержится средств для его программного формирования (а ведь как хорошо, когда в каждом моделе отчета есть экспортные функции СформироватьДанные() и СформироватьОтчет()!)

И вот этот второй случай можно победить четвертым вариантом.


Вариант четвертый, инновационный:


Мне пришлось воспользоваться этим вариантом по следующим причинам:

1. Конфигурация недоступна для изменения

2. Чужой отчет формируется в обработчике нажатия на кнопку (то есть функция модуля формы без экспорта)

3. Использоваться отчет будет в неизвестном файловом окружении на другом узле РИБ.

4. Формирование отчета слишком сложное для того чтобы тащить код к себе в отчет


Итак:

1. Сохраняем отчет как внешний.

2. Добавляем к нужной функции экспорт (ну или меняем что-то еще)

3. Загружаем чужой отчет в свой как макет (тип: ДвоичныеДанные)

4. В свой отчет вставляем следующий код:


	Макет = ПолучитьМакет("ЧужойОтчет1");

	Макет.Записать(КаталогВременныхФайлов()+"ЧужойОтчет1.erf");

	ЧужойОтчет = ВнешниеОтчеты.Создать(КаталогВременныхФайлов()+"ЧужойОтчет1.erf");

	ФормаОтчета = ЧужойОтчет.ПолучитьФорму("Форма");

	ФормаОтчета.НачПериода = НачалоМесяца(ДатаОтчета);

	ФормаОтчета.КонПериода = КонецДня(ДатаОтчета);

	ФормаОтчета.Подразделение = Подразделение;    

	ФормаОтчета.КнопкаВыполнитьНажатие(0);

	ТабличныйДокумент = ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокумента1;


Вот, собственно, и всё. Всем спасибо за внимание.

внешний отчет

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2657    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4591    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3952    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8799    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16139    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7241    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Trinitron 27.08.14 16:33 Сейчас в теме
а вот если чужой отчет реализован на СКД, то как в таком случае будет ваша метода работать?
а вцелом интересная идея, спасибо, возьму на заметку
2. script 128 28.08.14 01:57 Сейчас в теме
Если оба отчета На СКД, тогда все это делается в сто раз проще.
sergpogo; zaika; zqzq; +3 Ответить
3. TrinitronOTV 14 28.08.14 04:24 Сейчас в теме
(2) script, а вкратце можно пояснить или где почитать про этот момент?
4. alexey_kurdyukov 155 28.08.14 04:10 Сейчас в теме
(2) script, я знаю только такой способ программного формирования:
...
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Настройки, ДанныеРасшифровки);
...

а как правильно вставить чужой отчет на СКД в свой?
15. Bassgood 1425 17.10.14 12:52 Сейчас в теме
(4) alexnecro, если и свой и чужой отчеты реализован на СКД, то можно:
1. Позаимствовать схему СКД у чужого отчета и через конструктор СКД подправить ее соответствующим образом (результат ее работы можно получить из кода).
2. Воспользоваться в конструкторе схемы СКД своего отчета закладкой "Вложенные схемы", на которой можно извлечь данные из чужого отчета (предварительно загрузив его схему в свою), т.о. можно совместить в одной схеме СКД (в одном своем отчете) данные из разных отчетов (своего и чужого).
Вот как то так.
16. sergpogo 2 31.10.14 12:53 Сейчас в теме
(4) Я делаю так:
1, В свой отчет в СКД добавляю набор данных объект, с нужными мне полями
2. Связываю наборы
3. В процедуре ПриКомпоновкеРезультата получаю схему СКД чужого отчета, (если необходимо очищаю настройки и делаю свои), устанавливаю параметры., выполняю программно, назначив процессор вывода (ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений), соответственно результат записывается в указанную мной таблицу значений
4. ну а дальше так же программно выполняю свою схему, указав таблицу значений как внешний набор
5. makas 44 28.08.14 11:11 Сейчас в теме
6. fomix 33 03.09.14 10:54 Сейчас в теме
Не совсем понял фразу в инновационном способе № 4: "3. Использоваться отчет будет в неизвестном файловом окружении на другом узле РИБ.".
Мне интересно как автор собирается получать данные в свой отчет на другом узле РИБ, да еще во вражеском окружении?!
8. alexey_kurdyukov 155 03.09.14 08:59 Сейчас в теме
(6) fomix, Я имею ввиду что нельзя просто пойти и подложить туда внешний отчет. Поэтому тащим его с собой.
7. gull22 95 03.09.14 10:55 Сейчас в теме
9. POLGA 16 03.09.14 12:00 Сейчас в теме
Если отчет с использованием произвольного отчета или СКД и есть сохранённые настройки, то есть ещё вариант - использовать механизм "Произвольные отчеты", где в качестве источника данных указать "Отчет, Название, сохранённая настройка". Из видеоуроков с сайта www.spec8.ru
10. mmch 129 03.09.14 12:18 Сейчас в теме
не очень понял, как это спасет от этого...

Копируем в свой отчет код из чужого отчета, исправляем, чтобы работало и получаем необходимые данные. Естественно, когда меняется чужой отчет, данные начинают расходиться.

11. alexey_kurdyukov 155 03.09.14 09:25 Сейчас в теме
(10) mmch, спасет только от этого:
4. Формирование отчета слишком сложное для того чтобы тащить код к себе в отчет

В остальном, естественно, аналогично )
12. droplet 81 05.09.14 17:48 Сейчас в теме
Плюсую за идею и манеру изложения
13. rus128 2 10.09.14 12:03 Сейчас в теме
"Все гениальное - просто!" и "кратк.-сестр.тал." :-)
14. hazd 12.10.14 01:18 Сейчас в теме
Согласен, идея не нова, но правильно сделали, что поделились) спасибо
17. sergvmv 10.05.17 09:48 Сейчас в теме
А как это будет работать на клиент-серверной 1с?
18. sergpogo 2 10.05.17 13:28 Сейчас в теме
19. sergvmv 11.05.17 08:39 Сейчас в теме
часть делается под сервером, а часть на клиенте. как этот все соединить?
20. sergvmv 11.05.17 08:40 Сейчас в теме
21. sergvmv 11.05.17 08:41 Сейчас в теме
точнее получитьформу выдаст ошибку. было как-то.
22. sergpogo 2 11.05.17 17:24 Сейчас в теме
(21) делайте как описано в (16)
23. user922183 12.11.20 22:27 Сейчас в теме
Оставьте свое сообщение