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


Автоматическая подстановка менеджера в счетах


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

#1 Davyd80

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

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

Отправлено 07 Февраль 2014 - 13:00

Уважаемые, не очень знаком с php, поэтому прошу помощи.
Необходимо, что бы при добавление Счета автоматически вставлялся Менеджер отвечающий за эту Компанию. Связь Менеджера в Счетах идет на Контрагенты-Менеджер.
Какое вычисление добавить?
Заранее благодарю за помощь.

#2 CbCoder

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

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

Отправлено 07 Февраль 2014 - 14:02

$line['Менеджер'] = $line['Компания']['Менеджер'];

Тут не столько знание PHP, сколько знание работы с вычислениями. Это все ведь есть в документации.

#3 Davyd80

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

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

Отправлено 07 Февраль 2014 - 14:46

Спасибо, я просто только учусь, до этого не сталкивался с такими вычислениями.

Попробовал, у меня все равно не отображается Менеджер.
Т.е. мне надо, что бы при импорте Счетов (Юр. название компании + дата счета + сумма) автоматически подставлялся Менеджер который прикреплен к этой компании и соответственно отображался потом в таблице.

#4 CbCoder

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

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

Отправлено 07 Февраль 2014 - 16:05

Сам контрагент то при этом импортируется без ошибок? Связь с ним создается?

Если да, то либо у вас поле Менеджер не с типом "пользователь", либо имя поля с контрагентом не "Компания" (у вас в сообщении его нет, поэтому я поставил произвольное). Например, в стандартной конфигурации в Счетах оно имеет вид "На кого". Т.е. будет $line['Менеджер'] = $line['На кого']['Менеджер'];

Кроме того, я забыл уточнить, что вычисление должно быть на событие изменения поля "Компания" ("На кого"). Возможно, вы сами этого не учли.

#5 Davyd80

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

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

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

Спасибо большое, все получилось.

#6 Davyd80

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

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

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

Если можно, еще один вопросик:
Мне необходимо добавить поле у Контрагента где отображается счет за предыдущий месяц (абонентская плата), т.е. если была абонентская плата за прошлый месяц, стоит сумма, если нет, то суммы нет, как это можно реализовать?

#7 CbCoder

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

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

Отправлено 13 Февраль 2014 - 13:27

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

#8 Davyd80

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

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

Отправлено 26 Март 2014 - 13:25

С датой последнего счета я разобрался
$result = data_select_field(43, "max(f436) as max_date", "f839=",$line['ID']); // 43 - id таблицы "Счета", 436 - id поля "Дата", 839 - id поля "На кого"
$row = sql_fetch_assoc($result);
$line['Дата последнего счета'] = $row['max_date'];
А подскажите как сделать выборку по предыдущему месяцу и достать от туда сумму?

Сообщение отредактировал Davyd80: 26 Март 2014 - 13:27


#9 CbCoder

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

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

Отправлено 26 Март 2014 - 14:12

$result = data_select(43, "f839=",$line['ID']," and month(f436) = month(current_date - interval 1 month)");
$row = sql_fetch_assoc($result);
$line['Дата счета в предыдущем месяце'] = $row['f839'];

Операции с датами в MySQL

#10 Davyd80

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

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

Отправлено 26 Март 2014 - 14:19

Спасибо большое

Сообщение отредактировал Davyd80: 26 Март 2014 - 14:23


#11 Davyd80

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

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

Отправлено 26 Март 2014 - 15:12

Не совсем корректно отображается, не учитывается год (счета импортировал за несколько лет).
Написал
$result = data_select(43, "f839=",$line['ID']," and month(f436) = month(current_date - interval 1 month), " and year(f436) = year(current_date)");
$row = sql_fetch_assoc($result);
$line['Сумма последнего счета'] = $row['f454'];
но не работает. Где может быть ошибка?

Сообщение отредактировал Davyd80: 26 Март 2014 - 15:13


#12 Davyd80

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

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

Отправлено 26 Март 2014 - 15:22

Сам разобрался
$result = data_select(43, "f839=",$line['ID']," and month(f436) = month(current_date - interval 1 month) and year(f436) = year(current_date)");
$row = sql_fetch_assoc($result);
$line['Сумма последнего счета'] = $row['f454'];


#13 CbCoder

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

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

Отправлено 26 Март 2014 - 15:39

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

Правильнее так:

$result = data_select(43, "f839=",$line['ID']," and month(f436) = month(current_date - interval 1 month) and year(f436) = year(current_date - interval 1 month)");
$row = sql_fetch_assoc($result);
$line['Сумма последнего счета'] = $row['f454'];


#14 Davyd80

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

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

Отправлено 27 Март 2014 - 12:14

Спасибо, добавил.
Попутно еще вопросик, мне нужен такой фильтр: В позапрошлом месяце сумма счета не равна 0 и в прошлом месяце сумма счета равна 0 или меньше на 50%.
Возможно с помощью запросов, в режиме эксперта, реализовать это в фильтре счетов?

#15 CbCoder

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

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

Отправлено 27 Март 2014 - 12:37

Может вы имели ввиду следующее:

Цитата

Счета с датой из позапрошлого месяца и суммой не равной нулю или счета с датой из прошлого месяца и суммой равной нулю или меньше на 50% (кстати, меньше чего?)

Потому как дата одного и того же счета не может быть одновременно из двух месяцев.

#16 CbCoder

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

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

Отправлено 27 Март 2014 - 12:40

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

#17 Davyd80

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

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

Отправлено 27 Март 2014 - 12:44

Извиняюсь, немного напутал с формулировкой.
Счета из позапрошлого месяца и суммой не равной нулю или счета из прошлого месяца и суммой равной нулю или меньше на 50% от суммы счета позапрошлого месяца.
Фильтр мне такой необходим, что бы видеть ушел абонент или нет.
Например:
Есть Рога и копыта, у него в январе был счет на 10000 руб, а в феврале уже счет 0 или 3000 руб, значит он ушел.

#18 CbCoder

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

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

Отправлено 27 Март 2014 - 13:05

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

#19 Davyd80

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

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

Отправлено 27 Март 2014 - 13:16

Спасибо. Я реализовал это через запросы в Контрагентах по прошлому месяцу и позапрошлому, а потом сделал фильтр по этим 2 полям. Единственное, что 50% не посчитать :(
Еще вопросик: Почему когда делаешь запрос и ставишь считать итоговую сумму, то она считает только с первой страницы? Приходится кликать по всем страницам, что бы корректную сумму выдавало и то не всегда выдает корректную :(

Сообщение отредактировал Davyd80: 27 Март 2014 - 13:49


#20 CbCoder

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

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

Отправлено 27 Март 2014 - 13:29

Не совсем понял вас, что за запрос? Вы имеете ввиду вычисление на отображение поля что ли? Ну так это естественно что оно и не будет срабатывать, пока вы не отобразите эту запись.





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

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