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



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

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

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

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

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

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

КонецЕсли;

24 Comments

  1. infosoft-v

    Здравствуйте.

    Ваше сообщение направило меня искать решение в правильное русло, спасибо. У меня был задача перенести зарплату из Комплексной конфигурации в конфигурацию Зарплата и управление персоналом. Сразу скажу, вычленить только одну организацию не удалось. Трудоёмкость переноса превысила ценность того что перенесётся только одна организация, поэтому перенёс все три организации.

    Reply
  2. Stepan_1c

    Спасибо за статью. но нам пришлось немного дополнить её, чтобы не было ошибок. добавили Попытка-Исключение-КонецПопытки в каждом обработчике перед «Если…».

    Reply
  3. psih12

    (2) Stepan_1c, Перед каждым «Если» поставили?

    Reply
  4. psih12

    У меня всё равно выгружает данные по нескольким организациям(Предприятие 8.2, УТ 10.3).

    Reply
  5. НатальяАлекс

    Именно этим вопросом занималась. Прямо сейчас и попробую.

    Reply
  6. НатальяАлекс

    Спасибо. У меня все получилось.

    Reply
  7. psih12

    (6) НатальяАлекс, Как у тебя получилось? Что ты сделала?

    Reply
  8. НатальяАлекс

    По поводу справочников и регистров ничего сказать не могу. Меня интересовали только документы. С небольшими изменениями, но все чудесно работает.

    Reply
  9. psih12

    (8) НатальяАлекс, Меня тоже интересуют документы. Я всё сделал, как автор указывает. Вызываю свою настройку обмена и параметра «Организация» нигде нет. Где он должен появиться-в закладке «сопоставление объектов» ? И что за изменения ты сделала?

    Reply
  10. НатальяАлекс

    Параметр должен появиться на вкладке «Выгрузка» — закладка «Параметры».

    Правила я использовала нетиповые, сама делала. Изменения сейчас посмотрю.

    Reply
  11. НатальяАлекс

    Нет, изменений нет. Все в точности, как описал автор. Спасибо ему еще раз. psih12 проверь еще раз все.

    Reply
  12. wingnut

    Большое спасибо, как раз то что надо.

    Вот только есть вопрос по оптимизации…

    1. Вроде Обработчик «Перед конвертацией объекта» выполняется для вех объектов, как для выгружаемых напрямую, так и по ссылке. Зачем тогда отбор в обработчике «Перед выгрузкой объекта» ? Есть случаи, когда выгрузка есть, а конвертации нет?

    Reply
  13. cbr900

    Уже и не помню почему закинул именно в «Перед конвертацией объекта» и «Перед выгрузкой объекта», видимо, какие-то объекты не выгружались полностью корректно.

    Reply
  14. rhtr

    Спасибо, но чуть переделал (явно указал организацию), может кому пригодится. А и в параметры в этом случаи не надо добавлять организацию.

    //+ПередВыгрузкойОбъекта

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

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

    Если

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

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

    Тогда

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

    КонецЕсли;

    КонецЕсли;

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

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

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

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

    Тогда

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

    КонецЕсли;

    КонецЕсли;

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

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

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

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

    Тогда

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

    КонецЕсли;

    КонецЕсли;

    КонецЕсли;

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

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

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

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

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

    Источник.Организация <> МояОрг

    Тогда

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

    КонецЕсли;

    КонецЕсли;

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

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

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

    Источник.Владелец <> МояОрг

    Тогда

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

    КонецЕсли;

    КонецЕсли;

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

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

    Источник.Владелец <> МояОрг

    Тогда

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

    КонецЕсли;

    КонецЕсли;

    КонецЕсли;

    Reply
  15. imagica

    Большое Вам спасибо !

    Reply
  16. kosko

    Автору спасибо, все отлично получилось. Кто не понял, то уже в настройках обмена нужно указать фильтр по организации

    Reply
  17. mm_84

    если выгрузка данных идет через произвольный набор, то эти отборы не работают, необходимо делать отборы в самих запросах, мне например при выгрузки данных из ЗУП 2.5 в ЗУП 3.0 где сплошь произвольные алгоритмы выборки переносимых данных, совсем не помогло. Хотя правила типовые. пришлось править запросы и алгоритмы, вставляя отборы.

    Reply
  18. bocharovki

    Немного не понятно зачем приведены разные алгоритмы в данных обработчиках. Я так понимаю отличие ведь должно быть только Объект — Источник?

    И по второму ЕСЛИ. Разве Реквизиты.Найти(«Владелец») не тоже самое что и Владельцы.Содержит?

    Reply
  19. musatov1c.ru

    Спасибо большое! Очень помогло! 🙂

    Reply
  20. cbr900

    Добрый день всем, кто задает вопросы!

    Эта публикация была в 2010 году, тогда я еще программировал. Сейчас уже давно не программирую. Поэтому на вопросы по существу ответить не смогу.

    Кому эта публикация помогла — супер!

    Reply
  21. Twirus

    Очень помогло! Спасибо автору.

    Reply
  22. tt33

    А если наоборот не нужно выгружать доки определьной организации

    Reply
  23. tt33

    Сам спросил сам ответил использовал вариант rhtr Иванов (rhtr) но вместо <> поставл =

    Reply
  24. user1090556

    Спасибо, пригодилось, единственное есть такие объекты у которых есть реквизит Организация, и они нужны всем если например этот реквизит не заполнен и Объект принадлежит всем организациям. Например справочник Соглашения с клиентами.

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

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

    Если Объект.Метаданные().Имя=»СоглашенияСКлиентами» и НЕ ЗначениеЗаполнено(Объект.Организация)Тогда //типовое

    Отказ=Ложь;

    Иначе

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

    КонецЕсли;

    КонецЕсли;

    КонецЕсли;

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *