0. Istur 1424 28.11.11 10:18 Сейчас в теме

Декомпиляция элементов формы для 8.2 для обычных форм (не управляемых).

Декомпиляция отдельных элементов формы и самой формы в общем, для формирования кода для динамического вывода реквизитов.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
0. Istur 1424 28.11.11 10:18 Сейчас в теме
Декомпиляция отдельных элементов формы и самой формы в общем, для формирования кода для динамического вывода реквизитов.

Перейти к публикации

1. German 870 28.11.11 10:18 Сейчас в теме
Что с определением цветов и шрифтов из стиля? :)
Знаю только одну обработку в которой это реализовано.
2. Istur 1424 28.11.11 10:44 Сейчас в теме
(1) Нет, не реализовано. Мне пока это не нужно.
3. Поручик 4334 28.11.11 11:00 Сейчас в теме
(2) Добавь в описание, только для обычных форм.
4. Istur 1424 28.11.11 11:04 Сейчас в теме
5. ValeriTim 20 28.11.11 11:24 Сейчас в теме
(1) какая обработка это делает ?
6. German 870 28.11.11 11:33 Сейчас в теме
(5) Ei полное (ВЫПОЛНЯЕМОЕ) перобразование, позволяющее скопировать форму
7. vasiliy_b 280 29.11.11 09:51 Сейчас в теме
Да, такую бы обработку для управляемых форм!
44. Sverkalov 124 28.12.11 22:09 Сейчас в теме
45. AlexO 128 24.01.12 02:23 Сейчас в теме
(44) что-то сомнительно... в тонком же это невозможно в принципе - так откуда "для управляемых форм"??
46. vasiliy_b 280 24.01.12 09:04 Сейчас в теме
(45) Почему же невозможно? Программно добавлять элементы на форму можно?! Обходить все элементы формы можно?! так почему же это нереально?
47. AlexO 128 25.01.12 01:32 Сейчас в теме
(46) в УП нельзя. УФ формируются динамически, поэтому программно ничего добавить нельзя.
Только если в режиме толстого клиента.
48. vasiliy_b 280 25.01.12 09:10 Сейчас в теме
(47) AlexO, А как же тогда реализован вывод реквизитов свойств объектов на формы? В типовых конфигурациях в управляемых формах? Прежде чем говорить посмотрите сначала УТ 11 например, в справочник номенклатур добавьте пару свойств.... и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались.... а потом еще будут прибегать когда вы будете обновления накатывать.
51. AlexO 128 29.01.12 15:17 Сейчас в теме
(48) да, ошибся, извините.
Думал, только невизуальные реквизиты можно.
Посмотрел, добавлять можно, но что-то все через ж.. происходит с результатом..
60. AlexO 128 31.03.12 14:59 Сейчас в теме
(48) vasiliy_b,
в справочник номенклатур добавьте пару свойств.... и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались....

ну и где же динамически добавленные "реквизиты"? уж не хранятся ли они в строго ограниченных регистрах свойств объектов?
вы или ваши дядьки из 1с сделате так, чтобы "программно созданный" реквизит хранил данные, а не просто использовался для подстановки предопределенных значений??
49. Yasen 490 25.01.12 12:48 Сейчас в теме
(47) AlexO,
программно ничего добавить нельзя

Откуда такие сведения если не секрет? Религия не позволяет или Нуралиев запретил?
8. alekseineputin 29.11.11 09:59 Сейчас в теме
Всё здорово, помогает экономить время на динамическом добавлении элементов в форму.
Плюс однозначно ;)
9. Поручик 4334 29.11.11 10:09 Сейчас в теме
(8) Нет, всё это знать не обязательно. Для этих целей есть СП, мануалы, шаблоны кода. Главное знать что искать и как искать.
AlexO; Andry.Boris; +2 Ответить
10. alekseineputin 29.11.11 10:39 Сейчас в теме
(9) Ладно, не нападай :) От шаблонов кода очень часто остаются куски причудливой формы :D Или я после НЕ тех программистов работал ;)
58. AlexO 128 30.03.12 18:11 Сейчас в теме
(8) mamanelli,
ведь нормальный кодер должен знать это "на кончиках пальцев"

ждем статью, где все, что надо будет знать программисту "на кончиках пальцев", будет описано и выложено в коде, набранном именно таким же методом - без справки по памяти ))
115. tchvlad 27.08.12 15:37 Сейчас в теме
(8) mamanelli,

Уважаемый не полно оценил :)

