Имя: Пароль:
1C
1С v8
Добавить код во все документы в процедуру ПриОткрытии
0 Stasik1976
 
05.08.14
14:51
Как проще сделать? При открытии любого документа, должен выполняться один и тот же код, не пихать же его во все документы в процедуры ПриОткрытии().
1 mikecool
 
05.08.14
14:53
глобальная замена?
2 NikVars
 
05.08.14
14:54
3 SSSSS_AAAAA
 
05.08.14
14:54
(0) Подписка на событие?
4 Stasik1976
 
05.08.14
14:55
(3) В подписке нет события ПриОткрытии
5 Irbis
 
05.08.14
14:57
А почему бы и не запихнуть? Сам код вынести в общий модуль? Любой падаван за час-другой справится.
6 hhhh
 
05.08.14
14:57
(4) в ПРиОткрытии уже есть такие процедуры. Найти такую процедуру и в нее врезаться
7 Stasik1976
 
05.08.14
14:58
(5) Ну тоже вариант :)
8 RomaH
 
naïve
05.08.14
15:03
держи
9 RomaH
 
naïve
05.08.14
15:03
Процедура ДобавитьВМоудульФормы(ОбрабатываемыйФайл)
    
    Путь = ОбрабатываемыйФайл.ПолноеИмя;
    
    Текст = Новый ТекстовыйДокумент;
    
    Текст.Прочитать(Путь);
    
    БылаПравка                             = Ложь;
    НашлиПроцедуруПередОткрытием         = Ложь;
    НашлиКонецПроцедурыПередОткрытием    = Ложь;
    
    НашлиПроцедуруПриОткрытии             = Ложь;
    НашлиКонецПроцедурыПриОткрытии        = Ложь;
    
    НачалоОсновногоТекстаПрограммы         = 1;
    
    Для Ш = 1 По Текст.КоличествоСтрок() Цикл
        
        СтрокаМодуля = Текст.ПолучитьСтроку(Ш);
        
        //Процедура ПередОткрытием(
        Если Лев(СтрокаМодуля,25)= "Процедура ПередОткрытием(" Тогда
            НашлиПроцедуруПередОткрытием = Истина;    
        КонецЕсли;
        
        Если НашлиПроцедуруПередОткрытием И НЕ НашлиКонецПроцедурыПередОткрытием Тогда
            //Кон ецП роц еду ры            
            Если Лев(СтрокаМодуля,14)= "КонецПроцедуры" Тогда    
                НашлиКонецПроцедурыПередОткрытием = Истина;
                НомерСтрокиКонцаПроцедурыПередОткрытием = Ш;
                //Прервать;
            КонецЕсли;
            
        КонецЕсли;
        
        Если НашлиПроцедуруПередОткрытием Тогда
            //Продолжить;
        КонецЕсли;
        
        //Про цед ура  Пр иОт кры тии (
        Если Лев(СтрокаМодуля,22)= "Процедура ПриОткрытии(" Тогда
            НашлиПроцедуруПриОткрытии = Истина;    
        КонецЕсли;
        
        Если НашлиПроцедуруПриОткрытии И НЕ НашлиКонецПроцедурыПриОткрытии Тогда
            //КонецПроцедуры            
            Если Лев(СтрокаМодуля,14)= "КонецПроцедуры" Тогда    
                НашлиКонецПроцедурыПриОткрытии = Истина;
                НомерСтрокиКонцаПроцедурыПриОткрытии = Ш;
                //Прервать;
            КонецЕсли;
        КонецЕсли;
        
        Если Лев(СтрокаМодуля,5)= "Перем" Тогда    
            НачалоОсновногоТекстаПрограммы = Ш + 1;
        КонецЕсли;
        
        Если Лев(СтрокаМодуля,14)= "КонецПроцедуры" Тогда    
            НачалоОсновногоТекстаПрограммы = Ш + 1;
        КонецЕсли;
        
    КонецЦикла;        
    
    
    ИмяФайла = ОбрабатываемыйФайл.ИмяБезРасширения;
    
    ИмяФайла = СтрЗаменить(ИмяФайла,".","");
    
    Если НашлиПроцедуруПередОткрытием И НашлиКонецПроцедурыПередОткрытием Тогда
        
        ////Lobanov
        //ДКБ_ДопМодуль.ДобавитьЭлементыФормы(ЭтаФорма);
        ////Lobanov
        
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПередОткрытием,Символы.Таб + "");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПередОткрытием,Символы.Таб + "//Lobanov");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПередОткрытием,Символы.Таб + "ДКБ_ДопМодуль.ДобавитьЭлементыФормы(ЭтаФорма,""" + ИмяФайла + """);");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПередОткрытием,Символы.Таб + ";");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПередОткрытием,Символы.Таб + "//Lobanov");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПередОткрытием,Символы.Таб + "");
    
        НачалоОсновногоТекстаПрограммы = НачалоОсновногоТекстаПрограммы + 6;
        
        БылаПравка = Истина;
        
    ИначеЕсли НашлиПроцедуруПриОткрытии И НашлиКонецПроцедурыПриОткрытии Тогда
        
        ////Lobanov
        //ДКБ_ДопМодуль.ДобавитьЭлементыФормы(ЭтаФорма);
        ////Lobanov
        
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПриОткрытии,Символы.Таб + "");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПриОткрытии,Символы.Таб + "//Lobanov");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПриОткрытии,Символы.Таб + "ДКБ_ДопМодуль.ДобавитьЭлементыФормы(ЭтаФорма,""" + ИмяФайла + """);");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПриОткрытии,Символы.Таб + ";");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПриОткрытии,Символы.Таб + "//Lobanov");
        Текст.ВставитьСтроку(НомерСтрокиКонцаПроцедурыПриОткрытии,Символы.Таб + "");
        
        НачалоОсновногоТекстаПрограммы = НачалоОсновногоТекстаПрограммы + 6;
        
        БылаПравка = Истина;
        
    КонецЕсли;
    
    Если БылаПравка
        И (Найти(ИмяФайла,"ФормаЭлемента")
            ИЛИ Найти(ИмяФайла,"ФормаДокумента")
            ИЛИ Найти(ИмяФайла,"ФормаВидаРасчета")
            ИЛИ Найти(ИмяФайла,"ФормаУзла"))
                Тогда
            
        ////Lobanov
        //Процедура НовыйЭлементФормыПриИзменении(Элемент)
        //
        //
        //КонецПроцедуры
        ////Lobanov
        Если НачалоОсновногоТекстаПрограммы > Текст.КоличествоСтрок() Тогда
            Текст.ДобавитьСтроку("");    
        КонецЕсли;
        
        
            
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,"");
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,"//Lobanov");
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,"КонецПроцедуры");
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,Символы.Таб + "ДКБ_ДопМодуль.ОбработкаПриИзмененииНовогоЭлементаФормы(Элемент,ЭтаФорма,""" + ИмяФайла + """);");
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,"Процедура НовыйЭлементФормыПриИзменении(Элемент)");
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,"//Lobanov");
        Текст.ВставитьСтроку(НачалоОсновногоТекстаПрограммы,"");
        
    КонецЕсли;
    
    
    Если БылаПравка Тогда
        Текст.Записать(Путь);
    КонецЕсли;
    
КонецПроцедуры
10 Stasik1976
 
05.08.14
15:06
(9) Спасибо
11 RomaH
 
naïve
05.08.14
15:09
ну и что бы не мучить с работой с файлами:

Процедура ОсновныеДействияФормыДополнитьТиповыеСтандартом(Кнопка)
    
    МассивФайлов = НайтиФайлы(КаталогТиповыхФайлов,"*.txt");    
    
    Для Каждого ОбрабатываемыйФайл Из МассивФайлов Цикл
        
        Состояние(ОбрабатываемыйФайл.ПолноеИмя);
        
        ДополнитьФайлСтандартом(ОбрабатываемыйФайл);
        
        ОбработкаПрерыванияПользователя();
        
    КонецЦикла;
    
КонецПроцедуры

Процедура ДополнитьФайлСтандартом(ОбрабатываемыйФайл)
    
    Путь = ОбрабатываемыйФайл.ПолноеИмя;
    
    ИмяФайла = ОбрабатываемыйФайл.Имя;
    
    //Документ.НачислениеОтпускаРаботникамОрганизаций.Форма.ФормаДокумента.Форма.Модуль
    
    Для Ш = 1 По 2 Цикл
        ПерваяТочка = Найти(ИмяФайла,".");
        Если Ш = 1 Тогда
            ИмяОбъекта = Лев(ИмяФайла,ПерваяТочка-1);
        КонецЕсли;
        ИмяФайла = Сред(ИмяФайла,ПерваяТочка + 1);
    КонецЦикла;
    
    ПерваяТочка = Найти(ИмяФайла,".");    
    ИмяФайла = Лев(ИмяФайла,ПерваяТочка-1);
    
    Если ИмяФайла = "Форма" Тогда
        
        ДобавитьВМоудульФормы(ОбрабатываемыйФайл);
        
    ИначеЕсли ИмяФайла = "МодульОбъекта" И ИмяОбъекта = "Отчет" Тогда
        
        ДобавитьВМоудульОбъектаОтчета(ОбрабатываемыйФайл);
        
    КонецЕсли;
    
КонецПроцедуры
12 mikecool
 
05.08.14
15:10
(9) а если в "Процедура ПередОткрытием(" пробелов будет больше?
13 RomaH
 
naïve
05.08.14
15:12
(12) ну на типовой ЗУП охват 100%
14 RomaH
 
naïve
05.08.14
15:13
(12) поэтому я сильно с унификацией не заморачивался
можно регулярные выражения прикрутить, если очень хочется
15 Фокусник
 
05.08.14
15:14
(0) плюсую за (6), в типовых конфигурациях обычно уже есть такие общие процедуры.
16 RomaH
 
naïve
05.08.14
15:16
(15) это ж надо проверять
плюс эти процедуры должны передавать некий параметр который мне нужен
в общем лет пять назад в ЗУП я такой процедуры не нашел
была одно - но не во всех формах
17 RomaH
 
naïve
05.08.14
15:19
ИМХО - более универсально и красиво переопределить ПриОткрытии для формы
ибо в (9) просто может быть не назначено "ПриОткрытии"
18 Фокусник
 
05.08.14
15:23
(16) "это ж надо проверять"
Конечно, нужно проверять. Но БЕЗ ЭТОЙ ПРОВЕРКИ добавлять во ВСЕ ПриОткрытии (тем более в ЗУП), считаю просто вредительством. Пожалейте будущих обновлялщиков этой базы ;)
19 NikVars
 
05.08.14
15:38
(18) Это специально сделано, и именно для усложнения последующего обновления. Так можно больше бабла срубить. Ведь конфа "серьезно" изменена в ста местах.