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 @ Сегодня, 9:10
,
Возможно вы ищете "Общие команды", но они в управляемом интерфейсе.
Не совсем, просто как я уже сказал я подвязал кнопки к двум процедурам которые есть во всех документах... и которые обращаются к глобальным модулям, а я хочу уйти от этого в сторону обработки которая позволила бы либо назначить на кнопки свою процедуру, либо каким то образом отследить нажатие передать в переменную информацию и выполнить процедуры которые в зависимости от нажатой кнопки передали бы в реквизит "Истина или Ложъ"!
Как вариант "переопределение обработчика","программное изменение форм". Примерная ссылка http://pro1c.org.ua/redirect.php?http://infostart.ru/public/16980/
Прошу прощения.. нашел небольшой огрех в коде.... если документ новый то ругается что формы нет... так что пока не выкладываю... как доделаю выложу !
УниверсальныеМеханизмы
Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт
НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ссылка)).Имя;
Если НЕ ПустаяСтрока(Ссылка) тогда
ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
Форма = ссылка.ПолучитьФорму(ИмяФормы);
Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
Выгрузка.ПриОткрытии(Ссылка);
ИначеЕсли Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") <> Неопределено Тогда
Выгрузка.Выгружать(Ссылка);
ОбработкаПрерыванияПользователя();
КонецЕсли;
Иначе
Ссылка.Выгрузка = Истина;
КонецЕсли;
Процедура ПриОткрытии (объект) Экспорт
НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(объект)).Имя;
ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
НД = ВРег(НазваниеДокумента);
КолвоСим = СтрДлина(НазваниеДокумента);
Форма = объект.ПолучитьФорму(ИмяФормы);
КоличествоЭлементов = Форма.ЭлементыФормы.Количество();
Для Каждого Док из Документы Цикл
НазвДок = Прав(Док,КолвоСим);
НазвДок = ВРег(НазвДок);
Если НазвДок = НД ТОгда
Форма1 = Док.ПолучитьФорму(ИмяФормы);
КолЭлем = Форма1.ЭлементыФормы.Количество();
КонецЕсли;
КонецЦикла;
Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
КП = Форма.ЭлементыФормы.ДействияФормы.Кнопки;
инд = КП.Количество();
ДействиеКнопкиВыгружать = Новый Действие ("УстановитьКнопкиПодменюЗаполненияТЧ");
Выгружать = КП.Вставить(инд,"Выгружать", ТипКнопкиКоманднойПанели.Действие,"Выгружать",ДействиеКнопкиВыгружать);
Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
Если Форма.Выгрузка Тогда
Выгружать.Картинка = БиблиотекаКартинок.Галочка;
Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
Иначе
Выгружать.Картинка = БиблиотекаКартинок.Крест;
Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
КонецЕсли;
Иначе
Выгружать(Форма);
КонецЕсли;
КонецПроцедуры
Функция Выгружать(Форма)Экспорт
НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма)).Имя;
ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
Форма1 = Форма.ПолучитьФорму(ИмяФормы);
Форма1.Выгрузка = Истина;
КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
КП.Выгружать.Картинка = БиблиотекаКартинок.Галочка;
Форма1.Записать();
КонецФункции
Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт
НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ссылка)).Имя;
Если НЕ ПустаяСтрока(Ссылка) тогда
ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
Форма = ссылка.ПолучитьФорму(ИмяФормы);
Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
Выгрузка.ПриОткрытии(Ссылка);
ИначеЕсли Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") <> Неопределено Тогда
Выгрузка.Выгружать(Ссылка);
ОбработкаПрерыванияПользователя();
КонецЕсли;
КонецЕсли;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua