(47) AlexO, А как же тогда реализован вывод реквизитов свойств объектов на формы? В типовых конфигурациях в управляемых формах? Прежде чем говорить посмотрите сначала УТ 11 например, в справочник номенклатур добавьте пару свойств.... и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались.... а потом еще будут прибегать когда вы будете обновления накатывать.
в справочник номенклатур добавьте пару свойств.... и о чудо дядьки из 1с прибегут и добавят вам эти реквизиты к объекту, чтоб они динамически сформировались....
ну и где же динамически добавленные "реквизиты"? уж не хранятся ли они в строго ограниченных регистрах свойств объектов?
вы или ваши дядьки из 1с сделате так, чтобы "программно созданный" реквизит хранил данные, а не просто использовался для подстановки предопределенных значений??
ведь нормальный кодер должен знать это "на кончиках пальцев"
ждем статью, где все, что надо будет знать программисту "на кончиках пальцев", будет описано и выложено в коде, набранном именно таким же методом - без справки по памяти ))
Какие еще кончики пальцев? Тупо кодить массу текста, когда можно автоматизировать?
Я использую аналоги этой разработки - мои кончики пальцев и так не знают отдыха, многое умеют, а потому жирный плюс.
(11)Мне кажется в описании все написано. Ну а если другими словами, то обработка, чтобы добавленные программистом реквизиты, колонки, кнопки в типовых конфигурациях выводить программно, дабы при обновлении все это не затерлось, да и просто чтобы процесс обновления был быстрее и менее сложен.
Да? Есть одна формочка стандартная суперпеределанная.... Надо проверить... Но суть не в этом) Идея (в моем случае) понравилась.
А привязки по форме в обычной форме тоже программно описывает?:)
Не работает) Минус) В единственной сложной форме и то не пригодился))
1Ска виснет, нагрузка на комп возрастает до максимума, через продолжительное время вылетает.
Проблема в 573 строчке (Цикл) - то есть "зацикливание".
Бухгалтерия 2.0.29 СписниеСРасчетногоСчета.ФормаДокумента В СтрИсточник строка дерева =) Они там меняются эти деревья) Значения вроде адекватные, а что так долго - я не знаю. но в замере производительности оно зацикливается.
Форма Переделана в плане того что добавлена панелька с добавочной страницей, на эту панельку перенесена основная панелька, та самая с кучей страниц. Ну и пара полей добавлено )) Ну как то так)))
слушай, Истур, а это ведь ты натолкнул меня на мысль со своей идеей дискретно декомпилировать.. хотя и так вроде было на поверхности, а вот поди ж ты... ))
надоть тебе плюсик за это поставить...
Так проблема из (18) поправлена?
если можно, пришли исправленный вариант по личке... а то тут с этими ограничениями замучаешься качать...
все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
а программно создавать - в любом случае никакие обработки не помогут.
Вообще, создание программно чего-либо и 1с - вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало....
(19) AlexO,
Идея программно добавлять нестандартные элементы намного проще чем постоянно отслеживать изменения в элементах формы. Что я и взял на вооружение. Правда перерисовывать то что у нас с этой формой - не представляю даже себе КАК))) Вернее... лениво даже представлять)
На счет паровозом к основной - Если документ не ахти какой, очень редко обновляется - то да, в какой то степени возможно. Дело в том что в этом случае сложно отслеживать изменения и гораздо чаще будут вылетать ошибки после обновления.
Самым правильным будет просто переносить свои кнопочки, поля и т.д. Ну и что, что это может занять продолжительное время - зато практически не возникают ошибок)
Вообще, создание программно чего-либо и 1с - вещи несовместимые и чреваты ошибками и лажей.
Ну не предполагало 1с так делать, не предполагало....
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.
а программно создавать - в любом случае никакие обработки не помогут.
Ну во-первых цель обработки не сделать вместо программиста, а облегчить, точнее ускорить добавление. Нужно понимание как программно выводить, тогда поможет.
все делается намного проще.
копируется форма и меняется все что нужно, подключается паровозом к оснвоной.
Проще? Неожиданно) Это по сути значит, что форма будет отключена от обновлений, то есть само действие не имеет никакого смысла. Это тоже самое, что при обновлении у формы снимать флажок обновления. И рано или поздно возникнут проблемы, потому что что-либо добавлять нужно обычно в часто используемых объектах метаданных, обновления для которых приходят если не каждый релиз, то через релиз.
(22) собственно, в (25) вам ответили. Там как один из вариантов подключения допформы.
Основная форма остается для обновлений, где-то (можно перед открытием основной формы - при обновлении обновлять спокойно с закрытыми глазами, только потом вставить строчку обратно переключения-ответвления на допформу) вставляется переключатель, допформа один-в-один с основной+изменения, какие надо было внести.
Пользователь открывает как обычно, получает "родную" по внешнему виду форму с доработкой, старая остается нетронутой и лежит, ждет последующих обновлений.
Допформу, кстати, не обязательно пихать в документ, а оставить отдельной обработкой в конфе (и затираться она не будет), а подключать её именно как форму, с сохранением всех остальных событий и процедур родного документа.
(25) такое может потребоваться как раз там, где нужно и обновления ставить "неглядя", и все-таки внести изменения в "типовую" форму. Т.е. совместить несовместимое.
Что и удается.
(22) а все программно выводимые реквизиты... механизм отслеживания изменений - отсутствует (кроме визуального восприятия), механизм проверки и контроля создаваемых программно элементов - отсутствует, набор инструментов для создания таких якобы "программных" элементов (на самом деле - это создание куцых "вроде поля"-элементов, как и все полууправляемые или совсем неуправляемые ЭУ в 1С) - отсутствует.
В конце концов, будет куча кода, который рухнет под собственной тяжестью.
"сдал проект".. Сдать - полдела, еще и сопровождать это надо. А от этого, я так понимаю, вы самоустранились.
Прекрасно понимая, что снова разгребать кучу кода от "программно создаваемых элементов" - занятие не для слабонервных.
(26)
Ну видимо как-то так, да - "совместить несовместимое". И склоняюсь к тому что эту стратегию можно рекомендовать для применения как раз в таком случае - "впихнуть невпихуемое", а в случае когда есть возможность создать доп. формы (обработки с дин. списками и etc.) все же следует создавать объекты, используя префиксы, общие модули и т.п.
---
Мнение мое и не обязательно правильное.
(26) Идея: для обновлений оставить Основную форму (без визуальных изменений) а добавленные реквизиты хранить на форме _дополнительные - и добавлять при открытии обходом всех элементов этой формы.
:удобно тем что видно на глаз новые реквизиты и легко изменить их положение.
хотя у меня есть идея, где все это "программное" чудо пригодится... как раз для "чистого" творчества нужно...
только боюсь, даже в условиях ограниченных требованиях, которые я предъявлю, программное формирование элементов от 1С не выйдет из своих жестких рамок..
А декомпилировать всю форму со всеми элементами из=за обновлений, чтобы добавить один-два новых элементов на форму..
А почему никто не попробовал сделать как предложено в (30) - добавлять только нужные, и привязками/размещением играть?
хотя сами элементы могут сместится на новой форме.... а это уже никак не отследишь программно - или писать целый механизм сравнений и корректировок..
короче, я вам способ подсказал, но можете все делать программно ))
а я попробую в том механизме, где это действительно нужно и очень важно...
Вот все-таки, для чего это может пригодиться? Неужели нельзя обойтись без генерации кучи кода? Что касается форм объектов - ну это понятно - создаются создаются доп. формы журналов (списков) в них отлавливается "ПриВыборе" и открывается "своя" форма объекта. Какая ситуация может потребовать использования такого подхода при доработке типовой конфигурации с возможностью сохранения обновлений?
По-моему, предложенный автором метод - прекрасный вариант компромисса для вечно загруженного 1С-программера ! :)
Лично я обязательно начну постепенно использовать - задолбало каждый раз свои "кнопки" перегонять в новый билд...
(28) vkr,
как раз нисколько не прекрсаный, вам предложен более простой и надежный, а главное - сопровождаемый метод.
Не понимаете - так и скажите.
(29) woozee,
>> Чем хороша данная обработка - посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли "сопроводителя" "подешевле".
- ну что ж, остается вам пожелать получить срочное задание по доработке/исправлению вот после такого же программиста "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак".
А 1С специально сделана, чтобы путать всех и вся. И не надейтесь, что вас кто-то пожалеет и будет писать "как вам удобно/известно". 1с-ники - в большинстве народ малограмотный.
(31) AlexO,
>> "а че тут непонятно, если не можешь разобрать программно <мной> созданные формы - ты дурак"
Самое интересное что есть доля правды))) Дело в том что есть некий стандарт разработки, предложения от 1С. Все эти материалы находятся на диске ИТС. Если хотя бы о них догадываться и если еще немного и почитывать, то разбираться в стандартных конфигурациях, и в коде тех программистов которые хотя бы примерно им придерживаются - проблем особых не возникает))
......
//Программист =========
ДобавитьПрограммноЭлементыФормы();
//Программист =========
......
//Программист =========
Процедура ДобавитьПрограммноЭлементыФормы()
//Поле ввода и Надпись ФизЛица
......
//Поле ввода и Надпись Договора
......
КонецПроцедуры
//Программист =========
Показать
Чего сложного?:)
(30) Дело в том что бывает добавлена страница в панельке без отображения заголовков этих страниц. Либо забываешь привязать процедурку к стандартному реквизиту, например, ПриИзменении... ПриВыборе
(31),(33) Вот уж никогда не придерживался "стандартов разработки" от 1С...
Могу посоветовать Вам прочесть прекрасную книгу :
Мифический человеко-месяц или Как создаются программные системы (The mythical Man-Month: Essays on Software Engineering)
Автор: Фредерик П. Брукс Издание 1975 или 2010 г.
Надеюсь, она Вам будет полезна...
(28) vkr,
а и не перегоняйте, сделайте, как я советую в (26) ))
и просто, и обновлять больше не надо.. разве что изменится сама "родная" форма-родитель, и вам захочется сделать "потомка" снова на неё похожим..
(30) i132,
что за форма "Дополнительные"? предлагаете создать новую форму, хранить на ней некие новые реквизиты, потом программно считывать их оттуда и вставлять программно же на старую форму?
а зачем вся эта длиннющая цепочка? а если "порвется" где-нить - как отследите, что перестало работать?
(34) vkr,
теория программирования, теории обработки БД, хранения данных, и 1с - несовместимы ))
это уже известно давно с выходом снежка...
(0) рано или поздно возникнут проблемы как в (18), т.к всегда "остаются куски причудливой формы", все эти программные изыски неуниверсальны в силу уже указанной причины - ребята, это не Си, а 1С, которая плевать хотела на все правила, стандарты и развитие программирования, а с выходом 8.2 - и вообще плевать на программиста..
(35) Да, я с Вами согласен по поводу идеологической несовместимости 1С с нормальными принципами...
Хотя, по мере возможности, борюсь у себя с этой проблемой (пусть даже за счет некоторых потерь сил и нервов).
Спасибо за диалог! :)
(38) vkr,
с 1с бороться бесоплезно ))
примените стиль айкидо - уйти с линии удара и пусть валится...а как упадет - можно диктовать свои условия.. ))
(39) woozee,
что-то путное на 1с можно изобрести только абстрагировавшись от 1с ))
(40) Спасибо, Вы очень точно сформулировали методику взаимоотношений с 1С... :)
Буду теперь знать, как это называется...
Только на диктовку им условий мне начхать - я работаю по-своему, клиенты довольны - это главное...
(28) vkr, (29) woozee,
вот и прошел мой пример испытание временем ))
Попробуйте программно создать вкладку, ТП на ней, компанель к ней.... на последнем пункте все и рушится.
Нельзя создать такую панель.
А работает единственный мой способ с подменой формы.
Так что программное создание элементов, мягко говоря, оченьо узкое и специализированное занятие.
(22)
Да ты что) А у меня проект, где все добавленные реквизиты выводятся программно, благополучно уже сдан и работает.
значит, ничего серьезного не делали программно ))
Вот даже элементарную стандартную панель нельзя сделать ))
Upd:
Ниже разобрались, что можно сделать создание КП через общий модуль (но не глобальный), заработало автозаполнение (почему не работало - причина осталась неясна), и без хранения исходной КП с кнопками на родительской форме.
(82) AlexO, честно говоря, Вы производите впечатление человека неглупого, но какого-то ни во что не верящего и ужасно невнимательного.
Специально для Вас смоделирована ситуация с программным добавлением табличного поля и автозаполнением связанной с ним командной панели.
P.S. Ограничения в программном добавлении элементов на форму безусловно есть - но и ручную обработку поступающей информации тоже никто не отменял - просто можно же себе жизнь упростить...
(84) AlexO, источник действий - существующий реквизит формы (он у Вас существует? Проверьте!)
ГраницаЭлементаУправления - системное перечисление. Доступно в толстом клиенте. Вы в толстом клиенте работаете?
Короче - разобраться можно... Если понимать, зачем Вам это...
мы же его (ТабличноеПоле) полностью программно создаем? или все-таки должно быть уже в реквизитах формы - реквизит табличное поле?
. Доступно в толстом клиенте
я знаю, что это системное перечисление. Как и "ТипКнопкиКоманднойПанели".
Все работало, а потом - раз, и "не видит" перечислений...
Работаю конечно в толстом. Все уже проверил (сама думал - вдруг слетело).
Спорить можно бесконечно))
Всем известно что для решения задачи присутствует разновсяческое множество вариантов. От кривых до идеально правильных, оптимизированных и прям супер-пупер...
Для проектирования своего нововведения или "хотелок" пользователей нужно учитывать не только легкость обновлений, быстродействие, но и самым важным будет удобство пользователей в работе с энтим инструментом)) При этом учитывать эргономичность формы, и не потерять производительность работы.
Чем хороша данная обработка - посидел, потыкал кнопки, скопировал код, описал красиво комментариями и забыл до УФ))
С сопровождением кода проблем не будет никаких. Проблемы возникают только у тех фирм которые сопровождаются у фирм-франчайзи которые имеют штат неопытных сотрудников, либо фирм которые наняли "сопроводителя" "подешевле". Но это другая история))
Ошибка: Берем ТЧ документа, добавляем новый реквизит(я добавлял типа число (15,3)) далее выводим эту колонку на форму привязываем событие "ПриИзменении", и добавляем изменение цвета при выводе строки.
Декомпилируем эту колонку и получаем следующие ошибки:
Было:
Колонка.УстановитьДействие("ПриИзменении",НовыйДействие("Товары_БруттоПриИзменении"));
Надо
Колонка.ЭлементУправления.УстановитьДействие("ПриИзменении",НовыйДействие("Товары_БруттоПриИзменении"));
...
Было
Колонка.ЭлементУправления.ТипЗначения= Новый ОписаниеТипов("Число",,,НовыйКвалификаторыЧисла(15,3)); Это не нужно, ругается т.к. тип уже назначен. И еще нужно добавить:
Колонка.Имя= "_Брутто"
Иначе имя колонки добавляет "Колонка1"
Для декомпиляции выбираю форму реализации товаров и услуг.
При работе через терминал (возможно это важно) подвисает на процедуре ДеревоЭлементовФормыПриПолученииДанных(Элемент, ОформленияСтрок)
За 5 секунд успевает выполнить эту процедуру 85 000 раз.
Пока отключаю процедуру и ориентируюсь по пустым строкам.
Можно ли при построении дерева сразу указать представление ячеек?
(0),(53) - алгоритм этой обработки очень пригодился в написании главного алгоритма публикации http://infostart.ru/public/106310/ поэтому, рискну здесь привести свои корректировки процедуры модуля обработки СформироватьДеревоСЭлементамиФормы :
Для каждого СтрДерева Из МассивСтрок Цикл
Панель = СтрДерева.Элемент;
ИмяПанели = Панель.Имя;
Для каждого СтраницаПанели Из Панель.Страницы Цикл
пФормаКопия.ЭлементыФормы[ИмяПанели].УстановитьДействие("ПриСменеСтраницы", Неопределено);
пФормаКопия.ЭлементыФормы[ИмяПанели].Страницы.Удалить(0);
Для каждого Стр1Уровня Из ДеревоЭлементовФормы.Строки Цикл
Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
Если Стр1Уровня.ПарситьСтраницы<>ложь тогда
//в процедуре "ПередОткрытием" модуля формы обработки добавил колонку в дерево элементов формы
//КолонкиДерева.Добавить("ПарситьСтраницы",Новый ОписаниеТипов("Булево"));
//Еще - в самом начале процедуры СформироватьДеревоСЭлементамиФормы в начало цикла добавил
//Стр1Уровня.ПарситьСтраницы=истина; Если Стр1Уровня.Страница = Неопределено Тогда
Стр1Уровня.Страница = СтраницаПанели.Имя;
Стр1Уровня.Панель=ИмяПанели;
Стр1Уровня.ПарситьСтраницы=ложь; КонецЕсли;
КонецЕсли; КонецЕсли;
КонецЦикла;
КонецЦикла;
//пФормаКопия.ЭлементыФормы.Удалить(Панель);
//Для каждого Стр1Уровня Из ДеревоЭлементовФормы.Строки Цикл
// Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
// Если Не ЗначениеЗаполнено(Стр1Уровня.Панель) или Стр1Уровня.ТипЭлемента = "Панель" Тогда
// Стр1Уровня.Панель = ИмяПанели;
// КонецЕсли;
// КонецЕсли;
//КонецЦикла; КонецЦикла;
Строки1Уровня = ДеревоЭлементовФормы.Строки;
ПослСтрока = Строки1Уровня.Количество()-1;
Для Сч = 0 По ПослСтрока Цикл
ТекСч = ПослСтрока-Сч;
ТекСтрока = Строки1Уровня[ТекСч];
Если ЗначениеЗаполнено(ТекСтрока.Страница) Тогда
СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Панель+"_"+ТекСтрока.Страница,"ПолноеИмя",истина);
//было СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина); НовСтр = СтрРодитель.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,ТекСтрока);
ПеренестиПодчиненныеСтроки(НовСтр,ТекСтрока);
Строки1Уровня.Удалить(ТекСч);
КонецЕсли;
КонецЦикла;
В случае этих корректировок зависания (по крайней мере, у меня) не происходит. Структура дерева элементов формы тоже, по-моему, не страдает.
Если сделать как написано в комментарии:(54) то все прекрасно работает, а так при анализе документа "Начисление по больничному листу" зацикливался в процедуре "ПеренестиПодчиненныеСтроки" модуля объекта и 1С в дамп вываливалась
Автору огромная благодарность ) начал уже создавать свою обработку для этих же целей, хорошо вовремя на ссылку наткнулся, не так много времени убил. Плюсую без вопросов! Отличная работа) - особенно с учетом (54)
(55) kiruha,
нет, невозможно - механизма превращения кода 1с в "физический" объект с записью в конфигурацию (на диск) не существует.
Впрочем, в 1с8 в принципе нет выгрузки объектов интерфейса отдельно.
Даже просто создания махонького реквизита для хранения данных у объекта.
Это привет вам от Великого Отсутствия ООП в 1с ))
Если же вы про превращение УФ в обычную форму - тоже невозможно автоматически.
при попытке разобрать форму (устанавливаем курсор на форму элемента в дереве слева) в ЗУП релиз 47 (командировки организаций) падает сеанс 1С:Предприятие 8.2 (8.2.15.301)
(62) нашел проблему (вариант решения в части определения родителя в (54)):
модуль объекта, в процедуре СформироватьДеревоСЭлементамиФормы:
строку
СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина); //поиск по уникальным значениям
заменить на:
//если элементы имеют одинаковое название - то сам элемент может стать своим "родителем",
//и тогда далее в рекурсивной процедуре "ПеренестиПодчиненныеСтроки" произойдет зацикливание.
//Поэтому необходимо применить поиск по неуникальным значениям в коллекции дерева.
ПараметрыОтбораРодителей = Новый Структура ("ИмяЭлемента", ТекСтрока.Страница);
НайденныеРодители = Строки1Уровня.НайтиСтроки(ПараметрыОтбораРодителей, Истина); //массив найденных родителей с одинаковыми именами
Если НайденныеРодители.Количество() > 1 Тогда
//если среди найденых "родителей" кроме самого родителя и элемента будут еще "родители" (элементы с тем же именем),
//то делаем родителем первого найденного:
Для Каждого СтрокаРодитель Из НайденныеРодители Цикл
Если НЕ СтрокаРодитель = ТекСтрока Тогда
//нашли ссылку на родителя:
СтрРодитель = СтрокаРодитель;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
СтрРодитель = Строки1Уровня.Найти(ТекСтрока.Страница,"ИмяЭлемента",Истина); //поиск по уникальным значениям
КонецЕсли;
Показать
Проблема в том, что некоторые элементы и их родители могут называться одинаково (например, как в справочнике "Проекты": страница и ПолеВвода - оба элемента называются "Описание", но один является контейнером, а другой - нет), и тогда уникальным поиском находилось первое значение, которое могло оказаться отнюдь не родителем, а самим элементом (с тем же названием), и тогда в рекурсивной процедуре ПеренестиПодчиненныеСтроки происходило зацикливание (элемент сам себе бесконечно добавлял "подчиненную" строку).
Код выше (получилось с оговорками - вопрос, если кроме родителя и самого элемента будут еще элементы с таким же именем, то за "родителя" будут принят первый расположенный по списку и "не-ТекСтрока" элемент.
Остался непонятным еще вопрос. Зачем в цикле
Для каждого СтрДерева Из МассивСтрок Цикл
Панель = СтрДерева.Элемент;
ИмяПанели = Панель.Имя;
.....
КонецЦикла;
заполняется "Стр1Уровня", когда в конце все равно переменная перезаполняется данными дерева:
Строки1Уровня = ДеревоЭлементовФормы.Строки;
Но еще постоянно ошибка в попытке (не знаю, критично или нет для результата?):
Процедура "ДобавитьДействие"
Ошибка времени выполнения, стр 140
Ошибка при вызове метода контекста "ПолучитьДействие".
Исправленный файл обработки с изменениями из (54):
(65) протестировал ваш файл.
теперь не виснет. но есть Ошибка
{ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(165)}: Поле объекта не обнаружено (Верх)
мТекст.ДобавитьСтроку(Таб + СтрокаПробелов + "УстановитьПоложениеЭлемента(" + ТекстЭлементДляРазмеров + "," +
(67) rasswet,
я не знаю, что у вас за конфигурация, и что за объект "Работники организаций", в котором есть некое ТабличноеПоле.
Поэтому здесь не помогу ничем.
По поводу
Поле объекта не обнаружено (Верх)
- у распарсиваемого объекта нет свойства "Вверх", которое ищет обработка и пытается изменить.
(65) уточню. ошибку выводит когда ставлю Флаг напротив "работники организации" табличное поле. и при полном анализе формы. на других элементах ошибку не выдает.
(73) rasswet,
ругается на поля ТП.
Поля "ОсвобождатьСтавку" и "НапомнитьПоЗавершении" - имеют тип булево (флажки), и, видимо, с этим и связано "непонимание" обработки. Остальные поля с дургими типами - отрабатывают.
(74) AlexO, Так я про это и говорю.
НО наверно можно собрав информацию о всех элементах формы попытаться создать кучу областей на управляемой форме, куда накидать такие же элементы. просто количество вложенных областей получится очень большим, и вручную такую работу проделать просто нереально.
(76) dandrontiy,
это вы про чисто механическую обработку визуальных элементов, которые и в 8.1, и в 8.2 - основаны у 1с на одних и тех же сишных бибилиотеках.
А с кодом-то что будете делать? или у вас форма будет работать и функционировать без кода формы? :)
(0) Наткнулся на ограничения программной генерации элементов формы:
1. В ФормеДокумента у ПоляВвода невозможно программно задать "Связь по владельцу".
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге "Отбор и сортировка" отсутствует втавленная Колонка.
Пока только это, возможно есть и другие ограничения.
1. В ФормеДокумента у ПоляВвода невозможно программно задать "Связь по владельцу".
2. В ФормеСписка при программной вставке Колонки в ТабличноеПоле, в диалоге "Отбор и сортировка" отсутствует втавленная Колонка.
Первая проблема вроде действительно не рещается.
Вторая - решается простым добавлением в код программного добавления строк:
ЭлементыФормы.ТабличноеПоле.НастройкаОтбора.РеквизитДобавленнойКолонки.Доступность=истина
На днях столкнулся с такой проблемой: при попытке анализа формы обработки "ПанельФункций" из БП 2.0 словил ошибку:
{ВнешняяОбработка.ДекомпиляцияИАнализФорм.МодульОбъекта(490)}: Поле объекта не обнаружено (Имя)
Если пФормаКопия.ЭлементыФормы.Найти(Стр1Уровня.Элемент.Имя)=Неопределено Тогда
В отладчике видно следующее:
Стр1Уровня.Элемент = Панель (Тип Панель)
Стр1Уровня.Элемент.Имя = "Поле объекта не обнаружено (Имя)"
Стр1Уровня.ИмяЭлемента = "ПанельПериод"
Теперь вопросы :) :
1. Кто-нибудь пробовал анализировать данную конкретную форму? Если да, то возникала ли такая ошибка?
2. Из кода видно, что вложенность панелей не учитывается. Правильно ли я понимаю, что это и послужило причиной ошибки?
P.S. Шибко ковыряться сейчас нет времени, поэтому буду благодарен за любую помощь.
Вот и пришло время начать говорить о том, что НЕЛЬЗЯ сделать программно.
Нельзя создавать стандартные кнопки - Добавить, Переместить, Сортировать и т.д.
Потому как нужно задавать действие, а его как такового не существует - пока не создана панель с кнопками. Т.е. в платформу не вшиты события стандартных кнопок, на которые можно было бы сослаться - они генерируются при создании элемента. Создаешь панель - создаются кнопки и события. Либо можно сослаться на уже созданные кнопки, но только если они есть. АвтоЗаполнение компанели, кстати, тоже не работает при программном создании.
Это ответ 1с - ООПу и наследованию классов.
И даже программное создание своих кнопок - требует, чтобы события обработки действий находились в модуле формы, иное не работает ни при каких обстоятельствах (ссылки на форму/другие формы - бесполезны).
В 8.2 на УФ данную проблему можно обойти (создавать стандартные кнопки в своих панелях), но там свои проблемы - с размещением кнопок и далеко не в каждой пользовательской панели их можно разместить.
Реквизиты формы должны находиться на закладке "Реквизиты" у формы. Их программно создавать у нас не получится (в этом и есть ограничение. А вот ЭЛЕМЕНТЫ ФОРМЫ, связать с реквизитами и назначить им свойства - пожалуйста.
Ненадежно оно как-то все. Автозаполнение сразу не заработало, перечисления - перестал видеть немного погодя.
Системные кнопки тоже не видит. Вернее, их действия.
В Вашем неработающем коде, скорее всего для тпМенеджеры не установлено
ЭлементыФормы.тпМенеджеры.Данные="<строка реквизита формы, значение которого у вас должно выводиться в это тп>;
Этот реквизит должен быть или табличной частью объекта, форму которого Вы разрабатываете или этот реквизит должен быть описан на закладке "Реквизиты" самой формы.
Программист 1С
Новосибирск зарплата от 80 000 руб.до 150 000 руб. Полный день
Перенос данных КА 1.1 => КА 2 / УТ 11 (перенос документов, начальных остатков и справочной информации из "1С:Комплексная автоматизация", ред.1.1 в "1С:Комплексная автоматизация", ред. 2.х)
Перенос данных КА 1.1 => КА 2 / УТ 11 (перенос документов, начальных остатков и справочной информации из "1С:Комплексная автоматизация", ред.1.1 в "1С:Комплексная автоматизация", ред. 2.х)