IE 2016

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

Опубликовал Istur в раздел Программирование - Практика программирования

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

Обработка предназначена для динамического формирования реквизитов при следующем алгоритме:

  1. Сначала выполняются работа по техническому заданию, реквизиты добавляются на форму.
  2. После принятия работ, с помощью данной обработки в режиме предприятия считывается код добавленных реквизитов, он добавляется в общий модуль или модуль формы.
  3. Добавленные реквизиты удаляются с формы, теперь они формируются из кода.

Обработка сделана на основе данной: http://infostart.ru/public/22147/, но имеет следующие отличия:

  1. Та обработка универсальна, данная же направлена на реализацию четко одной задачи, то есть подогнана по нее.
  2. Моя разработка работает гораздо быстрее.
  3. Декомпиляция производится только нужных элементов, а не всех, и потому не нужно выискивать нужные в итогом текстовом файле.
  4. Моя разработка выполнена на 8.2, предыдущая же на 8.1, что сейчас приводит к немного неверному формированию ее. Например в коде реализовано отсекание вывода свойств реквизитов, значение которых идентично стандартному. То есть у поля ввода есть свойство "АвтоКонтекстноеМеню", значение по умолчанию которого равно Истина, и если оно так и осталось равно Истина, то выводить его смысла нет. Но в 8.1 при проверке булевского реквизита возращалось строка "Истина", в 8.2 же возвращается "Да",поэтому в той обработке выводятся абсолютно все реквизиты.
  5. Перестроена логика, улучшена юзабилити.

Описание разработки: В левом дерево у метаданного выбирается нужная для декомпиляции форма, при этом в правом дереве формируется дерево элементов формы. При нажатии на галочки в правом дереве в табличном форме формируется код для для вывода элемента программно. Если нужно декомпилировать все элементы, то нажимается кнопка в нижней панели "Декомпилировать всю форму". Левое и правое дерево можно сдвигать, чтобы пространство для кода увеличивалось.

Вместо кода с присвоением длины, ширины, лево, вверх, выводится процедура " УстановитьПоложениеЭлемента(Надпись,25,19,322,103);", ее необходимо вставить в модуль с кодом вывода элементов формы, ну или поместить в общий модуль.


Процедура УстановитьПоложениеЭлемента(Элемент,Верх,Высота,Лево,Ширина)

   
Элемент.Верх = Верх;

   
Элемент.Высота = Высота;

   
Элемент.Лево = Лево;

   
Элемент.Ширина = Ширина;

КонецПроцедуры

Сделано, чтобы выводить меньшее количесто строк.

 

Файлы

Наименование Файл Версия Размер Кол. Скачив.
ДекомпиляцияЭлементовФормы.epf
.epf 28,16Kb
27.11.11
404
.epf 28,16Kb 404 Скачать

См. также

Лучшие комментарии

54. bambr1975 (файл скачал) 08.02.2012 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Уровня.Удалить(ТекСч);
КонецЕсли;
КонецЦикла;

В случае этих корректировок зависания (по крайней мере, у меня) не происходит. Структура дерева элементов формы тоже, по-моему, не страдает.
Ответили: (64) (112) (120) (121) (127)
# Ответить
19. AlexO (файл скачал) 30.11.2011 01:34
все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
а программно создавать - в любом случае никакие обработки не помогут.
Вообще, создание программно чего-либо и 1с - вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало....
Ответили: (21)
− 1 [ CaSH_2004; ]
# Ответить
21. woozee (файл скачал) 30.11.2011 09:19
(19) AlexO,
Идея программно добавлять нестандартные элементы намного проще чем постоянно отслеживать изменения в элементах формы. Что я и взял на вооружение. Правда перерисовывать то что у нас с этой формой - не представляю даже себе КАК))) Вернее... лениво даже представлять)
На счет паровозом к основной - Если документ не ахти какой, очень редко обновляется - то да, в какой то степени возможно. Дело в том что в этом случае сложно отслеживать изменения и гораздо чаще будут вылетать ошибки после обновления.
Самым правильным будет просто переносить свои кнопочки, поля и т.д. Ну и что, что это может занять продолжительное время - зато практически не возникают ошибок)
Ответили: (22)
+ 3 [ suggestive; CratosX; Istur; ]
# Ответить
32. woozee (файл скачал) 02.12.2011 09:23
(31) AlexO,
>> "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак"

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

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

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

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

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

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


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

(30) Дело в том что бывает добавлена страница в панельке без отображения заголовков этих страниц. Либо забываешь привязать процедурку к стандартному реквизиту, например, ПриИзменении... ПриВыборе
Ответили: (33)
+ 2 [ CratosX; vkr; ]
# Ответить
9. Поручик (файл скачал) 29.11.2011 10:09
(8) Нет, всё это знать не обязательно. Для этих целей есть СП, мануалы, шаблоны кода. Главное знать что искать и как искать.
Ответили: (10)
+ 2 [ AlexO; Andry.Boris; ]
# Ответить

Комментарии

1. German 28.11.2011 10:18
Что с определением цветов и шрифтов из стиля? :)
Знаю только одну обработку в которой это реализовано.
Ответили: (2) (5)
# Ответить
2. Istur 28.11.2011 10:44
(1) Нет, не реализовано. Мне пока это не нужно.
Ответили: (3)
# Ответить
3. Поручик (файл скачал) 28.11.2011 11:00
(2) Добавь в описание, только для обычных форм.
Ответили: (4)
# Ответить
4. Istur 28.11.2011 11:04
(3) Сделал.
# Ответить
5. ValeriTim (файл скачал) 28.11.2011 11:24
(1) какая обработка это делает ?
Ответили: (6)
# Ответить
6. German 28.11.2011 11:33
(5) Ei полное (ВЫПОЛНЯЕМОЕ) перобразование, позволяющее скопировать форму
# Ответить
7. vasiliy_b (файл скачал) 29.11.2011 09:51
Да, такую бы обработку для управляемых форм!
Ответили: (44)
# Ответить
8. mamanelli (файл скачал) 29.11.2011 09:59
Всё здорово, помогает экономить время на динамическом добавлении элементов в форму.
Плюс однозначно ;)
Ответили: (9) (58) (115)
# Ответить
9. Поручик (файл скачал) 29.11.2011 10:09
(8) Нет, всё это знать не обязательно. Для этих целей есть СП, мануалы, шаблоны кода. Главное знать что искать и как искать.
Ответили: (10)
+ 2 [ AlexO; Andry.Boris; ]
# Ответить
10. mamanelli (файл скачал) 29.11.2011 10:39
(9) Ладно, не нападай :) От шаблонов кода очень часто остаются куски причудливой формы :D Или я после НЕ тех программистов работал ;)
# Ответить
11. woozee (файл скачал) 29.11.2011 11:52
Понять не могу для чего она =) И чем полезна она будет))
Ответили: (12)
# Ответить
12. Istur 29.11.2011 12:09
(11)Мне кажется в описании все написано. Ну а если другими словами, то обработка, чтобы добавленные программистом реквизиты, колонки, кнопки в типовых конфигурациях выводить программно, дабы при обновлении все это не затерлось, да и просто чтобы процесс обновления был быстрее и менее сложен.
+ 1 [ teflon; ]
# Ответить
13. woozee (файл скачал) 29.11.2011 14:43
Да? Есть одна формочка стандартная суперпеределанная.... Надо проверить... Но суть не в этом) Идея (в моем случае) понравилась.
А привязки по форме в обычной форме тоже программно описывает?:)
Ответили: (14)
# Ответить
14. Istur 29.11.2011 14:44
(13) Да, привязки описывает. Это одно из самых важных, как же без них)
# Ответить
15. Yasen (файл скачал) 29.11.2011 15:12
Спасибо, плюс.
Ждем когда управляемые формы достигнут подобного уровня программизма )
# Ответить
16. woozee (файл скачал) 29.11.2011 16:11
Не работает) Минус) В единственной сложной форме и то не пригодился))
1Ска виснет, нагрузка на комп возрастает до максимума, через продолжительное время вылетает.
Проблема в 573 строчке (Цикл) - то есть "зацикливание".

Ждем фикс) Или уже не ждем))
Ответили: (17)
+ 1 [ Vida; ]
# Ответить
17. Istur 29.11.2011 16:15
(16) У меня не возникало подобное.. А какие значения в "СтрИсточник" в зацикливаемой строке? И что за форма?
# Ответить
18. woozee (файл скачал) 29.11.2011 16:46
Бухгалтерия 2.0.29 СписниеСРасчетногоСчета.ФормаДокумента В СтрИсточник строка дерева =) Они там меняются эти деревья) Значения вроде адекватные, а что так долго - я не знаю. но в замере производительности оно зацикливается.
Форма Переделана в плане того что добавлена панелька с добавочной страницей, на эту панельку перенесена основная панелька, та самая с кучей страниц. Ну и пара полей добавлено )) Ну как то так)))
Ответили: (35) (37)
# Ответить
19. AlexO (файл скачал) 30.11.2011 01:34
все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
а программно создавать - в любом случае никакие обработки не помогут.
Вообще, создание программно чего-либо и 1с - вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало....
Ответили: (21)
− 1 [ CaSH_2004; ]
# Ответить
21. woozee (файл скачал) 30.11.2011 09:19
(19) AlexO,
Идея программно добавлять нестандартные элементы намного проще чем постоянно отслеживать изменения в элементах формы. Что я и взял на вооружение. Правда перерисовывать то что у нас с этой формой - не представляю даже себе КАК))) Вернее... лениво даже представлять)
На счет паровозом к основной - Если документ не ахти какой, очень редко обновляется - то да, в какой то степени возможно. Дело в том что в этом случае сложно отслеживать изменения и гораздо чаще будут вылетать ошибки после обновления.
Самым правильным будет просто переносить свои кнопочки, поля и т.д. Ну и что, что это может занять продолжительное время - зато практически не возникают ошибок)
Ответили: (22)
+ 3 [ suggestive; CratosX; Istur; ]
# Ответить
22. Istur 30.11.2011 12:41
(21) +1

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


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

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

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

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


Проще? Неожиданно) Это по сути значит, что форма будет отключена от обновлений, то есть само действие не имеет никакого смысла. Это тоже самое, что при обновлении у формы снимать флажок обновления. И рано или поздно возникнут проблемы, потому что что-либо добавлять нужно обычно в часто используемых объектах метаданных, обновления для которых приходят если не каждый релиз, то через релиз.
Ответили: (23) (26) (57) (82)
# Ответить
23. woozee (файл скачал) 30.11.2011 14:49
(22) Istur, Мне можно надеятся на испралвение ошибки "зацикливания", или забить?:)
Ответили: (24)
# Ответить
24. Istur 30.11.2011 14:59
(23) Да, исправлю. Единственное сейчас запар некоторый на работе, но до конца недели точно время найду.
+ 1 [ woozee; ]
# Ответить
25. o.nikolaev.infostart 30.11.2011 22:03
Вот все-таки, для чего это может пригодиться? Неужели нельзя обойтись без генерации кучи кода? Что касается форм объектов - ну это понятно - создаются создаются доп. формы журналов (списков) в них отлавливается "ПриВыборе" и открывается "своя" форма объекта. Какая ситуация может потребовать использования такого подхода при доработке типовой конфигурации с возможностью сохранения обновлений?
Ответили: (26)
# Ответить
26. AlexO (файл скачал) 30.11.2011 23:43
(22) собственно, в (25) вам ответили. Там как один из вариантов подключения допформы.
Основная форма остается для обновлений, где-то (можно перед открытием основной формы - при обновлении обновлять спокойно с закрытыми глазами, только потом вставить строчку обратно переключения-ответвления на допформу) вставляется переключатель, допформа один-в-один с основной+изменения, какие надо было внести.
Пользователь открывает как обычно, получает "родную" по внешнему виду форму с доработкой, старая остается нетронутой и лежит, ждет последующих обновлений.
Допформу, кстати, не обязательно пихать в документ, а оставить отдельной обработкой в конфе (и затираться она не будет), а подключать её именно как форму, с сохранением всех остальных событий и процедур родного документа.
(25) такое может потребоваться как раз там, где нужно и обновления ставить "неглядя", и все-таки внести изменения в "типовую" форму. Т.е. совместить несовместимое.
Что и удается.
(22) а все программно выводимые реквизиты... механизм отслеживания изменений - отсутствует (кроме визуального восприятия), механизм проверки и контроля создаваемых программно элементов - отсутствует, набор инструментов для создания таких якобы "программных" элементов (на самом деле - это создание куцых "вроде поля"-элементов, как и все полууправляемые или совсем неуправляемые ЭУ в 1С) - отсутствует.
В конце концов, будет куча кода, который рухнет под собственной тяжестью.
"сдал проект".. Сдать - полдела, еще и сопровождать это надо. А от этого, я так понимаю, вы самоустранились.
Прекрасно понимая, что снова разгребать кучу кода от "программно создаваемых элементов" - занятие не для слабонервных.
Ответили: (27) (30) (35)
# Ответить
27. o.nikolaev.infostart 01.12.2011 07:14
(26)
Ну видимо как-то так, да - "совместить несовместимое". И склоняюсь к тому что эту стратегию можно рекомендовать для применения как раз в таком случае - "впихнуть невпихуемое", а в случае когда есть возможность создать доп. формы (обработки с дин. списками и etc.) все же следует создавать объекты, используя префиксы, общие модули и т.п.
---
Мнение мое и не обязательно правильное.
# Ответить
28. vkr 01.12.2011 07:39
По-моему, предложенный автором метод - прекрасный вариант компромисса для вечно загруженного 1С-программера ! :)
Лично я обязательно начну постепенно использовать - задолбало каждый раз свои "кнопки" перегонять в новый билд...
Ответили: (31) (35) (82)
# Ответить
29. woozee (файл скачал) 01.12.2011 09:45
Спорить можно бесконечно))
Всем известно что для решения задачи присутствует разновсяческое множество вариантов. От кривых до идеально правильных, оптимизированных и прям супер-пупер...
Для проектирования своего нововведения или "хотелок" пользователей нужно учитывать не только легкость обновлений, быстродействие, но и самым важным будет удобство пользователей в работе с энтим инструментом)) При этом учитывать эргономичность формы, и не потерять производительность работы.
Чем хороша данная обработка - посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли "сопроводителя" "подешевле". Но это другая история))
Ответили: (31) (82)
# Ответить
30. i132 01.12.2011 17:05
(26) Идея: для обновлений оставить Основную форму (без визуальных изменений) а добавленные реквизиты хранить на форме _дополнительные - и добавлять при открытии обходом всех элементов этой формы.
:удобно тем что видно на глаз новые реквизиты и легко изменить их положение.
Ответили: (35) (36)
# Ответить
31. AlexO (файл скачал) 01.12.2011 22:48
(28) vkr,
как раз нисколько не прекрсаный, вам предложен более простой и надежный, а главное - сопровождаемый метод.
Не понимаете - так и скажите.
(29) woozee,
>> Чем хороша данная обработка - посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли "сопроводителя" "подешевле".
- ну что ж, остается вам пожелать получить срочное задание по доработке/исправлению вот после такого же программиста "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак".
А 1С специально сделана, чтобы путать всех и вся. И не надейтесь, что вас кто-то пожалеет и будет писать "как вам удобно/известно". 1с-ники - в большинстве народ малограмотный.
Ответили: (32) (34)
# Ответить
32. woozee (файл скачал) 02.12.2011 09:23
(31) AlexO,
>> "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак"

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

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

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

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

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

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


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

(30) Дело в том что бывает добавлена страница в панельке без отображения заголовков этих страниц. Либо забываешь привязать процедурку к стандартному реквизиту, например, ПриИзменении... ПриВыборе
Ответили: (33)
+ 2 [ CratosX; vkr; ]
# Ответить
33. AlexO (файл скачал) 02.12.2011 22:27
(32) woozee,
1с сама же и нарушает везде и свюду свои "правила".
потому у 1с главное правило - никаких правил...
Ответили: (34)
# Ответить
34. vkr 05.12.2011 08:21
(31),(33) Вот уж никогда не придерживался "стандартов разработки" от 1С...
Могу посоветовать Вам прочесть прекрасную книгу :
Мифический человеко-месяц или Как создаются программные системы
(The mythical Man-Month: Essays on Software Engineering)
Автор: Фредерик П. Брукс
Издание 1975 или 2010 г.
Надеюсь, она Вам будет полезна...
Ответили: (35)
# Ответить
35. AlexO (файл скачал) 06.12.2011 21:51
(28) vkr,
а и не перегоняйте, сделайте, как я советую в (26) ))
и просто, и обновлять больше не надо.. разве что изменится сама "родная" форма-родитель, и вам захочется сделать "потомка" снова на неё похожим..
(30) i132,
что за форма "Дополнительные"? предлагаете создать новую форму, хранить на ней некие новые реквизиты, потом программно считывать их оттуда и вставлять программно же на старую форму?
а зачем вся эта длиннющая цепочка? а если "порвется" где-нить - как отследите, что перестало работать?
(34) vkr,
теория программирования, теории обработки БД, хранения данных, и 1с - несовместимы ))
это уже известно давно с выходом снежка...
(0) рано или поздно возникнут проблемы как в (18), т.к всегда "остаются куски причудливой формы", все эти программные изыски неуниверсальны в силу уже указанной причины - ребята, это не Си, а 1С, которая плевать хотела на все правила, стандарты и развитие программирования, а с выходом 8.2 - и вообще плевать на программиста..
Ответили: (38)
# Ответить
36. AlexO (файл скачал) 06.12.2011 22:09
хотя у меня есть идея, где все это "программное" чудо пригодится... как раз для "чистого" творчества нужно...
только боюсь, даже в условиях ограниченных требованиях, которые я предъявлю, программное формирование элементов от 1С не выйдет из своих жестких рамок..
А декомпилировать всю форму со всеми элементами из=за обновлений, чтобы добавить один-два новых элементов на форму..
А почему никто не попробовал сделать как предложено в (30) - добавлять только нужные, и привязками/размещением играть?
хотя сами элементы могут сместится на новой форме.... а это уже никак не отследишь программно - или писать целый механизм сравнений и корректировок..
короче, я вам способ подсказал, но можете все делать программно ))
а я попробую в том механизме, где это действительно нужно и очень важно...
# Ответить
37. AlexO (файл скачал) 06.12.2011 22:14
слушай, Истур, а это ведь ты натолкнул меня на мысль со своей идеей дискретно декомпилировать.. хотя и так вроде было на поверхности, а вот поди ж ты... ))
надоть тебе плюсик за это поставить...
Так проблема из (18) поправлена?
если можно, пришли исправленный вариант по личке... а то тут с этими ограничениями замучаешься качать...
Ответили: (39)
# Ответить
38. vkr 07.12.2011 08:39
(35) Да, я с Вами согласен по поводу идеологической несовместимости 1С с нормальными принципами...
Хотя, по мере возможности, борюсь у себя с этой проблемой (пусть даже за счет некоторых потерь сил и нервов).
Спасибо за диалог! :)
Ответили: (40)
# Ответить
39. woozee (файл скачал) 07.12.2011 09:06
(37) AlexO, странно, муза под конец рабочего дня приходит =)
Ответили: (40)
# Ответить
40. AlexO (файл скачал) 07.12.2011 22:48
(38) vkr,
с 1с бороться бесоплезно ))
примените стиль айкидо - уйти с линии удара и пусть валится...а как упадет - можно диктовать свои условия.. ))
(39) woozee,
что-то путное на 1с можно изобрести только абстрагировавшись от 1с ))
Ответили: (43)
# Ответить
42. echo77 (файл скачал) 10.12.2011 13:45
При добавлении колонки в ТабличноеПоле метод УстановитьДействие не прокатывает :-/

Было бы неплохо накидать справку в обработке, подобную той что вы здесь привели
# Ответить
43. vkr 12.12.2011 08:21
(40) Спасибо, Вы очень точно сформулировали методику взаимоотношений с 1С... :)
Буду теперь знать, как это называется...
Только на диктовку им условий мне начхать - я работаю по-своему, клиенты довольны - это главное...
# Ответить
44. Sverkalov (файл скачал) 28.12.2011 22:09
45. AlexO (файл скачал) 24.01.2012 02:23
(44) что-то сомнительно... в тонком же это невозможно в принципе - так откуда "для управляемых форм"??
Ответили: (46)
# Ответить
46. vasiliy_b (файл скачал) 24.01.2012 09:04
(45) Почему же невозможно? Программно добавлять элементы на форму можно?! Обходить все элементы формы можно?! так почему же это нереально?
Ответили: (47)
# Ответить
47. AlexO (файл скачал) 25.01.2012 01:32
(46) в УП нельзя. УФ формируются динамически, поэтому программно ничего добавить нельзя.
Только если в режиме толстого клиента.
Ответили: (48) (49)
# Ответить
48. vasiliy_b (файл скачал) 25.01.2012 09:10
(47) AlexO, А как же тогда реализован вывод реквизитов свойств объектов на формы? В типовых конфигурациях в управляемых формах? Прежде чем говорить посмотрите сначала УТ 11 например, в справочник номенклатур добавьте пару свойств.... и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались.... а потом еще будут прибегать когда вы будете обновления накатывать.
Ответили: (51) (60)
# Ответить
49. Yasen (файл скачал) 25.01.2012 12:48
(47) AlexO,
программно ничего добавить нельзя

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

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

...

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

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

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

Можно ли при построении дерева сразу указать представление ячеек?
Ответили: (54)
# Ответить
54. bambr1975 (файл скачал) 08.02.2012 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Уровня.Удалить(ТекСч);
КонецЕсли;
КонецЦикла;

В случае этих корректировок зависания (по крайней мере, у меня) не происходит. Структура дерева элементов формы тоже, по-моему, не страдает.
Ответили: (64) (112) (120) (121) (127)
# Ответить
55. kiruha 15.03.2012 05:00
Возможно ли от программно созданной формы перейти к непрограммно ?
Шаг обратный декомпиляции, чтобы клиенту высылать стандартную, нединамическую ?
Ответили: (56)
# Ответить
56. AlexO (файл скачал) 30.03.2012 17:38
(55) kiruha,
нет, невозможно - механизма превращения кода 1с в "физический" объект с записью в конфигурацию (на диск) не существует.
Впрочем, в 1с8 в принципе нет выгрузки объектов интерфейса отдельно.
Даже просто создания махонького реквизита для хранения данных у объекта.
Это привет вам от Великого Отсутствия ООП в 1с ))
Если же вы про превращение УФ в обычную форму - тоже невозможно автоматически.
# Ответить
57. AlexO (файл скачал) 30.03.2012 18:08
(22) Istur,
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.

ну, и как обновляете модуль формы со всеми процедурами обработки таким образом созданных элементов?
# Ответить
58. AlexO (файл скачал) 30.03.2012 18:11
(8) mamanelli,
ведь нормальный кодер должен знать это "на кончиках пальцев"

ждем статью, где все, что надо будет знать программисту "на кончиках пальцев", будет описано и выложено в коде, набранном именно таким же методом - без справки по памяти ))
# Ответить
59. rasswet (файл скачал) 31.03.2012 10:03
при попытке разобрать форму (устанавливаем курсор на форму элемента в дереве слева) в ЗУП релиз 47 (командировки организаций) падает сеанс 1С:Предприятие 8.2 (8.2.15.301)
Ответили: (61)
# Ответить
60. AlexO (файл скачал) 31.03.2012 14:59
(48) vasiliy_b,
в справочник номенклатур добавьте пару свойств.... и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались....

ну и где же динамически добавленные "реквизиты"? уж не хранятся ли они в строго ограниченных регистрах свойств объектов?
вы или ваши дядьки из 1с сделате так, чтобы "программно созданный" реквизит хранил данные, а не просто использовался для подстановки предопределенных значений??
# Ответить
61. AlexO (файл скачал) 31.03.2012 15:00
(59) rasswet,
это нормально
Ответили: (63)
# Ответить
62. AlexO (файл скачал) 31.03.2012 17:46
В УПП в справочнике Проекты при выборе ФормыЭлемента - вылет.
Ответили: (65)
# Ответить
63. rasswet (файл скачал) 31.03.2012 20:22
(61) ну..не совсем..другой парсер с этого сайта парсит без ошибки.
но мне нравится работать с тем, который тут. а он валится.
Ответили: (64)
# Ответить
64. bambr1975 (файл скачал) 31.03.2012 20:59
(63) rasswet, попробуйте слегка поправить код (как описано в (54)) - может, поможет ;)
# Ответить
65. AlexO (файл скачал) 01.04.2012 01:11
(62) нашел проблему (вариант решения в части определения родителя в (54)):
модуль объекта, в процедуре СформироватьДеревоСЭлементамиФормы:
строку
СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина);	//поиск по уникальным значениям

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


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

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

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


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

Исправленный файл обработки с изменениями из (54):
Ответили: (66) (67) (68)

Прикрепленные файлы:

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

- у распарсиваемого объекта нет свойства "Вверх", которое ищет обработка и пытается изменить.
Ответили: (70)
# Ответить
70. rasswet (файл скачал) 06.04.2012 14:06
(69) зуп конфигурация. немного измененная..
# Ответить
71. AlexO (файл скачал) 10.04.2012 15:10
(68) rasswet,
когда ставлю Флаг напротив "работники организации" табличное поле. и при полном анализе формы

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

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

Пока только это, возможно есть и другие ограничения.
Ответили: (111) (114)
# Ответить
79. sorb (файл скачал) 25.04.2012 08:40
Отличная обработка, нередко ей пользуюсь.

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

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

P.S. Шибко ковыряться сейчас нет времени, поэтому буду благодарен за любую помощь.
# Ответить
80. AlexO (файл скачал) 26.04.2012 23:54
Вот и пришло время начать говорить о том, что НЕЛЬЗЯ сделать программно.
Нельзя создавать стандартные кнопки - Добавить, Переместить, Сортировать и т.д.
Потому как нужно задавать действие, а его как такового не существует - пока не создана панель с кнопками. Т.е. в платформу не вшиты события стандартных кнопок, на которые можно было бы сослаться - они генерируются при создании элемента. Создаешь панель - создаются кнопки и события. Либо можно сослаться на уже созданные кнопки, но только если они есть. АвтоЗаполнение компанели, кстати, тоже не работает при программном создании.
Это ответ 1с - ООПу и наследованию классов.
И даже программное создание своих кнопок - требует, чтобы события обработки действий находились в модуле формы, иное не работает ни при каких обстоятельствах (ссылки на форму/другие формы - бесполезны).
В 8.2 на УФ данную проблему можно обойти (создавать стандартные кнопки в своих панелях), но там свои проблемы - с размещением кнопок и далеко не в каждой пользовательской панели их можно разместить.
# Ответить
81. AlexO (файл скачал) 27.04.2012 01:45
Далее. Нельзя программно переместить элемент с одной вкладки на другую.
Все интереснее и чудесатее..
# Ответить
82. AlexO (файл скачал) 27.04.2012 02:19
(28) vkr, (29) woozee,
вот и прошел мой пример испытание временем ))
Попробуйте программно создать вкладку, ТП на ней, компанель к ней.... на последнем пункте все и рушится.
Нельзя создать такую панель.
А работает единственный мой способ с подменой формы.
Так что программное создание элементов, мягко говоря, оченьо узкое и специализированное занятие.
(22) Istur,
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.

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

Upd:
Ниже разобрались, что можно сделать создание КП через общий модуль (но не глобальный), заработало автозаполнение (почему не работало - причина осталась неясна), и без хранения исходной КП с кнопками на родительской форме.
Ответили: (83)
# Ответить
83. bambr1975 (файл скачал) 27.04.2012 10:00
(82) AlexO, честно говоря, Вы производите впечатление человека неглупого, но какого-то ни во что не верящего и ужасно невнимательного.
Специально для Вас смоделирована ситуация с программным добавлением табличного поля и автозаполнением связанной с ним командной панели.
P.S. Ограничения в программном добавлении элементов на форму безусловно есть - но и ручную обработку поступающей информации тоже никто не отменял - просто можно же себе жизнь упростить...
Ответили: (84) (87)

Прикрепленные файлы:

ВнешняяОбработка1.epf
# Ответить
84. AlexO (файл скачал) 27.04.2012 17:42
(83) именно это и пробовал - и в модуле формы, и в общем модуле:
     КоманднаяПанель = ЭлементыФормы.КоманднаяПанель2;
     КоманднаяПанель.ИсточникДействий = ЭлементыФормы.ТабличноеПоле1;
	 КоманднаяПанель.Автозаполнение=Истина;

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

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

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

тпМенеджеры - до этого программно созданное ТП.
# Ответить
88. bambr1975 (файл скачал) 27.04.2012 18:05
Реквизиты формы должны находиться на закладке "Реквизиты" у формы. Их программно создавать у нас не получится (в этом и есть ограничение. А вот ЭЛЕМЕНТЫ ФОРМЫ, связать с реквизитами и назначить им свойства - пожалуйста.
# Ответить
89. AlexO (файл скачал) 27.04.2012 18:09
Ненадежно оно как-то все. Автозаполнение сразу не заработало, перечисления - перестал видеть немного погодя.
Системные кнопки тоже не видит. Вернее, их действия.
# Ответить
90. bambr1975 (файл скачал) 27.04.2012 18:14
В Вашем неработающем коде, скорее всего для тпМенеджеры не установлено
ЭлементыФормы.тпМенеджеры.Данные="<строка реквизита формы, значение которого у вас должно выводиться в это тп>;
Этот реквизит должен быть или табличной частью объекта, форму которого Вы разрабатываете или этот реквизит должен быть описан на закладке "Реквизиты" самой формы.
Ответили: (92)
# Ответить
91. bambr1975 (файл скачал) 27.04.2012 18:15
Системные кнопки тоже не видит. Вернее, их действия

Ну... это смотря как эти действия задавать. У меня видит.
Ответили: (94)
# Ответить
92. AlexO (файл скачал) 27.04.2012 18:16
(90) bambr1975,
да ну как не установлено - установлено конечно же :)
ТабличноеПоле = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),"тпМенеджеры",Истина,ЭлементыФормы.Панель1);
	УстановитьПоложениеЭлемента(ТабличноеПоле,40,173,6,380);
	ТабличноеПоле.Данные = "МенеджерыПроектов";

где МенеджерыПроектов - ТЧ объекта
# Ответить
93. bambr1975 (файл скачал) 27.04.2012 18:18
Вы в табличное поле можете вывести табличную часть объекта.
У Вас в объекте есть табличная часть "МенеджерыПроектов"?
Ответили: (96)
# Ответить
94. AlexO (файл скачал) 27.04.2012 18:19
(91) bambr1975,
ну например, вот так:
кпПроектКнопки.Вставить(1,"Скопировать",ТипКнопкиКоманднойПанели.Действие,"&Скопировать",Новый Действие("Скопировать"));

хотел системную кнопку "Скопировать" заарканить.
# Ответить
95. bambr1975 (файл скачал) 27.04.2012 18:19
А теперь проверьте, что в сформированном вами коде !ОБЯЗАТЕЛЬНО! должжна присутствовать строка
ТабличноеПоле.ТолькоПросмотр=ложь;
(автоматом не формирует!)
Ответили: (97)
# Ответить
96. AlexO (файл скачал) 27.04.2012 18:20
(93) bambr1975,
это и есть табличная часть, со своими реквизитами, которые идут на колонки ТП.
Иначе бы ругалась на несовместимость типов ))
# Ответить
97. AlexO (файл скачал) 27.04.2012 18:21
(95) bambr1975,
а вот это не проверял.
Попробую заново переделать - может, протолкнет ))
# Ответить
98. bambr1975 (файл скачал) 27.04.2012 18:24
Там немного по-другому надо...
Попробуйте разобраться с методом СтандартноеДействие=ЗначениеВСтрокуВнутр(Кнопка.Действие) - для нужного вам действия, а потом запишите в переменную результат Действие=ЗначениеИзСтрокиВнутр(СтандартноеДействие)
И тогда уже:
кпПроектКнопки.Вставить(1,"Скопировать",ТипКнопкиКоманднойПанели.Действие,"&Скопировать",Действие);
Ответили: (100)
# Ответить
99. bambr1975 (файл скачал) 28.04.2012 11:00
В обработке http://infostart.ru/public/106310/ появилась тестовая возможность "Декомпилирование изменений". Может, кому-то пригодится.
# Ответить
100. AlexO (файл скачал) 28.04.2012 12:27
(98) bambr1975,
Попробуйте разобраться с методом СтандартноеДействие=ЗначениеВСтрокуВнутр(Кнопка.Действие)

