Имя: Пароль:
1C
1С v8
Регистрация Объектов(План ОБмена)
0 Popkorm
 
18.07.14
12:04
В Подписке перед записью работает:

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

Процедура ВключитьРегистрацию(Источник)
    //Получение узлов для конкретного склада
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Оперативный.Ссылка
    |ИЗ
    |    ПланОбмена.Оперативный КАК Оперативный
    |ГДЕ
    |    Оперативный.Ссылка <> &ЭтотУзел";
    
    Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена.Оперативный.ЭтотУзел());  
    Выборка = Запрос.Выполнить().Выбрать();
    // Регистрация изменений для выбранных узлов
    Пока Выборка.Следующий() Цикл
        
        Источник.ОбменДанными.Получатели.Добавить(Выборка.Ссылка);
        
    КонецЦикла;
КонецПроцедуры



Через ВнешниюОбработку не работает:

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


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


Процедура ВключитьРегистрацию(Источник)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Оперативный.Ссылка
    |ИЗ
    |    ПланОбмена.Оперативный КАК Оперативный
    |ГДЕ
    |    Оперативный.Ссылка <> &ЭтотУзел";
    
    Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена.Оперативный.ЭтотУзел());  
    Выборка = Запрос.Выполнить().Выбрать();
    // Регистрация изменений для выбранных узлов
    Пока Выборка.Следующий() Цикл
        
        Источник.ОбменДанными.Получатели.Добавить(Выборка.Ссылка);
        
    КонецЦикла;
КонецПроцедуры
1 Wobland
 
18.07.14
12:05
бывает
2 Лефмихалыч
 
18.07.14
12:07
(0) все правильно, так и должно быть
3 Лефмихалыч
 
18.07.14
12:07
+(2) для регистрации объектов вне транзакции записи есть отдельный метод ЗарегистрироватьИзменения()
4 Popkorm
 
18.07.14
12:27
(3) спасибо
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс