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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Комментарии
1. Сергей Лесовой (Synoecium) 274 01.09.17 11:15 Сейчас в теме
Проще затолкать в шаблон текст формирования СКД и подставлять на CTRL+Q в нужное место, пользы от этих знаний мало, имхо.
может кому пригодится:
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ВнешнийНаборДанных1",ВнешнийНаборДанных1);
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Показать
vz1987; Denis S; AneJIbcuH; kare; torbeev; docerman; RailMen; ice-net; rpgshnik; frkbvfnjh; user705522_constantin_h; portwein; igormiro; vano-ekt; Natain14; allga383; Denis211990; Deslime; myr4ik07; Serdgio; sergelemon; mrDSide; Бубузяка; monkbest; nytlenc; Infector; Irwin; amoarok; EMelihoff; jeyrico; echo77; rayastar; Designer1C; bubus; CyberCerber; корум; +36 Ответить
2. Евгений Смирнов (smirnov.es) 15 01.09.17 11:35 Сейчас в теме
Запоминание может пригодиться разве что на собеседованиях, и то в очень редких случаях.
Скопировать из заметки или вообще из шаблона, как (1) предлагает, еще и быстрее в несколько раз, чем руками набивать
rpgshnik; jeyrico; корум; +3 Ответить
7. Дмитрий Иванов (kambl) 181 01.09.17 15:04 Сейчас в теме
(1) А если нет макета СКД и его тоже нужно создать программно на основании текста запроса или таблицы значений, тогда стоит добавить в шаблон программное формирование схемы компоновки данных https://infostart.ru/public/575659/
sergelemon; Светлый ум; +2 Ответить
8. Роман Уничкин (unichkin) 764 01.09.17 16:03 Сейчас в теме
(1) А по мне польза самая что ни на есть очевидная.. Сам механизм становится более прозрачен, когда все это в голове укладываешь. Принципиально для СКД шаблоны не пользую - алгоритм небольшой и простенький, и егшо воспроизведение помогает держать себя "в форме".
Makushimo; docerman; TreeDogNight; lmm; Batman; monkbest; +6 Ответить
3. Альтаир (Altair777) 639 01.09.17 11:36 Сейчас в теме
А зачем вообще что-то запоминать?
Создай в Гуглдоке файлик и пиши туда свою собственную энциклопедию :-)
А быстрее просто похухлить, или по ключевому слову в типовой найти.
4. Brr (brr) 180 01.09.17 12:23 Сейчас в теме
Зачем шаблон, функцию в общий модуль
rpgshnik; zqzq; jeyrico; +3 Ответить
6. Андрей (user623969_dusa) 01.09.17 13:03 Сейчас в теме
"что любой неопытный в СКД программист" боишься такие статья открывать и признаваться что ты неопытный в СКД программист))
10. Александр Крынецкий (echo77) 783 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) 1050 09.01.18 10:39 Сейчас в теме
на гисте сохранил кусок кода и когда нужно подглядываешь
https://gist.github.com/a-sitnikov/0be8665d52bfc18f563d4d77a827034d
15. Алексей 1 (AlX0id) 11.01.18 08:23 Сейчас в теме
А еще лучше - сделать функцию-обертку - ВыполнитьКомпоновку - туда передать схему, структуру параметров и отборов (ну или настроенный компоновщик сразу). И ее из обработки дергать. Или из шаблона - на вкус и цвет.
Оставьте свое сообщение