Имя: Пароль:
1C
1С v8
Программно добавить кнопку с вызовом процедуры из общего модуля
,
0 СергТ
 
29.06.20
20:14
Можно ли программно добавить на форму кнопку, которая вызывает процедуру и общего модуля?
В расширение добавил процедуру из общего модуля, которая вызывается из каждого документа. Добавил в неё вызов моей процедуры в моём общем модуле (тоже в расширении). В этой процедуре добавляю команду и кнопку на форме в командную панель. Кнопка добавляется. Команда добавляется. В действие прописываю ИмяОбщегоМодуля.ИмяЭкспортнойПроцедурыВМодуле. Но она не срабатывает (отладчик не входит/не останавливается). ЧЯДНТ?

Просьба не налегать с вопросами зачем именно так. Дописывать в каждый из двухсот документов (в расширение) свою процедуру не вариант.
1 Жан Пердежон
 
30.06.20
00:15
(0) так и должно быть
2 ildary
 
30.06.20
01:11
(0) можно сделать такое через подключаемые команды (если БСП).
3 СергТ
 
30.06.20
09:35
(2) Можно поподробнее описать? С нюансами разберусь, главное понять куда рыть. (Это КА-2.4, БСП на борту, соответственно стоит)
4 Мимохожий Однако
 
30.06.20
09:38
5 Classic
 
30.06.20
10:01
Чем общая команда не угодила?
6 Сияющий в темноте
 
30.06.20
10:04
общая команда и модуль команды чем не угодили?

просто,команды работают в контексте модуля формы,они видят в нем неэкспортные процедуры,но не видят отображение общих модулей.
7 СергТ
 
30.06.20
14:16
(5) А зачем задавать глупые вопросы вместо того, чтобы просто предложить вариант?
Знаете как программно прицепить к программно созданной кнопке общую команду? Расскажите. Именно в этом мой изначальный вопрос и заключается.
8 ildary
 
30.06.20
17:12
(3) примерно так: (тут добавляется в командную панель кнопка и команда, чей обработчик добавлен в ОМ.МодификацияКонфигурацииВызовСервераПереопределяемый

ОМ.ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту()
    
    Если НастройкиФормы.ИмяФормы = "Документ.ЗаказПоставщику.Форма.ФормаДокумента" Тогда
        
        Команда = Команды.Добавить();
        Команда.Идентификатор = "КомандаНовая";
        Команда.Представление = "Команда новая";
        
        Команда.Обработчик      = "МодификацияКонфигурацииВызовСервераПереопределяемый.ЗаказПоставщикуФормаДокументаКомандаНовая";
        Команда.РежимЗаписи      = "НеЗаписывать";
        
        Команда.Вид              = "КоманднаяПанель";
        
    КонецЕсли;


ОМ.МодификацияКонфигурацииВызовСервераПереопределяемый

Процедура ЗаказПоставщикуФормаДокументаКомандаНовая(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт
    Форма = ПараметрыВыполнения.Форма;
КонецПроцедуры
9 СергТ
 
30.06.20
17:34
(8) Эти команды в меню нигде не появляются?
Что в качестве действия прописывать Команде кнопки?

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

Точнее, я уже нашёл, что в каждом документе есть Подключаемый_ВыполнитьКоманду и она подключается как действие. И я могу на этом остановиться, просто переопределив процедуру в расширении и там описав нужные мне действия (вызов процедуры из моего модуля). Но сдаётся мне, что можно поступить более грамотно используя механизмы БСП. Просто ещё не разобрался где можно зарегистрировать свою команду, чтоб она вызывалась по моей кнопке.
10 СергТ
 
30.06.20
17:37
(8) + И похоже вы меня направили куда нужно ))
Но может со сказанными выше нюансами у вас есть более простое решение, чем дописывать в модуль.
11 ildary
 
30.06.20
17:56
(10) а в чем проблема дописывать в модуль? Я написал в два модуля, специально созданных для изменения: их название содержит слово Предопределяемый.
12 СергТ
 
30.06.20
18:48
(11) Да никаких проблем, если забить на то, что в программе уже предусмотрели механизм для добавления команд. И не очень уже и хорошее решение его подламывать.
Ну, и скорее тут просто желание изучить вопрос и сделать как задумано на простой задаче, чтоб потом на сложных не ковыряться и не городить огород.
13 ildary
 
30.06.20
20:36
(13) а кто ломает? Это расширение штатного функционала разрешенными методами.
14 СергТ
 
30.06.20
21:14
(13) Ну тут такое. Есть места, где этому место, а есть где попало. Потом кто-то что-то будет менять, ему придётся искать где тут прошлый программист на кодил, и вспоминать тихим "добрым" словом )))
Делать нужно хорошо, херово само получится.
Программист всегда исправляет последнюю ошибку.