|
Своё поведение кнопки Сформировать. СКД. | ☑ | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
Wobland
28.05.12
✎
11:23
|
Исходная задача: показать диаграмму, используя в качестве данных свою ТЗ. Почему так и нельзя ли сделать по-человечески пока трогать не будем, просто есть ТЗ. Как это сделать? Берём СКД, подсовываем ей в качестве объекта нашу ТЗ - опля, готово.
Это была преамбула, амбула такова. "Подсовывание" и все последующие действия делаются программно. Соответственно, нужна своя кнопка. Плюс свойство у формы Автоотображение состояния. Коллега утверждает, что такие вот вещи - это "костыль", ибо мы не победили отчёт, а убрали/подменили лишнее своим. Теперь вопрос: своя кнопка Сформировать и запрет отображения состояние - это костыль или использование штатных механизмов СКД? |
|||||||||||||
9
Любопытная
28.05.12
✎
11:33
|
(3) Ты не то сравниваешь. Представь, что тебе надо перепрограммировать автопилот. Но ты не смог этого сделать, поэтому прикрутил свой, а кнопку для включения дефолтного закрасил в цвет панели, чтобы летчик не увидел. Считаешь это нормальным решением?
|
|||||||||||||
10
Cube
28.05.12
✎
11:33
|
(8) А что по твоему штатно? когда вот так: http://files.rsdn.ru/20998/c0f0832ccca5.jpg ?
Ты же макет не сама рисуешь... |
|||||||||||||
11
Cube
28.05.12
✎
11:35
|
(9) Хорошо, погнали в эту тему.
Ты не доконца рассказала историю. Ведь автопилот не получилось запрограммировать не потому, что умений не хватило, а потому, что это самолет для авиашоу в честь ВВС - нужно всякие бочки вертеть, мертвые петли и т.п. Автопилот не справится, нужно ручное управление. Это не костыли. |
|||||||||||||
12
Любопытная
28.05.12
✎
11:36
|
(11) А я считаю, что у меня именно умения не хватило
|
|||||||||||||
13
Wobland
28.05.12
✎
11:37
|
(12) конструкторы автопилота не могут в принципе предусмотреть всяческие бочки, мёртвые петли и т.п. поэтому умелый пилот берёт напильник, допиливает автопилот на земле под себя и спокойно взлетает
|
|||||||||||||
14
Cube
28.05.12
✎
11:39
|
(12) Ну, возможно, твоё кунг-фу ещё не достаточно сильное, чтобы убивать противника с одного удара и приходится бить два раза, но это всё равно кунг-фу. Ты же не бьешь противника костылем... :)
|
|||||||||||||
15
Любопытная
28.05.12
✎
11:40
|
(11) Это не ручное управление
|
|||||||||||||
16
Конфигуратор1с
28.05.12
✎
11:40
|
(12) не совсем правильный подход. Заполнение скд из таблицы значений рисуется программно, в чем костыль? было бы у скд реквизит - брать данные из этой таблицы, было бы другое дело.
|
|||||||||||||
17
Cube
28.05.12
✎
11:42
|
(15) А ручное управление самолетом - это не штатная функция управления самолетом что-ли?)) Я же свои тросики для управления закрылками не протягиваю. Все рычаги и кнопки с завода изготовителя... Всё штатно.
|
|||||||||||||
18
Любопытная
28.05.12
✎
11:45
|
Хорошо. Тогда расскажите мне, гуру-специалисты.
Для чего используется метод ПриКомпоновкеРезультата(), предусмотренный в модуле отчета? |
|||||||||||||
19
Cube
28.05.12
✎
11:55
|
(18) Ну как тебе объяснить... Вот для чего используется метод ПриОткрытии() в формах? Однозначного ответа нет. Так и тут. Для чего приспособишь, для того и будет. Ну вот, например:
http://inq-brc.ru/index.php/ugol-prog/732-kak-zafiksirovat-maket-skd http://www.miko.ru/blogs/metalblog/138 |
|||||||||||||
20
Любопытная
28.05.12
✎
11:58
|
(19) Этот метод отрабатывает при нажатии стандартной кнопки Сформировать. Почему оттуда у меня отчет не формируется? Код проходит без ошибок, но отчет не формируется
|
|||||||||||||
21
SoulPower
28.05.12
✎
12:01
|
ПриКомпоновкеРезультата() решает задачу в (0). Тч в этом случае конечно
костыль |
|||||||||||||
22
Cube
28.05.12
✎
12:04
|
(20) "Пилите, Шура, пилите. Она золотая!" (c)
|
|||||||||||||
23
Megas
28.05.12
✎
12:04
|
Не костыль конечно, любой более менее сложный отчёт на СКД приходится выводить программно.
В типовых говорят сплошь и рядом (БП 8.2) не костыль |
|||||||||||||
24
Wobland
28.05.12
✎
12:05
|
(20) а ты где-то при стандартном пути подсунула свою ТЗ?
|
|||||||||||||
25
SoulPower
28.05.12
✎
12:08
|
+(21) Насчет отображения состояния не костыль кстати. Но вот нафига кнопку рисовать не ясно.
|
|||||||||||||
26
Любопытная
28.05.12
✎
12:08
|
(24) Естественно! Я процедуру заполнения ТЗ перетащила в модуль объекта и она чудесно заполняется. Я же говорю - код отрабатывается без ошибок, но результата не дает
|
|||||||||||||
27
Wobland
28.05.12
✎
12:09
|
(25) кнопку я придумал, чтобы генерировать ТЗ и отдавать её в СКД. можно без своей кнопки?
|
|||||||||||||
28
Любопытная
28.05.12
✎
12:09
|
(25) А как без кнопки?
|
|||||||||||||
29
Wobland
28.05.12
✎
12:09
|
(26) откуда у тебя СКД прознало про твою ТЗ?
|
|||||||||||||
30
Любопытная
28.05.12
✎
12:10
|
(23) У меня простой отчет
|
|||||||||||||
31
Любопытная
28.05.12
✎
12:10
|
(29) она реквизит отчета.
|
|||||||||||||
32
Wobland
28.05.12
✎
12:12
|
(31) и чо? пусть их будет 80. какую брать?
|
|||||||||||||
33
Любопытная
28.05.12
✎
12:15
|
(32) которую я сказала, в чем проблема?
|
|||||||||||||
34
Wobland
28.05.12
✎
12:16
|
(33) в этом и заключался вопрос
|
|||||||||||||
35
Любопытная
28.05.12
✎
12:19
|
(34) в чем?
|
|||||||||||||
36
Wobland
28.05.12
✎
12:21
|
-откуда у тебя СКД прознало про твою ТЗ?
-она реквизит отчета. -какую из имеющихся брать? -которую я сказала -откуда ты это сказала? |
|||||||||||||
37
Любопытная
28.05.12
✎
12:22
|
Ну так может кто-нибудь поможет разобраться ПриКомпоновкеРезультата()?
Хочу таки через нее отчет вывести |
|||||||||||||
38
acsent
28.05.12
✎
12:22
|
в 8.2 есть событие модуля ПриКомпоновке
|
|||||||||||||
39
Любопытная
28.05.12
✎
12:23
|
(36) Я заполнила ТЗ, потом подложила это ТЗ в ВнешниеНаборыДанных.Вставить(). Разве не так?
|
|||||||||||||
40
Любопытная
28.05.12
✎
12:23
|
(38) оно и есть
|
|||||||||||||
41
Cube
28.05.12
✎
12:27
|
Собсна этим, надеюсь, я ответил на все вопросы:
Файл отчета без формы, но с внешним набором данных: http://files.mail.ru/3F4WJX А вот и единственная процедура из модуля этого отчета: Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; МояТЗ = Новый ТаблицаЗначений; МояТЗ.Колонки.Добавить("Поле1", Новый ОписаниеТипов("Строка")); Для Сч = 1 По 25 Цикл НоваяСтрока = МояТЗ.Добавить(); НоваяСтрока.Поле1 = "Строка " + Сч; КонецЦикла; ДокументРезультат.Очистить(); ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("МояТЗ", МояТЗ); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры //ПриКомпоновкеРезультата() |
|||||||||||||
42
Cube
28.05.12
✎
12:28
|
+(41) Абсолютно то же самое, можно сделать в форме отчета, нарисовав свою кнопку "Сформировать". И оба этих варианта - штатные механизмы. Никаких костылей тут нет и быть не может.
|
|||||||||||||
43
Любопытная
28.05.12
✎
12:29
|
(41) А если без НачатьВывод() и ЗакончитьВывод()?
|
|||||||||||||
44
Wobland
28.05.12
✎
12:31
|
(41) спасибо, поучил
|
|||||||||||||
45
Cube
28.05.12
✎
12:31
|
(43) не понял вопроса.
|
|||||||||||||
46
Wobland
28.05.12
✎
12:31
|
(43) аллах запрещает?
|
|||||||||||||
47
Cube
28.05.12
✎
12:32
|
(44) Сам в первый раз делал, до этого я кнопу "Сформировать" рисовал :)
|
|||||||||||||
48
Wobland
28.05.12
✎
12:32
|
(47) я не заметил ДокументРезультат в параметрах ;)
|
|||||||||||||
49
Любопытная
28.05.12
✎
12:33
|
(41) Мне не нравится цикл для вывода. Можно пачкой всю ТЗ вывести?)
|
|||||||||||||
50
Wobland
28.05.12
✎
12:34
|
действительно, а зачем там циклический вывод? не проще ль
ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); |
|||||||||||||
51
Wobland
28.05.12
✎
12:34
|
(50) ну, не Результат...
|
|||||||||||||
52
sanja26
28.05.12
✎
12:34
|
ПроцессорВывода.НачатьВывод();
Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); какой смысл? |
|||||||||||||
53
Cube
28.05.12
✎
12:37
|
(50) Да пожалуйста, я не против) Просто я взял свой старый отчет со своей кнопкой "Сформировать" и внешним набором данных и скопипастил код.
Работает? Работает! Фигли докопались?)) |
|||||||||||||
54
Cube
28.05.12
✎
12:38
|
+(53) Кстати, этот код я не сам придумал. Может из Хрусталевой взял?...
|
|||||||||||||
55
SoulPower
28.05.12
✎
12:39
|
(27)(28) -> (41)
|
|||||||||||||
56
Любопытная
28.05.12
✎
12:39
|
||||||||||||||
57
Cube
28.05.12
✎
12:40
|
(55) Спасибо, кэп!))
|
|||||||||||||
58
SoulPower
28.05.12
✎
12:41
|
(57) Спросили, ответил. И да, пожалуйста.
|
|||||||||||||
59
Cube
28.05.12
✎
12:41
|
(56) Ну так это, ты всё ещё считаешь, что своя кнопка "Сформировать" это костыли?)
|
|||||||||||||
60
Wobland
28.05.12
✎
12:41
|
я вот тут подумал... до этого я делал свою кнопку, заставлял её работать по-своему. а можно проще - перехватить компоновку, наделать там нужного и отдать обратно. так что ...
затрудняюсь ответить |
|||||||||||||
61
Любопытная
28.05.12
✎
12:41
|
(60) Воооот! Таки на мой взгляд, это правильнее.
(59) Смотри (60) :) не костыль |
|||||||||||||
62
Cube
28.05.12
✎
12:42
|
(60) (61) А какая разница, где мы это делаем? Механизмы юзаем одни и те же. Так что, это одно и то же.
|
|||||||||||||
63
Cube
28.05.12
✎
12:43
|
+(62) Код один и тот же...
|
|||||||||||||
64
Любопытная
28.05.12
✎
12:43
|
(63) но в разных местах
|
|||||||||||||
65
PiVa123
28.05.12
✎
12:43
|
(61) Если бы еще показали - как впихнуть эти самые "ВнешниеНаборыДанных", а остальное не делать (т.е. Вывод - пусть сам делается) тогда было бы круто.
|
|||||||||||||
66
Любопытная
28.05.12
✎
12:44
|
(65) А вот это уже невозможно, на сколько я поняла
|
|||||||||||||
67
PiVa123
28.05.12
✎
12:45
|
(66) Скажем так, я тоже пока не знаю. :)
|
|||||||||||||
68
Wobland
28.05.12
✎
12:45
|
(62) в первом случае я вотнул свой рычаг и перевязал на него тросики, во втором случае я (ты) подшаманил под приборной панелью, чтоб тот же тросик и тот же рычаг чуть по-другому работали... не?
|
|||||||||||||
69
Cube
28.05.12
✎
12:45
|
(64) То есть, если ты сначала чай налила в кружку, а потом сахару насыпала, а я сахар сыплю одновременно с наливанием воды, то у меня костыли, а у тебя типовой функционал? Ну-ну))
|
|||||||||||||
70
Wobland
28.05.12
✎
12:46
|
(65) Cube в (10) уже показывал
|
|||||||||||||
71
Любопытная
28.05.12
✎
12:49
|
(69) Если тебе так хочется - да, ты умнее меня. Гордись этим, но я останусь при своем мнении
|
|||||||||||||
72
Cube
28.05.12
✎
12:53
|
(71) Что-то разговор не в то русло пошел... Никто никого не умней. Какие есть способы впихать свою ТЗ в СКД? Он один. И при подмене кнопки и в процедуре мы делаем одно и то же - мы не используем автоматический вывод отчета, мы пишем свой вывод. Но это штатная функция, так задумано разработчиками платформы.
Поймите, в обоих вариантах происходит абсолютно одно и то же. |
|||||||||||||
73
Wobland
28.05.12
✎
12:59
|
(72) >происходит абсолютно одно и то же
не спорю, только как-то перехват события выглядит элегантней, нежели своя кнопка имхо |
|||||||||||||
74
Любопытная
28.05.12
✎
12:59
|
(72) Я понимаю, что происходит одно и тоже. Я понимаю, что есть вариант, когда используется стандартная команда, а есть не очень красивый вариант с перерисовыванием кнопок и изменением свойств элементов формы. Телодвижений больше получается
|
|||||||||||||
75
Cube
28.05.12
✎
13:04
|
(73) (74) Не, я тоже считаю, что в процедуре красивее, но вопрос-то был что своя кнопка "Сформировать" это костыль или нет?
Я считаю, что своя кнопка "Сформировать" это тоже самое, что написать "СтандартнаяОбработка = Ложь;" в какой-нибудь предопределенной процедуре. Поэтому, если кнопка "Сформировать" это костыль, то все конфигурации на костылях)) |
|||||||||||||
76
Любопытная
28.05.12
✎
13:05
|
(75) Мы думаем явно по-разному)
|
|||||||||||||
77
Cube
28.05.12
✎
13:09
|
(76) Ну почему же? Вот смотри:
1). Своя кнопка "Сформировать". Мы отказываемся от автоматической обработки нажатия на эту кнопку и пишем свою процедуру. 2). "СтандартнаяОбработка = Ложь;". Этим мы отказываемся от автоматической обработки этого метода и пишем свой код. Ну, 1 и 2 не похоже совсем?)) Ну что, ни капельки? Ну ё-маё... :))) |
|||||||||||||
78
Wobland
28.05.12
✎
13:09
|
Костыль — средство добавления недостающей функциональности или исправления серьёзных дыр без должного редизайна системы.
http://lurkmore.to/Костыль если принять это определение, то да, вся конфигурация на костылях ;) |
|||||||||||||
79
Wobland
28.05.12
✎
13:10
|
Синонимом кода, состоящего из костылей чуть более, чем полностью, является индусский код.
ох уж мне эта 1С... |
|||||||||||||
80
Cube
28.05.12
✎
13:12
|
(78) В нашем примере происходит добавление функциональности, которое не требует редизайна системы, поэтому под статью "Костыль" наш пример не попадает, за отсутствием состава преступления))
|
|||||||||||||
81
Cube
28.05.12
✎
13:13
|
(79) А откуда вообще пошла байка, что 1С разрабатываю индусы?))
|
|||||||||||||
82
Cube
28.05.12
✎
13:14
|
+(81) Имею ввиду платформу.
|
|||||||||||||
83
SoulPower
28.05.12
✎
13:22
|
(77)
1)Мы отказываемся от автоматической обработки нажатия на эту кнопку и пишем свою процедуру. 2)Мы не отказываемся и ничего не пишем. Пользуемся стандартным механизмом. Так что это скорее не костыль, а http://lurkmore.to/Изобретать_велосипед |
|||||||||||||
84
Любопытная
28.05.12
✎
13:26
|
(77) Это одинаково в том случае, если мы не будем прятать стандартную кнопку. А если прячем, тогда уже не одинаково
|
|||||||||||||
85
Wobland
28.05.12
✎
13:26
|
чуствую, будет сотня...
(81) байку не слыхал |
|||||||||||||
86
Cube
28.05.12
✎
13:33
|
(83) "Мы не отказываемся и ничего не пишем. Пользуемся стандартным механизмом."
То есть, ты утверждаешь, что после строки "СтандартнаяОбработка = Ложь;" у тебя отрабатывает стандартный механизм? вот это новости... А попоробуй-ка эту строку убрать и удивишься... :) |
|||||||||||||
87
Cube
28.05.12
✎
13:34
|
(84) А я её не прячу никуда, я просто переназначаю у неё процедуру... Кнопка на месте.
|
|||||||||||||
88
Wobland
28.05.12
✎
13:35
|
(87) у стандартной кнопки переназначаешь обработчик?
|
|||||||||||||
89
Cube
28.05.12
✎
13:38
|
(88) Угу. А чем она от других кнопок отличается? Обычная кнопка...
|
|||||||||||||
90
Wobland
28.05.12
✎
13:42
|
(89) свойствов нету у неё. http://dl.dropbox.com/u/64196148/20120528_164241.jpg
|
|||||||||||||
91
Cube
28.05.12
✎
13:45
|
(90) Так это в УФ, я то в обычных формах процедуру у неё заменял))
|
|||||||||||||
92
Wobland
28.05.12
✎
13:47
|
(91) окстись, где?
http://dl.dropbox.com/u/64196148/20120528_164715.jpg |
|||||||||||||
93
Cube
28.05.12
✎
13:47
|
(92) Свойство "Действие".
|
|||||||||||||
94
Wobland
28.05.12
✎
13:48
|
(93) от я чукча, ни разу не догадался там руками что-то прописать ;)
|
|||||||||||||
95
Cube
28.05.12
✎
13:50
|
(94) :) Ниче-ниче. Вот выйдет 8.3, там ещё что-нибудь новенького придумают))
|
|||||||||||||
96
SoulPower
28.05.12
✎
13:55
|
(86) Причем тут "СтандартнаяОбработка = Ложь;"?
Что ты приплетаешь абсолютно несвязные вещи. Ты убрал стандартную кнопку и прописал её действие заново. Хотя мог обработать стандартное событие ПриКомпоновкеРезультата(). Это по-твоему аналог, того что ты в стандартном обработчике пишешь "СтандартнаяОбработка = Ложь;"? Ты кнопку лишнюю кнопку зачем-то нарисовал. По-моему это велосипед. |
|||||||||||||
97
Cube
28.05.12
✎
13:59
|
(96) Вот именно: "убрал стандартную кнопку и прописал её действие заново" против "отказался от стандартной обработки процедуры и прописал её действие заново".
Что там мы отказываемся от стандартной обработки, что здесь - одно и то же. |
|||||||||||||
98
SoulPower
28.05.12
✎
14:01
|
(97) Если для тебя одно и тоже, то ок. Не вижу смысла спорить, рисуй дальше свои кнопки.
|
|||||||||||||
99
Cube
28.05.12
✎
14:03
|
(98) ну, если ты закрыл газа и считаешь, что если ты никого не видишь, значит никого нет, то да, спорить с тобой смысла тоже не вижу...
|
|||||||||||||
100
Cube
28.05.12
✎
14:04
|
Сотка!!!
|
|||||||||||||
101
SoulPower
28.05.12
✎
14:04
|
(100) читерская сотка, кстати.
|
|||||||||||||
102
SoulPower
28.05.12
✎
14:06
|
(99) Ты не видишь разницы в реализации своей кнопки и её отсутствием. При том что остальной алгоритм пишется одинаково. Донести до тебя это не получилось. И аналогии у тебя не правильные.
|
|||||||||||||
103
Wobland
28.05.12
✎
14:07
|
Ты убрал стандартную кнопку и прописал её действие заново
... Это по-твоему аналог, того что ты в стандартном обработчике пишешь "СтандартнаяОбработка = Ложь;"? имхо да. только в первом случае речь об элементах формы, а во втором - о коде. |
|||||||||||||
104
Cube
28.05.12
✎
14:07
|
(101) Наглая ложь и клевета! Я честно сотку отработал! :D
|
|||||||||||||
105
Cube
28.05.12
✎
14:09
|
(102) Если бы стандартную процедуру кнопки можно было в коде описать и написать там "СтандартнаяОбработка = Ложь;", то так бы и делал. Такого разработчики не предусмотрели, поэтому считаю, что замена процедуры у кнопки и есть та самая "СтандартнаяОбработка = Ложь;".
|
|||||||||||||
106
SoulPower
28.05.12
✎
14:11
|
(105) Разработчики зато предусмотрели ПриКомпоновкеРезультата()
|
|||||||||||||
107
Cube
28.05.12
✎
14:18
|
(106) Но и там и там ты пишешь абсолютно один и тот же код. Просто в первом варианте у тебя этот код работает только когда пользователь жмет на кнопку, но не работает при программном формировании отчета (то есть ты рулишь процессом всегда), а во втором случае у тебя этот код работает всегда и когда пользователь жмет на кнопку и при программном формировании отчета (то есть ты уже не рулишь этим процессом). А для каких задач какой способ использовать - это уже от задачи зависит.
|
|||||||||||||
108
Cube
28.05.12
✎
14:20
|
Всё, рабочий день кончается, больше отвечать сегодня не смогу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |