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


Вывод данных из ВСЕЙ таблицы в шаблон docx

docx вычисляемые переменные отчет шаблон

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

#1 Rapman

    Участник

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

Отправлено 26 Декабрь 2016 - 02:46

Добрый день всем!
Немного запутался, прошу помочь.
Есть таблица "Заявки" с заказами клиентов(получателей). Для ежемесячной отчетности нужно печатать docx по КАЖДОМУ клиенту. Что выводить: все даты списком, когда выполнялся заказ. Например, Вася в декабре 10 раз заказывал услугу(она у нас одна), есть 10 записей в таблице "Заявки". Ставим галку на одной из записей и нажимаем-распечатать-отчет за текущий месяц. Вывелись в столбик все даты выполнения заказа. Далее нажимаем Петю и тд.
Я так понял, вычисляемая переменная может действовать ИСКЛЮЧИТЕЛЬНО в пределах выделенной строки? А есть возможность как-то сортировать и выводить данные из всей таблицы в шаблон печати?
Вот набросал примерный код, там много ошибок вероятно:
$cur_rec = data_table("Заявки", "id={ID}");
$data = data_table("Карточки получателей", "id=".$cur_rec["ФИО получателя"]);
$fio = $data["ФИО"];
$sqlQuery = "SELECT 'f5951'
			 FROM ".DATA_TABLE."331
			 WHERE 'f5831' = '".$fio."'
			   AND MONTH(`f5951`) = MONTH(NOW())
	  AND YEAR(`f5951`) = YEAR(NOW())
			   ";
$vyborka = sql_query($sqlQuery);
$row = sql_fetch_assoc($vyborka);
return $row;

Покрутив его пару вечеров, понял, что дело не в кривости кода, а наверно в том, что мой SELECT лежит как-бы внутри вашего программного SELECTа, который сразу берет одну запись и не позволяет работать с всей таблицей, что бы я там внутри переменной не прописал...
Вот код, который почему-то выводит всего одну строку(в каком-то db-шном виде):
$sqlQuery = "SELECT *
			 FROM ".DATA_TABLE."331
			 ";
$vyborka = sql_query($sqlQuery);
$row = sql_fetch_array($vyborka);
$str = serialize($row);
  return $str;
Еще вот над чем думаю. В этой таблице создал поле типа связь "ФИО"(оно вообще не выводится через SQL, но пока не об этом), а потом сделал эту таблицу подчиненной к таблице "Карточки клиентов" - тоже по "ФИО" связь. В итоге, при открытии карточки клиента, открываются все записи с его заказами. Может можно через SQL обращаться к этой таблице, как-то иначе, как к подчиненной таблице другой таблицы? И тогда можно будет выбирать данные из всех записей?

#2 CbCoder

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

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

Отправлено 26 Декабрь 2016 - 09:06

Ваш код выводит одну строку потому что у вас в коде вывод только одной строки. Программа Клиентская база тут не причем.

$row = sql_fetch_array($vyborka); // данная конструкция выводит только одну строку из запроса, для вывода всех строк необходим цикл while


#3 Alien

    Новичок

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

Отправлено 26 Декабрь 2016 - 09:08

Просмотр сообщенияRapman (26 Декабрь 2016 - 02:46) писал:

Например, Вася в декабре 10 раз заказывал услугу(она у нас одна), есть 10 записей в таблице "Заявки". Ставим галку на одной из записей и нажимаем-распечатать-отчет за текущий месяц. Вывелись в столбик все даты выполнения заказа.

Может можно через SQL обращаться к этой таблице, как-то иначе, как к подчиненной таблице другой таблицы? И тогда можно будет выбирать данные из всех записей?

//В таблице клиентов
$client_id = intval($line['id']);
$sql_order = "SELECT `Поле с датой` FROM `Таблица заявок`
WHERE `Поле связи с клиентами` = ".$client_id."
AND MONTH(`f5951`) = MONTH(NOW())
AND YEAR(`f5951`) = YEAR(NOW())
AND `status` = 0
";
$res_order = sql_query($sql_order);
while($row_order=sql_fetch_assoc($res_order))
  $order_date_arr[] = form_local_time($row_order['Поле с датой']);

//$order_date_arr - массив с датами заказов выбранного клиента в текущем месяце

Сообщение отредактировал Alien: 26 Декабрь 2016 - 09:09


#4 CbCoder

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

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

Отправлено 26 Декабрь 2016 - 10:36

Ну вроде верно все сейчас, если конечно заменить имена полей на реальные бд-шные. Полученный массив можно имплодить в нужную вам строку:

$order_date_str = implode(",", $order_date_arr);

В данном случае даты будут через запятую, если вам нужно именно в столбец, то вероятно надо заменить запятую на перевод строки ("\r\n"), но не уверен что в шаблоне word это отобразится.

#5 maksn

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

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 26 Декабрь 2016 - 11:12

Просмотр сообщенияCbCoder (26 Декабрь 2016 - 10:36) писал:

вероятно надо заменить запятую на перевод строки ("\r\n"), но не уверен что в шаблоне word это отобразится.
В MS WINDOWS перевод стоки это два символа - CR(#13) и LF(#10). Можно попробовать так
$order_date_str = implode("#13#10", $order_date_arr);
Но то же не уверен
"...Сижу, паяю. CRM починяю..."
Мои разработки

#6 CbCoder

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

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

Отправлено 26 Декабрь 2016 - 12:09

Просмотр сообщенияmaksn (26 Декабрь 2016 - 11:12) писал:

В MS WINDOWS перевод стоки это два символа - CR(#13) и LF(#10). Можно попробовать так

Я именно эти 2 символа и задал, но в формате PHP. Не факт просто что word их в итоге отобразит. Впрочем как и ваш вариант.

#7 Rapman

    Участник

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

Отправлено 29 Декабрь 2016 - 02:28

Alien, CbCoder, maksn - благодарю за участие.

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

#8 maksn

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

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 29 Декабрь 2016 - 08:42

Просмотр сообщенияRapman (29 Декабрь 2016 - 02:28) писал:

Все работает, кроме одного. в $client_id всегда ложится NULL.
Если у Вас $client_id определен в коде так
$client_id = intval($line['id']);
то $client_id по определению не может быть NULL - будет 0 если даже массив $line не определен. Функция intval().
Похоже у Вас где то теряется $client_id

Сообщение отредактировал maksn: 29 Декабрь 2016 - 09:19

"...Сижу, паяю. CRM починяю..."
Мои разработки

#9 Rapman

    Участник

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

Отправлено 11 Февраль 2017 - 01:09

Всем добрый день.
В результате каких-то шаманских действий добился результата.
Вот код, выводящий даты в столбик:
//В таблице заявок:
$cur_rec = data_table("Заявки", "id={ID}");
$fio = $cur_rec["ФИО получателя"];
$sql_order = "SELECT `f5951` FROM ".DATA_TABLE."331
WHERE `f5831` = ".$fio."
AND MONTH(`f5951`) = MONTH(NOW())
AND YEAR(`f5951`) = YEAR(NOW())
AND `status` = 0";
$res_order = sql_query($sql_order);
while($row_order=sql_fetch_assoc($res_order))
$order_date_arr[] = form_local_time($row_order['f5951']);
$order_date_str = implode(", \r\n", $order_date_arr);
return $order_date_str;
Отсюда последний вопрос(на эту тему): что значат первые 2 строки? Я по остальному встречал информацию в документации по php и SQL, но эти строки- пока что магия для меня...

#10 CbCoder

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

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

Отправлено 11 Февраль 2017 - 15:03

А что собственно в них непонятного? 1) делаем запрос к текущей записи 2) копируем значение поля ФИО получателя в переменную.





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

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