Генерация кода управляемой формы (декомпиляция элементов)

Опубликовал ekaruk в раздел Программирование - Инструментарий

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

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

Идея и часть кода взята из этой обработки http://infostart.ru/public/99363/

Аналогичной корректно работающей для управляемых форм не встречала.

Порядок работы

1. Добавляем все нужные элементы конструктором.

2. Запускаем обработку. Выбираем двойным кликом нужную нам форму в левой части обработки. При этом правая часть заполняется элементами выбранной формы.

3. Отмечаем нужные нам элементы (те, что мы добавили).

4. Нажимаем "Сформировать код".

5. Сформированный код переносим в событие "ПриСозданииНаСервереФормы" и удаляем из формы сами элементы. Теперь они формируются программно.

В типовых с применением БСП код для генерации реквизитов достаточно разместить в общем модуле "МодификацияКонфигурацииПереопределяемый". В этом случае типовая форма остается неизмененной, но нужные реквизиты на ней отображаются. Подробнее это описано в статье "Типовой механизм упрощенного изменения конфигурации в ERP 2.0 и УТ 11"

Для общего понимания, как вообще работает управляемая форма, рекоммендую почитать статью "Под капотом управляемых форм"

Технические моменты.

Для версии 2:

1. Обработка работает только в толстом клиенте.

2. Генерирует только код создания элементов. Не определяет значение свойства "ПутьКДанным" и обработчики событий.

3. Не требует изменения конфигурации для генерации кода. Просто запускается как внешняя.

Для версии 3.0:

1. Работает в любом режиме (толстый и тонкий клиент)

2. Генерирует код создания элементов, реквизитов и команд.

3. Для генерации кода обязательно включение в процедуру "ПриСозданииНаСервере" модуля декомпилируемой формы следующего кода. 

	Если Форма.Параметры.Свойство("ДекомпиляцияЭлементов") Тогда
		ВнешниеОбработки.Создать(Форма.Параметры.ДекомпиляцияЭлементов.ИмяПодключеннойОбработки,Ложь).ОпределитьВнутренниеСвойстваЭлементов(Форма);
	КонецЕсли; 


Для конфигураций на основе БСП достаточно прописать вызов один раз для всех форм в общем модуле "МодификацияКонфигурацииПереопределяемый". Для нетиповых конфигураций необходимо модифицировать модуль формы.  

По обеим версиям:

4. С формами внешних обработок и отчетов не работает. Только с встроенными в конфигурацию.

5. Свойства элементов заполняются не все, хотя и достаточно большой перечень. Если нужно что-то еще, пишите в комментариях, чего по-вашему не хватает. 

По развитию обработки: 

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

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

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

Если есть еще какие-либо пожелания или замечания по работе, то пишите в комментариях.

UPD 02.10.2014

Добавила обновленную версию 3.0.

Отличия выше по тексту. 

UPD 18.10.2014

Обработка поддерживает свойства элементов для релиза 8.3.5. В более ранних релизах каких-то свойств может не быть. Например, в 8.3.4 нет системных перечислений и свойств ПоложениеСтрокиПоискаПоложениеСостоянияПросмотраПоложениеУправленияПоиском.  Подробнее в комментариях (28)-(32). Добавила отдельную версию для платформы 8.2 (проверялась на 8.2.16, более стрые релизы, думаю, не актуальны). Её же можно использовать для релизов 8.3 до 8.3.5.  Это полный аналог стандартной обработки 3.0 в которой закомментирована работа с новыми свойствами.

UPD 18.01.2015

Версия 3.0.1 beta. Добавлено формирование кнопок командной панели формы. Расширен перечень обрабатываемых свойств.  Исправлена работа в клиент-серверном варианте.

Рекоммендую из других моих обработок:

1. Комплексная проверка ведения учета в УТ10, УТ11, КА, УПП, ERP - простая обработка для проверки корректности ведения учета по всем разделам учета.
2. Дерево объектной модели схемы запроса (декомпиляция текста запроса) - программная модификация запроса через схему запроса.
3. Универсальная выгрузка/загрузка данных в формате JSON для отличающихся конфигураций (Такси+ОФ) - перенос данных между любыми конфигурациями на любых платформах (8.2-8.3) с любым интерфейсом.

Файлы

Наименование Файл Версия Размер Кол. Скачив.
ДекомпиляцияУправляемыхФорм_v2.epf
.epf 16,45Kb
15.12.14
1351
.epf 16,45Kb 1351 Бесплатно
Декомпиляция управляемых форм 3.0 (с 8.2)
.epf 20,26Kb
15.12.14
1402
.epf 20,26Kb 1402 Бесплатно
Декомпиляция управляемых форм 3.0 (с 8.3.5)
.epf 21,52Kb
15.12.14
1849
.epf 21,52Kb 1849 Бесплатно
Декомпиляция управляемых форм 3.0.1 (с 8.3.5) (3.0 + разбор командной панели + клиент-сервер)
.epf 22,14Kb
20.02.15
1350
.epf 22,14Kb 1350 Бесплатно

См. также

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

3. ekaruk 29.09.2014 18:07
(2) Yashazz, Так и сейчас всё работает.
Методы читаются, события устанавливаются.
Получается вполне нормальный работающий код.
Не думаю, что 8.3.12 будет более стабильная, чем текущая. Будут свои проблемы и решения.
Работать сейчас нужно, а не через пару лет.
# Ответить
16. ekaruk 02.10.2014 21:16
(9) ksuman, тут каждый сам решает, как ему проще изменения вносить.
На моих последних проектах внедрения внесение изменений в формы программно было обязательным требованием к коду.
Просто пока не столкнешься с обновлением сильно измененных конфигураций, об этом не задумываешься.

А вообще УФ офигительно удобная штука.
Я с них начинала когда-то. Потом полтора года работала с обычными.
Последние полгода работаю только с управляевыми.
ИМХО, с обычными гемороя на порядок больше. Привязки, положения элементов вечно куда-то сбиваются.
С УФ просто нужно один раз понять идеологию, потом работа с ними гораздо проще, чем с обычными.
Ответили: (19) (52)
# Ответить
52. AlexO (файл скачал) 16.12.2014 11:31
(16) ekaruk,
С УФ просто нужно один раз понять идеологию, потом работа с ними гораздо проще, чем с обычными.

Не согласен.
Это разработчик должен обтесать и вырубить форму для своих замыслов, а не форма - обтесать и вырубить замысел разработчика.
Т.к. в последнем случае все сводится к единственному случаю: 1с предусмотрела эту возможность - замысел "обтесался" и "подстроился" под форму. Нет - все замыслы перечеркиваются единственным ответом "извините, вам это не нужно". Кому это не нужно? 1С? Управляемой форме, что она не может предоставить нужный функционал?
Мне, как разработчику, и заказчику, точно и однозначно нужно. А однозначно не нужен - вот такой подобный подход к разработке среды программирования.
# Ответить

Комментарии

1. BigClock 29.09.2014 15:23
Для управляемых форм явно не хватает такого инструмента, как V8Reader: http://infostart.ru/public/106310/ Особенно возможности декомпиляции изменений для форм.
Ответили: (5)
# Ответить
2. Yashazz 29.09.2014 17:43
Хотите добрый совет? Не пишите сами и не предлагайте другим такие обработки, пока не выйдет 8.3.12 как минимум. Тогда ситуация стабилизируется. нужные поля будут читаться, методы - работать, и вообще можно будет рассчитывать на вменяемый механизм. Сейчас пока и в 8.2, и в 8.3 всё колбасит, малейшее "изменение концепции" может сделать ваши усилия бессмысленными в обе стороны - либо завтра добавят нечто, благодаря чем это всё будет раз плюнуть (как со структурой таблиц базы поступили), либо нечто перестанет работать и плоды трудов останется лишь выкинуть.
Ответили: (3) (42)
+ 2 [ kostyaomsk; t278; ]
# Ответить
3. ekaruk 29.09.2014 18:07
(2) Yashazz, Так и сейчас всё работает.
Методы читаются, события устанавливаются.
Получается вполне нормальный работающий код.
Не думаю, что 8.3.12 будет более стабильная, чем текущая. Будут свои проблемы и решения.
Работать сейчас нужно, а не через пару лет.
# Ответить
4. Asmody (файл скачал) 29.09.2014 18:07
Предлагаю реализовать супер-вариант: написать шаблон xslt, который по xml из выгрузки конфигурации будет формировать код создания элементов.
Ответили: (6) (33) (46)
# Ответить
5. ekaruk 29.09.2014 20:05
(1) BigClock, не хватает. Но для меня это уже слишком универсальный механизм.
# Ответить
6. Yashazz 29.09.2014 22:38
(3) Дык оно конечно, просто обидно будет, если что. Я вот пыхтел, делал отбор по значению в колонке динамического списка, а его взяли и добавили на уровне платформы. Может, у вас ПутьКДанным не получился из-за сугубо внутренних траблов платформы, кто знает.
(4) Ишшо полгода назад думал об этом. Пока влом, но как всерьёз буду переходить на 8.3, так и вполне возможно.
Ответили: (7)
# Ответить
7. saiten 01.10.2014 09:39
(6)
ПутьКДанным не получился из-за сугубо внутренних траблов платформы
Это не траблы - это концепция. Пути к данным доступны только на сервере, и это, в общемт-то правильно: в 99% процентах случаев тащить их на клиент нафиг не надо. А вот доступ к серверному контексту формы есть только из самой формы, т.к., как я понял, он создаётся непосредственно в момент серверного вызова с клиента и вне этого вызова не существует. Типа стэйтлесс и всё такое... Так что конкретно в этом плане врядли что изменится.
Ответили: (8) (48) (49)
# Ответить
8. ekaruk 01.10.2014 10:20
А вот доступ к серверному контексту формы есть только из самой формы, т.к., как я понял, он создаётся непосредственно в момент серверного вызова с клиента и вне этого вызова не существует.


(7) saiten, я тоже думаю, что не изменится.
Одна и та же фигня с ПутемКДанным, обработчиками событий и реквизитами. До всего этого можно добраться только изнутри формы.
Соответственно, генерация кода возможна только после вклинивания в код самой формы.
В принципе, для данной задачи не критично (не так сложно строку кода вписать в "ПриСозданииНаСервере"), хотя и не очень удобно.
# Ответить
9. ksuman 01.10.2014 11:58
Считаю это решение: Деэволюцией программного обеспечения.
Когда-то было инновацией придумали Визуализацию языков высокого уровня (Delphi из TurboPascal, С++ Bulder из Turbo C++). У вас все наоборот.
Может нам лучше взять в руки палку и отрасти хвосты?
Ответили: (10) (11) (16) (45) (64)
− 4 [ IgorS; a-novoselov; awa; eeeio; ]
# Ответить
10. vikad 01.10.2014 12:22
(9) ksuman, я, конечно, в вопросе так хорошо, как Вы не разбираюсь но здесь http://www.develplatform.com/2013/01/blog-post_31.html в разделе "Немного критики" по-моему, все наоборот написано....
# Ответить
11. saiten 02.10.2014 11:47
(9)А современные IDE для .NET framework (managed C#, за остальные языки не поручусь), например, на основе того, что накидано в визуальном редакторе создают программный код, генерирующий форму, и наоборот-по коду формируют представление, которое можно редактировать мышем. Что несравнимо удобнее ресурсных файлов делфи-билдеров. Так что шаг это назад или вперёд - вопрос спорный. (для турбо С, кстати, я визуальных редакторов не помню... была библиотека визуальных компонентов Turbo Vision, но, насколько помню, код там надо было-таки собирать ручками).
Ответили: (12)
# Ответить
12. ksuman 02.10.2014 12:41
(11) saiten, "...из Turbo C++..." - я так сказал про Builder.
"IDE для .NET framework (managed C#" - Да это эволюция, потому как мы все равно работаем и настраиваем формы в Визуальном редакторе, мы сразу видим все что мы меняем и в коде и в конструкторе визуально.
В 1С нет таких механизмов, чтобы на стадии конструирования компилировать на лету программный код и преобразовывать его визуально. Когда появится, тогда и сама эта тема перестанет быть актуальной. Но с учетом того что при каждом усложнении новых выпусков платформы 1С - глюки, которые сопровождают - растут по экспоненте...
Так что я даже не знаю, хочу ли я этой инновации в 1С...
Ответили: (13)
# Ответить
13. saiten 02.10.2014 13:48
(12)Консенсус? Всё-таки генерация порождающего кода формы - это не деэволюция, а фишка, которая может быть полезной в решении определенных задач. В случае 1С не без костылей, да, но УФ - вообще тот ещё инвалид, костыли уже привычны.
Ответили: (14)
+ 2 [ ojiojiowka; vikad; ]
# Ответить
14. ksuman 02.10.2014 15:03
(13) saiten, я бы назвал это фишкой или шаблоном, если бы это работало в конфигураторе. А так чисто практического применения не вижу. Проще самому создать ряд шаблонов на каждый вид элемента или копировать уже существующий код его меняя, чем создавать элементы, затем компилировать и запускать приложение, потом по новой менять... А если надо что-то поменять, вставить элемент в форме (не крайним), что Вы будете по новой создавать элементы, смотреть что получится?

Это к теме не относится, так наболело:
Честно я вообще не понимаю, зачем отказываться от уже нормальной схемы работы в Приложении, когда у разработчика есть четкий план, когда и куда какой элемент поставить и, в угоду мобильным приложениям и планшетам, нагнуть пользователей ПК и заставить их использовать Тонкий клиент...
Ответили: (15) (18) (51)
# Ответить
15. saiten 02.10.2014 16:36
(14)В конфигураторе этого, к сожалению, нет, и, думаю, в рамках 8.3 точно не будет. Ну а по поводу практического применения... Если мы чего-то не видим, то это не значит что этого нет. Например, если надо добавить на типовую форму документа достаточно сложную панель, то удобно её добавить в редакторе форм, но при каждом изменении формы поставщиком конфы придётся иметь геморрой с обновлением. Альтернатива - добавлять элементы программно: меньше проблем с обновлением, но запаришься подгонять, чтобы всё встало куда надо. Компромисс - нарисовать форму в редакторе, сгенерировать код и подставить его в рабочее приложение. По-моему, это очевидно.
Ответили: (51) (61)
+ 2 [ zqzq; ekaterinaeon; ]
# Ответить
16. ekaruk 02.10.2014 21:16
(9) ksuman, тут каждый сам решает, как ему проще изменения вносить.
На моих последних проектах внедрения внесение изменений в формы программно было обязательным требованием к коду.
Просто пока не столкнешься с обновлением сильно измененных конфигураций, об этом не задумываешься.

А вообще УФ офигительно удобная штука.
Я с них начинала когда-то. Потом полтора года работала с обычными.
Последние полгода работаю только с управляевыми.
ИМХО, с обычными гемороя на порядок больше. Привязки, положения элементов вечно куда-то сбиваются.
С УФ просто нужно один раз понять идеологию, потом работа с ними гораздо проще, чем с обычными.
Ответили: (19) (52)
# Ответить
17. ekaruk 02.10.2014 21:19
Добавила обновлённую версию обработки.
Отличия от прошлой описаны в тексте описания.
Ну и добавила по ней пару картинок.
# Ответить
18. ekaruk 02.10.2014 21:44
(14) ksuman, По новой создавать ничего не нужно.
Форма один раз копируется, но основной остается типовая.
В скопированную форму конструктором вносятся элементы нужного размера, с нужными параметра. Настраиваются все свойства.
По скопированной форме генерируется код и вставляется в переопределяемый общий модуль.
Типовая форма при этом остается неизменной и полностью на поддержке.
При необходимости новый изменения вносятся в измененную копию..
# Ответить
19. ksuman 03.10.2014 00:34
(16) ekaruk, Бог с Вами, нравится Вам так работать, работайте... Только хотел бы отметить Вашу невнимательность: 1С-команда под давлением разработчиков пошла последним на уступки и чтобы облегчить обновление отредактированных изменений интерфейса и обработчиков модулей объектов, ввела ряд Общих модулей с постфиксом "Переопределяемый". И все стандартные обработчики форм и модулей объектов обращаются вначале к ним. Применительно к Вашей задаче, следовало бы подцепить этот с моей точки полезный механизм при генерации кода как альтернативу...

Насчет УФ: тут дело не во вкусе и сложности разработки (программист должен любить именно сложные задачи), а в возможностях интерфейса для решения любой задачи. Некоторые задачи в УФ не решить.
Ответили: (20)
# Ответить
20. ekaruk 03.10.2014 00:42
(19) ksuman, Вы бы хоть в теме разобрались, прежде, чем писать.
Модуль "Переопределяемый" из УТ и УП упомянут в статье 3 раза.
Пример встраивания в конфигурацию тоже приведен для него, а не для модуль объекта ("Форма" вместо"ЭтаФорма").
# Ответить
21. cleaner_it (файл скачал) 05.10.2014 19:10
(0) Отличная вещь. Я с ее помощью сейчас дорабатываю серьезно дописанную конфигурацию, чтобы обновлять было проще.

Для команд нужно добавить генерацию кода:
	
// ******   Команда формы  - вывод кнопки "ПрисоединенныеФайлы"    ***********
НовыйЭлемент = Этаформа.Элементы.Вставить("ПрисоединенныеФайлы",Тип("КнопкаФормы"),ЭтаФорма.КоманднаяПанель);
НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
НовыйЭлемент.ИмяКоманды = "ПрисоединенныеФайлы";
...Показать Скрыть
Ответили: (22)
# Ответить
22. ekaruk 05.10.2014 19:36
(21) cleaner_it, рада, что пригодилось.
Для кнопок сейчас поддерживаются свойства (Вид, АктивизироватьПоУмолчанию,Видимость, Высота, ВысотаЗаголовка, Доступность, Заголовок, ИмяКоманды, ТолькоВоВсехДействиях, ЦветРамки, ЦветТекста, ЦветФона, Ширина, Шрифт).
Для команд код тоже генерируются. Поддерживаются свойства: Действие, Заголовок, ИзменяетСохраняемыеДанные, Отображение, Подсказка.

Нужно просто отметить на закладке "Команды" перечень нужных Вам команд. Посмотрите на скриншоты. Насколько я понимаю, это команда "ПрисоединенныеФайлы", так как она назначена для указанной Вами кнопки формы.

Команды и реквизиты поддерживаются только в версии обработки 3.0. Не знаю, какая у Вас.
Ответили: (23)
# Ответить
23. rasswet 06.10.2014 15:42
(22) а нельзя как-то так придумать, чтобы не нужно было делать
3. Для генерации кода обязательно включение в процедуру "ПриСозданииНаСервере" модуля декомпилируемой формы следующего кода.
для обычных форм все просмотренные мной решения генерят (кто-то лучше, кто-то хуже) без предварительного допиливания исходной формы.
неудобно как-то сначала в форму вписывать этот код.
Ответили: (24) (25)
# Ответить
24. ekaruk 06.10.2014 15:59
(23) rasswet, Можно, так работает обработка в версии 2.0. Формирует код без изменения формы.
Но в этом режиме открытия формы недоступны часть свойств элементов, обработчики событий элементов формы, реквизиты формы и их свойства. Получить к ним доступ можно только изнутри формы. Т.е. из процедуры "ПриСоздании" самой формы.
Если покажете работающий вариант с управляемыми формами, то переделаю. Пока не вижу технической возможности получить все нужные реквизиты без модификации изменяемой формы формы.
# Ответить
25. ekaruk 06.10.2014 16:01
(23) rasswet, если постоянно работаете с одной и той же конфигурацией УТ11 или УП2.0, то достаточно вписать код один раз в общий модуль и об этой проблеме забыть. Он будет вызываться для всех форм.
В других конфигурациях, к сожалению, такой возможности нет.
Ответили: (26)
# Ответить
26. rasswet 13.10.2014 15:15
(25) в какой именно общий модуль? в БП 3.0 он есть?
Ответили: (27)
# Ответить
27. ekaruk 13.10.2014 15:25
(26) rasswet, Общий модуль «МодификацияКонфигурацииПереопределяемый»
В БП, к сожалению, нету.
Точно есть в УТ11 и УП2.
По остальным кофигурациям не знаю.
Подробнее тут http://infostart.ru/public/303645/
# Ответить
28. mihast (файл скачал) 18.10.2014 09:13
Платформа 1С:Предприятие 8.3 (8.3.4.465)

Ошибка инициализации модуля: ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта
по причине:
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(332,69)}: Переменная не определена (ПоложениеСостоянияПросмотра)
СтруктураКопируемыхСвойств.Вставить("ПоложениеСостоянияПросмотра",<<?>>ПоложениеСостоянияПросмотра.Авто);
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(673,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)
СоответствиеТекстовыхПредставлений.Вставить(<<?>>ПоложениеСостоянияПросмотра.Авто,"ПоложениеСостоянияПросмотра.Авто");
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(674,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)
СоответствиеТекстовыхПредставлений.Вставить(<<?>>ПоложениеСостоянияПросмотра.Верх,"ПоложениеСостоянияПросмотра.Верх");
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(675,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)
СоответствиеТекстовыхПредставлений.Вставить(<<?>>ПоложениеСостоянияПросмотра.Нет,"ПоложениеСостоянияПросмотра.Нет");

ЕЩЕ
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(585)}: Поле объекта не обнаружено (ПолеПериода)
СоответствиеТекстовыхПредставлений.Вставить(ВидПоляФормы.ПолеПериода,"ВидПоляФормы.ПолеПериода");
Ответили: (30)
# Ответить
29. mihast (файл скачал) 18.10.2014 09:48
Не декомпилируются КоманднаяПанель Формы :( Разбор начинается только с Групп...

Можно добавить ?
Ответили: (30) (31) (32)
# Ответить
30. ekaruk 18.10.2014 10:20
(28) mihast, Полноценная 8.3.4.465 или может режим совместимости или еще что-то?
ПоложениеСостоянияПросмотра это системное перечисление.
С ним проблем не должно быть.
У меня нет 8.3.4.465. Не знаю,как проверить, в каком релизе оно появилось.

Можете просто в конфигураторе открыть обработку и закоментировать связанные с ним строки, чтобы это свойство не обрабатывалось.

(29) mihast, В принципе можно. Чуть позже добаклю.
Ответили: (32)
# Ответить
31. ekaruk 18.10.2014 10:29
(29) mihast, Нашла на ИТС
Положение состояния просмотра – описывает, где будет отображаться состояние просмотра: по каким полям выполнялся поиск и какие значения искались в каждом поле. Может принимать следующие значения: Авто, Нет, Верх, Низ.
Если свойство установлено в значение Нет, то состояние просмотра будет отсутствовать на форме. В результате определить, выполнен поиск или нет, можно будет только по доступности кнопки Отменить поиск.
Если свойство установлено в значение Верх, то состояние просмотра будет расположено между командной панелью списка и таблицей, отображающей динамический список. Если свойство установлено в значение Низ, то состояние просмотра будет размещено сразу после таблицы, отображающей динамический список.
Если форма создана в «1С:Предприятии» версии 8.3.4 и младше – свойство установлено в значение Нет. Если форма создана в «1С:Предприятии» версии 8.3.5 и старше – свойство установлено в значение Авто. Реальное значение свойства в этом случае будет определяться следующим образом:
● Если свойство Режим совместимости установлено в значение Версия 8.3.4 (и ниже) – значение Нет;
● Если свойство Режим совместимости установлено в значение Не использовать или старше значения Версия 8.3.4 – значение Верх;

http://its.1c.ru/db/v83doc#bookmark:dev:TI000001337

Похоже, обработка работает, начиная с полноценной 8.3.4

Или запускайте в актуальном релизе или просто в конфигураторере выкиньте обработку этого свойство. Я подумаю, может как-то обрабатывать програмно разные релизы платформы. Но пока этого нет.
# Ответить
32. ekaruk 18.10.2014 10:39
(29) mihast,
+ к (30) Похоже, свойство появилось только в 8.3.5

Для элемента управляемой формы ТаблицаФормы реализованы предопределенные элементы СтрокаПоиска, СостояниеПросмотра, УправлениеПоиском, а также свойства ПоложениеСтрокиПоиска, ПоложениеСостоянияПросмотра, ПоложениеУправленияПоиском.

http://downloads.v8.1c.ru/content//Platform/8_3_5_1068/1cv8upd.htm
Ответили: (86)
# Ответить
33. ekaruk 10.11.2014 11:20
(4) Asmody, Про шаблон xslt не знаю. Но вообще мысль разбирать xml-выгрузку конфигурации для анализа форм у меня была. Но мне кажется, выгружать конфигурацию для получения кода формы еще большее извращение, чем вклиниваться в код формы.
Хотя, может как-нибудь и попробую, если время свободное появится.
# Ответить
34. rusak171 13.11.2014 17:51
Большое спасибо за обработку, с плюсиком еще не разобрался
# Ответить
35. roman77 (файл скачал) 28.11.2014 15:02
Отличная обработка.
Для картинок можно больше свойств генерировать типа:

НовыйЭлемент.Вид = ВидПоляФормы.ПолеКартинки;
НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;
НовыйЭлемент.Высота = 1;
НовыйЭлемент.Ширина = 2;
НовыйЭлемент.Рамка.ТипРамки = ТипРамкиЭлементаУправления.БезРамки;
НовыйЭлемент.КартинкаЗначений = БиблиотекаКартинок.ВыполненоУспешно;
...Показать Скрыть
# Ответить
36. Alister (файл скачал) 29.11.2014 17:01
Спасибо за проделанную работу.
# Ответить
37. ezhik_2000 10.12.2014 15:14
Программные добавления реквизитов (элементов) на форму очень тормозят открытие форм, проверено на практике. Особенно если формирование в общих модулях. Но зато очень удобно обновлять конфигурацию.
# Ответить
38. NOVOPRO 11.12.2014 07:22
Добрый день. У меня тоже вылезла следующая абракодабра, помогите устранить этот глюк.....:
Ошибка инициализации модуля: ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта
по причине:
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(332,69)}: Переменная не определена (ПоложениеСостоянияПросмотра)
СтруктураКопируемыхСвойств.Вставить("ПоложениеСостоянияПросмотра",<<?>>ПоложениеСостоянияПросмотра.Авто);
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(673,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)
>>ПоложениеСостоянияПросмотра.Верх,"ПоложениеСостоянияПросмотра.Верх");
{ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(675,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)
............
Ответили: (39)
# Ответить
39. ekaruk 11.12.2014 08:38
(38) NOVOPRO, ПоложениеСостоянияПросмотра добавлено в 8.3.5.1068.
У Вас либо релиз платформы старый либо включен режим совместимости.
Обновите платформу либо возьмите версию обработки для 8.2.
# Ответить
40. dimk@a (файл скачал) 15.12.2014 15:58
Очень интересная разработка. Спасибо! Беру на вооружение. К счастью, в последний год не доводилось обновлять конфигурации, уже забываю что это за "радость".
# Ответить
41. new_user (файл скачал) 15.12.2014 16:08
Евгения, спасибо!
# Ответить
42. DAnry (файл скачал) 15.12.2014 19:04
(2) Yashazz, а если надо сегодня (или вчера)? В таких случаях обработка очень полезна. Автору, спасибо.
# Ответить
43. kostyaomsk (файл скачал) 15.12.2014 19:44
Пока открыли на бесплатный доступ из дайджест-рассылки надо скачать. Как говорится в народной шутке "в кулацком хозяйстве все пригодится".
# Ответить
44. mihast (файл скачал) 16.12.2014 07:28
Жаль, что разбор Командной панели все еще не доделан...
Может в праздники будет ?
Ответили: (47)
# Ответить
45. AlexO (файл скачал) 16.12.2014 09:50
(9) ksuman,
Считаю это решение: Деэволюцией программного обеспечения.

Дело в том, ч то у нас проблема с 1С.
Нет качественного и нормального механизма программного создания элементов. Отсюда и костыли.
К программированию в широком смысле это никакого отношения не имеет.
# Ответить
46. AlexO (файл скачал) 16.12.2014 09:59
(4) Asmody,
который по xml из выгрузки конфигурации будет формировать код создания элементов

Зачем формировать элементы, которые уже "сформировны" в конфигурации? Весь смысл - формировать новые элементы на формах.
Анализ конфигурации - это уже из другой области. Да и не нужен он, по большому счету, даже если не принимать во внимание, что сам механизм сохранения и чтения конфы в XML - полурабочий.
Ответили: (47)
# Ответить
47. ekaruk 16.12.2014 10:19
(46) AlexO, На самом деле идея очень красивая. То же самое, что с этой обработкой, но анализируем выгрузку конфигурации, а не саму ИБ. Из плюсов, можно четко увидеть абсолютно все имеющиеся у элементов свойства. Сейчас при ходится анализировать "если поле ввода, то такие-то элементы, если картинка, то такие-то". Причем каждое значение сравниваем со значанием по умолчанию. Формируем код только если значение установили. Все равно часть пропускаем. Через XML никаких циклов не нужно, просто берем все имеющиеся свойства.
Хотя основное применение не это.
Лично я сейчас все версии рабочей конфигурации храню в Гит. Сравнение форм в xml даже при небольшом количестве отличий неинформативно. Сдвигаются индексы и появляется куча отличий, которых реально нет. Идеально было бы сравнение текстов аналогично сравнению обычных форм через v8reader. Как эту задачу выполнил бы xslt-шаблон. Сейчас нормального способо сранения управляемых форм лично я не знаю. Собственно, то же самое и для табличных документов в xml. Реально для сравнения выгрузка из 8.2 в .mxl и .form была удобнее.

(44) mihast, Пока не добралась :(
Ответили: (50) (53)
# Ответить
48. AlexO (файл скачал) 16.12.2014 11:02
(7) saiten,
Пути к данным доступны только на сервере, и это, в общемт-то правильно

Если концепция клиент-сервер реализована через одно место, а не как правильно - то это проблема реализации, а не программистов. А через вот такие "это правильно" - это становится проблемой программистов.
Что тут "правильного", если форма (которая у 1С однозначно превратилась в "клиент") должна отображать данные-с-сервера (в которые однозначно превратилась БД), а данные в базе - должны меняться по результатам действий на форме? Как принудительное искуственное максимальное разделение клиента и сервера на малосвязанные части вписывается в саму концепцию взаимодействия клиент-серверной архитектуры?
Клиент-серверная архитектура - это разделение на клиента и сервер (как среды исполнения, видимости, взаимодействия), а не конкретно на форму и БД, а там "как получится".
Вот над чем нужно было работать в 1С, а не над "особым пониманием" клиент-серверного механизма.
Особых пониманий может быть сколько угодно, а все рабочие решения в области клиент-серверных архитектур уже найдены и реализованы.
Ответили: (55)
# Ответить
49. AlexO (файл скачал) 16.12.2014 11:03
(47) ekaruk,
Сдвигаются индексы и появляется куча отличий

Это одна из главных внутренних проблем платформы 1с8, начиная с самого начала.
Сейчас нормального способо сранения управляемых форм лично я не знаю.

Их не было официальных и для ОФ. И не будет. Думаю, 1С раньше перейдет на ООП, чем сделает корректный независимый механизм сравнения своих внутренних объектов.
Считаю, вот это основная причина отсутствия корректных и рабочих механизмов работы с объектами "вне" визуальной среды конфигуратора: этих "объектов" на самом деле и нет, вот и нет ни механизмов сравнения, ни полноценных механизмов создания.
Концепции и "направления" - да, есть. Но концепции - это ничто без развития, а направления, ведущие в никуда - бесполезны.
# Ответить
50. AlexO (файл скачал) 16.12.2014 11:15
(47) ekaruk,
На самом деле идея очень красивая.

А вот это - и следствие, и причина недоработанности многих механизмов 1С.
Следствие - потому что "красивость"-то доработана, а смысла или работоспособности - минимальное содержание.
Причина - "ну, красиво же, зачем тут еще что-то дорабатывать".
Да пусть все будет "некрасиво", но рабоспособно, или, хотя бы, 1С постоянно бы работала и совершенствовала бы свои внутренние механизмы в сторону функциональности, а не только "красивости".
А так - "ну, идея красивая, что вам еще надо?!" (
# Ответить
51. AlexO (файл скачал) 16.12.2014 11:25
(15) saiten,
Компромисс - нарисовать форму в редакторе, сгенерировать код и подставить его в рабочее приложение. По-моему, это очевидно.
По-моему, это не "компромисс", а единственно рабочий метод программного создания форм как на ОФ, так и - тем более, с сомнительными неуправляемыми автопривязками, - на УФ.
(14) ksuman,
Честно я вообще не понимаю, зачем отказываться от уже нормальной схемы

Видимо, 1С просто не справилась с нормальной автопривязкой в ОФ (с обратной связью, с нормальным отображением - все помнят перечеркнутый красным крестом прямоугольник, когда привязка "неправильна", или отсутствие реакции элемента на изменение формы, хотя вроде все привязки сделаны). И решило "пойти другим путем" - на авось, вдруг "прокатит".
Путь неуправлемых автопривязок УФ, может, и другой, но проблемы те же.
И неумение их решить - все также на первом плане.
Ответили: (55)
# Ответить
52. AlexO (файл скачал) 16.12.2014 11:31
(16) ekaruk,
С УФ просто нужно один раз понять идеологию, потом работа с ними гораздо проще, чем с обычными.

Не согласен.
Это разработчик должен обтесать и вырубить форму для своих замыслов, а не форма - обтесать и вырубить замысел разработчика.
Т.к. в последнем случае все сводится к единственному случаю: 1с предусмотрела эту возможность - замысел "обтесался" и "подстроился" под форму. Нет - все замыслы перечеркиваются единственным ответом "извините, вам это не нужно". Кому это не нужно? 1С? Управляемой форме, что она не может предоставить нужный функционал?
Мне, как разработчику, и заказчику, точно и однозначно нужно. А однозначно не нужен - вот такой подобный подход к разработке среды программирования.
# Ответить
53. artbear 16.12.2014 14:31
(47) >>Идеально было бы сравнение текстов аналогично сравнению обычных форм через v8reader

Поясни свою идею. Непонятно, но интересно.
или в Skype
ЗЫ Как ты знаешь, мы также активно юзаем Гит.
Ответили: (54)
# Ответить
54. AlexO (файл скачал) 16.12.2014 15:00
(53) artbear,
Как ты знаешь, мы также активно юзаем Гит.

А мы не юзаем Гит. Мы пишем код в 1С ))
Ответили: (61)
# Ответить
55. saiten 16.12.2014 16:26
(48)Хм... Много букв, но смысла в них я не увидел... Наверное, плохо смотрел. Что вас конкретно не устраивает? То что путей к данным нет на клиенте? Наполнение формы данными производится на сервере, после чего форма отправляется клиенту уже заполненная. Зачем на клиенте пути к данным?
(51)
По-моему, это не "компромисс", а единственно рабочий метод программного создания форм как на ОФ, так и - тем более, с сомнительными неуправляемыми автопривязками, - на УФ.
Это ведь шутка, да? Или вы действительно делаете только так?
Ответили: (56) (57) (58)
# Ответить
56. AlexO (файл скачал) 17.12.2014 10:29
(55) saiten,
То что путей к данным нет на клиенте?
Меня не устраивает, что нужно писать то, что и так разруливается платформой ("инструкция не поддерживается на сервере/клиенте!").
Поэтому и нет никакого смысла во всех этих "на сервере...на клиенте...." - ты в любом случае пишешь там только то, что позволено: вызовы и обращения к базе.
Так пусть платформа и распределяет сама эти вызовы, буде где их встретит - в форме, в общем модуле, и т.д. А не так, как сейчас реализовано в УФ - с профанацией и дискредитацией клиент-серверной архитектуры.
Наполнение формы данными производится на сервере
Да кто вам сказал?! И какая разница - где? Нужно на сервере - пусть наполняется на сервере. Нужно на клиенте - пусть на клиенте. Тогда уж либо платформа сама все разруливает, и не путает программиста "инструкция только на сервере!", либо программист ставит - где считает нужным, - работу на сервере или клиенте. Что и было частично сделано в 8.1. Частично - потому что #ЕслиКлиент или #ЕслиСервер всегда отслеживала, откуда вход (с клиента или сервера), но не всегда отрабатывала код внутри вызова только на клиенте, или только на сервере. Но чья это недоработка - разве программиста?
Нет, вместо улучшения и развития нормальной системы клиент-сервер, сделали подделку и назвали "УФ".
# Ответить
57. AlexO (файл скачал) 17.12.2014 10:48
(55) saiten,
после чего форма отправляется клиенту уже заполненная

Да пусть хоть 200 тысяч раз отправляет заполненную форму, и 200 тысяч раз - обращается к серверу. Должен быть разумный механизм передачи данных без костылей вида "ЗначениеВРеквизитФормы" и "ПоместитьВоВременноеХранилище" и т.д. Эти костыли и делают то же самое - соединяют клиента и сервер, ну так пусть это и делает платформа - получаешь ТЧ, она инкапсулирует в свои внутренние "ЗначениеВРеквизитФормы", и получает данные обратно. А программист видит только присвоение через "=". Или пусть выход на API дают, разберем форму и все вызовы на составляющие, и тогда сами будем писать вызовы и передачи - каждый свою функцию "ЗначениеВРеквизитФормы". А сейчас это профанация, и не более того.
Зачем на клиенте пути к данным?
Затем, что клиент-серверная архитектура подразумевает взаимодействие (тесное и интенсивное) клиента и сервера, и тут надо делать оптимизацию вызовов, а не отмазываться костылем "ЗначениеВРеквизитФормы".
Т.е. в результате ТЧ получить на форме нельзя без условного "ЗначениеВРеквизитФормы", но платформа и сама "прекрасно" все видит, и сообщит об этом, что нельзя. Переменные сервера и формы не видны друг у друга, но ПоместитьВоВременноеХранилище - та же переменная, которая видна и там, там, существуя "одновременно" везде.
Т.е. имеем чушь и шизофрению вместо четкого понимания и написания кода.
Ответили: (59)
# Ответить
58. AlexO (файл скачал) 17.12.2014 10:52
(55) saiten,
Или вы действительно делаете только так?
А вы сразу программно создаете, даже не видя, что в результате получится? Куда элемент "съедет", и вообще, какой вид формы получится в итоге? По сути, здесь идет с конца - с результата: хотим получить вот это, и подгоняем программное создание под конечный результат.
Расскажите еще, что заранее знаете все, все просчитали (тем более - в 1С), и в просмотре конечного результата не нуждаетесь.
# Ответить
59. ksuman 17.12.2014 16:19
(57) AlexO,
Должен быть разумный механизм передачи данных без костылей вида "ЗначениеВРеквизитФормы"

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

В целом же я ничего против этого механизма не имею, но только для конкретных узко-специальных целей. Если бы система осталась бы гибридной и для основной работы использовала бы ОбычноеПриложение, а для заказов, удаленных продаж, формирования аналитических отчетов с уже заранее подготовленными настройками и других видов работ с мобильных и планшетных устройств. Так нет 1С нам навязывает - Или-или - вот что бесит!
Ответили: (66)
# Ответить
60. ksuman 17.12.2014 16:33
Хотелось бы резюмировать чтобы больше сюда не возвращаться.
Конечной целью любой ERP-системы является удовлетворение запросов, или если хотите: прихотей и желаний конечного пользователя. Целью же 1С, по всей видимости является упрощение и стандартизирование программной разработки, чтобы привлекать новых разработчиков ИБ под их продукты. А на удобство работы, функционал, скорость обработки информации, скорость и надежность отклика интерфейса - им наплевать. Пока эта схема работает, но терпение пользователей 1С - не безгранично. Если политика 1С - не изменится, то скоро по частям коммерческих и других продуктов, компании будут переходить на другие системы или будут разрабатывать на старой, уже отлаженной версии 8.2.
# Ответить
61. lustin 27.12.2014 14:31
(15) saiten, я думаю что из Конфигуратора можно вызвать c помощью epfLoader'а от Snegopata, так как судя по всему 2015 год Конфигуратор будет таким же убогим как и раньше.

(47) Что касается исходного посыла:
Надо вспомнить что управляемые формы - сиречь XAML (C#) или Jelly (java)

http://commons.apache.org/proper/commons-jelly/tutorial.html
http://msdn.microsoft.com/en-us/library/ms788723(v=vs.110).aspx

Соответственно если раздумывать над тем - как можно сравнивать и анализировать управляемые формы, нужно исходить не только из проблематики нашей 1С-нины, но и из проблематики WPF и Java (jelly)
Но "низом" как все правильно заметили - это в принципе XML со схемой данных

В итоге получается если разделить задачу на 2 составляющие у нас получается:

ядро должно позволить делать XML merge и diff
а интерактивная часть должна иметь 3 закладки
а. показать объединенную форму
б. пока diff в терминах метаданных (c конфликтами)
в. показать diff в терминах XML
дополнительно надо помнить что надо объединять не только XML представление, но и данные формы.
В общем виде задача пока такая. Основные проблемы в ядре - так как у того же WPF эта проблема также еще не решена окончательно.

И еще - это уже из Java мира приехало: дело в том что когда форма описывается формально (то есть правилами, а не свойствами - в Java мире используется такая хрень как LookAndFeel) меняются не только элементы, но и их "поведение" - привязки, расширение и т.д. И вот тут начинается веселье - merge он же статичен, то есть показывает разницу в стилях и элементах, но не показывает "что будет если форма будет в полном экране, НЕ в полном и т.д.)

В итоге видится:

Xml merge + XSD validate - чтобы попробовать отобразить получившуюся форму. Наверное стоит подсветить элементы исходной версии черным, элементы добавленные зеленым, конфликтные красным.
XmlForm+XmlFormData diff - чтобы сформировать отчет наподобии неуправляемых форм, что поменялось в данных формы и в элементах

Пока так в первом приближении... Чуть позже будут подробности, так надо актуализировать что в последней версии есть у v8Reader

(54) Артур, немного лукавит, юзают только ведущие программисты и "сочувствующие", на самом деле в стандарт разработки 2 года назад был включен следующий пункт


Ведущий программист 1С (Team leader)
* имеет на своем компьютере
1. 1С предприятие 3 версий (legasy, stable, beta)
2. Visual Studio
3. SQL Developers Edition
4. MSGit (добавлено в PATH)
5. Attlasian SourceTree
6. 1Script (добавлено 4 месяца назад)
7. xUnitFor1C, v83unpuck, precommit1c

* внедряет в своей команде
0. Использование сервера тестирования, сборки и развертывания и скрипты для этого. А также использование файлов поставки для развертывания релизов.
1. TDD - для автоматизированного тестирования, BDD - для формализации требований
2. GitFlow как стандарт коллективной разработки
3. обычные разработчики, консультанты, внедренцы и остальные странные личности работают с хранилищем и получают "по шапке" только за отсутствующий комментарий при помещении разработки в хранилище. Присоединяются к "движению" за правильную разработку, только по собственному желанию, желанию ведущего разработчика 1С или желанию ИТ руководства, когда проект загнулся от ошибок в процессе бурного развития (кризисное управление)



Для всех новых приходящих была специально разработана вакансия в стиле "чемпион" (сейчас в архиве, так как чемпионов достаточно)
http://job.svyaznoy.ru/msk/office/archive/it/572503/

P.S. Если в ответном комментарии кто-то захочет что-нибудь сказать про Снегопат, ознакомьтесь пожалуйста с этим https://snegopat.ru/forum/viewtopic.php?f=1&t=667
Ответили: (67) (68)
# Ответить
62. saiten 29.12.2014 13:11
(61)
из Конфигуратора можно вызвать c помощью epfLoader'а от Snegopata
Мэйби... Я нищеброд и снегопата не имею, так что вообще не представляю о чём речь.
# Ответить
63. yura1960 (файл скачал) 07.01.2015 15:00
ekaruk - нужную вещь всегда можно определить по количеству комментариев. Судя по всему Вы таковую написали, т.к. количество комментов зашкаливает. Скачал и сразу скажу - спасибо!
# Ответить
64. AlexanderKai (файл скачал) 20.01.2015 09:40
Использую вариант обработки "Декомпиляция управляемых форм 3.0 (с 8.3.5)".
Заканчивается ошибкой:

{Документ.СписаниеСРасчетногоСчета.Форма.ФормаДокумента.Форма(9)}: Ошибка при вызове метода контекста (Создать)
ВнешниеОбработки.Создать(ЭтаФорма.Параметры.ДекомпиляцияЭлементов.ИмяПодключеннойОбработки,Ложь).ОпределитьВнутренниеСвойстваЭлементов(ЭтаФорма);
по причине:
Ошибка подключения внешних метаданных
по причине:
Каталог не обнаружен 'C:\Users\user1\Desktop\Полезное\ДекомпиляцияУправляемыхФорм_v3­.0.epf'

То есть обработка пытается запуститься с клиентского компьютера, в то время как находится на сервере.
Ответили: (65)
# Ответить
65. ekaruk 20.01.2015 23:43
(64) AlexanderKai, Да, действительно.
В клиент-серверном варианте не вызывается.
Спасибо. Раньше работало. Поломалось после какой-то из доработок.
Исправила в 3.0.1.
Не могу 3.0 обновить, иначе ее статус автоматически изменится на "абонемент" и невозможно будет скачать бесплатно.
Ответили: (68)
# Ответить
66. AlexO (файл скачал) 21.01.2015 10:24
(59) ksuman,
но как мы знаем, существует не одна форма, а две, причем последняя (клиент) - может быть черт знает где и доступна ли в данный момент - неизвестна.
Тогда - в сад такие "клиент-серверные" механизмы, которые на деле ими не являются. Только и всего.
Как я понимаю, эта процедура вызывает поток или или обращается к существующему потоку обработки очередей запросов
Мы понятия не имеем, что там себе нареализовывала 1С. Поэтому - так это, не так это - нам неизвестно. А известен - конечный результат, который озвучен в 48-58.
Ответили: (71)
# Ответить
67. AlexO (файл скачал) 21.01.2015 10:27
(61) lustin, или вы очень далеко ушли, или ушли - но не в ту сторону.
Какие XmlForm+XmlFormData diff, LookAndFeel и прочее?
С выгрузкой бы УФ в XML, и в корректном сравнении их между собой бы разобраться...
# Ответить
68. AlexO (файл скачал) 21.01.2015 10:39
(65) ekaruk,
Не могу 3.0 обновить, иначе она перестанет быть бесплатной.
Так у вас платная или бесплатная разработка? Если у вас маркетинговая направленность как у германовского e-конструктора, то значит так.
(61) lustin,
Если в ответном комментарии кто-то захочет что-нибудь сказать про Снегопат
Орефков в очередной раз борется с ветряными мельницами 1С.
Вспомним, какой выхлоп у Снегопата (ну ладно, назовем это - "прорыв", тем более, в сравнении с последующим развитием) был на 8.1. Потом - вышла 8.2, и Снегопат подделывали под кадый даже не релиз - под-подрелиз постоянно перекручиваемой в мясорубке платформы.
Теперь - полный рефакторинг под некий сторонний убер-продукт AngelScript, который также просто является одним из инструментов (одним из многих), которые все наслаиваются и наслаиваются пирамидой на разработку в конфигураторе 1С. И что никак не отменяет переработку Снегопата под новые "убер-релизы" платформы от 1С (как ей самой кажется, и каждый раз вводится "множество изменений", которые потом на деле оказываются либо фикцией, либо повтором самих себя, либо просто "еще нерабочие", но ошибки тянут за собой вполне "рабочие").
А что в итоге? А в итоге - "тут покрасивше, тут ТЧ могу сразу в коде описать, тут подсказка более удобна". И на это затрачено - сколько человеко-лет?
Ответили: (69)
# Ответить
69. ekaruk 21.01.2015 11:08
(68) AlexO,
Так у вас платная или бесплатная разработка? Если у вас маркетинговая направленность как у германовского e-конструктора, то значит так.
Я имела в виду, что технически не могу загрузить на инфостарте обновленный вариант и оставить его свободным для скачивания. Такой режим только у старых файлов остался.
Ответили: (70)
# Ответить
70. AlexO (файл скачал) 21.01.2015 14:19
(69) ekaruk, ну тогда - вы всегда можете выложить его в комментариях ))
# Ответить
71. ksuman 21.01.2015 16:14
(66) AlexO,
Тогда - в сад такие "клиент-серверные" механизмы, которые на деле ими не являются. Только и всего

Я согласен с тем, то это не есть Клиент-серверный механизм, когда интерфейсная часть должна выполняться на клиенте, а обработка данных на сервере. Но 1С - это назвал "Тонкий клиент", позаимствовав это название у Microsoft и Citrix по отношению к RDP и ICA протоколам. Только зачем делать пародии на известные и отлаженные продукты, когда эффективнее, безопаснее и быстрее использовать как раз эти механизмы.
Думаю, господин Нуралиев упивается счас своей крутизной, хотя не понимаю что хорошего в пародии на RDP, когда функционал в итоге из-за этого очень ограниченный.
Ответили: (72)
# Ответить
72. AlexO (файл скачал) 21.01.2015 16:21
(71) ksuman,
Я согласен с тем, то это не есть Клиент-серверный механизм, когда интерфейсная часть должна выполняться на клиенте, а обработка данных на сервере. Но 1С - это назвал "Тонкий клиент"
Поэтому я уверен, что через пару лет не будет никаких УФ и 8.3 в текущем виде, а будет очередная "новаторская" погремушка от 1С.
Например, "трехзвенная архитектура с ультраклиентом".
Ответили: (73)
# Ответить
73. ksuman 22.01.2015 15:43
(72) AlexO,
"трехзвенная архитектура с ультраклиентом"

Срочно запатентуйте это название, иначе именно так и назовут...
А если серьезно, у них уже появилось Ноу-Хау с начала прошлого года: работа в 1С в МоделиСервиса с использованием РазделителейУчета на базе Общих реквизитов. Это что-то вроде как Облако в Информационной базе, для работы разных Юр.лиц. Однако эта хрень тоже не работает корректно. Мне пришлось отключить их использование и закомментить все их использования, потому что система при обновлении ругается что MS SQL 2000 Enterprise - не поддерживает работу с разделителями. Т.е. я вообще полагал что в плане взаимодействия движка 1С и движком базы данных, 1С просто меняет план запроса так, чтобы система фильтровала данные по указанным полям и подготовку этого вела до компиляции. А вот как на самом деле никто не знает, даже 1С-ники, кроме непосредственно разработчиков этого механизма.
Ответили: (75) (76)
# Ответить
74. buzzzard (файл скачал) 27.02.2015 01:36
А где же общие формы?
Ответили: (76)
# Ответить
75. AlexO (файл скачал) 27.02.2015 10:21
(73) ksuman,
потому что система при обновлении ругается что MS SQL 2000 Enterprise - не поддерживает работу с разделителями
А можете скриншот ошибки выложить?
# Ответить
76. ekaruk 27.02.2015 12:44
(73) ksuman,
MS SQL 2000 Enterprise - не поддерживает работу с разделителями.
Вообще-то 2015 год на дворе. Возьмите что-то поновее. Не искала, но вполне возможно, чо где-то в документации по 1С должна быть описана совместимость с версиями MSSQL.

