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


пспользование SQL запросов в шаблоне печати.


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

#1 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 01 Май 2011 - 23:46

Возможно использование SQL запросов в шаблоне печати?

Допустим надо вывести список компаний отобранных по нескольким критериям (например дате создания и пользователю заданных в таблице-отчете).

Представления не дают возможности сохранять историю отбора...

#2 CbCoder

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

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

Отправлено 03 Май 2011 - 09:29

Что мешает Вам задать эти критерии поиска в самой таблице через фильтр или расширенный поиск, а затем, выделив все нужные записи, отправить их на печать? В результате получите необходимый список компаний.

#3 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 03 Май 2011 - 10:14

список компаний был как пример, на самом деле данных нужно больше и надо не просто отправить на печать, а сделать это в определенной форме.
так это возможно или нет?

#4 CbCoder

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

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

Отправлено 03 Май 2011 - 12:49

Просмотр сообщенияmak (3.5.2011, 11:14) писал:

так это возможно или нет?
Я не совсем понимаю что Вы имеете ввиду под "SQL запросом в шаблоне печати" и зачем Вам это нужно. SQL запрос (точнее условие WHERE из него) в данном случае должен задаваться в фильтре к таблице, а затем, применив этот фильтр, можно послать нужные Вам записи на печать. Все данные для печати разумеется уже должны быть в текущей таблице, хотя бы через поля связи. Если же Вы хотите какой-то сборный отчет, из разных таблиц, или с применением некоего сложного SQL запроса, то это можно реализовать только через отчеты-представления - собственно для этого они и предназначены. Согласитесь несколько странно из какой-то таблицы открывать шаблон печати, основанный на своем, произвольном SQL запросе, не связанным напрямую с данной таблицей.

#5 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 03 Май 2011 - 22:27

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

Поэтому последний вариант оставался в таблице задавать критерии выборки для шаблона а в шаблоне получать эти данные напрямую из БД, но php код в шаблоне не выполняется или я не правильно его пишу - <?php echo "test"; ?> не выводит на экран test.

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

#6 CbCoder

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

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

Отправлено 04 Май 2011 - 09:15

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

Делая фильтр в счетах, я не могу сохранить данные, только распечатать.
Что значит "сохранить" не совсем понял, и главное - как в этом деле поможет использование SQL запроса? Если речь о сохранении параметров выборки - так это и есть заранее сохранненый фильтр.

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

но php код в шаблоне не выполняется или я не правильно его пишу - <?php echo "test"; ?> не выводит на экран test
Опять же в руководстве по шаблонам написано, что они создаются на языке Smarty. PHP код в таком виде там разумеется выполнятся не будет.

Может можно поместить результат запроса в многострочное поле таблицы при сохранении записи? какие ограничения на размер в этом поле?
65535 символов максимум (MySQL тип "TEXT")

#7 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 05 Май 2011 - 11:05

Под "SQL запросом в шаблоне печати" я имею ввиду произвольный запрос к любой таблице.
Приведите пример запроса (в применении к Вашей задаче), который нельзя реализовать через фильтры. Если допустим речь о
select * from таблица123 where поле111=data[поле1] and поле222=data[поле2] ... условия отбора по полям из таблицы в которой создается шаблон.

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

Делая фильтр в счетах, я не могу сохранить данные, только распечатать.
Что значит "сохранить" не совсем понял, и главное - как в этом деле поможет использование SQL запроса? Если речь о сохранении параметров выборки - так это и есть заранее сохранненый фильтр.
имеется ввиду сохранить отчет как файл, вложить в шаблон отправки для ручной или автоматической отправки по почте. т.е. сохранить не параметры выборки а саму форму отчета

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

но php код в шаблоне не выполняется или я не правильно его пишу - <?php echo "test"; ?> не выводит на экран test
Опять же в руководстве по шаблонам написано, что они создаются на языке Smarty. PHP код в таком виде там разумеется выполнятся не будет.
да, читал. {php} ... {/php} тоже не работает, видимо отключено в настройках

Может можно поместить результат запроса в многострочное поле таблицы при сохранении записи? какие ограничения на размер в этом поле?
65535 символов максимум (MySQL тип "TEXT")
пока достаточно, но в будущем может не хватить, да и сложно - потом парсить замучаешься. пока решил при сохранении заполнять подтаблицу нужными данными из счета и использовать их в шаблоне стандартным способом.

#8 CbCoder

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

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

Отправлено 05 Май 2011 - 11:51

да, но фильтры будут статичны
Не всегда, до определенной степени можно задавать и динамичные фильтры (например по текущей дате и пользователю). Если же этого сделать нельзя - по сути в роли произвольного фильтра с заданием всех необходимых условий играет расширенный поиск. Заходите и ставите какую Вам надо дату и статус для отбора. Фильтр - это по сути просто "заранее сохраненные" администратором те же параметры поиска.

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

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

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

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

#9 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 05 Май 2011 - 12:16

в общем то убедили. :)
осталось убедить заказчика, что сохранять историю отборов ему не надо....

возник такой вопрос - если менеджер, который видит не все записи в таблице, задает параметры поиска и нажимает (не выделяя ни одной записи) кнопку распечатать, в шаблон отправляются ВСЕ записи таблицы ограниченные:
1. фильтром указанным в его доступе
2. фильтром, который он применил к видимым ему записям

так?

возможности автоматически (по cron) делать отправку письма с вложенным шаблоном, в который попадут все записи нет?
т.е. отправить в шаблон ВСЕ записи таблицы можно только вручную по кнопке распечатать?

#10 CbCoder

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

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

Отправлено 05 Май 2011 - 12:44

возник такой вопрос - если менеджер, который видит не все записи в таблице, задает параметры поиска и нажимает (не выделяя ни одной записи) кнопку распечатать, в шаблон отправляются ВСЕ записи таблицы ограниченные:
1. фильтром указанным в его доступе
2. фильтром, который он применил к видимым ему записям

Не совсем. Во-первых, есть фильтр "по умолчанию", заданный в группе доступа, который срабатывает при нажатии на вкладку таблицы (он может быть видимым или нет). Во-вторых, пользователь может нажать на любой из других доступных ему фильтров. Эти 2 типа фильтров никак не пересекаются между собой (точнее фильтр "по умолчанию" просто один из нескольких). И наконец, в-третьих, пользователь может задать критерии расширенного поиска, и вот тут как раз идет уже наложение поиска на текущий фильтр. Т.е. если фильтр запрещает показывать часть записей, то через поиск они тоже никак не всплывут.

возможности автоматически (по cron) делать отправку письма с вложенным шаблоном, в который попадут все записи нет?
т.е. отправить в шаблон ВСЕ записи таблицы можно только вручную по кнопке распечатать?

При рассылке через cron Вы можете задать любой из имеющихся в таблице фильтров, в том числе и по всем записям (если такой "фильтр" есть, если нет, то надо создать - через задание пустого условия)


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

#11 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 05 Май 2011 - 13:44

Спасибо за ответы, хочу уточнить еще один момент...

возможности автоматически (по cron) делать отправку письма с вложенным шаблоном, в который попадут все записи нет?
т.е. отправить в шаблон ВСЕ записи таблицы можно только вручную по кнопке распечатать?

При рассылке через cron Вы можете задать любой из имеющихся в таблице фильтров, в том числе и по всем записям (если такой "фильтр" есть, если нет, то надо создать - через задание пустого условия)

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

#12 CbCoder

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

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

Отправлено 05 Май 2011 - 16:07

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

#13 mak

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

  • Активный пользователь
  • PipPipPip
  • 207 сообщений

Отправлено 05 Май 2011 - 17:53

спасибо за предложение, пока буду идти намеченным путем :)

#14 arsenal

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

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

Отправлено 07 Июль 2011 - 16:02

На счет sql-запросов в шаблоне печати.
Есть таблица "договора" и подчиненная таблица "приложения к договору". Приложения к разным договорам могут быть разные по составу и по количеству. Возникает ситуация, что, например, график работ в одном договоре может быть Приложением №3, а в другом договоре - приложением №8. А в тексте договора есть ссылки на эти приложения.
Как узнать при распечатке договора, под каким номером к данному договору идет приложение с определенным названием? В голову приходит только sql-запрос к подчиненной таблице из шаблона печати договоров
select * from таблица123 where поле111='График работ'
Но как я понял такие запросы нельзя делать из шаблона печати.
Тогда как?

#15 CbCoder

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

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

Отправлено 07 Июль 2011 - 16:10

Что мешает использовать вычисляемое поле, не пойму? При чем тут "SQL запрос в шаблоне"? Все запросы прекрасно заносятся в вычисления.

#16 arsenal

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

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

Отправлено 07 Июль 2011 - 16:17

Просмотр сообщенияРазработчик (7.7.2011, 16:10) писал:

Что мешает использовать вычисляемое поле, не пойму? При чем тут "SQL запрос в шаблоне"? Все запросы прекрасно заносятся в вычисления.
Я правильно понимаю: для всех возможных приложений нужно создать по одному полю в таблице "договора" (т.е. конкретное поле будет "привязано" к приложению с конкретным названием) и при создании этого приложения в это поле будет записываться номер этого приложения

#17 CbCoder

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

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

Отправлено 07 Июль 2011 - 16:33

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

#18 arsenal

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

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

Отправлено 08 Июль 2011 - 10:46

Просмотр сообщенияРазработчик (7.7.2011, 16:33) писал:

Выложите скриншот записи договора с приложениями. Иначе складывается ощущение что либо Вы слишком усложняете задачу, либо я что-то не так понимаю.
Выложить уже не получается, т.к. места для загрузки файлов (из выделенных 500кб) практически не осталось. (Кстати, вопрос администратору: эти 500кб больше ни как не увеличиваются? т.е. я больше вообще не смогу выкладывать картинки?)
Попробую объяснить еще раз.
Есть таблица "договора" и подчиненная ей таблица "приложения к договору". В таблице "приложения к договору" есть поля: поле1 - номер договора, поле2 - номер приложения, поле3 - название приложения. При добавлении приложений им присваиваются порядковые номера 1,2,3,4 и т.д.
Например, к договору №2011/20 идут приложения:
1. Локальная смета №1.
2. Локальная смета №2.
3. Локальная смета №3.
4. Техническое задание №1.
5. Техническое задание №2.
6. График выполнения работ.
и т.д.

К договору №2011/21 идут приложения:
1. Локальная смета №1
2. Техническое задание №1
3. График выполнения работ.

В тексте договора (в шаблоне печати) идут ссылки на эти приложения, например, "Сроки выполнения отдельных этапов работ определяются графиком выполнения работ (см. приложение 3)". Так вот номер приложения "График выполнения работ" в разных договорах может быть разным. В данных примерах это номер 6 и 3.
Как при распечатке договора определить номер приложения с конкретным названием, в данном случае "График выполнения работ"? И это касается всех приложений. Т.е. в разных договорах одни и те же приложения могут быть под разными порядковыми номерами.
Красивое решение, на мой взгляд, sql-запрос к подчиненной таблице из шаблона печати договоров (если это возможно)
select * from таблица123 where поле1='Номер договора' and поле3='График выполнения работ'
Или другой вариант: для всех возможных приложений нужно создать по одному полю в таблице "договора" (т.е. конкретное поле будет "привязано" к приложению с конкретным названием) и при создании этого приложения в это поле будет записываться номер этого приложения. И в шаблоне печати использовать данные из нужных полей.

#19 CbCoder

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

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

Отправлено 08 Июль 2011 - 11:29

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

#20 CbCoder

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

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

Отправлено 08 Июль 2011 - 11:34

Просмотр сообщенияarsenal (8.7.2011, 11:46) писал:

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





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

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