Версия для печати темы (https://pro1c.org.ua/index.php?s=68b9935b4d5daa8a56ee14a586481928&showtopic=36819)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Кнопка командной панели

Автор: EritikWoW 25.04.17, 14:25

1С:Предприятие 8.3 (8.3.6.2449)
"Управление торговлей для Украины" (2.3.25.1)

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

Что я хотел уточнить.... ну 1. Привести в порядок код (глазом человека который в этом шарит) что 2. Можно ли как кнопке КП передать процедуру не из формы а из моего модуля или хотя бы просто "Выгружать = Истина\ложъ" ?




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


    индкн = ПодМенюВыгружать.Кнопки.Количество();
    ПодМенюВыгружать.Кнопки.Вставить(индкн,"Да", ТипКнопкиКоманднойПанели.Действие,"Да",ДействиеКнопкиДа);
    ПодМенюВыгружать.Кнопки.Да.Картинка = БиблиотекаКартинок.Галочка;
    ПодМенюВыгружать.Кнопки.Да.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
        
    ПодМенюВыгружать.Кнопки.Вставить(индкн+1,"Нет", ТипКнопкиКоманднойПанели.Действие,"Нет",ДействиеКнопкиНет);
    ПодМенюВыгружать.Кнопки.Нет.Картинка = БиблиотекаКартинок.Крест;
    ПодМенюВыгружать.Кнопки.Нет.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
    КонецЕсли;
    
КонецПроцедуры    

Процедура Выгружать(Форма)Экспорт
    
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    Форма1 = Форма.ПолучитьФорму(ИмяФормы);                                                  
    
    Форма1.Выгрузка = Истина;
    КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
    КП.Выгружать.Картинка = БиблиотекаКартинок.Галочка;
    
КонецПроцедуры

Процедура НеВыгружать(Форма)Экспорт
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма.ДокументОбъект.Ссылка)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    Форма1 = Форма.ПолучитьФорму(ИмяФормы);
    Форма1.Выгрузка = Ложь;
    
    КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
    КП.Выгружать.Картинка = БиблиотекаКартинок.Крест;
    
    //Shell = Новый COMОбъект("WScript.Shell");
    //НажатиеМышки = shell.run("rundll32.exe user32.dll, mouse_event 1", 1, "true");

КонецПроцедуры

Автор: EritikWoW 27.04.17, 8:10

Эх.... я так понимаю это проблемный вопрос да ? посоветуйте хотя бы может библиотеку какую то которая отслеживает нажатие кнопки на форме

Автор: Vofka 27.04.17, 8:32

Цитата(EritikWoW @ 25.04.17, 15:25) *
Можно ли как кнопке КП передать процедуру не из формы а из моего модуля или хотя бы просто "Выгружать = Истина\ложъ" ?

По-моему, нет.

Автор: andr_andrey 27.04.17, 8:46

EritikWoW @ Сегодня, 9:10 * ,
Возможно вы ищете "Общие команды", но они в управляемом интерфейсе.

Автор: EritikWoW 27.04.17, 13:24

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

Автор: alexkh75 27.04.17, 15:35

Как вариант "переопределение обработчика","программное изменение форм". Примерная ссылка http://pro1c.org.ua/redirect.php?http://infostart.ru/public/16980/

Автор: Vofka 27.04.17, 15:43

Цитата(alexkh75 @ 27.04.17, 16:35) *
переопределение обработчика

То о чем здесь речь, это не переопределение обработчика, а создание обработчика, которого нету.

Автор: EritikWoW 27.04.17, 16:34

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

Автор: EritikWoW 27.04.17, 21:54

УниверсальныеМеханизмы

    
Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт

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


Свой модуль

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

Функция Выгружать(Форма)Экспорт    
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    Форма1 = Форма.ПолучитьФорму(ИмяФормы);
    Форма1.Выгрузка = Истина;
    КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
    КП.Выгружать.Картинка = БиблиотекаКартинок.Галочка;
    Форма1.Записать();
КонецФункции

Автор: EritikWoW 28.04.17, 1:00

Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua