Как просто запомнить алгоритм программного вывода в СКД

Программирование - Практика программирования

186
Порой нужно быстро вывести на экран таблицу значений, используя СКД \ получить данные отчета в таблицу значений.. Несмотря на очевидность алгоритма - раньше мне проще было загуглить программный вывод, благо эта инфа есть везде. Но постепенно понял как его можно быстро вспомнить, и лишний раз ничего не искать. Конечно эта статья не для Гуру :) Но я думаю - что любой неопытный в СКД программист сделает для себя небольшое открытие...

Весь секрет - в том чтобы помнить два слова, и идти с конца. Ну, надо еще чуть-чуть логики..)

1. Прежде всего вспоминаем что СКД выводится каким-то процессором.. Подсказка поможет, если начать набирать "Новый Проц.." и нажать ctrl + Пробел:

2. Процессор вывода соответственно выводит... Но выводит он во что-то и ему надо обяснять во что:

3. При этом для вывода ему также понадобится некий процессор компоновки:

4. Определяем переменную с процессором выше. И уже из подскази процессора компоновки логично что его надо инициализировать:

5. Вот тут запара - нужен некий макет компоновки... Здесь надо вспомнить второе слово - Это КомпоновщикМакетаКомпоновкиДанных, через СП до него не дороешься - по крайней мере я так и не постиг логики - как до этого можно дойти самостоятельно. Идем дальше:

6. В общем-то и все. По всплывающим подсказкам легко догадаться чего-куда подсовывать. Настройки - это либо настройки компоновщика настроек отчета, полученные с помощью метода ПолучитьНастройки(), либо настройки самой схемы - Схема.НастройкиПоУмолчанию... Надо еще помнить про тип генератора - если выводим не в табличный документ, а в коллекцию значений - его надо обязательно указывать (при этом процессор вывода тоже должен быть другой - для коллекции значений). Ну и при инициализации процессора компоновки надо помнить про внешние наборы данных - структуру, содержащую объект в том случае если отчет у нас строится по объекту. Вот что в итоге получилось у меня:

КомпМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпМакета.Выполнить(Схема, Схема.НастройкиПоУмолчанию);

ПроцКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцКомпоновки.Инициализировать(МакетКомпоновки);

ПроцВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ТабДок = Новый ТабличныйДокумент;
ПроцВывода.УстановитьДокумент(ТабДок);

ПроцВывода.Вывести(ПроцКомпоновки);

Помню как сам все никак не мог запомнить эту последовательность, и вообще "боялся" компоновки, потому что трудно нахрапом "въехать" в этого зверя... Надеюсь кому-нибудь поможет эта запоминалка и на экзамене на спеца можно будет щегольнуть не просто печатной формой, а выведенной через этот замечательный и удобный механизм.

186

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Synoecium 413 01.09.17 11:15 Сейчас в теме
Проще затолкать в шаблон текст формирования СКД и подставлять на CTRL+Q в нужное место, пользы от этих знаний мало, имхо.
может кому пригодится:
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ВнешнийНаборДанных1",ВнешнийНаборДанных1);
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Показать
scp00002; maxst22; Serg O.; Gadzhalik; purgin; Marxxx; RodinMax; Drivingblind; vz1987; Denis S; AneJIbcuH; kare; torbeev; docerman; RailMen; ice-net; rpgshnik; frkbvfnjh; user705522_constantin_h; portwein; igormiro; vano-ekt; Natain14; allga383; Denis211990; Deslime; jaroslav.h; Serdgio; sergelemon; c1nil; Бубузяка; monkbest; nytlenc; Infector; Irwin; amoarok; EMelihoff; jeyrico; echo77; rayastar; Designer1C; bubus; CyberCerber; корум; +44 Ответить
2. smirnov.es 15 01.09.17 11:35 Сейчас в теме
Запоминание может пригодиться разве что на собеседованиях, и то в очень редких случаях.
Скопировать из заметки или вообще из шаблона, как (1) предлагает, еще и быстрее в несколько раз, чем руками набивать
rpgshnik; jeyrico; корум; +3 Ответить
7. dbachinsky 01.09.17 15:04 Сейчас в теме
(1) А если нет макета СКД и его тоже нужно создать программно на основании текста запроса или таблицы значений, тогда стоит добавить в шаблон программное формирование схемы компоновки данных https://infostart.ru/public/575659/
sergelemon; Светлый ум; +2 Ответить
8. unichkin 1106 01.09.17 16:03 Сейчас в теме
(1) А по мне польза самая что ни на есть очевидная.. Сам механизм становится более прозрачен, когда все это в голове укладываешь. Принципиально для СКД шаблоны не пользую - алгоритм небольшой и простенький, и егшо воспроизведение помогает держать себя "в форме".
maxst22; tinkerbell; breeder; Makushimo; docerman; TreeDogNight; lmm; Batman; monkbest; +9 Ответить
3. Altair777 639 01.09.17 11:36 Сейчас в теме
А зачем вообще что-то запоминать?
Создай в Гуглдоке файлик и пиши туда свою собственную энциклопедию :-)
А быстрее просто похухлить, или по ключевому слову в типовой найти.
sapervodichka@yandex.ru; +1 Ответить
4. brr 175 01.09.17 12:23 Сейчас в теме
Зачем шаблон, функцию в общий модуль
rpgshnik; zqzq; jeyrico; +3 Ответить
6. user623969_dusa 01.09.17 13:03 Сейчас в теме
"что любой неопытный в СКД программист" боишься такие статья открывать и признаваться что ты неопытный в СКД программист))
10. echo77 1016 01.09.17 20:35 Сейчас в теме
Вот в этой публикации https://infostart.ru/public/80164/ приведена процедура(которую надо немного подправить), которая все делает, плюс она универсальная, т.е. может заполнять ТабличныйДокумент, ТаблицуЗначений, ДеревоЗначений
frkbvfnjh; lmm; Светлый ум; zqzq; +4 Ответить
11. Бубузяка 62 06.09.17 08:47 Сейчас в теме
Плюсанул за оригинальность, но использую шаблоны.
12. debova 06.09.17 11:55 Сейчас в теме
Подскажите пожалуйста, может кто сталкивался.
В 8.3 вывожу макет через данный код на сервере, при попытке "расшифровать" данные на клиенте, отображается только "индекс" (цифра). Получается что "ДанныеРасшифровки" сохраняются только на сервере. И как их тогда получить кликнув мышкой на форме в Результате?
13. pasha_2001 27.12.17 09:36 Сейчас в теме
Для получения расшифровки необходимо прописать код в событии ОбработкаРасшифровки
14. acsent 1121 09.01.18 10:39 Сейчас в теме
на гисте сохранил кусок кода и когда нужно подглядываешь
https://gist.github.com/a-sitnikov/0be8665d52bfc18f563d4d77a827034d
15. AlX0id 11.01.18 08:23 Сейчас в теме
А еще лучше - сделать функцию-обертку - ВыполнитьКомпоновку - туда передать схему, структуру параметров и отборов (ну или настроенный компоновщик сразу). И ее из обработки дергать. Или из шаблона - на вкус и цвет.
16. tinkerbell 06.03.18 14:32 Сейчас в теме
17. kudim 07.05.18 15:37 Сейчас в теме
Респект за старания. про схему не упомянул. что и откуда
Оставьте свое сообщение