Конвертация подразделений
Здравствуйте!
Есть база ЗУП с иерархическим справочником ПодразделенияОрганизаций (по факту в режиме предприятия он тоже заполнен с иерархией).
И есть УПП с иерархическим справочником Подразделения (по факту в УПП он без иерархии, почему-то наши сотрудники не заполнили его изначально иерархически..).
Мне надо конвертировать док. Прием на работу из ЗУП в УПП..
в ПКО в ПередВыгрузкой:
и в ПКС у реквизитов таблицы Работники
значение = ОбъектКоллекции.<соотв.имя>;
Все работает! и все бы хорошо, если не одно но: добавлять/изменять справочник Подразделения в УПП нельзя!!!!
и в зупе к примеру если подразделения имеют такую иерархию:
- подразделение 001000
- - подразделение 001010
- - подразделение 001020
- - - подразделение 001021
- - - подразделение 001022
в упп:
подразделение 001000
подразделение 001010
подразделение 001020
т.е. нет подразделений - - - подразделение 001021 и - - - подразделение 001022
суть в чем: при выгрузке документа, чтобы если у сотрудника подразделение - - - подразделение 001021, то ему присваивалось в упп подразделение 001020! т.е. его родитель..
это я так понимаю в ПКО в ПослеЗагрузки надо это как-то прописать? я правильно понимаю?
Есть база ЗУП с иерархическим справочником ПодразделенияОрганизаций (по факту в режиме предприятия он тоже заполнен с иерархией).
И есть УПП с иерархическим справочником Подразделения (по факту в УПП он без иерархии, почему-то наши сотрудники не заполнили его изначально иерархически..).
Мне надо конвертировать док. Прием на работу из ЗУП в УПП..
в ПКО в ПередВыгрузкой:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Сотрудник");
ТЗ.Колонки.Добавить("Подразделение");
ТЗ.Колонки.Добавить("Должность");
ТЗ.Колонки.Добавить("ДатаПриема");
новстр = ТЗ.добавить();
новстр.Сотрудник = Источник.Сотрудник;
новстр.Подразделение = Источник.Подразделение;
новстр.Должность = Источник.ДолжностьПоШтатномуРасписанию;
новстр.ДатаПриема = Источник.ДатаПриема;
ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("Работники", ТЗ);
Показатьи в ПКС у реквизитов таблицы Работники
значение = ОбъектКоллекции.<соотв.имя>;
Все работает! и все бы хорошо, если не одно но: добавлять/изменять справочник Подразделения в УПП нельзя!!!!
и в зупе к примеру если подразделения имеют такую иерархию:
- подразделение 001000
- - подразделение 001010
- - подразделение 001020
- - - подразделение 001021
- - - подразделение 001022
в упп:
подразделение 001000
подразделение 001010
подразделение 001020
т.е. нет подразделений - - - подразделение 001021 и - - - подразделение 001022
суть в чем: при выгрузке документа, чтобы если у сотрудника подразделение - - - подразделение 001021, то ему присваивалось в упп подразделение 001020! т.е. его родитель..
это я так понимаю в ПКО в ПослеЗагрузки надо это как-то прописать? я правильно понимаю?
Прикрепленные файлы:

По теме из базы знаний
- Конвертация данных Парус 7, 10 - ЗУП 2.5, ЗИКБУ 1.0, КА 1.1, УПП
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Выгрузка сотрудников, их должностей и подразделений ЗУП 3.х -> 1С:Транспортная логистика, экспедирование 1.1.Х (в т.ч. по расписанию регламентно)
- Кастомный товарный отчет по документам УНФ с отборами по структурным подразделениям
- Перенос документов "Отражение зарплаты в бухучете" из ЗУП 3.1 в БП 3.0 сводно для физических лиц и подразделений БП
Найденные решения
(8) Другой вариант действительно через поля поиска, нужно для начала в ПКО Подразделения указать Код как поле поиска (отметить галочкой)
В ПКО Подразделения в обработчике ПоляПоиска написать код:
Но тут есть минус, если не нашли по коду, то будет создан новый элемент справочника подразделения.
Чтобы этого не было надо в ПКО Подразделения в обработчике ПослеЗагрузки вставить код:
В ПКО Подразделения в обработчике ПоляПоиска написать код:
КодДляПоиска = СвойстваПоиска.Код;
МассивКодов = Новый Массив;
МассивКодов.Добавить(КодДляПоиска);
МассивКодов.Добавить(ЛЕВ(КодДляПоиска, СтрДлина(КодДляПоиска)-1) + "0"); //Заменяем последний символ на 0
МассивКодов.Добавить(ЛЕВ(КодДляПоиска, СтрДлина(КодДляПоиска)-2) + "00"); //Заменяем последние 2 символа на 0
СсылкаНаОбъект = Неопределено;
Для Каждого ВариантКода Из МассивКодов Цикл
СсылкаНаОбъект = Справочники.Подраздения.НайтиПоКоду(ВариантКода);
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
ПрекратитьПоиск = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
ПоказатьНо тут есть минус, если не нашли по коду, то будет создан новый элемент справочника подразделения.
Чтобы этого не было надо в ПКО Подразделения в обработчике ПослеЗагрузки вставить код:
Если Объект.ЭтоНовый() Тогда
Отказ = Истина;
КонецЕсли;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)а если неизвестна глубина иерархии? но известно, что она не более 5 где-то..
я почитала в справке по ПКО.ПоляПоиска..
как правильно написать, что надо искать код подразделения без последних к примеру 2х символов (точнее их заменить на ноль!)
я почитала в справке по ПКО.ПоляПоиска..
Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных.
Параметры:
НомерВариантаПоиска - число. Номер попытки поиска. Попыток поиска может быть не больше 10.
СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.
ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых установлен признак поиска.
ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.
СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
УстанавливатьУОбъектаВсеСвойстваПоиска - булево. Определяет нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флаг определяет нужно оставшиеся реквизиты, которые не участвовали в поиске (но по которым поиск возможен) установить объекту или нет. Значение по умолчанию: Истина.
НастройкаПоиска - строка. Выбранный пользователем вариант сопоставления объектов. В ПКО есть таблица Варианты настроек полей поиска - с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.
СтрокаИменСвойствПоиска – строка в которой задаются ключевые поля варианта поиска. Могут быть указаны только те свойства, для которых при настройке правил обмена был выставлен флаг поиска.
Пример:
Если НомерВариантаПоиска = 1 тогда
СтрокаИменСвойствПоиска = "Код, Наименование";
ИначеЕсли НомерВариантаПоиска = 2 тогда
СтрокаИменСвойствПоиска = "Код";
Иначе
СтрокаИменСвойствПоиска = "Наименование";
КонецЕсли;
ПоказатьПоиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных.
Параметры:
НомерВариантаПоиска - число. Номер попытки поиска. Попыток поиска может быть не больше 10.
СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.
ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых установлен признак поиска.
ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.
СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
УстанавливатьУОбъектаВсеСвойстваПоиска - булево. Определяет нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флаг определяет нужно оставшиеся реквизиты, которые не участвовали в поиске (но по которым поиск возможен) установить объекту или нет. Значение по умолчанию: Истина.
НастройкаПоиска - строка. Выбранный пользователем вариант сопоставления объектов. В ПКО есть таблица Варианты настроек полей поиска - с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.
СтрокаИменСвойствПоиска – строка в которой задаются ключевые поля варианта поиска. Могут быть указаны только те свойства, для которых при настройке правил обмена был выставлен флаг поиска.
Пример:
Если НомерВариантаПоиска = 1 тогда
СтрокаИменСвойствПоиска = "Код, Наименование";
ИначеЕсли НомерВариантаПоиска = 2 тогда
СтрокаИменСвойствПоиска = "Код";
Иначе
СтрокаИменСвойствПоиска = "Наименование";
КонецЕсли;
как правильно написать, что надо искать код подразделения без последних к примеру 2х символов (точнее их заменить на ноль!)
Надо в ЗУП к подразделениям добавить признак "Есть в УПП"
При выгрузке подразделения определять его рекурсивно, пока не найдем подразделение у которого есть признак "Есть в УПП"
Суть в том, что надо определять подразделение при отправке из ЗУП, а при загрузке в УПП.
При выгрузке подразделения определять его рекурсивно, пока не найдем подразделение у которого есть признак "Есть в УПП"
Суть в том, что надо определять подразделение при отправке из ЗУП, а при загрузке в УПП.
(5) реквизит добавлять не хотелось бы. а вот
я вот думаю в ПКО При загрузке надо писать если найден = супер.. если нет, то ищем,чтобы на конце еще два нолика... как то так..
"надо определять подразделение при отправке из ЗУП, а при загрузке в УПП."
хотелось бы сделать правильно.
я вот думаю в ПКО При загрузке надо писать если найден = супер.. если нет, то ищем,чтобы на конце еще два нолика... как то так..
(8) Другой вариант действительно через поля поиска, нужно для начала в ПКО Подразделения указать Код как поле поиска (отметить галочкой)
В ПКО Подразделения в обработчике ПоляПоиска написать код:
Но тут есть минус, если не нашли по коду, то будет создан новый элемент справочника подразделения.
Чтобы этого не было надо в ПКО Подразделения в обработчике ПослеЗагрузки вставить код:
В ПКО Подразделения в обработчике ПоляПоиска написать код:
КодДляПоиска = СвойстваПоиска.Код;
МассивКодов = Новый Массив;
МассивКодов.Добавить(КодДляПоиска);
МассивКодов.Добавить(ЛЕВ(КодДляПоиска, СтрДлина(КодДляПоиска)-1) + "0"); //Заменяем последний символ на 0
МассивКодов.Добавить(ЛЕВ(КодДляПоиска, СтрДлина(КодДляПоиска)-2) + "00"); //Заменяем последние 2 символа на 0
СсылкаНаОбъект = Неопределено;
Для Каждого ВариантКода Из МассивКодов Цикл
СсылкаНаОбъект = Справочники.Подраздения.НайтиПоКоду(ВариантКода);
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
ПрекратитьПоиск = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
ПоказатьНо тут есть минус, если не нашли по коду, то будет создан новый элемент справочника подразделения.
Чтобы этого не было надо в ПКО Подразделения в обработчике ПослеЗагрузки вставить код:
Если Объект.ЭтоНовый() Тогда
Отказ = Истина;
КонецЕсли;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот