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






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

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

Идея и часть кода взята из этой обработки //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.2024

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

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

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

98 Comments

  1. BigClock

    Для управляемых форм явно не хватает такого инструмента, как V8Reader: http://infostart.ru/public/106310/ Особенно возможности декомпиляции изменений для форм.

    Reply
  2. Yashazz

    Хотите добрый совет? Не пишите сами и не предлагайте другим такие обработки, пока не выйдет 8.3.12 как минимум. Тогда ситуация стабилизируется. нужные поля будут читаться, методы — работать, и вообще можно будет рассчитывать на вменяемый механизм. Сейчас пока и в 8.2, и в 8.3 всё колбасит, малейшее «изменение концепции» может сделать ваши усилия бессмысленными в обе стороны — либо завтра добавят нечто, благодаря чем это всё будет раз плюнуть (как со структурой таблиц базы поступили), либо нечто перестанет работать и плоды трудов останется лишь выкинуть.

    Reply
  3. ekaruk

    (2) Yashazz, Так и сейчас всё работает.

    Методы читаются, события устанавливаются.

    Получается вполне нормальный работающий код.

    Не думаю, что 8.3.12 будет более стабильная, чем текущая. Будут свои проблемы и решения.

    Работать сейчас нужно, а не через пару лет.

    Reply
  4. Asmody

    Предлагаю реализовать супер-вариант: написать шаблон xslt, который по xml из выгрузки конфигурации будет формировать код создания элементов.

    Reply
  5. ekaruk

    (1) BigClock, не хватает. Но для меня это уже слишком универсальный механизм.

    Reply
  6. Yashazz

    (3) Дык оно конечно, просто обидно будет, если что. Я вот пыхтел, делал отбор по значению в колонке динамического списка, а его взяли и добавили на уровне платформы. Может, у вас ПутьКДанным не получился из-за сугубо внутренних траблов платформы, кто знает.

    (4) Ишшо полгода назад думал об этом. Пока влом, но как всерьёз буду переходить на 8.3, так и вполне возможно.

    Reply
  7. saiten

    (6)

    ПутьКДанным не получился из-за сугубо внутренних траблов платформы

    Это не траблы — это концепция. Пути к данным доступны только на сервере, и это, в общемт-то правильно: в 99% процентах случаев тащить их на клиент нафиг не надо. А вот доступ к серверному контексту формы есть только из самой формы, т.к., как я понял, он создаётся непосредственно в момент серверного вызова с клиента и вне этого вызова не существует. Типа стэйтлесс и всё такое… Так что конкретно в этом плане врядли что изменится.

    Reply
  8. ekaruk
    А вот доступ к серверному контексту формы есть только из самой формы, т.к., как я понял, он создаётся непосредственно в момент серверного вызова с клиента и вне этого вызова не существует.

    (7) saiten, я тоже думаю, что не изменится.

    Одна и та же фигня с ПутемКДанным, обработчиками событий и реквизитами. До всего этого можно добраться только изнутри формы.

    Соответственно, генерация кода возможна только после вклинивания в код самой формы.

    В принципе, для данной задачи не критично (не так сложно строку кода вписать в «ПриСозданииНаСервере»), хотя и не очень удобно.

    Reply
  9. vikad

    (9) ksuman, я, конечно, в вопросе так хорошо, как Вы не разбираюсь но здесь http://www.develplatform.com/2013/01/blog-post_31.html в разделе «Немного критики» по-моему, все наоборот написано….

    Reply
  10. saiten

    (9)А современные IDE для .NET framework (managed C#, за остальные языки не поручусь), например, на основе того, что накидано в визуальном редакторе создают программный код, генерирующий форму, и наоборот-по коду формируют представление, которое можно редактировать мышем. Что несравнимо удобнее ресурсных файлов делфи-билдеров. Так что шаг это назад или вперёд — вопрос спорный. (для турбо С, кстати, я визуальных редакторов не помню… была библиотека визуальных компонентов Turbo Vision, но, насколько помню, код там надо было-таки собирать ручками).

    Reply
  11. ksuman

    (11) saiten, «…из Turbo C++…» — я так сказал про Builder.

    «IDE для .NET framework (managed C#» — Да это эволюция, потому как мы все равно работаем и настраиваем формы в Визуальном редакторе, мы сразу видим все что мы меняем и в коде и в конструкторе визуально.

    В 1С нет таких механизмов, чтобы на стадии конструирования компилировать на лету программный код и преобразовывать его визуально. Когда появится, тогда и сама эта тема перестанет быть актуальной. Но с учетом того что при каждом усложнении новых выпусков платформы 1С — глюки, которые сопровождают — растут по экспоненте…

    Так что я даже не знаю, хочу ли я этой инновации в 1С…

    Reply
  12. saiten

    (12)Консенсус? Всё-таки генерация порождающего кода формы — это не деэволюция, а фишка, которая может быть полезной в решении определенных задач. В случае 1С не без костылей, да, но УФ — вообще тот ещё инвалид, костыли уже привычны.

    Reply
  13. ksuman

    (13) saiten, я бы назвал это фишкой или шаблоном, если бы это работало в конфигураторе. А так чисто практического применения не вижу. Проще самому создать ряд шаблонов на каждый вид элемента или копировать уже существующий код его меняя, чем создавать элементы, затем компилировать и запускать приложение, потом по новой менять… А если надо что-то поменять, вставить элемент в форме (не крайним), что Вы будете по новой создавать элементы, смотреть что получится?

    Это к теме не относится, так наболело:

    Честно я вообще не понимаю, зачем отказываться от уже нормальной схемы работы в Приложении, когда у разработчика есть четкий план, когда и куда какой элемент поставить и, в угоду мобильным приложениям и планшетам, нагнуть пользователей ПК и заставить их использовать Тонкий клиент…

    Reply
  14. saiten

    (14)В конфигураторе этого, к сожалению, нет, и, думаю, в рамках 8.3 точно не будет. Ну а по поводу практического применения… Если мы чего-то не видим, то это не значит что этого нет. Например, если надо добавить на типовую форму документа достаточно сложную панель, то удобно её добавить в редакторе форм, но при каждом изменении формы поставщиком конфы придётся иметь геморрой с обновлением. Альтернатива — добавлять элементы программно: меньше проблем с обновлением, но запаришься подгонять, чтобы всё встало куда надо. Компромисс — нарисовать форму в редакторе, сгенерировать код и подставить его в рабочее приложение. По-моему, это очевидно.

    Reply
  15. ekaruk

    (9) ksuman, тут каждый сам решает, как ему проще изменения вносить.

    На моих последних проектах внедрения внесение изменений в формы программно было обязательным требованием к коду.

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

    А вообще УФ офигительно удобная штука.

    Я с них начинала когда-то. Потом полтора года работала с обычными.

    Последние полгода работаю только с управляевыми.

    ИМХО, с обычными гемороя на порядок больше. Привязки, положения элементов вечно куда-то сбиваются.

    С УФ просто нужно один раз понять идеологию, потом работа с ними гораздо проще, чем с обычными.

    Reply
  16. ekaruk

    Добавила обновлённую версию обработки.

    Отличия от прошлой описаны в тексте описания.

    Ну и добавила по ней пару картинок.

    Reply
  17. ekaruk

    (14) ksuman, По новой создавать ничего не нужно.

    Форма один раз копируется, но основной остается типовая.

    В скопированную форму конструктором вносятся элементы нужного размера, с нужными параметра. Настраиваются все свойства.

    По скопированной форме генерируется код и вставляется в переопределяемый общий модуль.

    Типовая форма при этом остается неизменной и полностью на поддержке.

    При необходимости новый изменения вносятся в измененную копию..

    Reply
  18. ksuman

    (16) Бог с Вами, нравится Вам так работать, работайте… Только хотел бы отметить Вашу невнимательность: 1С-команда под давлением разработчиков пошла последним на уступки и чтобы облегчить обновление отредактированных изменений интерфейса и обработчиков модулей объектов, ввела ряд Общих модулей с постфиксом «Переопределяемый». И все стандартные обработчики форм и модулей объектов обращаются вначале к ним. Применительно к Вашей задаче, следовало бы подцепить этот с моей точки полезный механизм при генерации кода как альтернативу…

    Насчет УФ: тут дело не во вкусе и сложности разработки (программист должен любить именно сложные задачи), а в возможностях интерфейса для решения любой задачи. Некоторые задачи в УФ не решить.

    Reply
  19. ekaruk

    (19) ksuman, Вы бы хоть в теме разобрались, прежде, чем писать.

    Модуль «Переопределяемый» из УТ и УП упомянут в статье 3 раза.

    Пример встраивания в конфигурацию тоже приведен для него, а не для модуль объекта («Форма» вместо»ЭтаФорма»).

    Reply
  20. cleaner_it

    (0) Отличная вещь. Я с ее помощью сейчас дорабатываю серьезно дописанную конфигурацию, чтобы обновлять было проще.

    Для команд нужно добавить генерацию кода:

    // ******   Команда формы  — вывод кнопки «ПрисоединенныеФайлы»    ***********
    НовыйЭлемент = Этаформа.Элементы.Вставить(«ПрисоединенныеФайлы»,Тип(«КнопкаФормы»),ЭтаФорма.КоманднаяПанель);
    НовыйЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
    НовыйЭлемент.ИмяКоманды = «ПрисоединенныеФайлы»;
    
    Reply
  21. ekaruk

    (21) cleaner_it, рада, что пригодилось.

    Для кнопок сейчас поддерживаются свойства (Вид, АктивизироватьПоУмолчанию,Видимость, Высота, ВысотаЗаголовка, Доступность, Заголовок, ИмяКоманды, ТолькоВоВсехДействиях, ЦветРамки, ЦветТекста, ЦветФона, Ширина, Шрифт).

    Для команд код тоже генерируются. Поддерживаются свойства: Действие, Заголовок, ИзменяетСохраняемыеДанные, Отображение, Подсказка.

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

    Команды и реквизиты поддерживаются только в версии обработки 3.0. Не знаю, какая у Вас.

    Reply
  22. rasswet

    (22) а нельзя как-то так придумать, чтобы не нужно было делать

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

    для обычных форм все просмотренные мной решения генерят (кто-то лучше, кто-то хуже) без предварительного допиливания исходной формы.

    неудобно как-то сначала в форму вписывать этот код.

    Reply
  23. ekaruk

    (23) rasswet, Можно, так работает обработка в версии 2.0. Формирует код без изменения формы.

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

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

    Reply
  24. ekaruk

    (23) rasswet, если постоянно работаете с одной и той же конфигурацией УТ11 или УП2.0, то достаточно вписать код один раз в общий модуль и об этой проблеме забыть. Он будет вызываться для всех форм.

    В других конфигурациях, к сожалению, такой возможности нет.

    Reply
  25. rasswet

    (25) в какой именно общий модуль? в БП 3.0 он есть?

    Reply
  26. ekaruk

    (26) rasswet, Общий модуль «МодификацияКонфигурацииПереопределяемый»

    В БП, к сожалению, нету.

    Точно есть в УТ11 и УП2.

    По остальным кофигурациям не знаю.

    Подробнее тут http://infostart.ru/public/303645/

    Reply
  27. mihast

    Платформа 1С:Предприятие 8.3 (8.3.4.465)

    Ошибка инициализации модуля: ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта

    по причине:

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(332,69)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    СтруктураКопируемыхСвойств.Вставить(«ПоложениеСостоянияПросмотра»,<<?>>ПоложениеСостоянияПросмотра.Авто);

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(673,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    СоответствиеТекстовыхПредставлений.Вставить(<<?>>ПоложениеСостоянияПросмотра.Авто,»ПоложениеСостоянияПросмотра.Авто»);

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(674,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    СоответствиеТекстовыхПредставлений.Вставить(<<?>>ПоложениеСостоянияПросмотра.Верх,»ПоложениеСостоянияПросмотра.Верх»);

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(675,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    СоответствиеТекстовыхПредставлений.Вставить(<<?>>ПоложениеСостоянияПросмотра.Нет,»ПоложениеСостоянияПросмотра.Нет»);

    ЕЩЕ

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(585)}: Поле объекта не обнаружено (ПолеПериода)

    СоответствиеТекстовыхПредставлений.Вставить(ВидПоляФормы.ПолеПериода,»ВидПоляФормы.ПолеПериода»);

    Reply
  28. mihast

    Не декомпилируются КоманднаяПанель Формы 🙁 Разбор начинается только с Групп…

    Можно добавить ?

    Reply
  29. ekaruk

    (28) mihast, Полноценная 8.3.4.465 или может режим совместимости или еще что-то?

    ПоложениеСостоянияПросмотра это системное перечисление.

    С ним проблем не должно быть.

    У меня нет 8.3.4.465. Не знаю,как проверить, в каком релизе оно появилось.

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

    (29) mihast, В принципе можно. Чуть позже добаклю.

    Reply
  30. ekaruk

    (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

    Или запускайте в актуальном релизе или просто в конфигураторере выкиньте обработку этого свойство. Я подумаю, может как-то обрабатывать програмно разные релизы платформы. Но пока этого нет.

    Reply
  31. ekaruk

    (29) mihast,

    + к (30) Похоже, свойство появилось только в 8.3.5

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

    http://downloads.v8.1c.ru/content//Platform/8_3_5_1068/1cv8upd.htm

    Reply
  32. ekaruk

    (4) Asmody, Про шаблон xslt не знаю. Но вообще мысль разбирать xml-выгрузку конфигурации для анализа форм у меня была. Но мне кажется, выгружать конфигурацию для получения кода формы еще большее извращение, чем вклиниваться в код формы.

    Хотя, может как-нибудь и попробую, если время свободное появится.

    Reply
  33. rusak171

    Большое спасибо за обработку, с плюсиком еще не разобрался

    Reply
  34. roman77

    Отличная обработка.

    Для картинок можно больше свойств генерировать типа:

    НовыйЭлемент.Вид = ВидПоляФормы.ПолеКартинки;
    НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;
    НовыйЭлемент.Высота = 1;
    НовыйЭлемент.Ширина = 2;
    НовыйЭлемент.Рамка.ТипРамки = ТипРамкиЭлементаУправления.БезРамки;
    НовыйЭлемент.КартинкаЗначений = БиблиотекаКартинок.ВыполненоУспешно;
    
    Reply
  35. Alister

    Спасибо за проделанную работу.

    Reply
  36. ezhik_2000

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

    Reply
  37. NOVOPRO

    Добрый день. У меня тоже вылезла следующая абракодабра, помогите устранить этот глюк…..:

    Ошибка инициализации модуля: ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта

    по причине:

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(332,69)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    СтруктураКопируемыхСвойств.Вставить(«ПоложениеСостоянияПросмотра»,<<?>>ПоложениеСостоянияПросмотра.Авто);

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(673,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    >>ПоложениеСостоянияПросмотра.Верх,»ПоложениеСостоянияПросмотра.Верх»);

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(675,46)}: Переменная не определена (ПоложениеСостоянияПросмотра)

    …………

    Reply
  38. ekaruk

    (38) NOVOPRO, ПоложениеСостоянияПросмотра добавлено в 8.3.5.1068.

    У Вас либо релиз платформы старый либо включен режим совместимости.

    Обновите платформу либо возьмите версию обработки для 8.2.

    Reply
  39. dimk@a

    Очень интересная разработка. Спасибо! Беру на вооружение. К счастью, в последний год не доводилось обновлять конфигурации, уже забываю что это за «радость».

    Reply
  40. new_user

    Евгения, спасибо!

    Reply
  41. DAnry

    (2) Yashazz, а если надо сегодня (или вчера)? В таких случаях обработка очень полезна. Автору, спасибо.

    Reply
  42. jobkostya1c8

    Пока открыли на бесплатный доступ из дайджест-рассылки надо скачать. Как говорится в народной шутке «в кулацком хозяйстве все пригодится».

    Reply
  43. mihast

    Жаль, что разбор Командной панели все еще не доделан…

    Может в праздники будет ?

    Reply
  44. AlexO

    (9) ksuman,

    Считаю это решение: Деэволюцией программного обеспечения.

    Дело в том, ч то у нас проблема с 1С.

    Нет качественного и нормального механизма программного создания элементов. Отсюда и костыли.

    К программированию в широком смысле это никакого отношения не имеет.

    Reply
  45. AlexO

    (4) Asmody,

    который по xml из выгрузки конфигурации будет формировать код создания элементов

    Зачем формировать элементы, которые уже «сформировны» в конфигурации? Весь смысл — формировать новые элементы на формах.

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

    Reply
  46. ekaruk

    (46) AlexO, На самом деле идея очень красивая. То же самое, что с этой обработкой, но анализируем выгрузку конфигурации, а не саму ИБ. Из плюсов, можно четко увидеть абсолютно все имеющиеся у элементов свойства. Сейчас при ходится анализировать «если поле ввода, то такие-то элементы, если картинка, то такие-то». Причем каждое значение сравниваем со значанием по умолчанию. Формируем код только если значение установили. Все равно часть пропускаем. Через XML никаких циклов не нужно, просто берем все имеющиеся свойства.

    Хотя основное применение не это.

    Лично я сейчас все версии рабочей конфигурации храню в Гит. Сравнение форм в xml даже при небольшом количестве отличий неинформативно. Сдвигаются индексы и появляется куча отличий, которых реально нет. Идеально было бы сравнение текстов аналогично сравнению обычных форм через v8reader. Как эту задачу выполнил бы xslt-шаблон. Сейчас нормального способо сранения управляемых форм лично я не знаю. Собственно, то же самое и для табличных документов в xml. Реально для сравнения выгрузка из 8.2 в .mxl и .form была удобнее.

    (44) mihast, Пока не добралась 🙁

    Reply
  47. AlexO

    (7) saiten,

    Пути к данным доступны только на сервере, и это, в общемт-то правильно

    Если концепция клиент-сервер реализована через одно место, а не как правильно — то это проблема реализации, а не программистов. А через вот такие «это правильно» — это становится проблемой программистов.

    Что тут «правильного», если форма (которая у 1С однозначно превратилась в «клиент») должна отображать данные-с-сервера (в которые однозначно превратилась БД), а данные в базе — должны меняться по результатам действий на форме? Как принудительное искуственное максимальное разделение клиента и сервера на малосвязанные части вписывается в саму концепцию взаимодействия клиент-серверной архитектуры?

    Клиент-серверная архитектура — это разделение на клиента и сервер (как среды исполнения, видимости, взаимодействия), а не конкретно на форму и БД, а там «как получится».

    Вот над чем нужно было работать в 1С, а не над «особым пониманием» клиент-серверного механизма.

    Особых пониманий может быть сколько угодно, а все рабочие решения в области клиент-серверных архитектур уже найдены и реализованы.

    Reply
  48. AlexO

    (47)

    Сдвигаются индексы и появляется куча отличий

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

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

    Их не было официальных и для ОФ. И не будет. Думаю, 1С раньше перейдет на ООП, чем сделает корректный независимый механизм сравнения своих внутренних объектов.

    Считаю, вот это основная причина отсутствия корректных и рабочих механизмов работы с объектами «вне» визуальной среды конфигуратора: этих «объектов» на самом деле и нет, вот и нет ни механизмов сравнения, ни полноценных механизмов создания.

    Концепции и «направления» — да, есть. Но концепции — это ничто без развития, а направления, ведущие в никуда — бесполезны.

    Reply
  49. AlexO

    (47)

    На самом деле идея очень красивая.

    А вот это — и следствие, и причина недоработанности многих механизмов 1С.

    Следствие — потому что «красивость»-то доработана, а смысла или работоспособности — минимальное содержание.

    Причина — «ну, красиво же, зачем тут еще что-то дорабатывать».

    Да пусть все будет «некрасиво», но рабоспособно, или, хотя бы, 1С постоянно бы работала и совершенствовала бы свои внутренние механизмы в сторону функциональности, а не только «красивости».

    А так — «ну, идея красивая, что вам еще надо?!» (

    Reply
  50. AlexO

    (15) saiten,

    Компромисс — нарисовать форму в редакторе, сгенерировать код и подставить его в рабочее приложение. По-моему, это очевидно.

    По-моему, это не «компромисс», а единственно рабочий метод программного создания форм как на ОФ, так и — тем более, с сомнительными неуправляемыми автопривязками, — на УФ.

    (14) ksuman,

    Честно я вообще не понимаю, зачем отказываться от уже нормальной схемы

    Видимо, 1С просто не справилась с нормальной автопривязкой в ОФ (с обратной связью, с нормальным отображением — все помнят перечеркнутый красным крестом прямоугольник, когда привязка «неправильна», или отсутствие реакции элемента на изменение формы, хотя вроде все привязки сделаны). И решило «пойти другим путем» — на авось, вдруг «прокатит».

    Путь неуправлемых автопривязок УФ, может, и другой, но проблемы те же.

    И неумение их решить — все также на первом плане.

    Reply
  51. AlexO

    (16)

    С УФ просто нужно один раз понять идеологию, потом работа с ними гораздо проще, чем с обычными.

    Не согласен.

    Это разработчик должен обтесать и вырубить форму для своих замыслов, а не форма — обтесать и вырубить замысел разработчика.

    Т.к. в последнем случае все сводится к единственному случаю: 1с предусмотрела эту возможность — замысел «обтесался» и «подстроился» под форму. Нет — все замыслы перечеркиваются единственным ответом «извините, вам это не нужно». Кому это не нужно? 1С? Управляемой форме, что она не может предоставить нужный функционал?

    Мне, как разработчику, и заказчику, точно и однозначно нужно. А однозначно не нужен — вот такой подобный подход к разработке среды программирования.

    Reply
  52. artbear

    (47) >>Идеально было бы сравнение текстов аналогично сравнению обычных форм через v8reader

    Поясни свою идею. Непонятно, но интересно.

    или в Skype

    ЗЫ Как ты знаешь, мы также активно юзаем Гит.

    Reply
  53. AlexO

    (53) artbear,

    Как ты знаешь, мы также активно юзаем Гит.

    А мы не юзаем Гит. Мы пишем код в 1С ))

    Reply
  54. saiten

    (48)Хм… Много букв, но смысла в них я не увидел… Наверное, плохо смотрел. Что вас конкретно не устраивает? То что путей к данным нет на клиенте? Наполнение формы данными производится на сервере, после чего форма отправляется клиенту уже заполненная. Зачем на клиенте пути к данным?

    (51)

    По-моему, это не «компромисс», а единственно рабочий метод программного создания форм как на ОФ, так и — тем более, с сомнительными неуправляемыми автопривязками, — на УФ.

    Это ведь шутка, да? Или вы действительно делаете только так?

    Reply
  55. AlexO

    (55) saiten,

    То что путей к данным нет на клиенте?

    Меня не устраивает, что нужно писать то, что и так разруливается платформой («инструкция не поддерживается на сервере/клиенте!»).

    Поэтому и нет никакого смысла во всех этих «на сервере…на клиенте….» — ты в любом случае пишешь там только то, что позволено: вызовы и обращения к базе.

    Так пусть платформа и распределяет сама эти вызовы, буде где их встретит — в форме, в общем модуле, и т.д. А не так, как сейчас реализовано в УФ — с профанацией и дискредитацией клиент-серверной архитектуры.

    Наполнение формы данными производится на сервере

    Да кто вам сказал?! И какая разница — где? Нужно на сервере — пусть наполняется на сервере. Нужно на клиенте — пусть на клиенте. Тогда уж либо платформа сама все разруливает, и не путает программиста «инструкция только на сервере!», либо программист ставит — где считает нужным, — работу на сервере или клиенте. Что и было частично сделано в 8.1. Частично — потому что #ЕслиКлиент или #ЕслиСервер всегда отслеживала, откуда вход (с клиента или сервера), но не всегда отрабатывала код внутри вызова только на клиенте, или только на сервере. Но чья это недоработка — разве программиста?

    Нет, вместо улучшения и развития нормальной системы клиент-сервер, сделали подделку и назвали «УФ».

    Reply
  56. AlexO

    (55) saiten,

    после чего форма отправляется клиенту уже заполненная

    Да пусть хоть 200 тысяч раз отправляет заполненную форму, и 200 тысяч раз — обращается к серверу. Должен быть разумный механизм передачи данных без костылей вида «ЗначениеВРеквизитФормы» и «ПоместитьВоВременноеХранилище» и т.д. Эти костыли и делают то же самое — соединяют клиента и сервер, ну так пусть это и делает платформа — получаешь ТЧ, она инкапсулирует в свои внутренние «ЗначениеВРеквизитФормы», и получает данные обратно. А программист видит только присвоение через «=». Или пусть выход на API дают, разберем форму и все вызовы на составляющие, и тогда сами будем писать вызовы и передачи — каждый свою функцию «ЗначениеВРеквизитФормы». А сейчас это профанация, и не более того.

    Зачем на клиенте пути к данным?

    Затем, что клиент-серверная архитектура подразумевает взаимодействие (тесное и интенсивное) клиента и сервера, и тут надо делать оптимизацию вызовов, а не отмазываться костылем «ЗначениеВРеквизитФормы».

    Т.е. в результате ТЧ получить на форме нельзя без условного «ЗначениеВРеквизитФормы», но платформа и сама «прекрасно» все видит, и сообщит об этом, что нельзя. Переменные сервера и формы не видны друг у друга, но ПоместитьВоВременноеХранилище — та же переменная, которая видна и там, там, существуя «одновременно» везде.

    Т.е. имеем чушь и шизофрению вместо четкого понимания и написания кода.

    Reply
  57. AlexO

    (55) saiten,

    Или вы действительно делаете только так?

    А вы сразу программно создаете, даже не видя, что в результате получится? Куда элемент «съедет», и вообще, какой вид формы получится в итоге? По сути, здесь идет с конца — с результата: хотим получить вот это, и подгоняем программное создание под конечный результат.

    Расскажите еще, что заранее знаете все, все просчитали (тем более — в 1С), и в просмотре конечного результата не нуждаетесь.

    Reply
  58. ksuman

    (57) AlexO,

    Должен быть разумный механизм передачи данных без костылей вида «ЗначениеВРеквизитФормы»

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

    Как я понимаю, эта процедура вызывает поток или или обращается к существующему потоку обработки очередей запросов на присвоение значений реквизитам формы. Это было бы разумно… Хотелось бы верить, что именно из-за этого мы и страдаем…

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

    Reply
  59. ksuman

    Хотелось бы резюмировать чтобы больше сюда не возвращаться.

    Конечной целью любой ERP-системы является удовлетворение запросов, или если хотите: прихотей и желаний конечного пользователя. Целью же 1С, по всей видимости является упрощение и стандартизирование программной разработки, чтобы привлекать новых разработчиков ИБ под их продукты. А на удобство работы, функционал, скорость обработки информации, скорость и надежность отклика интерфейса — им наплевать. Пока эта схема работает, но терпение пользователей 1С — не безгранично. Если политика 1С — не изменится, то скоро по частям коммерческих и других продуктов, компании будут переходить на другие системы или будут разрабатывать на старой, уже отлаженной версии 8.2.

    Reply
  60. lustin
    Reply
  61. saiten

    (61)

    из Конфигуратора можно вызвать c помощью epfLoader’а от Snegopata

    Мэйби… Я нищеброд и снегопата не имею, так что вообще не представляю о чём речь.

    Reply
  62. yura1960

    ekaruk — нужную вещь всегда можно определить по количеству комментариев. Судя по всему Вы таковую написали, т.к. количество комментов зашкаливает. Скачал и сразу скажу — спасибо!

    Reply
  63. AlexanderKai

    Использую вариант обработки «Декомпиляция управляемых форм 3.0 (с 8.3.5)».

    Заканчивается ошибкой:

    {Документ.СписаниеСРасчетногоСчета.Форма.ФормаДокумента.Форма(9)}: Ошибка при вызове метода контекста (Создать)

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

    по причине:

    Ошибка подключения внешних метаданных

    по причине:

    Каталог не обнаружен ‘C:Usersuser1DesktopПолезноеДекомпиляцияУправляемыхФорм_v3­.0.epf’

    То есть обработка пытается запуститься с клиентского компьютера, в то время как находится на сервере.

    Reply
  64. ekaruk

    (64) AlexanderKai, Да, действительно.

    В клиент-серверном варианте не вызывается.

    Спасибо. Раньше работало. Поломалось после какой-то из доработок.

    Исправила в 3.0.1.

    Не могу 3.0 обновить, иначе ее статус автоматически изменится на «абонемент» и невозможно будет скачать бесплатно.

    Reply
  65. AlexO

    (59) ksuman,

    но как мы знаем, существует не одна форма, а две, причем последняя (клиент) — может быть черт знает где и доступна ли в данный момент — неизвестна.

    Тогда — в сад такие «клиент-серверные» механизмы, которые на деле ими не являются. Только и всего.

    Как я понимаю, эта процедура вызывает поток или или обращается к существующему потоку обработки очередей запросов

    Мы понятия не имеем, что там себе нареализовывала 1С. Поэтому — так это, не так это — нам неизвестно. А известен — конечный результат, который озвучен в 48-58.

    Reply
  66. AlexO

    (61) lustin, или вы очень далеко ушли, или ушли — но не в ту сторону.

    Какие XmlForm+XmlFormData diff, LookAndFeel и прочее?

    С выгрузкой бы УФ в XML, и в корректном сравнении их между собой бы разобраться…

    Reply
  67. AlexO

    (65)

    Не могу 3.0 обновить, иначе она перестанет быть бесплатной.

    Так у вас платная или бесплатная разработка? Если у вас маркетинговая направленность как у германовского e-конструктора, то значит так.

    (61) lustin,

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

    Орефков в очередной раз борется с ветряными мельницами 1С.

    Вспомним, какой выхлоп у Снегопата (ну ладно, назовем это — «прорыв», тем более, в сравнении с последующим развитием) был на 8.1. Потом — вышла 8.2, и Снегопат подделывали под кадый даже не релиз — под-подрелиз постоянно перекручиваемой в мясорубке платформы.

    Теперь — полный рефакторинг под некий сторонний убер-продукт AngelScript, который также просто является одним из инструментов (одним из многих), которые все наслаиваются и наслаиваются пирамидой на разработку в конфигураторе 1С. И что никак не отменяет переработку Снегопата под новые «убер-релизы» платформы от 1С (как ей самой кажется, и каждый раз вводится «множество изменений», которые потом на деле оказываются либо фикцией, либо повтором самих себя, либо просто «еще нерабочие», но ошибки тянут за собой вполне «рабочие»).

    А что в итоге? А в итоге — «тут покрасивше, тут ТЧ могу сразу в коде описать, тут подсказка более удобна». И на это затрачено — сколько человеко-лет?

    Reply
  68. ekaruk

    (68) AlexO,

    Так у вас платная или бесплатная разработка? Если у вас маркетинговая направленность как у германовского e-конструктора, то значит так.

    Я имела в виду, что технически не могу загрузить на инфостарте обновленный вариант и оставить его свободным для скачивания. Такой режим только у старых файлов остался.

    Reply
  69. AlexO

    (69) ну тогда — вы всегда можете выложить его в комментариях ))

    Reply
  70. ksuman

    (66) AlexO,

    Тогда — в сад такие «клиент-серверные» механизмы, которые на деле ими не являются. Только и всего

    Я согласен с тем, то это не есть Клиент-серверный механизм, когда интерфейсная часть должна выполняться на клиенте, а обработка данных на сервере. Но 1С — это назвал «Тонкий клиент», позаимствовав это название у Microsoft и Citrix по отношению к RDP и ICA протоколам. Только зачем делать пародии на известные и отлаженные продукты, когда эффективнее, безопаснее и быстрее использовать как раз эти механизмы.

    Думаю, господин Нуралиев упивается счас своей крутизной, хотя не понимаю что хорошего в пародии на RDP, когда функционал в итоге из-за этого очень ограниченный.

    Reply
  71. AlexO

    (71) ksuman,

    Я согласен с тем, то это не есть Клиент-серверный механизм, когда интерфейсная часть должна выполняться на клиенте, а обработка данных на сервере. Но 1С — это назвал «Тонкий клиент»

    Поэтому я уверен, что через пару лет не будет никаких УФ и 8.3 в текущем виде, а будет очередная «новаторская» погремушка от 1С.

    Например, «трехзвенная архитектура с ультраклиентом».

    Reply
  72. ksuman

    (72) AlexO,

    «трехзвенная архитектура с ультраклиентом»

    Срочно запатентуйте это название, иначе именно так и назовут…

    А если серьезно, у них уже появилось Ноу-Хау с начала прошлого года: работа в 1С в МоделиСервиса с использованием РазделителейУчета на базе Общих реквизитов. Это что-то вроде как Облако в Информационной базе, для работы разных Юр.лиц. Однако эта хрень тоже не работает корректно. Мне пришлось отключить их использование и закомментить все их использования, потому что система при обновлении ругается что MS SQL 2000 Enterprise — не поддерживает работу с разделителями. Т.е. я вообще полагал что в плане взаимодействия движка 1С и движком базы данных, 1С просто меняет план запроса так, чтобы система фильтровала данные по указанным полям и подготовку этого вела до компиляции. А вот как на самом деле никто не знает, даже 1С-ники, кроме непосредственно разработчиков этого механизма.

    Reply
  73. buzzzard

    А где же общие формы?

    Reply
  74. AlexO

    (73) ksuman,

    потому что система при обновлении ругается что MS SQL 2000 Enterprise — не поддерживает работу с разделителями

    А можете скриншот ошибки выложить?

    Reply
  75. ekaruk

    (73) ksuman,

    MS SQL 2000 Enterprise — не поддерживает работу с разделителями.

    Вообще-то 2015 год на дворе. Возьмите что-то поновее. Не искала, но вполне возможно, чо где-то в документации по 1С должна быть описана совместимость с версиями MSSQL.

    (74) buzzzard, Общие формы не поддерживаются. Пока не нужны были никому. Возможно, позже добавлю.

    Reply
  76. buzzzard

    (76) Ясно. Я для себя подправил код в части обработки общих форм. Получилось две небольшие врезки кода в двух модулях. Могу выслать.

    Reply
  77. ekaruk

    (77) buzzzard, Если не сложно, выложите просто тут приложением к комментарию. Или пришлите на <МойНик>@gmail.com.

    Reply
  78. buzzzard

    (78) Врезки кода закомментированы вот так:

    // edit ++++

    Reply
  79. alexandr_astafiev

    Добавил колонку в динамический список ОстакиТоваров в обработку ПодборТоваровВДокументПродажи УТ 11.1.7.60 платформа 8.3.5.13 все работает. Спасибо.

    Reply
  80. DC

    Здорово… Только не видно реквизитов второго уровня (колонки таблиц значений и пр…). Это не предусмотрено?

    Reply
  81. ekaruk

    (81) DC, Должны быть видны все реквизиты, которые отображаются на форме.

    В том числе дополнительные колонки таблиц.

    Вспомогательные, которые на форму не выведены, могут не отображаться.

    Reply
  82. K_A_O

    Бывают ситуации, когда нужно не только добавить новые реквизиты (команды, элементы), но и изменить существующие.

    Подправил код. Может не помешает, поскольку существующему режиму работы никак не вредит (надеюсь).

    Reply
  83. Letos

    (82) Пытаюсь понять, на сколько подобная доработка актуальна с учетом появившегося «Расширения»? Кстати. на которую у вас тоже есть что-то подобное. =)

    Reply
  84. alexqc

    (32) если еще нужно — для определения наличия «глобальных» свойств можно использовать примерно такой финт:

    Если Ложь Тогда
    ПоложениеСостоянияПросмотра=0
    КонецЕсли;
    
    Если ПоложениеСостоянияПросмотра<>Неопределено Тогда
    ….
    

    Суть: наличие присваивания (даже в никогда не выполняющемся блоке) объявит такую переменную при ее отсутствии. Это позволит обращаться к ней в коде без возникновения ошибки компиляции.

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

    Reply
  85. ekaruk

    (85) Letos, На текущий момент доработка программно, конечно, менее актуальна.

    Я немного поэкспериметировала с расширениями.

    Пока нет однозначного впечатления.

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

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

    Если набор реквизитов зависит от каких-то условиях, то их все равно нужно добавлять программно.

    Reply
  86. ekaruk

    (86) alexqc, Да, логичный вариант.

    Для глобальных удобно.

    По старым ошибкам там все-таки не глобальные переменные, а свойства элементов.

    Так что такой подход не поможет.

    Можно, конечно, описать все возможные варианты всех элементов и проверять каждый раз, есть ли такой элемент. Но это как-то слишком запутанно получается.

    Reply
  87. alexqc

    (88) Свойства элементов — через точку? Так еще проще, это ж ошибки времени выполнения. Можно завернуть в попытку, либо использовать промежуточное заполнение через Структуру с последующим ЗаполнитьЗначенияСвойств(). Я привел вариант именно обхода ошибки компиляции.

    ЗЫ. Сижу на доработанной УПП для Украины, под 8.2, да еще и в режиме совместимости с 13-м релизом (отключать нельзя бо начинают глючить некоторые ТИПОВЫЕ куски), естественно большей частью на неуправляемых формах. И при обновлении конфы поддержки только облизываюсь, глядя на «слоеный пирог» в 8.3. И 🙂 и 🙁 .

    Reply
  88. Shalnov

    Немного доработал на «быструю руку» добавление свойства для кнопок «Картинка»

    Возможно не лучший вариант…, но мне помогло

    В функцию

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

    В группу:

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

    добавил:

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

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

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

    Показать

    и

    Функция ПолучитьТекстовоеПредставлениеЗначения(Значение)
    
    //Для текстовых значений добавляем кавычки в вывод
    //для нетекстовых получаем текстовое представление значения свойства
    ПредставлениеЗначения = Неопределено;
    Если Значение = Неопределено Тогда
    ПредставлениеЗначения = «Неопределено»;
    ИначеЕсли ТипЗнч(Значение) = Тип(«Строка») Тогда
    ПредставлениеЗначения = «»»»+Значение+»»»»;
    ИначеЕсли ТипЗнч(Значение) = Тип(«Число») Тогда
    ПредставлениеЗначения = Формат(Значение,»ЧН=; ЧГ=0″);
    ИначеЕсли ТипЗнч(Значение) = Тип(«Шрифт»)
    ИЛИ ТипЗнч(Значение) = Тип(«Цвет») Тогда
    ПредставлениеЗначения = ПолучитьТекстовоеПредставлениеСложногоТипа(Значение)
    ИначеЕсли ТипЗнч(Значение) = Тип(«Картинка») Тогда
    ПредставлениеЗначения=Неопределено;
    Если Значение.Вид = ВидКартинки.ИзБиблиотеки Тогда
    Для Каждого ОбщаяКартинка Из Метаданные.ОбщиеКартинки Цикл
    Если БиблиотекаКартинок[ОбщаяКартинка.Имя] = Значение Тогда
    ПредставлениеЗначения = «БиблиотекаКартинок.»+ОбщаяКартинка.Имя;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    Иначе
    ПредставлениеЗначения = СоответствиеТекстовыхПредставлений.Получить(Значение);
    КонецЕсли;
    
    Возврат ПредставлениеЗначения;
    
    КонецФункции // ПолучитьТекстовоеПредставлениеЗначения()

    Показать

    Reply
  89. ekaruk

    (90) Shalnov, Вполне корректно доработано. Для картинок из библиотеки будет работать правильно.

    Reply
  90. MaxS

    (87) что-то расширения не впечатлили.

    Например, программный код у меня более года кочует практически без изменений.

    Сделал для эксперимента изменения в форме документа в расширении. Загрузил это расширение в предыдущую версию конфигурации. Оно не заработало, т.к. элементы формы в себе содержат кучу ссылок на справочники… а мне не нужна вся форма, мне нужно добавить несколько реквизитов и не трогать типовые. Если в расширении убрать из формы типовые элементы, они пропадают в предприятии. Может быть я что-то не так делаю? 😉

    Как вариант развития этой обработки декомпиляции — можно предложить сравнение формы в расширении и основной формы и генерацию кода.

    Reply
  91. ekaruk

    (92) MaxS, Расширения достаточно новый механизм.

    Думаю, со временем основные проблемы порешают.

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

    По факту, сейчас в расширениях достаточно удобно добавлять элементы кодом.

    Просто код для добавления пропиывается в модуле формы расширения, не затрагивая основную.

    Благодаря этому мы можем более четко указать, что именно хотим изменить.

    По сравнению формы с расширением.

    Насколько я понимаю, сейчас такой технической возможности нет.

    В режиме предприятия у нас нет отдельного расширения. У нас цельная конфигурация с примененным расширением.

    Т.е. сравнить их нельзя.

    Reply
  92. Garykom

    Обработка «не видит» командные панели (и кнопки на них) ТЧ на вкладках страниц в формах документов.

    Это баг или фича? 🙂

    Reply
  93. ekaruk

    (94) Garykom, Вроде должна видеть.

    Напишите пример (конфигурация, форма, платформа), на которых не видит командную панель.

    Reply
  94. sano

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

    НовыйЭлемент.ИмяКоманды = «Обработка.ИмяМоейОбработки.Команда.ИмяКомандыОбработки»;

    на что при создании формы получаю

    «Ошибка при установке значения атрибута контекста (ИмяКоманды)

    НовыйЭлемент.ИмяКоманды = «Обработка.ИмяМоейОбработки.Команда.ИмяКомандыОбработки»;

    по причине:

    Недопустимое значение»

    Если добавить кнопку в режиме конфигуратора, то в свойстве ИмяКоманды указывается «Обработка.ИмяМоейОбработки.Команда.ИмяКомандыОбработки»

    а в свойстве Данные — «Объект.Ссылка» (параметр команды)

    Далее, смотрим отладчиком свойства Элемента формы, там в обоих свойствах пустые строки.

    Кто-нибудь сталкивался с такой проблемой, и есть ли решение?

    Reply
  95. as7815

    Спасибо автору, вышел на новый уровень работы.

    Reply
  96. zekrus

    Доброе утро!

    Идеи де компиляции давно на рынке (и под 7.7 и под 8.Х):

    http://infostart.ru/public/158687/

    Все реализации останавливались на интерпретаторе языка.

    В этой не достает только добавить пару штрихов.

    Если цель скажем обновление релиза, то

    по идее надо делать де компиляцию дельты и

    ее уже предлагать отдельным куском для переноса.

    Если же цели иные то, тоже нужна четкая последовательность..

    (скажем вести разработку конфигурации только из внешней конфы).

    С уважением

    Reply
  97. pt_olga

    {ВнешняяОбработка.ДекомпиляцияУправляемыхФорм3.МодульОбъекта(81)}: Ошибка при вызове метода контекста (Вставить)

    СтруктураПутейКРеквизитам.Вставить(ПутьБезТочек);

    по причине:

    Задано неправильное имя атрибута структуры

    🙁

    форма элемента Контрагентов в УНФ 1.6.9.43 на платформе 8.3.9.2033

    Reply
  98. FesenkoA

    (2) Привет, предки, пишу вам из 2018! 8.3.12 вышла. Нужные поля не читаются, методы — не работают, и вообще можно не рассчитывать на вменяемый механизм, но есть мобильный клиент!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *