Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Избирательный план обмена
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Constantus
Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Сделал обмен на базе "Полного обмена". Обмен работает.

Как можно сделать так, чтобы из Центральной базы не перегонялись, например, продажи, но с филиала в Центральную поступали все данные по их продажам?...

Т.е. сделать избирательный обмен, а то сейчас в филиальную часть гонятся все данные Центра, что филиалу вообще не нужно...

На филиал передаются данные по новым номенклатурам, перемещениям товаров на филиальные склады, а обратно передаются данные только по продажам филиала... Одним словом, чтобы Центр мог видеть отчетность по филиалу...

Constantus
У меня есть старая конфигурация УТ 10.3, написанная походу на 8.1... Утверждается, что РКО и ПКО переносятся из филиала, но из центра не гонятся...

Сделано следующее в плане обмена на ПКО и РКО авторегистрация - запретить.
На код "При записи" на эти документы поставлен код:

Процедура ПриЗаписи(Отказ)
    
    ПроцедурыОбменаДанными.ЗарегестрироватьДокумент(ЭтотОбъект);
    
КонецПроцедуры



// регистрирует в обмене документы по ревизиту УзелУРБД
//Для подчиненного все, для главного - только чужие объекты
Процедура ЗарегестрироватьДокумент(Объект) Экспорт

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


Но там был изменена структура Плана обмена, добавлен справочник "УзелУРБД" и в плане обмена идет некая ссылка на этот справочник. Далее каим-то образом в вышеуказанном коде идет обработка на возможность регистрации изменений. Но такого в новых релизах и в моей конфе нету...

На некотором форуме нашел типа нужно и достаточно так при записи:

ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, СсылкаНаДокументИлиЭлементСправочника);


Далее как-то применить Подписки...

Правильно ли я понимаю логику:

1. Для документа отменить авторегистрацию.
2. При записи документа (РКО) проверить на главность узла. Если Главный, то не регистрировать изменения, если подчиненный, то регистрировать...

если так, то как реализовать?
Constantus
Процедура ЗарегестрироватьДокумент(Объект) Экспорт

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

КонецПроцедуры // ЗарегестрироватьДокумент()


Поставил на РКО... вроде получилось... Но насколько оптимально и эффективно?
Constantus
Приветствую!

Подниму тему...

В результате мне необходимо, чтобы ряд документов из Центральной базы не передавались на Филиал (Реализация, Кассовые документы, Возвраты)

Как было указано выше, применил данный код, т.е. в общие модули добавил функцию:

Процедура ЗарегестрироватьДокумент(Объект) Экспорт

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

КонецПроцедуры // ЗарегестрироватьДокумент()


Отменил авторегистрацию на документ

Далее для РКО:

Процедура ПриЗаписи(Отказ)
    // Вставить содержимое обработчика.
    ПроцедурыОбменаДанными.ЗарегестрироватьДокумент(ЭтотОбъект);

КонецПроцедуры


Но есть еще один механизм в модуле Обмена:

Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)
    Если ТипЗнч(ЭлементДанных) = Тип("СправочникСсылка.Номенклатура")  Тогда
        ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто;
    Иначе
        ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;    
КонецПроцедуры


Посоветуйте, как таки можно решить проблему избирательного обмена между Узлами.


Flexy
Пишите свои правила обмена.
Constantus
Flexy @ Сегодня, 11:46 необходимо зарегистрироваться для просмотра ссылки ,


А если без правил обмена, используя предложенные методы?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.