Какие еще кончики пальцев? Тупо кодить массу текста, когда можно автоматизировать?
Я использую аналоги этой разработки - мои кончики пальцев и так не знают отдыха, многое умеют, а потому жирный плюс.
11. woozee 48 29.11.11 11:52 Сейчас в теме
Понять не могу для чего она =) И чем полезна она будет))
12. Istur 1424 29.11.11 12:09 Сейчас в теме
(11)Мне кажется в описании все написано. Ну а если другими словами, то обработка, чтобы добавленные программистом реквизиты, колонки, кнопки в типовых конфигурациях выводить программно, дабы при обновлении все это не затерлось, да и просто чтобы процесс обновления был быстрее и менее сложен.
13. woozee 48 29.11.11 14:43 Сейчас в теме
Да? Есть одна формочка стандартная суперпеределанная.... Надо проверить... Но суть не в этом) Идея (в моем случае) понравилась.
А привязки по форме в обычной форме тоже программно описывает?:)
14. Istur 1424 29.11.11 14:44 Сейчас в теме
(13) Да, привязки описывает. Это одно из самых важных, как же без них)
15. Yasen 490 29.11.11 15:12 Сейчас в теме
Спасибо, плюс.
Ждем когда управляемые формы достигнут подобного уровня программизма )
16. woozee 48 29.11.11 16:11 Сейчас в теме
Не работает) Минус) В единственной сложной форме и то не пригодился))
1Ска виснет, нагрузка на комп возрастает до максимума, через продолжительное время вылетает.
Проблема в 573 строчке (Цикл) - то есть "зацикливание".

Ждем фикс) Или уже не ждем))
17. Istur 1424 29.11.11 16:15 Сейчас в теме
(16) У меня не возникало подобное.. А какие значения в "СтрИсточник" в зацикливаемой строке? И что за форма?
18. woozee 48 29.11.11 16:46 Сейчас в теме
Бухгалтерия 2.0.29 СписниеСРасчетногоСчета.ФормаДокумента В СтрИсточник строка дерева =) Они там меняются эти деревья) Значения вроде адекватные, а что так долго - я не знаю. но в замере производительности оно зацикливается.
Форма Переделана в плане того что добавлена панелька с добавочной страницей, на эту панельку перенесена основная панелька, та самая с кучей страниц. Ну и пара полей добавлено )) Ну как то так)))
37. AlexO 128 06.12.11 22:14 Сейчас в теме
слушай, Истур, а это ведь ты натолкнул меня на мысль со своей идеей дискретно декомпилировать.. хотя и так вроде было на поверхности, а вот поди ж ты... ))
надоть тебе плюсик за это поставить...
Так проблема из (18) поправлена?
если можно, пришли исправленный вариант по личке... а то тут с этими ограничениями замучаешься качать...
39. woozee 48 07.12.11 09:06 Сейчас в теме
(37) AlexO, странно, муза под конец рабочего дня приходит =)
19. AlexO 128 30.11.11 01:34 Сейчас в теме
все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
а программно создавать - в любом случае никакие обработки не помогут.
Вообще, создание программно чего-либо и 1с - вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало....
Craig; 1cbit_tomsk; Redhatych; +3 1 Ответить
21. woozee 48 30.11.11 09:19 Сейчас в теме
(19) AlexO,
Идея программно добавлять нестандартные элементы намного проще чем постоянно отслеживать изменения в элементах формы. Что я и взял на вооружение. Правда перерисовывать то что у нас с этой формой - не представляю даже себе КАК))) Вернее... лениво даже представлять)
На счет паровозом к основной - Если документ не ахти какой, очень редко обновляется - то да, в какой то степени возможно. Дело в том что в этом случае сложно отслеживать изменения и гораздо чаще будут вылетать ошибки после обновления.
Самым правильным будет просто переносить свои кнопочки, поля и т.д. Ну и что, что это может занять продолжительное время - зато практически не возникают ошибок)
suggestive; CratosX; Istur; +3 Ответить
22. Istur 1424 30.11.11 12:41 Сейчас в теме
(21) +1

(20)
Вообще, создание программно чего-либо и 1с - вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало....


Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.

а программно создавать - в любом случае никакие обработки не помогут.

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

все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.


Проще? Неожиданно) Это по сути значит, что форма будет отключена от обновлений, то есть само действие не имеет никакого смысла. Это тоже самое, что при обновлении у формы снимать флажок обновления. И рано или поздно возникнут проблемы, потому что что-либо добавлять нужно обычно в часто используемых объектах метаданных, обновления для которых приходят если не каждый релиз, то через релиз.
23. woozee 48 30.11.11 14:49 Сейчас в теме
(22) Мне можно надеятся на испралвение ошибки "зацикливания", или забить?:)
24. Istur 1424 30.11.11 14:59 Сейчас в теме
(23) Да, исправлю. Единственное сейчас запар некоторый на работе, но до конца недели точно время найду.
26. AlexO 128 30.11.11 23:43 Сейчас в теме
(22) собственно, в (25) вам ответили. Там как один из вариантов подключения допформы.
Основная форма остается для обновлений, где-то (можно перед открытием основной формы - при обновлении обновлять спокойно с закрытыми глазами, только потом вставить строчку обратно переключения-ответвления на допформу) вставляется переключатель, допформа один-в-один с основной+изменения, какие надо было внести.
Пользователь открывает как обычно, получает "родную" по внешнему виду форму с доработкой, старая остается нетронутой и лежит, ждет последующих обновлений.
Допформу, кстати, не обязательно пихать в документ, а оставить отдельной обработкой в конфе (и затираться она не будет), а подключать её именно как форму, с сохранением всех остальных событий и процедур родного документа.
(25) такое может потребоваться как раз там, где нужно и обновления ставить "неглядя", и все-таки внести изменения в "типовую" форму. Т.е. совместить несовместимое.
Что и удается.
(22) а все программно выводимые реквизиты... механизм отслеживания изменений - отсутствует (кроме визуального восприятия), механизм проверки и контроля создаваемых программно элементов - отсутствует, набор инструментов для создания таких якобы "программных" элементов (на самом деле - это создание куцых "вроде поля"-элементов, как и все полууправляемые или совсем неуправляемые ЭУ в 1С) - отсутствует.
В конце концов, будет куча кода, который рухнет под собственной тяжестью.
"сдал проект".. Сдать - полдела, еще и сопровождать это надо. А от этого, я так понимаю, вы самоустранились.
Прекрасно понимая, что снова разгребать кучу кода от "программно создаваемых элементов" - занятие не для слабонервных.
27. o.nikolaev 01.12.11 07:14 Сейчас в теме
(26)
Ну видимо как-то так, да - "совместить несовместимое". И склоняюсь к тому что эту стратегию можно рекомендовать для применения как раз в таком случае - "впихнуть невпихуемое", а в случае когда есть возможность создать доп. формы (обработки с дин. списками и etc.) все же следует создавать объекты, используя префиксы, общие модули и т.п.
---
Мнение мое и не обязательно правильное.
30. i132 115 01.12.11 17:05 Сейчас в теме
(26) Идея: для обновлений оставить Основную форму (без визуальных изменений) а добавленные реквизиты хранить на форме _дополнительные - и добавлять при открытии обходом всех элементов этой формы.
:удобно тем что видно на глаз новые реквизиты и легко изменить их положение.
36. AlexO 128 06.12.11 22:09 Сейчас в теме
хотя у меня есть идея, где все это "программное" чудо пригодится... как раз для "чистого" творчества нужно...
только боюсь, даже в условиях ограниченных требованиях, которые я предъявлю, программное формирование элементов от 1С не выйдет из своих жестких рамок..
А декомпилировать всю форму со всеми элементами из=за обновлений, чтобы добавить один-два новых элементов на форму..
А почему никто не попробовал сделать как предложено в (30) - добавлять только нужные, и привязками/размещением играть?
хотя сами элементы могут сместится на новой форме.... а это уже никак не отследишь программно - или писать целый механизм сравнений и корректировок..
короче, я вам способ подсказал, но можете все делать программно ))
а я попробую в том механизме, где это действительно нужно и очень важно...
57. AlexO 128 30.03.12 18:08 Сейчас в теме
(22)
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.

ну, и как обновляете модуль формы со всеми процедурами обработки таким образом созданных элементов?
25. o.nikolaev 30.11.11 22:03 Сейчас в теме
Вот все-таки, для чего это может пригодиться? Неужели нельзя обойтись без генерации кучи кода? Что касается форм объектов - ну это понятно - создаются создаются доп. формы журналов (списков) в них отлавливается "ПриВыборе" и открывается "своя" форма объекта. Какая ситуация может потребовать использования такого подхода при доработке типовой конфигурации с возможностью сохранения обновлений?
28. vkr 101 01.12.11 07:39 Сейчас в теме
По-моему, предложенный автором метод - прекрасный вариант компромисса для вечно загруженного 1С-программера ! :)
Лично я обязательно начну постепенно использовать - задолбало каждый раз свои "кнопки" перегонять в новый билд...
31. AlexO 128 01.12.11 22:48 Сейчас в теме
(28) vkr,
как раз нисколько не прекрсаный, вам предложен более простой и надежный, а главное - сопровождаемый метод.
Не понимаете - так и скажите.
(29) woozee,
>> Чем хороша данная обработка - посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли "сопроводителя" "подешевле".
- ну что ж, остается вам пожелать получить срочное задание по доработке/исправлению вот после такого же программиста "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак".
А 1С специально сделана, чтобы путать всех и вся. И не надейтесь, что вас кто-то пожалеет и будет писать "как вам удобно/известно". 1с-ники - в большинстве народ малограмотный.
32. woozee 48 02.12.11 09:23 Сейчас в теме
(31) AlexO,
>> "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак"

Самое интересное что есть доля правды))) Дело в том что есть некий стандарт разработки, предложения от 1С. Все эти материалы находятся на диске ИТС. Если хотя бы о них догадываться и если еще немного и почитывать, то разбираться в стандартных конфигурациях, и в коде тех программистов которые хотя бы примерно им придерживаются - проблем особых не возникает))

......
//Программист =========
  ДобавитьПрограммноЭлементыФормы();
//Программист =========
......

//Программист =========
Процедура ДобавитьПрограммноЭлементыФормы()

  //Поле ввода и Надпись ФизЛица
  ......

  //Поле ввода и Надпись Договора
  ......

КонецПроцедуры
//Программист =========
Показать


Чего сложного?:)

(30) Дело в том что бывает добавлена страница в панельке без отображения заголовков этих страниц. Либо забываешь привязать процедурку к стандартному реквизиту, например, ПриИзменении... ПриВыборе
CratosX; vkr; +2 Ответить
33. AlexO 128 02.12.11 22:27 Сейчас в теме
(32) woozee,
1с сама же и нарушает везде и свюду свои "правила".
потому у 1с главное правило - никаких правил...
34. vkr 101 05.12.11 08:21 Сейчас в теме
(31),(33) Вот уж никогда не придерживался "стандартов разработки" от 1С...
Могу посоветовать Вам прочесть прекрасную книгу :
Мифический человеко-месяц или Как создаются программные системы
(The mythical Man-Month: Essays on Software Engineering)
Автор: Фредерик П. Брукс
Издание 1975 или 2010 г.
Надеюсь, она Вам будет полезна...
35. AlexO 128 06.12.11 21:51 Сейчас в теме
(28) vkr,
а и не перегоняйте, сделайте, как я советую в (26) ))
и просто, и обновлять больше не надо.. разве что изменится сама "родная" форма-родитель, и вам захочется сделать "потомка" снова на неё похожим..
(30) i132,
что за форма "Дополнительные"? предлагаете создать новую форму, хранить на ней некие новые реквизиты, потом программно считывать их оттуда и вставлять программно же на старую форму?
а зачем вся эта длиннющая цепочка? а если "порвется" где-нить - как отследите, что перестало работать?
(34) vkr,
теория программирования, теории обработки БД, хранения данных, и 1с - несовместимы ))
это уже известно давно с выходом снежка...
(0) рано или поздно возникнут проблемы как в (18), т.к всегда "остаются куски причудливой формы", все эти программные изыски неуниверсальны в силу уже указанной причины - ребята, это не Си, а 1С, которая плевать хотела на все правила, стандарты и развитие программирования, а с выходом 8.2 - и вообще плевать на программиста..
38. vkr 101 07.12.11 08:39 Сейчас в теме
(35) Да, я с Вами согласен по поводу идеологической несовместимости 1С с нормальными принципами...
Хотя, по мере возможности, борюсь у себя с этой проблемой (пусть даже за счет некоторых потерь сил и нервов).
Спасибо за диалог! :)
40. AlexO 128 07.12.11 22:48 Сейчас в теме
(38) vkr,
с 1с бороться бесоплезно ))
примените стиль айкидо - уйти с линии удара и пусть валится...а как упадет - можно диктовать свои условия.. ))
(39) woozee,
что-то путное на 1с можно изобрести только абстрагировавшись от 1с ))
43. vkr 101 12.12.11 08:21 Сейчас в теме
(40) Спасибо, Вы очень точно сформулировали методику взаимоотношений с 1С... :)
Буду теперь знать, как это называется...
Только на диктовку им условий мне начхать - я работаю по-своему, клиенты довольны - это главное...
82. AlexO 128 27.04.12 02:19 Сейчас в теме
(28) vkr, (29) woozee,
вот и прошел мой пример испытание временем ))
Попробуйте программно создать вкладку, ТП на ней, компанель к ней.... на последнем пункте все и рушится.
Нельзя создать такую панель.
А работает единственный мой способ с подменой формы.
Так что программное создание элементов, мягко говоря, оченьо узкое и специализированное занятие.
(22)
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.

значит, ничего серьезного не делали программно ))
Вот даже элементарную стандартную панель нельзя сделать ))

Upd:
Ниже разобрались, что можно сделать создание КП через общий модуль (но не глобальный), заработало автозаполнение (почему не работало - причина осталась неясна), и без хранения исходной КП с кнопками на родительской форме.
83. bambr1975 822 27.04.12 10:00 Сейчас в теме
(82) AlexO, честно говоря, Вы производите впечатление человека неглупого, но какого-то ни во что не верящего и ужасно невнимательного.
Специально для Вас смоделирована ситуация с программным добавлением табличного поля и автозаполнением связанной с ним командной панели.
P.S. Ограничения в программном добавлении элементов на форму безусловно есть - но и ручную обработку поступающей информации тоже никто не отменял - просто можно же себе жизнь упростить...
Прикрепленные файлы:
ВнешняяОбработка1.epf
84. AlexO 128 27.04.12 17:42 Сейчас в теме
(83) именно это и пробовал - и в модуле формы, и в общем модуле:
     КоманднаяПанель = ЭлементыФормы.КоманднаяПанель2;
     КоманднаяПанель.ИсточникДействий = ЭлементыФормы.ТабличноеПоле1;
	 КоманднаяПанель.Автозаполнение=Истина;

- не работает...
Сейчас вообще ругается - "Перменная не определена: ГраницаЭлементаУправления".
В общем, веселая у меня база...
85. bambr1975 822 27.04.12 17:50 Сейчас в теме
(84) AlexO, источник действий - существующий реквизит формы (он у Вас существует? Проверьте!)
ГраницаЭлементаУправления - системное перечисление. Доступно в толстом клиенте. Вы в толстом клиенте работаете?
Короче - разобраться можно... Если понимать, зачем Вам это...
86. AlexO 128 27.04.12 17:59 Сейчас в теме
(85) bambr1975,
источник действий - существующий реквизит формы

