1
Как не выводить подтаблицу в шаблоне печати, если она пуста?
Автор weranda, 20 сент. 2016 23:06
Сообщений в теме: 7
#1
Отправлено 20 Сентябрь 2016 - 23:06
Приветствую
Не могу понять как правильно настроить шаблон печати, а именно: в одном шаблоне печати выводятся данные из двух подтаблиц (Товары и Услуги). Одна из этих подтаблиц может быть без записей, т.е. данные могут быть заполнены или в подтаблице Товары или в подтаблице Услуги. Иногда заполняются обе подтаблицы и когда они обе заполнены, то проблем с корректностью вывода данных из двух таблиц на печать нет. Но если одна из них не заполнена данными, к примеру, подтаблица Товары заполнена, а подтаблица Услуги не заполнена, тогда в шаблоне печати выводится только шапка подтаблицы Услуг без наименований и стоимости услуг - это некрасиво.
Подскажите пожалуйста, как осуществить проверку на отсутствие записей в подтаблице Услуг (Товаров) и если записи в ней отсутствуют, то не выводить и ее шапку.
Привожу условный пример на картинке:
И еще раз поясню. Как осуществить проверку на наличие записей в подтаблице и если таковых записей нет, то и не выводить шабку таблицы в шаблоне печати?
В первом случае отсутствуют записи в подтаблице Услуги (ее шапку выводить не нужно).
Во втором случае отсутствуют записи в подтаблице Товары (ее шапку выводить не нужно).
В третьем случае в обоих подтаблицах есть записи и все выводится корректно.
Использовать дополнительный шаблон совсем не хочется ибо предполагаю, что есть простой способ уладить этот вопрос, на как? - Не знаю. Подскажите пожалуйста.
Не могу понять как правильно настроить шаблон печати, а именно: в одном шаблоне печати выводятся данные из двух подтаблиц (Товары и Услуги). Одна из этих подтаблиц может быть без записей, т.е. данные могут быть заполнены или в подтаблице Товары или в подтаблице Услуги. Иногда заполняются обе подтаблицы и когда они обе заполнены, то проблем с корректностью вывода данных из двух таблиц на печать нет. Но если одна из них не заполнена данными, к примеру, подтаблица Товары заполнена, а подтаблица Услуги не заполнена, тогда в шаблоне печати выводится только шапка подтаблицы Услуг без наименований и стоимости услуг - это некрасиво.
Подскажите пожалуйста, как осуществить проверку на отсутствие записей в подтаблице Услуг (Товаров) и если записи в ней отсутствуют, то не выводить и ее шапку.
Привожу условный пример на картинке:
И еще раз поясню. Как осуществить проверку на наличие записей в подтаблице и если таковых записей нет, то и не выводить шабку таблицы в шаблоне печати?
В первом случае отсутствуют записи в подтаблице Услуги (ее шапку выводить не нужно).
Во втором случае отсутствуют записи в подтаблице Товары (ее шапку выводить не нужно).
В третьем случае в обоих подтаблицах есть записи и все выводится корректно.
Использовать дополнительный шаблон совсем не хочется ибо предполагаю, что есть простой способ уладить этот вопрос, на как? - Не знаю. Подскажите пожалуйста.
#3
Отправлено 21 Сентябрь 2016 - 13:00
CbCoder (21 Сентябрь 2016 - 10:09) писал:
Используйте условие для вывода подтаблицы.
Я не силен в программировании, но кое что получилось и я не уверен, что это правильно.
Приведу пример.
Главня таблица – это Главная таблица.
Услуги – это подчиненная таблица (не заполнена данными).
Работы – это подчиненная таблица. (заполнена данными).
В подтаблице Услуги есть два поля: Наименование и Стоимость.
Я сформировал код вывода шаблона для таблицы услуг следующим образом:
Шапка таблицы.
{foreach from="{$Услуги}" name="Услуги" item=subtable}{/foreach} {if {$Услуги.Наименование}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}
Строки таблицы.
{foreach from="{$Услуги}" name="Услуги" item=subtable} {$Услуги.Наименование} {$Услуги.Стоимость} {/foreach}
В первом блоке кода для вывода шапки подтаблицы сами видите какой код использован.
Правильно ли это?
- Мне кажется, что не правильно, но все отрабатывает. Если записей в подтаблице Услуги нет, то и шапка и строки не выводятся, если же записи в подтаблице есть, то записи выводятся.
Во втором блоке кода, вроде, все корректно.
Могли бы вы показать реальный пример в виде кода с проверкой наличия записей в таблице? Мне непонятно, как правильно написать код. Или именно так правильно?
Сообщение отредактировал weranda: 21 Сентябрь 2016 - 13:00
#4
Отправлено 21 Сентябрь 2016 - 15:48
Если "все отрабатывает", то что вас не устраивает? Заведомо "правильного" кода нет, есть лишь разные рабочие реализации. Я бы к примеру поместил в условие весь блок с подтаблицей, а не только шапку, но это не значит что мой вариант "правильнее", ну разве что немного изящнее. Кроме того в условие можно поместить весь массив {$Услуги}, но если вам не требуется выводить строки с пустым наименованием, то ваш вариант даже лучше.
#5
Отправлено 21 Сентябрь 2016 - 15:53
Хотя, сейчас только заметил, что у вас условие обернуто в цикл foreach. Это конечно явно избыточный вариант, хотя формально и рабочий. Если вас это беспокоит, то лучше размещать в условие {$Услуги}:
Т.е. в переводе на человеческий это "Если подтаблица Услуги не пуста, то...". Оборачивать в цикл естественно не нужно.
{if {$Услуги}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}
Т.е. в переводе на человеческий это "Если подтаблица Услуги не пуста, то...". Оборачивать в цикл естественно не нужно.
#6
Отправлено 21 Сентябрь 2016 - 21:19
CbCoder (21 Сентябрь 2016 - 15:53) писал:
Хотя, сейчас только заметил, что у вас условие обернуто в цикл foreach. Это конечно явно избыточный вариант, хотя формально и рабочий. Если вас это беспокоит, то лучше размещать в условие {$Услуги}:
Т.е. в переводе на человеческий это "Если подтаблица Услуги не пуста, то...". Оборачивать в цикл естественно не нужно.
{if {$Услуги}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}
Т.е. в переводе на человеческий это "Если подтаблица Услуги не пуста, то...". Оборачивать в цикл естественно не нужно.
Этот вариант пробовал самым первым, но он не срабатывает. Чтобы не быть голословным, проведем эксперимент на демонстрационной конфигурации сайта.
В базе есть таблица Заявки. Открываем первую попавшуюся запись в этой таблице. Видим внутри вложенную таблицу Работа по заявке. Идем в настройки шаблонов печати таблицы Заявок и создаем новый шаблон. Результат работы созданного шаблона с различными вариантами кода.
Первый вариант.
{if {$Работа по заявке}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}Результат: Syntax Error in template "string:" on line 1 "{if {$Работа по заявке}}" - Unexpected "�", expected one of: "{" , "identifier"
Первый вариант в одну строку:
{if {$Работа по заявке}}<div>Здесь вывод шапки подтаблицы Услуги</div>{/if}Результат: Syntax Error in template "string:" on line 1 "{if {$Работа по заявке}}<div>Здесь вывод шапки подтаблицы Услуги</div>{/if}" - Unexpected "�", expected one of: "{" , "identifier"
Второй вариант:
{if {$Работа по заявке.Действие}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}Результат: результат отсутствует, сообщение в блоке DIV не выводится.
Третий вариант:
{foreach from="{$Работа по заявке}" name="Работа по заявке" item=subtable}{/foreach} {if {$Работа по заявке}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}Результат: Syntax Error in template "string:" on line 2 "{if {$Работа по заявке}}" - Unexpected "�", expected one of: "{" , "identifier"
Четвертый вариант:
{foreach from="{$Работа по заявке}" name="Работа по заявке" item=subtable}{/foreach} {if {$Работа по заявке.Действие}} <div>Здесь вывод шапки подтаблицы Услуги</div> {/if}Результат: все работает
Код не копировал, писал вручную. Ошибки из-за скрытых символов нет. Писал в том числе и в одну строку.
Если быть точным, то ваш вариант срабатывает, но только для данных, размещенных в родительской таблице, а для подчиненных таблиц не срабатывает.
Есть идеи?
Сообщение отредактировал weranda: 21 Сентябрь 2016 - 21:21
#7
Отправлено 22 Сентябрь 2016 - 09:49
Да, извиняюсь, немного ввел в заблуждение, не все так просто. Но тем не менее способ есть. Вместо {if {$Услуги}} необходимо писать {if $subtable111}, где вместо 111 необходимо прописать id подтаблицы, причем именно подтаблицы как элемента, а не таблицы, на основе которой она создана. Его можно посмотреть в адресной строке, если зайти в свойства этой самой подтаблицы (см. скриншот)
#8
Отправлено 22 Сентябрь 2016 - 10:20
CbCoder (22 Сентябрь 2016 - 09:49) писал:
Да, извиняюсь, немного ввел в заблуждение, не все так просто. Но тем не менее способ есть. Вместо {if {$Услуги}} необходимо писать {if $subtable111}, где вместо 111 необходимо прописать id подтаблицы, причем именно подтаблицы как элемента, а не таблицы, на основе которой она создана. Его можно посмотреть в адресной строке, если зайти в свойства этой самой подтаблицы (см. скриншот)
screen.png
screen.png
Спасибо за помощь. Все работает. Успехов!
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных