Ваш браузер устарел, не поддерживает современные веб-стандарты и представляет угрозу Вашей безопасности. Для комфортной работы с порталом, пожалуйста, установите современыый браузер.
Портал технической поддержки

Конструктор справочников - поиск/замена сотрудника по всем справочникам (DV 5.2)

Комментарии

Комментариев: 8

  • Официальный комментарий

    Для универсальной работы с полями работайте через низкоуровневое API, которое CardData, CardType и т.д. (API Workflow из варианта 1 очень устарело и его вообще лучше без особых причин не использовать).

    oConstructDic.Value - это, судя по всему, Id строки, дальше будет тогда
    BaseUniversalItemType vBaseDict = objectContext.GetObject<BaseUniversalItemType>(new Guid(oConstructDic.Value));

     

    А коллекцию полей строки лучше всего получать через описание секции, для конкретной строки это будет rowData.Section.Type.Fields, а в общем случае для произвольного типа карточки это будет коллекция
    Session.CardManager.CardTypes[cardTypeId].AllSections[sectionTypeId].Fields
    cardTypeId - id типа карточки
    sectionTypeId - id секции

    Действия с комментариями Постоянная ссылка
  • Avatar
    Leonid Mishin

    да, может и устарел, но пока мне кажется самым удобным и простым.

    oConstructDic.Value - это срока секции, там целый набор ID. Как его разобрать у меня есть представление, т.к. уже сталкивался с похожей проблемой между данными карточек и заданий в 4.5, но жаль что обычное приведение никак не работает (т.е. какая то несовместимость переменных процесса с типами данных). Ваш вариант в этом случае тоже не прокатит - нужно сначала ID справочника из переменной выделить.

    ..Section.Type.Fields - жа это помогло. список полей перебирается, вижу их Alias, он равен Name, но не тот что отображается в поле при просмотре справочника . Не подскажете в каком поле это имя хранится?

    и как определить тип даных в этом поле, и коллекция это или нет?

    еще я вижу такие поля: Name: ChangeServerID - можно как то системные от пользовательских отсеить?

     

    Спасибо.

     

     

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Leonid Mishin

    про тип поля: я вижу что Type: RefId - но что это за RefId не понятно (справочник контрагента, универсальный справочник, конструктор справочников, подразделение, сотрудник, подразделение контрагента, контрагент, и т.п.) - т.е. хотелось бы отсеивать сразу не нужные типы данных, а не проверять все подряд.

     

    Спасибо.

    0
    Действия с комментариями Постоянная ссылка
  • Если нужно разобрать строку из переменной, то приводите значение к DVCardRow через (DVCardRow)oConstructDic.Value

    Описание полей можно посмотреть в документе Описание полей стандартных карточек.

    Или, как вариант, просто посмотрите его локализованное имя в русской локали, обычно оно совпадает с названием элемента управления в UI.

    0
    Действия с комментариями Постоянная ссылка
  • RefId - ссылка на справочник, в LinkedCardType - тип карточки, LinkedSection - тип секции.

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Leonid Mishin

    Евгений,

    oConstructDic.Value - с этим понятно - так я делал в первом варианте. Также можно и запарсить строковое значение.

    RefId - ок. спасибо. что то получилось. напишу отдельную функцию доопределения типов.

    Также интересует как узнать что в поле коллекция значений? - они также получаются или другим способом?

    и остается в силе вопрос - что в разметке эти поля имеют другое название - как связать название с разметки найденной строкой?

    и еще один вопрос: запустил для теста перебор одной карточки строки справочника, с выводом в лог. Получилось следующее:

    mfContractRoute

    • Alias: mfRouteFilial
    • Alias: mfRouteLogist
    • Alias: mfRouteBuh
    • mfRouteFinance
    • mfRouteTreasury
    • Alias: mfRouteDirectorDF
    • Alias: mfRouteSUD
    • Alias: mfRouteDDMK
    • Alias: mfRouteManager

    mfStaffSection -> mfStaffField

    то что жирным курсивом - эти поля он почему то пропустил. Есть какие то объяснимые причины по которой он может пропускать какие то строки? или нужно покопаться в коде и схеме данных?

    то что простым курсивом еще не проверил - там как раз у меня коллекция сотрудников.

     

    Спасибо.

    0
    Действия с комментариями Постоянная ссылка
  • Никаких коллекций значений в полях быть не может, может быть табличная секция или какой-нибудь элемент управления, который пишет данные в поле нестандартным способом (есть, н-р, элемент множественного выбора из справочника, который пишет в строковое поле строку с Id карточек / секций / строк в ней).

    Пропустить перебор полей в метаданных точно ничего не может, если поля есть в определении карточки, то они должны вывестись.

     

    Названия в разметке могут быть любые, реальные данные карточки о разметках вообще ничего не знают.

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

    0
    Действия с комментариями Постоянная ссылка
  • Avatar
    Leonid Mishin

    Евгений,

    спасибо. Почти разобрался.

    списки были не полными, т.к. одно из значений имело значение null, из-за этого исполнение прерывалось. Пока не нашел нормального способа проверки, поэтому сделал через try catch

    по коллекциям (в точности множественный выбор) - тоже вроде разобрался - в этом случае в секцию на каждое значение пишется новая строка (это значит, что мне нужно еще строки там поперебирать)

    по тому как добраться до отображаемому имени поля - пока не разобрался. в документации тоже пока не нашел, либо не там ищу.

     

    еще раз спасибо.

    0
    Действия с комментариями Постоянная ссылка

Войдите в службу, чтобы оставить комментарий.