(74) buzzzard, Общие формы не поддерживаются. Пока не нужны были никому. Возможно, позже добавлю.
Ответили: (77)
# Ответить
77. buzzzard (файл скачал) 27.02.2015 17:22
(76) ekaruk, Ясно. Я для себя подправил код в части обработки общих форм. Получилось две небольшие врезки кода в двух модулях. Могу выслать.
Ответили: (78)
# Ответить
78. ekaruk 27.02.2015 20:47
(77) buzzzard, Если не сложно, выложите просто тут приложением к комментарию. Или пришлите на <МойНик>@gmail.com.
Ответили: (79)
# Ответить
79. buzzzard (файл скачал) 27.02.2015 22:21
(78) ekaruk, Врезки кода закомментированы вот так:
// edit ++++

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

ДекомпиляцияУправляемыхФорм_v3.0.1_tune.epf
# Ответить
80. alexandr_astafiev (файл скачал) 18.03.2015 22:32
Добавил колонку в динамический список ОстакиТоваров в обработку ПодборТоваровВДокументПродажи УТ 11.1.7.60 платформа 8.3.5.13 все работает. Спасибо.
# Ответить
81. DC (файл скачал) 26.03.2015 17:06
Здорово... Только не видно реквизитов второго уровня (колонки таблиц значений и пр...). Это не предусмотрено?
Ответили: (82)
# Ответить
82. ekaruk 26.03.2015 22:12
(81) DC, Должны быть видны все реквизиты, которые отображаются на форме.
В том числе дополнительные колонки таблиц.
Вспомогательные, которые на форму не выведены, могут не отображаться.
Ответили: (85)
# Ответить
83. K_A_O (файл скачал) 20.04.2015 16:44
Бывают ситуации, когда нужно не только добавить новые реквизиты (команды, элементы), но и изменить существующие.
Подправил код. Может не помешает, поскольку существующему режиму работы никак не вредит (надеюсь).

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

ДекомпиляцияУправляемыхФорм_v3.0.1_tune2.epf
# Ответить
85. Letos (файл скачал) 30.06.2015 13:02
(82) ekaruk, Пытаюсь понять, на сколько подобная доработка актуальна с учетом появившегося "Расширения"? Кстати. на которую у вас тоже есть что-то подобное. =)
Ответили: (87)
# Ответить
86. alexqc 08.07.2015 17:21
(32) ekaruk, если еще нужно - для определения наличия "глобальных" свойств можно использовать примерно такой финт:
Если Ложь Тогда
ПоложениеСостоянияПросмотра=0
КонецЕсли;

Если ПоложениеСостоянияПросмотра<>Неопределено Тогда
....
...Показать Скрыть


Суть: наличие присваивания (даже в никогда не выполняющемся блоке) объявит такую переменную при ее отсутствии. Это позволит обращаться к ней в коде без возникновения ошибки компиляции.
Переменная будет инициализирована значением Неопределено. А вот если с таким же именем существует глобальное свойство, то оно так и останется неизменным, и естественно не равным Неопределено.
Ответили: (88)
# Ответить
87. ekaruk 08.07.2015 19:43
(85) Letos, На текущий момент доработка программно, конечно, менее актуальна.
Я немного поэкспериметировала с расширениями.
Пока нет однозначного впечатления.
Они дают много возможностей, на зато разрывают конфигурацию на несколько частей, что не очень наглядно.
Кроме того, расширениями можно пользоваться, если это фиксированный набор реквизитов.
Если набор реквизитов зависит от каких-то условиях, то их все равно нужно добавлять программно.
Ответили: (92)
# Ответить
88. ekaruk 08.07.2015 19:45
(86) alexqc, Да, логичный вариант.
Для глобальных удобно.
По старым ошибкам там все-таки не глобальные переменные, а свойства элементов.
Так что такой подход не поможет.
Можно, конечно, описать все возможные варианты всех элементов и проверять каждый раз, есть ли такой элемент. Но это как-то слишком запутанно получается.
Ответили: (89)
# Ответить
89. alexqc 09.07.2015 17:46
(88) ekaruk, Свойства элементов - через точку? Так еще проще, это ж ошибки времени выполнения. Можно завернуть в попытку, либо использовать промежуточное заполнение через Структуру с последующим ЗаполнитьЗначенияСвойств(). Я привел вариант именно обхода ошибки компиляции.

ЗЫ. Сижу на доработанной УПП для Украины, под 8.2, да еще и в режиме совместимости с 13-м релизом (отключать нельзя бо начинают глючить некоторые ТИПОВЫЕ куски), естественно большей частью на неуправляемых формах. И при обновлении конфы поддержки только облизываюсь, глядя на "слоеный пирог" в 8.3. И :) и :( .
# Ответить
90. Shalnov (файл скачал) 25.10.2015 09:42
Немного доработал на "быструю руку" добавление свойства для кнопок "Картинка"
Возможно не лучший вариант..., но мне помогло

В функцию
Функция ПолучитьСвойстваЭлемента(ЭлементОбразец)

В группу:
 ИначеЕсли Тип(ЭлементОбразец) = Тип("КнопкаФормы") Тогда	

добавил:
СтруктураКопируемыхСвойств.Вставить("Картинка",Неопределено);


Добавил код в:

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


и

Функция ПолучитьТекстовоеПредставлениеЗначения(Значение)
	
	//Для текстовых значений добавляем кавычки в вывод
	//для нетекстовых получаем текстовое представление значения свойства
	ПредставлениеЗначения = Неопределено;
	Если Значение = Неопределено Тогда
		ПредставлениеЗначения = "Неопределено";
	ИначеЕсли ТипЗнч(Значение) = Тип("Строка") Тогда
		ПредставлениеЗначения = """"+Значение+"""";
	ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
		ПредставлениеЗначения = Формат(Значение,"ЧН=; ЧГ=0");
	ИначеЕсли ТипЗнч(Значение) = Тип("Шрифт")
		ИЛИ ТипЗнч(Значение) = Тип("Цвет") Тогда
		ПредставлениеЗначения = ПолучитьТекстовоеПредставлениеСложногоТипа(Значение)
	ИначеЕсли ТипЗнч(Значение) = Тип("Картинка") Тогда
		ПредставлениеЗначения=Неопределено;
		Если Значение.Вид = ВидКартинки.ИзБиблиотеки Тогда
			Для Каждого ОбщаяКартинка Из Метаданные.ОбщиеКартинки Цикл
				Если БиблиотекаКартинок[ОбщаяКартинка.Имя] = Значение Тогда 
					ПредставлениеЗначения = "БиблиотекаКартинок."+ОбщаяКартинка.Имя;
				КонецЕсли;
 			КонецЦикла;			
		КонецЕсли;
	Иначе	
		ПредставлениеЗначения = СоответствиеТекстовыхПредставлений.Получить(Значение);
	КонецЕсли; 
	
	Возврат ПредставлениеЗначения;
	
КонецФункции // ПолучитьТекстовоеПредставлениеЗначения()
...Показать Скрыть
Ответили: (91)
# Ответить
91. ekaruk 25.10.2015 11:30
(90) Shalnov, Вполне корректно доработано. Для картинок из библиотеки будет работать правильно.
# Ответить
92. MaxS (файл скачал) 18.12.2015 17:45
(87) ekaruk, что-то расширения не впечатлили.
Например, программный код у меня более года кочует практически без изменений.
Сделал для эксперимента изменения в форме документа в расширении. Загрузил это расширение в предыдущую версию конфигурации. Оно не заработало, т.к. элементы формы в себе содержат кучу ссылок на справочники... а мне не нужна вся форма, мне нужно добавить несколько реквизитов и не трогать типовые. Если в расширении убрать из формы типовые элементы, они пропадают в предприятии. Может быть я что-то не так делаю? ;)

Как вариант развития этой обработки декомпиляции - можно предложить сравнение формы в расширении и основной формы и генерацию кода.
Ответили: (93)
# Ответить
93. ekaruk 20.12.2015 23:27
(92) MaxS, Расширения достаточно новый механизм.
Думаю, со временем основные проблемы порешают.
Ну и вообще чудес не бывает. Если между версиями в типовой изменилась структура реквизитов на форме (передвинулись группировки, какие-то элементы переместились на другие страницы, группы), то платформа не сможет ее однозначно сопоставить. Она конечно попытается в каком-то виде, но при значительных изменениях получится криво.
По факту, сейчас в расширениях достаточно удобно добавлять элементы кодом.
Просто код для добавления пропиывается в модуле формы расширения, не затрагивая основную.
Благодаря этому мы можем более четко указать, что именно хотим изменить.

По сравнению формы с расширением.
Насколько я понимаю, сейчас такой технической возможности нет.
В режиме предприятия у нас нет отдельного расширения. У нас цельная конфигурация с примененным расширением.
Т.е. сравнить их нельзя.
# Ответить
94. Garykom (файл скачал) 08.02.2016 22:02
Обработка "не видит" командные панели (и кнопки на них) ТЧ на вкладках страниц в формах документов.
Это баг или фича? :)
Ответили: (95)
# Ответить
95. ekaruk 09.02.2016 10:18
(94) Garykom, Вроде должна видеть.
Напишите пример (конфигурация, форма, платформа), на которых не видит командную панель.
# Ответить
96. sano (файл скачал) 17.02.2016 11:54
Так и не получилось программно добавить кнопку глобальной параметризуемой команды. Указываю
НовыйЭлемент.ИмяКоманды = "Обработка.ИмяМоейОбработки.Команда.ИмяКомандыОбработки";

на что при создании формы получаю
"Ошибка при установке значения атрибута контекста (ИмяКоманды)
НовыйЭлемент.ИмяКоманды = "Обработка.ИмяМоейОбработки.Команда.ИмяКомандыОбработки";
по причине:
Недопустимое значение"
Если добавить кнопку в режиме конфигуратора, то в свойстве ИмяКоманды указывается "Обработка.ИмяМоейОбработки.Команда.ИмяКомандыОбработки"
а в свойстве Данные - "Объект.Ссылка" (параметр команды)
Далее, смотрим отладчиком свойства Элемента формы, там в обоих свойствах пустые строки.

Кто-нибудь сталкивался с такой проблемой, и есть ли решение?
# Ответить
97. as7815 (файл скачал) 31.03.2016 15:41
Спасибо автору, вышел на новый уровень работы.
# Ответить
98. zekrus (файл скачал) 11.05.2016 08:50
Доброе утро!
Идеи де компиляции давно на рынке (и под 7.7 и под 8.Х):
http://infostart.ru/public/158687/
Все реализации останавливались на интерпретаторе языка.
В этой не достает только добавить пару штрихов.
Если цель скажем обновление релиза, то
по идее надо делать де компиляцию дельты и
ее уже предлагать отдельным куском для переноса.
Если же цели иные то, тоже нужна четкая последовательность..
(скажем вести разработку конфигурации только из внешней конфы).
С уважением
# Ответить
99. movis08 23.06.2016 12:39
Не знал что есть такое
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016