Часто требуется ко всем формам или к списку форм привязать новые действия. Но как это сделать не меняя каждую форму и в идеале не меняя конфигурацию?
Ниже будет описано, как запрограммировать новые действия через расширение (т.е. не меняя конфигурации) и сделать это универсально (не меняя каждую форму).
Добрый день! Идея хорошая.
На мой взгляд, правда, направление более правильное - голосовое управление. На инфостарте уже было решение 1С+python. Один минус - потоковый стрим на клиентсерверной части не поддерживался при терминальном доступе.
Вот это бы конкретно развить )))
(5) В разных конфах в модулях форм внутри события ПриСозданииНаСервере полно разных вызовов [ОбщийМодуль].ПриСозданииНаСервере(...) которые можно перехватить, тут УправлениеСвойствами.ПриСозданииНаСервере перехвачем с расчетом на конфу ЗУП был.
ПодключаемыеКоманды.ПриСозданииНаСервере()
ИнтеграцияС1СДокументооборот.ПриСозданииНаСервере()
СобытияФорм.ПриСозданииНаСервере()
ВерсионированиеОбъектов.ПриСозданииНаСервере()
УправлениеСвойствами.ПриСозданииНаСервере()
и т.д.
где-то есть где-то нет того или иного вызова, поэтому можно перехватить несколько модулей, в самом выводе кнопки проверяется ее наличие на форме, если уже выведена, то повторно не выводится
(8) Омагад... А подключить нужные объекты к подсистеме подключаемых команд никак было? И тогда бы завязался на неё только. Всё равно у тебя есть расширение и внести нужные модификации было несложно. А так наколхозил в типовых подсистемах БСП. Ну как бы да, задачу решил, но какой ценой? У программиста должны быть принципы.
18.
sapervodichka
645309.08.22 18:15 Сейчас в теме
(16) у меня большое количество баз, а решение должно быть универсальным, автономным, простым, не требующим доработок под любое типовое решение 1С. Сами подключаемые обработки о которых ты пишешь, можно использовать для заполнения по остаткам на складе, например, документа Перемещения. Я и их часто делаю, но тут не про них.
(6) ПодключаемыеКоманды подразумевают создание внешней обработки заполнения, а тут как бы в расширении не одна обработка а заложены целые подсистемы (наборы обработок, какие-то документы, справочники регистры и т.д.) цеплять их на внешнюю обработку мне было не удобно
(9) Велкам, делай любую архитектуру в расширении, но подключить к формам объектов ты мог это и нормальным образом, предусмотренным подсистемой. И в пользу внешней обработки говорит в т.ч. и модифицируемость кода на бою, что недостижимо даже с расширением (динамить базу всё равно придётся).
17.
sapervodichka
645309.08.22 18:12 Сейчас в теме
(15) тут как бы публикация про сравнение кнопки и комбинации, а не про конкретное расширение.
Но если интересен ответ про расширение, то оно
- во-первых отлажено и не требует модификации,
- во-вторых если потребует модификации, то внешняя обработка, о которой ты пишешь не особо поможет поправить код самого расширения без обновления базы.
В чем профит твоего напора на решение не понимаю.
У меня у самого десятки разных баз (а реально сотни), и то решение скачали десятки людей.
Всем зашло - это нормально один раз поставить расширение.
Внешняя обработка в довесок к расширению - не пришей собаке хвост.
(17) На всякий случай переформулирую исходный вопрос, как я его понял. Почему Вы не добавили свой вид подключаемых команд? "Целые подсистемы" же здесь не преграда.
23.
sapervodichka
645310.08.22 13:25 Сейчас в теме
(21) Ден, пожалуйста, напиши в чем профит от этого варианта по сравнению с текущим (это быстрее, это удобнее, это морально правильнее, зачем мне это переделать)?
Сразу поблагодарю (читал твои комменты ранее) ты по крайней мере примеры скидываешь, может твой вариант и лучше будет. Просто обдумывать за кого-то его идею я не стану, нет времени, работа сам понимаешь. Если напишут пример и он будет лучше, то я только за.
(24) У меня есть. Это ТСО, включающее в себя лёгкость модификации и обслуживания. Приходит новый человек, который знает БСП. Он знает про подсистему подключаемых команд и мог бы легко выполнить задачу по модификации этой добавленной функциональности, но лезет разбираться в код и видит, что нет такой подключаемой команды, но есть какое-то уникальное решение с 10ю вызовами при открытии формы, из которых отрабатывает только первый, а остальные проверяют наличие результата.
Это выливается в кучу времени на изучение уникальных механизмов вместо известных большинству БСПшных. Это вопросы "а зачем было сделано так?" и т.п.
В результате работодателю это обойдётся дороже, чем если бы было реализовано с использованием типовых методов.
(24) И добавлю в финале мой любимый вопрос: что ты положишь в копилку своего опыта?
В данном случае автор пилит какой-то свой механизм и благодаря тому, что ему разрешают это делать, он это делает. Но вот пришла смена конторы и в новой ему говорят "не, коллега, мы тут колхоз не приветствуем, садись и делай по-нормальному". А у него нет опыта в копилке, нет знаний механизмов БСП, нет в принципе привычки грызть вопрос "а как можно было бы правильнее сделать".
зыЖ Допускаю, что опыт/знания есть, но видимо нет принципов, о которых я писал ранее. Отсутствие принципов допускает написание кода любого уровня корректности.
- когда я то расширение делал, вызова ПодключаемыеКоманды.ПриСозданииНаСервере() не было в формах, а в разных формах было то ВерсионированиеОбъектов то УправлениеСвойствами.
Вообщем, Леонид, проблемы тут нет, и надумывать её не нужно.
Там лишь 1 процедура вызывается. А у программистов есть мозг.
Давай расходиться, либо присылай свой код и обработку, я посмотрю.
Если он лучше и удобнее, то я возьму на вооружение и буду тебе благодарен.
В любом случае спасибо за критику.
(27) Да я и не сходился. Если есть такой монстр и он работает, то тут речь можно вести только об оптимизации, чтобы прям красиво было. Это как 5 и 5+ в школе. У меня нет каких-то интеллектуальных доработок на эту тему. Недавно сделал вызов клиентского метода (открытие формы) через подключаемые команды, но и там всё по инструкции, ничего интересного.
Вангую, скоро ты увидишь массу моего кода, но это в личку. :)
Плюсанул, но есть замечание :
код процедуры ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
написан отвратительно. Зачем там столько Попытка - Исключение ?
Я бы постыдился такое выкладывать.
14.
sapervodichka
645309.08.22 14:59 Сейчас в теме
(10) Я не могу всё предупредить по разным формам в 1С (они далеко не все стандартные), где-то есть вероятность ошибки. Чтобы в рабочей базе ошибка не помешала пользователю дальше продолжить работать на некоторых моментах поставил попытка исключение. На практике исключения не возникали, но сам оператор оставил (я перестраховщик).
22.
sapervodichka
645310.08.22 13:18 Сейчас в теме
(20) пусть использую, что хотят, дальше все равно проверять имя формы и основной объект в форме сотрудника (он там в отличие от стандартного называется Сотрудник, вместо Объект) (тебе в любом случае спасибо)
(22)Согласен с Дмитрием, тоже нахлебался с этими именами форм (особенно форм списков) - каких только вариантов названий не встретишь, программисты в типовых конфигурациях сами пренебрегают своими же стандартами.
Еще одна боль - отсутствие удобной штатной возможности программно определить "основной реквизит" на форме, встречал в типовых реализацию даже с применением спец. реквизита что-то типа "ИмяОсновногоРеквизита" строкового типа, который и хранил имя "основного реквизита" формы.
(20) В БСП есть масса методов для работы с метаданными (ОМ ОбщегоНазначения) и в т.ч. для многих случаев можно использовать не сами метаданные, а ИдентификаторыОбъектовМетаданных - это удобнее и кодом они тоже сильно обвязаны.
31.
sapervodichka
645311.08.22 10:34 Сейчас в теме
(30) Леонид, если они тут применимы =))) напиши пример, что вместо Найти(пИмяФормы, "Справочник.Сотрудники") > 0 использовать из БСП, чтобы понять что основной объект формы не Форма.Объект, а Форма.Сотрудник?
(31) Ну, в конкретном случае я бы поставил 5 за целеустремлённость и 2 за грамотность реализации.
В механизме подключаемых команд тебе передаётся множество параметров, которые помогут ответить, откуда идёт вызов и к кому его хотели применить. Например, во внешнюю обработку заполнения с типом ОткрытиеФормы передаётся как сама исходная форма, так и объект(ы). Поэтому тут ничего выдумывать не надо, делаем по инструкции.
Ты сам признал, что есть вариант подключить нужные объекты к подсистеме "Подключаемые команды". Сделай это и у тебя откроется возможность реализовать этот механизм без колхоза.
На всякий случай ссылка на описание подсистемы.