Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Кнопка командной панели , Создание кнопки командной панели из общего модуля          
EritikWoW Подменю пользователя
сообщение 25.04.17, 14:25
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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

Vofka Подменю пользователя
сообщение 27.04.17, 8:32
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

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

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

andr_andrey Подменю пользователя
сообщение 27.04.17, 8:46
Сообщение #4

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Спасибо сказали: 166 раз
Рейтинг: 130.8

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


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

EritikWoW Подменю пользователя
сообщение 27.04.17, 13:24
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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

alexkh75 Подменю пользователя
сообщение 27.04.17, 15:35
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Как вариант "переопределение обработчика","программное изменение форм". Примерная ссылка [необходимо зарегистрироваться для просмотра ссылки]

Vofka Подменю пользователя
сообщение 27.04.17, 15:43
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

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

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

Сообщение отредактировал Vofka - 27.04.17, 15:43

Спасибо сказали: EritikWoW,

EritikWoW Подменю пользователя
сообщение 27.04.17, 16:34
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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

EritikWoW Подменю пользователя
сообщение 27.04.17, 21:54
Сообщение #9

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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

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


Свой модуль

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

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

EritikWoW Подменю пользователя
сообщение 28.04.17, 1:00
Сообщение #10

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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

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


Сообщение отредактировал Vofka - 28.04.17, 8:12

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 20:18
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!