Андрей, а откуда взять Кнопка.Действие, если "Скопировать", положим, нет на форме в принципе? И нет как класса, который можно было бы инициализировать.
Ответили: (101)
# Ответить
101. bambr1975 (файл скачал) 28.04.2012 12:33
(100) AlexO, мы же говорим о том, что Вы декомпилируете СУЩЕСТВУЮЩУЮ форму с СУЩЕСТВУЮЩИМИ кнопками стандартных действий - и полученный код в дальнейшем хотите использовать при программном создании элементов у другой формы. Поэтому - кнопка со стандартным действием "Скопировать" на форме-источнике у Вас должна быть. А на форме-приемнике вы эту кнопку с этим стандартным действием создадите программно
Ответили: (102) (104)
# Ответить
102. AlexO (файл скачал) 28.04.2012 13:14
(101) bambr1975,
т.е. получается, что для этого мне надо держать в этом же документе форму-дублер "как она есть" со всеми программными наворотами, которые я делаю на другой форме? Но это не практично ))
По сути - тоже самое, как если я делаю копию формы, меняю её, как надо, и запускаю вместо типовой - т.е. мой "любимый" вариант ))
Ответили: (103)
# Ответить
103. bambr1975 (файл скачал) 28.04.2012 13:27
(102) AlexO, даже не знаю, что вам подсказать. Может, чтобы понять, о чем я говорю, Вам нужно вызвать:
Сообщить(ЗначениеВСтрокуВнутр(Кнопка.Действие))
Это ведь строка. А что мешает Вам эту строку использовать отдельно от самой формы-источника?
В любом случае - в моей обработке, ссылка на которую есть выше это уже реализовано.
Ответили: (105)
# Ответить
104. AlexO (файл скачал) 28.04.2012 13:47
Разобрался с системными перечислениями - оказалось, в глобальном модуле платформа тычется искать имена перечислений как имена процедур (функций), и нужно принудительно делать модуль, в котором используются системные перечисления, неглобальным (т.к. синтаксиса "СистемноеПеречисление.ГраницаЭлементаУправления" не предусмотрено).
В неглобальном модуле - пишем вызов системного перечисления "ГраницаЭлементаУправления.Низ".
Такая неоднозначность - опять же следствие отсутствия работы с объектами (в данном случае - неоднозначный вызов СистемногоПеречисления).
(101) bambr1975,
АвтоЗаполнение заработало (кто бы мог подумать - действительно ТолькоПросмотр = Истина у программно создаваемой ТП), но, как я и писал, только если в модуле формы - в общем модуле оно заполняет, но т.к. действия не обнаружены - программные кнопки на форме погашены.
Что тоже не комильфо - все писать в модуле формы (отсутствует контекст объекта форма, который можно было бы передавать и пользовать, подобие чего было в 7.7).
# Ответить
105. AlexO (файл скачал) 28.04.2012 14:05
(103) bambr1975,
А что мешает Вам эту строку использовать отдельно от самой формы-источника

Т.е. я создаю панель в конфе, беру действие любой кнопки ЗначениеВСтрокуВнутр, удаляю исходную панель навсегда, и использую полученное действие теперь везде и всюду?
Или я не так понял Вас?
В обработке выше ЗначениеВСтрокуВнутр не используется.
Ответили: (107) (108)
# Ответить
106. AlexO (файл скачал) 28.04.2012 14:08
Я бы апплодировал 1с (конечно, в рамках того, что "хоть что-то есть"), если бы я мог вызвать из глобальника создание ЛЮБЫХ элементов на форме, и оно бы сработало, куроча типовую только на одну строчку - строчку вызова глобальной функции.
# Ответить
107. bambr1975 (файл скачал) 28.04.2012 14:16
(105) AlexO, В обработке выше есть функция "Декомпилировать изменения" - с ее помощью можно создать код для программной генерации и модификации элементов двух отличающихся форм. Сначала посмотрите, потом утверждайте.
Во вложении dt-ник базы с одним общим модулем (не глобальным) - где и выполнены все программные изменения и обработкой, в которой табличное поле и командная панель создаются программно, обращаясь к этому общему модулю.
Ответили: (108)

Прикрепленные файлы:

1Cv8.dt
# Ответить
108. AlexO (файл скачал) 28.04.2012 14:43
(107) bambr1975,
Сначала посмотрите, потом утверждайте.

Позвольте, позвольте, к сообщению (105) - не может быть никаких подобных претензий ))
(107) bambr1975,
Там все та же обработка, что и выше - ЗначениеСтрВнутрь не используется.
Панель коммандная формируется все также автозаполнением.
//!!!возможно, в объекте отсутствует реквизит ТабличноеПоле1, на который ссылается свойство "Данные"!!!!

а зачем проверку-то удалили? ноу-хау? :))
есть функция "Декомпилировать изменения"

Что это за функция - можете ли Вы на примере объяснить? Сравнить элементы на двух формах?
Ответили: (109)
# Ответить
109. bambr1975 (файл скачал) 28.04.2012 15:38
(108) AlexO, честно-слово, мне ТАК НЕЛОВКО, третий раз !в чужой ветке! давать ссылку на мою обработку http://infostart.ru/public/106310/ в которой, как раз и есть функция "Декомпилировать изменения". Если у Вас хватит мужества перейти по ссылке - там "на примерах" с картинками показано, как производится сравнение элементов в двух формах.
Чтобы в очередной раз не убеждать Вас в том, что Вы все-таки невнимательный, поскольку говоря:
В любом случае - в моей обработке, ссылка на которую есть выше это уже реализовано

я все-таки имею в виду, что была дана ссылка на обработку, которая это умеет, а не смоделирован пример во вложении к сообщению.
Делаю еще один пример - уже с функцией ЗначениеВСтрокуВнутр (dt во вложении). Считаю, что наш разговор на этом должен завершиться.
Ответили: (110)

Прикрепленные файлы:

1Cv8.dt
+ 1 [ SunShinne; ]
# Ответить
110. AlexO (файл скачал) 28.04.2012 16:42
(109) bambr1975,
Вот! вот теперь это то самое! )
Теперь этот код - со СтрВнутр - можно вставлять как типовой во все конфиги (т.е. ссылки на паттерны одинаковые).
Спасибо! Я ЗначениеИзСтрВнутр пробовал, но ТолькоПросмотр у ТП мне портил всю малину, и я отверг тот вариант тоже.
Если у Вас хватит мужества перейти по ссылке

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


Первая проблема вроде действительно не рещается.
Вторая - решается простым добавлением в код программного добавления строк:
ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина
Ответили: (114)
+ 1 [ mtv:); ]
# Ответить
112. Feelthis (файл скачал) 28.06.2012 15:23
Если сделать как написано в комментарии:(54) то все прекрасно работает, а так при анализе документа "Начисление по больничному листу" зацикливался в процедуре "ПеренестиПодчиненныеСтроки" модуля объекта и 1С в дамп вываливалась
# Ответить
113. Ejnar 12.07.2012 16:34
Спасибо, как раз столкнулся с такой постановкой задачи.
# Ответить
114. frc 12.07.2012 16:54
(78) mtv:),
В ФормеДокумента у ПоляВвода невозможно программно задать "Связь по владельцу".

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

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

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

в Отбор вроде как попадает без этой строки сразу при создании.
# Ответить
115. tchvlad (файл скачал) 27.08.2012 15:37
(8) mamanelli,

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

Какие еще кончики пальцев? Тупо кодить массу текста, когда можно автоматизировать?
Я использую аналоги этой разработки - мои кончики пальцев и так не знают отдыха, многое умеют, а потому жирный плюс.
# Ответить
116. big_ooo (файл скачал) 23.10.2012 12:37
Благодарю за обработку очень помогает! Единственное не удается декомпилировать Форму элемента справочника Контрагенты, при установке курсора 1с вываливается в Runtime Error и закрывается! проверено на УПП релиз платформы 8.2.16
Ответили: (119)
+ 1 [ Sean1s; ]
# Ответить
117. sergant500 (файл скачал) 15.02.2013 23:16
Давненько не было развития отличной обработки.
Нашел пару косячков:
Создал в копии формы документа «Реализация товаров и услуг» БП 2.0 реквизит в шапке «Проект» тип «СправочникСсылка.Проекты» и реквизит «Этап» тип «СправочникСсылка.Этап» в табличной части услуг. В шапке реквизит «Проект» привязан к правой границе панели «ПанельОрганизация».
Обработка не правильно формирует привязку
ПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭтаФорма.Панель,ГраницаЭлементаУправления.Право);

Надо
ПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭтаФорма.ЭлементыФормы.ПанельОрганизация,ГраницаЭлементаУправления.Право);

Также ошибочно формируется строка (недопустимое значение параметра)
Колонка.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов("Этапы",,,);

Этой строки вообще не должно быть.
# Ответить
118. alekseies 19.02.2013 14:10
Очень помогает экономить время на программном добавлении или изменении элементов в форме ............
Плюс однозначно ;)
# Ответить
119. Sean1s (файл скачал) 21.06.2013 04:35
(116) big_ooo, подтверждаю. КА, платформа 8.2.18. На Справочники.Контрагенты.ФормаЭлемента "падает" с "Runtime Error!".
# Ответить
120. Cerberdm (файл скачал) 30.06.2013 11:38
(54) bambr1975, Спасибо, помогло.
# Ответить
121. Cerberdm (файл скачал) 30.06.2013 11:42
Автору огромная благодарность ) начал уже создавать свою обработку для этих же целей, хорошо вовремя на ссылку наткнулся, не так много времени убил. Плюсую без вопросов! Отличная работа) - особенно с учетом (54)
# Ответить
122. ekaruk 27.04.2014 18:27
А нет ли чего-то аналогичного для управляемых форм?
# Ответить
123. webester 30.08.2014 23:23
Я буду внимательнее читать описание публикаций.
Ответили: (124)
# Ответить
124. Istur 01.09.2014 13:54
(123) webester, пожалуй это самый идиотский комментарий, который я читал за все время. Прочтите внимательно описание, именно там я как раз еще 3 года назад все написал и получите ответы на все вопросы! А еще так же можете скачать другие разработки и посравнивать код. Не, количество всякого невменько среди программистов 1с как-то зашкаливает.
Ответили: (125)
# Ответить
125. webester 03.09.2014 06:02
(124) Istur, Вы правы на 100% приношу свои извинения.
# Ответить
126. ekaruk 29.09.2014 01:23
Не нашла аналогичную для управляемых форм.
Пришлось писать свою http://infostart.ru/public/304736/
# Ответить
127. wing (файл скачал) 22.04.2015 10:18
Обработка не добавляет страницы на панели... а в остальном очень удобна с правками (54)
# Ответить
128. buganov (файл скачал) 07.07.2015 13:58
Вылетает при декомпиляции ФормыДокумента ОприходованиеТоваров. Форма немного изменена. Конфа УПП. Сначала долго обрабатывает в ПеренестиПодчиненныеСтроки(СтрРодительПриемник,СтрИсточник), а потом тупо выкидывает из режима предприятия
Ответили: (129)
# Ответить
129. buganov (файл скачал) 07.07.2015 14:09
(128) buganov, разобрался
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016