мы же его (ТабличноеПоле) полностью программно создаем? или все-таки должно быть уже в реквизитах формы - реквизит табличное поле?
. Доступно в толстом клиенте

я знаю, что это системное перечисление. Как и "ТипКнопкиКоманднойПанели".
Все работало, а потом - раз, и "не видит" перечислений...
Работаю конечно в толстом. Все уже проверил (сама думал - вдруг слетело).
87. AlexO 128 27.04.12 18:04 Сейчас в теме
(83) bambr1975,
вот, кстати, мой идентичный неработающий код:
	КоманднаяПанель = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"),"кпПроект",Истина,ЭлементыФормы.Панель1);
	УстановитьПоложениеЭлемента(КоманднаяПанель,10,25,6,380);
	КоманднаяПанель.ИсточникДействий = ЭлементыФормы.тпМенеджеры;
	КоманднаяПанель.УстановитьПривязку(ГраницаЭлементаУправления.Низ,КоманднаяПанель,ГраницаЭлементаУправления.Верх);
	КоманднаяПанель.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭтаФорма.Панель,ГраницаЭлементаУправления.Право);
	КоманднаяПанель.АвтоЗаполнение = Истина;

тпМенеджеры - до этого программно созданное ТП.
29. woozee 48 01.12.11 09:45 Сейчас в теме
Спорить можно бесконечно))
Всем известно что для решения задачи присутствует разновсяческое множество вариантов. От кривых до идеально правильных, оптимизированных и прям супер-пупер...
Для проектирования своего нововведения или "хотелок" пользователей нужно учитывать не только легкость обновлений, быстродействие, но и самым важным будет удобство пользователей в работе с энтим инструментом)) При этом учитывать эргономичность формы, и не потерять производительность работы.
Чем хороша данная обработка - посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли "сопроводителя" "подешевле". Но это другая история))
42. echo77 1100 10.12.11 13:45 Сейчас в теме
При добавлении колонки в ТабличноеПоле метод УстановитьДействие не прокатывает :-/

Было бы неплохо накидать справку в обработке, подобную той что вы здесь привели
50. vasiliy_b 280 27.01.12 10:51 Сейчас в теме
Ошибка: Берем ТЧ документа, добавляем новый реквизит(я добавлял типа число (15,3)) далее выводим эту колонку на форму привязываем событие "ПриИзменении", и добавляем изменение цвета при выводе строки.
Декомпилируем эту колонку и получаем следующие ошибки:
Было:
Колонка.УстановитьДействие("ПриИзменении",Новый Действие("Товары_БруттоПриИзменении"));

Надо
Колонка.ЭлементУправления.УстановитьДействие("ПриИзменении",Новый Действие("Товары_БруттоПриИзменении"));

...

Было
Колонка.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(15,3));
Это не нужно, ругается т.к. тип уже назначен. И еще нужно добавить:
Колонка.Имя = "_Брутто"
Иначе имя колонки добавляет "Колонка1"
52. amiralnar 8 02.02.12 16:31 Сейчас в теме
Отличная обработка, спасибо! Пол года о ней мечтал. Ну теперь - держись, УПП =)
53. amiralnar 8 08.02.12 17:02 Сейчас в теме
Есть проблема:

Для декомпиляции выбираю форму реализации товаров и услуг.
При работе через терминал (возможно это важно) подвисает на процедуре ДеревоЭлементовФормыПриПолученииДанных(Элемент, ОформленияСтрок)
За 5 секунд успевает выполнить эту процедуру 85 000 раз.

Пока отключаю процедуру и ориентируюсь по пустым строкам.

Можно ли при построении дерева сразу указать представление ячеек?
54. bambr1975 822 08.02.12 21:26 Сейчас в теме
(0),(53) - алгоритм этой обработки очень пригодился в написании главного алгоритма публикации http://infostart.ru/public/106310/
поэтому, рискну здесь привести свои корректировки процедуры модуля обработки СформироватьДеревоСЭлементамиФормы :

Для каждого СтрДерева Из МассивСтрок Цикл
Панель = СтрДерева.Элемент;
ИмяПанели = Панель.Имя;
Для каждого СтраницаПанели Из Панель.Страницы Цикл
пФормаКопия.ЭлементыФормы[ИмяПанели].УстановитьДействие("ПриСменеСтраницы", Неопределено);
пФормаКопия.ЭлементыФормы[ИмяПанели].Страницы.Удалить(0);
Для каждого Стр1Уровня Из ДеревоЭлементовФормы.Строки Цикл
Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
Если Стр1Уровня.ПарситьСтраницы<>ложь тогда
//в процедуре "ПередОткрытием" модуля формы обработки добавил колонку в дерево элементов формы
//КолонкиДерева.Добавить("ПарситьСтраницы",Новый ОписаниеТипов("Булево"));
//Еще - в самом начале процедуры СформироватьДеревоСЭлементамиФормы в начало цикла добавил
//Стр1Уровня.ПарситьСтраницы=истина;

Если Стр1Уровня.Страница = Неопределено Тогда
Стр1Уровня.Страница = СтраницаПанели.Имя;
Стр1Уровня.Панель=ИмяПанели;
Стр1Уровня.ПарситьСтраницы=ложь;

КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;

//пФормаКопия.ЭлементыФормы.Удалить(Панель);
//Для каждого Стр1Уровня Из ДеревоЭлементовФормы.Строки Цикл
// Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
// Если Не ЗначениеЗаполнено(Стр1Уровня.Панель) или Стр1Уровня.ТипЭлемента = "Панель" Тогда
// Стр1Уровня.Панель = ИмяПанели;
// КонецЕсли;
// КонецЕсли;
//КонецЦикла;

КонецЦикла;

Строки1Уровня = ДеревоЭлементовФормы.Строки;
ПослСтрока = Строки1Уровня.Количество()-1;
Для Сч = 0 По ПослСтрока Цикл
ТекСч = ПослСтрока-Сч;
ТекСтрока = Строки1Уровня[ТекСч];
Если ЗначениеЗаполнено(ТекСтрока.Страница) Тогда
СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Панель+"_"+ТекСтрока.Страница,"ПолноеИмя",истина);
//было СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина);
НовСтр = СтрРодитель.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,ТекСтрока);
ПеренестиПодчиненныеСтроки(НовСтр,ТекСтрока);
Строки1Уровня.Удалить(ТекСч);
КонецЕсли;
КонецЦикла;

В случае этих корректировок зависания (по крайней мере, у меня) не происходит. Структура дерева элементов формы тоже, по-моему, не страдает.
Somebody1; HolodZar; zqzq; wing; Cerberdm; Vida; amiralnar; +7 Ответить
112. Feelthis 36 28.06.12 15:23 Сейчас в теме
Если сделать как написано в комментарии:(54) то все прекрасно работает, а так при анализе документа "Начисление по больничному листу" зацикливался в процедуре "ПеренестиПодчиненныеСтроки" модуля объекта и 1С в дамп вываливалась
120. Cerberdm 20 30.06.13 11:38 Сейчас в теме
(54) bambr1975, Спасибо, помогло.
121. Cerberdm 20 30.06.13 11:42 Сейчас в теме
Автору огромная благодарность ) начал уже создавать свою обработку для этих же целей, хорошо вовремя на ссылку наткнулся, не так много времени убил. Плюсую без вопросов! Отличная работа) - особенно с учетом (54)
127. wing 21 22.04.15 10:18 Сейчас в теме
Обработка не добавляет страницы на панели... а в остальном очень удобна с правками (54)
55. kiruha 381 15.03.12 05:00 Сейчас в теме
Возможно ли от программно созданной формы перейти к непрограммно ?
Шаг обратный декомпиляции, чтобы клиенту высылать стандартную, нединамическую ?
56. AlexO 128 30.03.12 17:38 Сейчас в теме
(55) kiruha,
нет, невозможно - механизма превращения кода 1с в "физический" объект с записью в конфигурацию (на диск) не существует.
Впрочем, в 1с8 в принципе нет выгрузки объектов интерфейса отдельно.
Даже просто создания махонького реквизита для хранения данных у объекта.
Это привет вам от Великого Отсутствия ООП в 1с ))
Если же вы про превращение УФ в обычную форму - тоже невозможно автоматически.
59. rasswet 82 31.03.12 10:03 Сейчас в теме
при попытке разобрать форму (устанавливаем курсор на форму элемента в дереве слева) в ЗУП релиз 47 (командировки организаций) падает сеанс 1С:Предприятие 8.2 (8.2.15.301)
61. AlexO 128 31.03.12 15:00 Сейчас в теме
63. rasswet 82 31.03.12 20:22 Сейчас в теме
(61) ну..не совсем..другой парсер с этого сайта парсит без ошибки.
но мне нравится работать с тем, который тут. а он валится.
64. bambr1975 822 31.03.12 20:59 Сейчас в теме
(63) rasswet, попробуйте слегка поправить код (как описано в (54)) - может, поможет ;)
62. AlexO 128 31.03.12 17:46 Сейчас в теме
В УПП в справочнике Проекты при выборе ФормыЭлемента - вылет.
65. AlexO 128 01.04.12 01:11 Сейчас в теме
(62) нашел проблему (вариант решения в части определения родителя в (54)):
модуль объекта, в процедуре СформироватьДеревоСЭлементамиФормы:
строку
СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина);	//поиск по уникальным значениям

заменить на:
			//если элементы имеют одинаковое название - то сам элемент может стать своим "родителем",
			//и тогда далее в рекурсивной процедуре "ПеренестиПодчиненныеСтроки" произойдет зацикливание.
			//Поэтому необходимо применить поиск по неуникальным значениям в коллекции дерева.
			ПараметрыОтбораРодителей = Новый Структура ("ИмяЭлемента", ТекСтрока.Страница);
			НайденныеРодители = Строки1Уровня.НайтиСтроки(ПараметрыОтбораРодителей, Истина);	//массив найденных родителей с одинаковыми именами
			Если НайденныеРодители.Количество() > 1 Тогда
				//если среди найденых "родителей" кроме самого родителя и элемента будут еще "родители" (элементы с тем же именем),
				//то делаем родителем первого найденного:
				Для Каждого СтрокаРодитель Из НайденныеРодители Цикл
					Если НЕ СтрокаРодитель = ТекСтрока Тогда
						//нашли ссылку на родителя:
						СтрРодитель = СтрокаРодитель;
						Прервать;
					КонецЕсли;
				КонецЦикла;
			Иначе
				СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина);	//поиск по уникальным значениям
			КонецЕсли;
Показать


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

Остался непонятным еще вопрос. Зачем в цикле
	Для каждого СтрДерева Из МассивСтрок Цикл
		Панель = СтрДерева.Элемент;
		ИмяПанели = Панель.Имя;
                .....
	КонецЦикла; 

заполняется "Стр1Уровня", когда в конце все равно переменная перезаполняется данными дерева:
Строки1Уровня = ДеревоЭлементовФормы.Строки;


Но еще постоянно ошибка в попытке (не знаю, критично или нет для результата?):
Процедура "ДобавитьДействие"
Ошибка времени выполнения, стр 140
Ошибка при вызове метода контекста "ПолучитьДействие".

Исправленный файл обработки с изменениями из (54):
Прикрепленные файлы:
ДекомпиляцияЭлементовФормы(испр).epf
66. rasswet 82 03.04.12 20:20 Сейчас в теме
(65) спасибо, завтра протестирую на той же форме.
67. rasswet 82 04.04.12 16:05 Сейчас в теме
(65) протестировал ваш файл.
теперь не виснет. но есть Ошибка
{ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(165)}: Поле объекта не обнаружено (Верх)
мТекст.ДобавитьСтроку(Таб + СтрокаПробелов + "УстановитьПоложениеЭлемента(" + ТекстЭлементДляРазмеров + "," +
69. AlexO 128 06.04.12 12:11 Сейчас в теме
(67) rasswet,
я не знаю, что у вас за конфигурация, и что за объект "Работники организаций", в котором есть некое ТабличноеПоле.
Поэтому здесь не помогу ничем.
По поводу
Поле объекта не обнаружено (Верх)

- у распарсиваемого объекта нет свойства "Вверх", которое ищет обработка и пытается изменить.
70. rasswet 82 06.04.12 14:06 Сейчас в теме
(69) зуп конфигурация. немного измененная..
68. rasswet 82 04.04.12 16:09 Сейчас в теме
(65) уточню. ошибку выводит когда ставлю Флаг напротив "работники организации" табличное поле. и при полном анализе формы. на других элементах ошибку не выдает.
71. AlexO 128 10.04.12 15:10 Сейчас в теме
(68) rasswet,
когда ставлю Флаг напротив "работники организации" табличное поле. и при полном анализе формы

если эти "Работники организаций" - это регистр сведений, то в типовой ЗУП ошибок нет.
73. rasswet 82 10.04.12 15:42 Сейчас в теме
(71)это документ "командировки организаций", табличная часть его называется "работники организации"
75. AlexO 128 10.04.12 17:48 Сейчас в теме
(73) rasswet,
ругается на поля ТП.
Поля "ОсвобождатьСтавку" и "НапомнитьПоЗавершении" - имеют тип булево (флажки), и, видимо, с этим и связано "непонимание" обработки. Остальные поля с дургими типами - отрабатывают.
72. dandrontiy 10.04.12 15:22 Сейчас в теме
Идея интересная. А вот бы обработку, которая из <неуправляемой> формы создавала <управляемую>
74. AlexO 128 10.04.12 17:41 Сейчас в теме
(72) dandrontiy,
1c в принципе "не предусмотрела" таких конвертаций и механизмов для этого не вводила в платформу.
76. dandrontiy 11.04.12 11:25 Сейчас в теме
(74) AlexO, Так я про это и говорю.
НО наверно можно собрав информацию о всех элементах формы попытаться создать кучу областей на управляемой форме, куда накидать такие же элементы. просто количество вложенных областей получится очень большим, и вручную такую работу проделать просто нереально.
77. AlexO 128 12.04.12 18:11 Сейчас в теме
(76) dandrontiy,
это вы про чисто механическую обработку визуальных элементов, которые и в 8.1, и в 8.2 - основаны у 1с на одних и тех же сишных бибилиотеках.
А с кодом-то что будете делать? или у вас форма будет работать и функционировать без кода формы? :)
78. mtv:) 1000 23.04.12 08:57 Сейчас в теме
(0) Наткнулся на ограничения программной генерации элементов формы:

1. В ФормеДокумента у ПоляВвода невозможно программно задать "Связь по владельцу".
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге "Отбор и сортировка" отсутствует втавленная Колонка.

Пока только это, возможно есть и другие ограничения.
111. bambr1975 822 06.05.12 13:30 Сейчас в теме
(78) mtv:),
1. В ФормеДокумента у ПоляВвода невозможно программно задать "Связь по владельцу".
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге "Отбор и сортировка" отсутствует втавленная Колонка.


Первая проблема вроде действительно не рещается.
Вторая - решается простым добавлением в код программного добавления строк:
ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина
114. frc 12.07.12 16:54 Сейчас в теме
(78) mtv:),
В ФормеДокумента у ПоляВвода невозможно программно задать "Связь по владельцу".

это ограничение еще с 8.0 - запрещено программно устанавливать СвязьПоВладельцу.
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге "Отбор и сортировка" отсутствует втавленная Колонка.

По Сортировке нужно отдельно прописать установку флага
ЭлементыФормы.ДокументСписок.НастройкаПорядка["ИмяКолонкиТП"].Доступность = Истина;

(111) bambr1975,
ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина

в Отбор вроде как попадает без этой строки сразу при создании.
79. sorb 25.04.12 08:40 Сейчас в теме
Отличная обработка, нередко ей пользуюсь.

На днях столкнулся с такой проблемой: при попытке анализа формы обработки "ПанельФункций" из БП 2.0 словил ошибку:
{ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(490)}: Поле объекта не обнаружено (Имя)
				Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
В отладчике видно следующее:
Стр1Уровня.Элемент = Панель (Тип Панель)
Стр1Уровня.Элемент.Имя = "Поле объекта не обнаружено (Имя)"
Стр1Уровня.ИмяЭлемента = "ПанельПериод"

Теперь вопросы :) :
1. Кто-нибудь пробовал анализировать данную конкретную форму? Если да, то возникала ли такая ошибка?
2. Из кода видно, что вложенность панелей не учитывается. Правильно ли я понимаю, что это и послужило причиной ошибки?

P.S. Шибко ковыряться сейчас нет времени, поэтому буду благодарен за любую помощь.
80. AlexO 128 26.04.12 23:54 Сейчас в теме
Вот и пришло время начать говорить о том, что НЕЛЬЗЯ сделать программно.
Нельзя создавать стандартные кнопки - Добавить, Переместить, Сортировать и т.д.
Потому как нужно задавать действие, а его как такового не существует - пока не создана панель с кнопками. Т.е. в платформу не вшиты события стандартных кнопок, на которые можно было бы сослаться - они генерируются при создании элемента. Создаешь панель - создаются кнопки и события. Либо можно сослаться на уже созданные кнопки, но только если они есть. АвтоЗаполнение компанели, кстати, тоже не работает при программном создании.
Это ответ 1с - ООПу и наследованию классов.
И даже программное создание своих кнопок - требует, чтобы события обработки действий находились в модуле формы, иное не работает ни при каких обстоятельствах (ссылки на форму/другие формы - бесполезны).
В 8.2 на УФ данную проблему можно обойти (создавать стандартные кнопки в своих панелях), но там свои проблемы - с размещением кнопок и далеко не в каждой пользовательской панели их можно разместить.
81. AlexO 128 27.04.12 01:45 Сейчас в теме
Далее. Нельзя программно переместить элемент с одной вкладки на другую.
Все интереснее и чудесатее..
88. bambr1975 822 27.04.12 18:05 Сейчас в теме
Реквизиты формы должны находиться на закладке "Реквизиты" у формы. Их программно создавать у нас не получится (в этом и есть ограничение. А вот ЭЛЕМЕНТЫ ФОРМЫ, связать с реквизитами и назначить им свойства - пожалуйста.
89. AlexO 128 27.04.12 18:09 Сейчас в теме
Ненадежно оно как-то все. Автозаполнение сразу не заработало, перечисления - перестал видеть немного погодя.
Системные кнопки тоже не видит. Вернее, их действия.
90. bambr1975 822 27.04.12 18:14 Сейчас в теме
В Вашем неработающем коде, скорее всего для тпМенеджеры не установлено
ЭлементыФормы.тпМенеджеры.Данные="<строка реквизита формы, значение которого у вас должно выводиться в это тп>;
Этот реквизит должен быть или табличной частью объекта, форму которого Вы разрабатываете или этот реквизит должен быть описан на закладке "Реквизиты" самой формы.
92. AlexO 128 27.04.12 18:16 Сейчас в теме
(90) bambr1975,
да ну как не установлено - установлено конечно же :)
ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),"тпМенеджеры",Истина,ЭлементыФормы.Панель1);
	УстановитьПоложениеЭлемента(ТабличноеПоле,40,173,6,380);
	ТабличноеПоле.Данные = "МенеджерыПроектов";

где МенеджерыПроектов - ТЧ объекта
91. bambr1975 822 27.04.12 18:15 Сейчас в теме
Системные кнопки тоже не видит. Вернее, их действия

Ну... это смотря как эти действия задавать. У меня видит.
94. AlexO 128 27.04.12 18:19 Сейчас в теме
(91) bambr1975,
ну например, вот так:
кпПроектКнопки.Вставить(1,"Скопировать",ТипКнопкиКоманднойПанели.Действие,"&Скопировать",Новый Действие("Скопировать"));

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

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 130 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист/Cтарший программист 1С
Москва
зарплата от 100 000 руб. до 250 000 руб.
Полный день

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день