Имя: Пароль:
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
Логичнее функции проверки реквизитов документов вставлять перед записью или при записи, но никак ни при проведении
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший