Перейти к содержимому


Сопоставление полей разных таблиц


Сообщений в теме: 9

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 13 Апрель 2014 - 11:50

Каким образом можно сопоставить поле "Логин" таблицы "Контрагенты" с полем "Логин" таблицы "Балансы" и в случае совпадения подтянуть в поле "Текущий баланс" табл. "Контрагенты" соответствующее значение из таблицы "Балансы"?

Т.е. сторонний софт делает выгрузку логинов с остатками баланса и необходимо загрузить эти балансы в каждую карточку контрагента.

Спасибо.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 14 Апрель 2014 - 09:47

А каким образом этот сторонний софт заполняет таблицы Балансы? Почему он не может сразу обновить и таблицу Контрагентов? Код стороннего скрипта можете привести?

#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 15 Апрель 2014 - 11:17

Из стороннего софта делается выгрузка в формате CSV. Синхронизировать скрипты впринципе нет смысла.
Нужно просто загрузить в таблицу "Балансы" логин и его баланс, а потом при совпадении логинов записать этот баланс в карточку контрагента.

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

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Апрель 2014 - 14:50

Т.е. вы берете полученный сторонним скриптом файл CSV и импортируете его в таблицу Балансы? Правильно понял?

Мне не синхронизация скриптов нужна, мне важен способ заполнения таблицы, т.к. от этого зависит и способ сопоставления.

#5 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 16 Апрель 2014 - 08:18

Да, вы все правильно поняли.

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 16 Апрель 2014 - 11:01

Тогда подойдет стандартное вычисление на изменение поля в таблице Балансы. Оно будет работать как при ручном добавлении/изменении, так и при импорте (которое по сути то же самое добавление, только автоматизированное).

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

#7 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 22 Апрель 2014 - 14:03

Попробовал сделать вычисление:

if ($line['Логин'] == $line['Контрагенты']['Логин'])
{data_update(42, array("f12831" => $line['Баланс']), "f12821=",$ID);}
else{;}


где: 42 - таблица Контрагенты
f12831 - поле "Баланс" таблицы Контрагенты
$line['Баланс'] - поле "Баланс" таблицы "Балансы"
f12821 - поле "Связь с балансом" (связь с полем Логин таблицы "Балансы" по ID)


Не срабатывает.

Сообщение отредактировал fabrika-r: 22 Апрель 2014 - 14:04


#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Апрель 2014 - 16:10

Откуда у вас в Балансах взялось поле связи с Контрагентом, не понял? Я про $line['Контрагенты']['Логин']. Оно подразумевает наличие поля связи "Контрагенты" в таблице Балансы. Если это поле есть и заполнено, то непонятно зачем вообще тогда вам логины сопоставлять (т.к. уже есть связь через поле связи). Или вы все опять сильно напутали и неправильно поняли меня. Я подразумевал равенство логинов непосредственно в запросе, без наличия какого либо поля связи:

data_update(42, array("f12831" => $line['Баланс']), "f111='",$line['Логин'],"'"); // 111 - поле Логин в Контрагентах


#9 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 22 Апрель 2014 - 16:50

Я наверное опять все усложнил)

Сделал как вы сказали, получилось.

Спасибо.

Сообщение отредактировал fabrika-r: 22 Апрель 2014 - 16:50


#10 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 22 Апрель 2014 - 21:04

Помогите, пожалуйста, еще с одним моментом - Вычисление в таблице "Контрагенты". Если поле "Логин" т. "Контрагаенты" совпадает с полем "Логин" т. "ХХХ", то необходимо перенести поле "Юр. название" из т. "Контрагенты" в т. "ХХХ".

data_update(661, array("f13141" => $line['Юридическое название']), "f13021='",$line['Логин'],"'");

где: 661 - таблица "ХХХ" куда нужно перенести данные
f13141 - поле "Юридическое название" таблицы "ХХХ". Поле типа связь с таблицей "Контрагенты".
$line['Юридическое название'] - поле в таблице "Контрагенты"
f13021 - поле "Логин" т. "ХХХ"
$line['Логин'] - поле "Логин" т. "Контрагенты".

Если f13141 указать как поле типа текст, то значение записывается в таблицу, но перейти в карточку контрагента не представляется возможным.
А если f13141 оставить полем типа связь, то значение не передается. Пробовал передавать как
$line['Юридическое название']['raw'] - тоже не передавалось.





Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных