Имя: Пароль:
1C
1С v8
Перехватчик Событие_ОбработкаПроведения()
0 varelchik
 
14.03.14
18:40
Сделал перехват ОбработкиПроведения().
В догонку Соседней темы про проведеные документы.
Вроде все как бы работает.
Но вылезла одна весчь.
В событии СозданиеКонтекста()
Я устанавливаю форму текущего документа чтобы знать интерактивно проводиться документ или программно.
Так вот если не трогать подбор из формы документа то все работает нормально.
А вот как только в табличной части вызвать выбор Справочника, тогда в момент проведения пишет что не установлена расширяемая форма.
где трабл?
1 varelchik
 
14.03.14
18:41
Собственно сами функции:

Функция Событие_ОбработкаПроведения(Конт,Парам) Экспорт
    Если ПроведениеМОД(Конт)=1 Тогда
        Возврат 0;
    КонецЕсли;
    _КонтФормы=Конт;
    ЕстьТабличнаяЧасть=Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти();
    Если ЕстьТабличнаяЧасть>0 Тогда
        Если Конт.КоличествоСтрок()=0 Тогда
            Сообщить("Не заполнена табличная часть!","!");
            Возврат 0;
        КонецЕсли;
    КонецЕсли;
    стат=СпПосещения.Принадлежит(_КонтФормы.Вид());
    Если стат=1 Тогда
        Возврат _Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт,"ОбработкаПроведения",Парам);
    КонецЕсли;
    Если Конт.Вид()="УстановкаСкидок" Тогда
        Возврат _Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт,"ОбработкаПроведения");
    КонецЕсли;
    Если Конт.ДатаДок>ТекущаяДата() Тогда
        Сообщить("Запрещено проводить документы в будующем периоде!","!");
        Возврат 0;
    КонецЕсли;
    Если глДатаЗапрета>=Конт.ДатаДок Тогда
        Сообщить("Запрещено проводить документы ДО : "+Строка(глДатаЗапрета),"!");
        Возврат 0;
    КонецЕсли;
    Если Метаданные.Документ(Конт.Вид()).АвтоудалениеДвижений=0 Тогда
        Конт.ОчиститьДвижения();
    КонецЕсли;
    //Если Конт.Вид()="ЗаявкаРемонт" Тогда
    //    Рег=СоздатьОбъект("Регистр.ВзаиморасчетыПокупателей");
    //    Если Рег.ВыбратьДвиженияДокумента(Конт.ТекущийДокумент())=1 Тогда
    //        Конт.ОчиститьДвижения();
    //    КонецЕсли;
    //КонецЕсли;
    Если ПустоеЗначение(рФорма)=0 Тогда
        Сообщить(рФорма);
        Сообщить(рФорма.ПолныйТипОбъекта());
        Если рФорма.ТипОбъекта()="Документ" Тогда
            // это явно работа пользователя
            лИТЗ=глСервис.ПолучитьСписокАктивныхПользователей(2,);
            Если лИТЗ.КоличествоСтрок()>1 Тогда
                ИТЗ=СоздатьОбъект("ИндексированнаяТаблица");
                ИТЗ.Загрузить(лИТЗ);
                ИТЗ.ДобавитьИндекс("инд","Режим");
                Если ИТЗ.НайтиСтроку("инд",2)>0 Тогда
                    Сообщить("Идет обмен!
                    |Попробуйте позже.");
                    Конт.НеПроводитьДокумент();
                    //Ответ=Вопрос("Идет обмен!
                    //|Повторить попытку?","Да+Нет",50);
                    //Если Ответ="Да" Тогда
                    //    Возврат Событие_ОбработкаПроведения(Конт,Парам);
                    //КонецЕсли;
                    Возврат 0;
                КонецЕсли;
            КонецЕсли;
            Конт.ДатаИзмененияДок = ТекущаяДата();
            Конт.ТипУчета = 1;
            Конт.ФинУчет = 1;
            Если Конт.Проведен()=0 Тогда
                Конт.Автор=глПользователь;
            КонецЕсли;
            РегистрацияДоставки(Конт);
            Если глДокументыСоСтатусами.Принадлежит(Конт.Вид())=1 Тогда
                РаботаСоСтатусами(Конт);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Возврат _Перехватчик.ВыполнитьОригинальноеСобытиеГК(Конт,"ОбработкаПроведения",Парам);
КонецФункции  // СобытиеГМ_ПриОбработкаПроведения
2 varelchik
 
14.03.14
18:41
Процедура СобытиеГМ_СозданиеКонтекста(Конт) Экспорт
    Если ПустоеЗначение(Конт)=1 Тогда
        Возврат;
    КонецЕсли;
    //Сообщить(Конт);
    _КонтФормы=Конт;
    рФорма=СоздатьОбъект("РасширениеФормы");
    рФорма.УстановитьФорму(Конт.Форма);
    ОбъектФорма=СоздатьОбъект("Форма");
    ОбъектФорма.УстановитьФорму(Конт.Форма);
    рФорма.УстановитьФорму(_КонтФормы.Форма);
    ПервыйПроход=0;
    Тип=рФорма.ТипОбъекта();
    Вид="";
    Если Тип="Документ" Тогда
        Если СпПосещения.Принадлежит(Конт.вид())=1 Тогда
            Перехват=СоздатьОбъект("ПерехватПосещения");    
            Перехват.Инициализация(Конт);
            Возврат;
        ИначеЕсли СпПослеЗаписи.Принадлежит(Конт.Вид())=1 Тогда
            Перехват=СоздатьОбъект("Перехват");    
            Перехват.Инициализация(Конт);
            Возврат;
        ИначеЕсли СпОстатки.Принадлежит(Конт.Вид())=1 Тогда
            Перехват=СоздатьОбъект("ПерехватОстатки");    
            Перехват.Инициализация(Конт);
            Возврат;
        КонецЕсли;
    КонецЕсли;
    Если (Тип="Документ") ИЛИ (Тип="Справочник") Тогда
        ПерехватДоп=СоздатьОбъект("Перехват");    
        ПерехватДоп.Инициализация(Конт);
    КонецЕсли;
КонецПроцедуры    // СобытиеГМ_СозданиеКонтекста
3 varelchik
 
14.03.14
18:43
Перем рФорма;
Перем _КонтФормы;

Переменные контекста класса.
4 Ksandr
 
14.03.14
19:12
это 3.14здц
Это нахуа так извращаться?
5 Ksandr
 
14.03.14
19:13
а, это походу 7.7, да?
6 Мимохожий Однако
 
14.03.14
20:24
Логичнее функции проверки реквизитов документов вставлять перед записью или при записи, но никак ни при проведении
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.