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



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

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

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

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

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

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

КонецЕсли;

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 не будет опубликован. Обязательные поля помечены *