Функция привязки контрагента по совпадению кода

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Vok
    Member
    • Jul 2020
    • 63

    Функция привязки контрагента по совпадению кода

    Добрый день, уважаем участники форума. Прошу помочь составить функцию .
    Условия: Есть "Контрагенты" у контрагентов есть поле "Код" . Есть "Участки" у участков есть тоже поле " Код"
    Нужно: Нужно что бы при добавлении кода в поле "код" у "Участка" проверялись контрагенты на наличие совпадений поля "Код" и "Участка" . Если совпадение найдено, то этому участку автоматически привязался ( назначался ) контрагент с таким же кодом.

    Огромное ему спасибо Maxsimus за то что откликнулся на мой вопрос (ЛС ), решил написать тему. Может кому тоже пригодится
    Сейчас получилось сделать такую функцию :

    ifThenElse(
    accountFiscalNumber == account.fiscalNumber,
    account = account.name
    )

    Но функция работает только если связать контрагента и участок
  • Maximus
    Senior Member
    • Nov 2018
    • 2731

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

    > Но функция работает только если связать контрагента и участок

    Так и должно быть. Что бы можно было проверять наличие какого-либо значение в поле другого объекта или же вытягивать значение поля из другого объекта нужно наличие отношений между объектами.
    Следует также отметить что такой подход возможен к отношениям типа Много-к-Одному, Один-к-Одному (Левый/Правый), Родительское отношение. При отношениях типа Один-к-Многим или же Многие-ко-Многим такой способ невозможен.

    Comment

    • Vok
      Member
      • Jul 2020
      • 63

      #3
      Спасибо. Правильно ли я понимаю, что я не смогу автоматически привязать Контрагента к Участку по номеру? Можно ли это ка нибудь сделать другим способом? Мне нужно при импорте Участков связать Контрагента и Участок. По имени не варианта т..к называться Контрагенты могут одинаково .
      Last edited by Vok; 07-09-2020, 08:38 AM.

      Comment

      • Maximus
        Senior Member
        • Nov 2018
        • 2731

        #4
        1. Какой тип отношения Контрагента к Участкам?
        2. При импорте реально привязать Участок к Контрагенту. Для этого в соответствующих колонках отношений (например "accountsId", "accountsIds") прописываются идентификаторы записей, а не имена.

        Comment

        • Vok
          Member
          • Jul 2020
          • 63

          #5
          Спасибо за ваш ответ))
          1) Тип отношения Контрагент - Один-ко-многим - Участок ; Участок - Много-к-одному - Контрагент
          2) Вы пишите "соответствующих колонках отношений (например "accountsId", "accountsIds") прописываются идентификаторы записей, а не имена." Вот это не понял. Пожалуйста можете объяснить подробней или дать пример .

          Comment

          • Maximus
            Senior Member
            • Nov 2018
            • 2731

            #6
            > 2) Вы пишите "соответствующих колонках отношений (например "accountsId", "accountsIds") прописываются идентификаторы записей, а не имена." Вот это не понял. Пожалуйста можете объяснить подробней или дать пример .

            Например при импорте для того чтобы Участок автоматически привязался к Контрагенту как правило в csv файл как правило сразу указывают accountsId в соответствующую колонку (см. скриншот).
            В вашем же случае вы хотите что бы при импорте система автоматически проверяла наличие у контрагентов определенного номера и привязывала Участок к Контрагенту. Неуверен на 100% но вы можете попробовать использовать следующую формулу для объекта Участок:

            Code:
            ifThen(
                entity\isNew(),
                accountId = record\findOne('Account', 'createdAt', 'desc', 'landCode=', $landCode)
            );
            Зазьяснения:
            entity\isNew() - формула выполнится только при случае создания новой записи Участка, как например в случае с импортом.
            accountId = record\findOne('Account', 'createdAt', 'desc', 'landCode=', landCode) - проверит все записи Контрагентов и вернет идентификатор первого попавшегося контрагента в котором значение landCode будет равно значению landCode объекта Участок.

            Примечание: следует понимать что функция record\findOne возвращает идентификатор первой попавшейся записи. Тоесть если 2 записи в системе будут соответствовать критерию фильтра, то все равно вернется первая попавшаяся.
            Attached Files

            Comment

            • Vok
              Member
              • Jul 2020
              • 63

              #7
              Ну вы просто волшебник. Всё закрутилось,завертелось !!! Огромное спасибо за интерес к моей ситуации. Без вас бы я точно это не сделал
              Последний вопрос. При импорте Контрагент ставится при точном соответствии имени контрагента из таблицы с именем в базе CRM . Можно ли как то изменить критерий отбора. Что бы к примеру в импортируемой таблице Контрагент имеет имя Иванов Иван , а в CRM Иванов Ваня . У обоих фамилия Иванов . И с помощью функции, которую вы написали выше остаётся один. У которого совпадает landCode

              Comment

              • Vok
                Member
                • Jul 2020
                • 63

                #8
                Хотя я поторопился. При импорте назначает одно контрагента. И так совпало, что он у меня был тестовый буду думать))

                Comment

                • Vok
                  Member
                  • Jul 2020
                  • 63

                  #9
                  Вопрос решил. Оказалось ESPOCRM у меня без обновления. Обновить было нужно так как
                  findOne не работало. Обновил до последней версии и всё работает как надо

                  Comment

                  Working...