8.х ОБМЕН При обработке, чтобы объекты не попадали в план обмена полный

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем VeronH, 9 сен 2016.

  1. TopicStarter Overlay
    VeronH
    Offline

    VeronH

    Регистрация:
    15 июл 2016
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    Всем привет. Подскажите. Есть база УПП, РИБ, обмен по плану полный. Нужно обработкой почистить базу, но чтобы объекты не попали в регистрацию изменений. Пробовал ставить
    "....обменданнным.получатели.автозаполнение = ложь", не получается, все равно данные попадают в план обмена полный. Как победить?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    И как вы себе представляете физически очитску одного узла от данных, при этом сохранив данные в других узлах? Оно конечно можно сделать, но при изменении этих данных там, где они есть - они поедут в центральный узел РИБ и дальше по подчиненным узлам.
  3. TopicStarter Overlay
    VeronH
    Offline

    VeronH

    Регистрация:
    15 июл 2016
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    Ситуация такая. Отделяем в базе организацию в отдельную базу. Нужно удалить большой вал документов. Будем делать это поэтапно. Сначала в основной базе, на сервере. Потом результат переносить в доп. узлы. Эти доп узлы удалены и компы слабенькие, удаление через план будет идти до китайской пасхи.
    На момент удаления в основном узле, в перифериях будет отключен доступ к удаляемым документам (доступ по организации) и тд, то есть назад они не приедут и изменяться не будут. Но база будет работать и обмен по остальным организациям должен идти.
  4. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.755
    Симпатии:
    146
    Баллы:
    104
    После выполнения ваших операций по очистке можете снять с регистрации объекты которые будут зарегистрированы к обмену.
    Но всё же вы что то не то делаете.
  5. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Направляю ряд законченных обработчиков
    Процедуру вызываете для обработчика. Перед употреблением встряхнуть на тестовой базе
    Код:
    Процедура ВыполнитьЗапись(ДокументОбъект)
       
        ДокументОбъект.ОбменДанными.Получатели.Очистить();
        ДокументОбъект.ОбменДанными.Получатели.Автозаполнение = ложь;
        МассивРегистраций = ПолучитьУзлыВКоторыхДокументЗарегистрирован(ДокументОбъект); // формирует массив уже имеющихся регистраций
          
        Если ДокументОбъект.Проведен Тогда
            Попытка
                ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
            Исключение
                ТекстОшибки = ОписаниеОшибки();
                Сообщить(ТекстОшибки);
            КонецПопытки;
           
        Иначе
            Попытка
                ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
           
        КонецЕсли;
       
        СнятьРегистрациюСУзлов(ДокументОбъект); // снимает всю регистрацию
        ЗарегистрироватьНаОбмен(МассивРегистраций); // возвращает регистрацию из массива
       
    КонецПроцедуры
    
    Функция ПолучитьУзлыВКоторыхДокументЗарегистрирован(ДокументОбъект)
       
        МассивРегистраций = Новый Массив;
        Для каждого ПланМенеджер из ПланыОбмена Цикл
            ПланУзелВыборка = ПланМенеджер.Выбрать();
            Пока ПланУзелВыборка.Следующий() Цикл
                ПланУзел = ПланУзелВыборка.Ссылка;
                // нельзя проверять свой же узел ена изменения
                Если ПланМенеджер.ЭтотУзел() = ПланУзел Тогда
                    Продолжить;
                КонецЕсли;
                Если ПланыОбмена.ИзменениеЗарегистрировано(ПланУзел, ДокументОбъект.Ссылка) Тогда
                    Структура = Новый Структура;
                    Структура.Вставить("Менеджер", ПланМенеджер);
                    Структура.Вставить("Узел", ПланУзел);
                    Структура.Вставить("Объект", ДокументОбъект.Ссылка);
                    МассивРегистраций.Добавить(Структура);
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        Возврат МассивРегистраций;
       
    КонецФункции
    
    Процедура СнятьРегистрациюСУзлов(ДокументОбъект)
       
        Для каждого ПланМенеджер из ПланыОбмена Цикл
            ПланУзелВыборка = ПланМенеджер.Выбрать();
            Пока ПланУзелВыборка.Следующий() Цикл
                ПланУзел = ПланУзелВыборка.Ссылка;
                // нельзя проверять свой же узел ена изменения
                Если ПланМенеджер.ЭтотУзел() = ПланУзел Тогда
                    Продолжить;
                КонецЕсли;
                // удалить регистрацию можно только если она разрешена
                Попытка
                    ПланыОбмена.УдалитьРегистрациюИзменений(ПланУзел, ДокументОбъект.Ссылка);
                Исключение
                   
                КонецПопытки;
            КонецЦикла;
        КонецЦикла;
       
    КонецПроцедуры
    
    Процедура ЗарегистрироватьНаОбмен(МассивРегистраций)
       
        Для каждого стр из МассивРегистраций Цикл
            ПланМенеджер = стр.Менеджер;
            ПланУзел = стр.Узел;
            Объект = стр.Объект;
            ПланыОбмена.ЗарегистрироватьИзменения(ПланУзел, Объект);
        КонецЦикла;
       
    КонецПроцедуры
    

Поделиться этой страницей