gifts2017

Выгрузка данных по организации через правила обмена

Опубликовал cbr900 (cbr900) в раздел Обмен - Обмен через XML

Делюсь опытом. Ниже представлен код, который необходимо добавить в секцию "Обработчики "Конвертация".
Данный метод можно использовать, когда необходимо выгрузить элементы справочников и регистров только по выбранной организации.
При этом в качестве объектов выгрузки следует выбрать документы и все объекты для которых есть поле "Организация" или владельцем является "Организация" будут выгружены.

Обработчик "Перед выгрузкой объекта"

Если Объект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда
    Если (Параметры.Организация <> Объект.Организация) Тогда
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;
Если Объект.Метаданные().Реквизиты.Найти("Владелец") <> Неопределено Тогда
    Если Объект.Владелец.Метаданные().Имя = "Организации" Тогда
        Если (Параметры.Организация <> Объект.Владелец) Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
    Если Объект.Метаданные().Владельцы.Содержит(Параметры.Организация.Метаданные()) Тогда 
        Если Объект.Владелец <> Параметры.Организация Тогда
            Отказ = Истина;
        КонецЕсли; 
    КонецЕсли;
КонецЕсли;

Обработчик "Перед конвертацией объекта"

Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Источник)) Тогда

    Если Источник.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда
        Если (Параметры.Организация <> Источник.Организация) Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
    Если Источник.Метаданные().Реквизиты.Найти("Владелец") <> Неопределено Тогда
        Если Источник.Владелец.Метаданные().Имя = "Организации" Тогда
            Если (Параметры.Организация <> Источник.Владелец) Тогда
                Отказ = Истина;
            КонецЕсли;
        КонецЕсли;
    ИначеЕсли Источник.Метаданные().Владельцы.Содержит(Параметры.Организация.Метаданные()) Тогда 
        Если Источник.Владелец <> Параметры.Организация Тогда
            Отказ = Истина;
        КонецЕсли; 
    КонецЕсли;

КонецЕсли;

См. также

Подписаться Добавить вознаграждение
Комментарии
0. cbr900 (cbr900) 13.10.11 10:07
Делюсь опытом. Ниже представлен код, который необходимо добавить в секцию "Обработчики "Конвертация".
Данный метод можно использовать, когда необходимо выгрузить элементы справочников и регистров только по выбранной организации.
При этом в качестве объектов выгрузки следует выбрать документы и все объекты для которых есть поле "Организация" или владельцем является "Организация" будут выгружены.

Перейти к публикации

1. ketana-v (infosoft-v) 13.10.11 10:07
Здравствуйте.
Ваше сообщение направило меня искать решение в правильное русло, спасибо. У меня был задача перенести зарплату из Комплексной конфигурации в конфигурацию Зарплата и управление персоналом. Сразу скажу, вычленить только одну организацию не удалось. Трудоёмкость переноса превысила ценность того что перенесётся только одна организация, поэтому перенёс все три организации.
2. Stepan Shipitsyn (Stepan_1c) 09.12.11 07:28
Спасибо за статью. но нам пришлось немного дополнить её, чтобы не было ошибок. добавили Попытка-Исключение-КонецПопытки в каждом обработчике перед "Если...".
3. psih12 20.12.11 11:50
(2) Stepan_1c, Перед каждым "Если" поставили?
4. psih12 20.12.11 12:41
У меня всё равно выгружает данные по нескольким организациям(Предприятие 8.2, УТ 10.3).
5. Наталья Литвин (НатальяАлекс) 01.02.12 13:20
Именно этим вопросом занималась. Прямо сейчас и попробую.
6. Наталья Литвин (НатальяАлекс) 01.02.12 14:27
Спасибо. У меня все получилось.
7. psih12 21.02.12 08:33
(6) НатальяАлекс, Как у тебя получилось? Что ты сделала?
8. Наталья Литвин (НатальяАлекс) 21.02.12 09:06
По поводу справочников и регистров ничего сказать не могу. Меня интересовали только документы. С небольшими изменениями, но все чудесно работает.
9. psih12 21.02.12 13:42
(8) НатальяАлекс, Меня тоже интересуют документы. Я всё сделал, как автор указывает. Вызываю свою настройку обмена и параметра "Организация" нигде нет. Где он должен появиться-в закладке "сопоставление объектов" ? И что за изменения ты сделала?
11. Наталья Литвин (НатальяАлекс) 22.02.12 09:00
Параметр должен появиться на вкладке "Выгрузка" - закладка "Параметры".
Правила я использовала нетиповые, сама делала. Изменения сейчас посмотрю.
12. Наталья Литвин (НатальяАлекс) 22.02.12 09:04
Нет, изменений нет. Все в точности, как описал автор. Спасибо ему еще раз. psih12 проверь еще раз все.
14. cbr900 (cbr900) 16.03.12 05:33
Уже и не помню почему закинул именно в "Перед конвертацией объекта" и "Перед выгрузкой объекта", видимо, какие-то объекты не выгружались полностью корректно.
15. rhtr Иванов (rhtr) 17.09.14 19:50
Спасибо, но чуть переделал (явно указал организацию), может кому пригодится. А и в параметры в этом случаи не надо добавлять организацию.

//+ПередВыгрузкойОбъекта
МояОрг = Справочники.Организации.НайтиПоРеквизиту("ИНН","ТутИннОрганиазции").Ссылка;

Если Объект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда

Если
//(Параметры.Организация <> Объект.Организация)
Объект.Организация <> МояОрг
Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;


Если Объект.Метаданные().Реквизиты.Найти("Владелец") <> Неопределено Тогда

Если Объект.Владелец.Метаданные().Имя = "Организации" Тогда

Если //(Параметры.Организация <> Объект.Владелец)

Объект.Организация <> МояОрг

Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;


ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда

Если Объект.Метаданные().Владельцы.Содержит(МояОрг.Метаданные()) Тогда

Если //Объект.Владелец <> Параметры.Организация
Объект.Организация <> МояОрг
Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;


КонецЕсли;

//+ПередКонвертациейОбъекта

МояОрг = Справочники.Организации.НайтиПоРеквизиту("ИНН","ТутИННОрг").Ссылка;

Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Источник)) Тогда



Если Источник.Метаданные().Реквизиты.Найти("Организация") <> Неопределено Тогда

Если //(Параметры.Организация <> Источник.Организация)
Источник.Организация <> МояОрг

Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;

Если Источник.Метаданные().Реквизиты.Найти("Владелец") <> Неопределено Тогда

Если Источник.Владелец.Метаданные().Имя = "Организации" Тогда

Если //(Параметры.Организация <> Источник.Владелец)
Источник.Владелец <> МояОрг

Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;

ИначеЕсли Источник.Метаданные().Владельцы.Содержит(МояОрг.Метаданные()) Тогда

Если //Источник.Владелец <> Параметры.Организация
Источник.Владелец <> МояОрг

Тогда

Отказ = Истина;

КонецЕсли;



КонецЕсли;

КонецЕсли;
16. Ol k (imagica) 07.08.15 12:01
17. Kos Pro (kosko) 11.10.15 16:54
Автору спасибо, все отлично получилось. Кто не понял, то уже в настройках обмена нужно указать фильтр по организации
18. mm_84 mm_84 (mm_84) 27.01.16 13:55
если выгрузка данных идет через произвольный набор, то эти отборы не работают, необходимо делать отборы в самих запросах, мне например при выгрузки данных из ЗУП 2.5 в ЗУП 3.0 где сплошь произвольные алгоритмы выборки переносимых данных, совсем не помогло. Хотя правила типовые. пришлось править запросы и алгоритмы, вставляя отборы.
19. Бочаров Кирилл Игоревич (bocharovki) 22.02.16 08:42
Немного не понятно зачем приведены разные алгоритмы в данных обработчиках. Я так понимаю отличие ведь должно быть только Объект - Источник?
И по второму ЕСЛИ. Разве Реквизиты.Найти("Владелец") не тоже самое что и Владельцы.Содержит?
20. Евгений Мусатов (musatov1c.ru) 13.03.16 06:36
Спасибо большое! Очень помогло! :)
21. cbr900 (cbr900) 13.03.16 10:03
Добрый день всем, кто задает вопросы!
Эта публикация была в 2010 году, тогда я еще программировал. Сейчас уже давно не программирую. Поэтому на вопросы по существу ответить не смогу.
Кому эта публикация помогла - супер!