Версия для печати темы (https://pro1c.org.ua/index.php?s=d09f6ee4a3fb1f56259bcca1a42c59fa&showtopic=36718)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Избирательный план обмена

Автор: Constantus 19.04.17, 16:49

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

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

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

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

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


Автор: Constantus 20.04.17, 6:56

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

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

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



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

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


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

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

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


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

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

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

если так, то как реализовать?

Автор: Constantus 20.04.17, 9:54

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

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

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


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

Автор: Constantus 03.08.17, 8:22

Приветствую!

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

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

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

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

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

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


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

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

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

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


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

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


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



Автор: Flexy 03.08.17, 8:46

Пишите свои правила обмена.

Автор: Constantus 03.08.17, 10:36

Flexy @ Сегодня, 11:46 * ,


А если без правил обмена, используя предложенные методы?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua