Страница 1 из 4

ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 06:05
andrey volkov
Поскольку выяснилось, что острых вопросов накопилось больше, чем может себе позволить обсудить временной регламент конференции, решено часть из них вынести на форум.
"Или - или" - название книги датского философа Кьеркегора (Киркегард). На нашем форуме меткой "ИЛИ - ИЛИ" я буду запускать не технические, но скорее дискуссионные вопросы о том, какой из множества способов реализации функционала стоит предпочесть. Вопросы "ИЛИ - ИЛИ" появляются потому, что Файлмейкер позволяет одну практическую задачу решить несколькими способами, и возникает вопрос - какой способ лучше. Цель дискуссии - не просто определить оптимальный способ из известных, но, может быть, в том, чтобы этот оптимальный способ найти, выработать совместными усилиями.

Итак,
выгрузка в Excel
проблема в том, что мы, разработчики, используем собственные наименования полей в таблицах, понятные нам, подчиняющиеся определенной логике и стандартам (без пробелов, английский язык и т.п.). Пользователи при выгрузке в Excel хотят видеть в итоговом файле нормальные "человеческие" заголовки столбцов на родном языке.
Известные мне варианты решения проблемы:
1) сделать в оригинальной таблице дубликаты полей (калькулируемые нехранимые поля с формулой = original_field), именно их использовать при выгрузке
плюсы: быстро и просто реализуется
минусы: "засоряется" оригинальная таблица, с ней становится сложно работать (так ли это?)

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

3) универсальная таблица с полями типа text1, text2, text3, number1 и т.д. (по десятку-двум полей каждого типа). При выгрузке в Excel названия столбцов будут браться не из названий полей, а из верхней строки. А это значит - можно задать ЛЮБОЕ название столбцу.
Плюсы: одну и ту же таблицу можно использовать многократно для разных отчетов.
минусы: сложновато выгружать, приходится строго проверять, какое из анонимных полей что обозначает...
минусы: нужно решать проблему периодической чистки данных, например, маркировать записи датой создания и раз в день уничтожать записи, созданные ранее этого дня.
минусы: как и в варианте 2 время на заполнение данными (можно конечно выполнять на сервере это все).


есть и другие варианты. но начало дискуссии положено. Высказывайтесь, коллеги

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 09:20
mihalych_2017
Частный случай способа № 3 (или модификация):
Создаем таблицу с набором полей (как описано в способе №3).
Первой записью отчета вставляем нужные нам имена заголовков таблицы.
Далее следующие строки отчета - это данные.
При экспорте указываем, чтобы НЕ экспортировались имена полей.

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 09:48
Arcady
Хорошая тема - обширная.

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

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

Код: Выделить всё

 if ( sign_header  = 1; "Название столбца"; Поле для выгрузки  )  
Минус (см. выше) - эти калькулируемые поля должны иметь текстовый формат.

PS. Андрей, "накидайте" еще тем и сделаем отдельную группу "ИЛИ-ИЛИ" и перенесем туда.

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 09:53
andrey volkov
Игорь, именно этот способ и подразумевался: первая строка задает произвольные нужные названия столбцов, а в экспорте снимается флаг "экспортировать наименования полей".
Вы практикуете именно такой способ?

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 10:07
andrey volkov
Аркадий, да. Этот способ рассматривал (добавление на момент выгрузки специальной строки, которая сортировкой двигается в самый верх), но не стал описывать. Пусть будет описан тем не менее как 4-й способ. Для меня проблема здесь именно с выгрузкой калькулируемых полей.
Кстати, мы нащупываем слабые места и в третьем варианте: можно ли текстом задать название поля с типом Дата? Вроде не получится такое. Или же дату записывать в текстовое поле и потом экспортировать как текст?


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

То есть где-то на макете будут размещены такие два списка
Номер Text1
Наименование Text2
Количество Number1
Цена Number2
Стоимость Number3

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

Да, темы создам.

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 10:13
mihalych_2017
andrey volkov писал(а):
04 окт 2017, 09:53
Игорь, именно этот способ и подразумевался: первая строка задает произвольные нужные названия столбцов, а в экспорте снимается флаг "экспортировать наименования полей".
Вы практикуете именно такой способ?
Наверное, недостаточно внимательно прочитал.
Использую в основном либо третий способ, либо чистый экспорт.

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 10:37
andrey volkov
Игорь, я не пробовал 3 способ, но всерьез задумываюсь.
Как оно? Оправдывает себя? Как быть с экспортом дат, получается?

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 11:03
Arcady
В действительности эта тема пересекается с другой более обширной задачей - выгрузки отформатированного ("красивого") экселя. С заданной шириной столбцов, возможно подсветкой и очень желательно формулами, там где надо, а не данным (например в строках "итого") и т.п.

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 11:26
mihalych_2017
andrey volkov писал(а):
04 окт 2017, 10:37
Игорь, я не пробовал 3 способ, но всерьез задумываюсь.
Как оно? Оправдывает себя? Как быть с экспортом дат, получается?
Как показывает практика, основное время занимает формирование данных для отчета.
Формирование доп.таблицы и пересылка данных - практически не влияет на общее время.
Даты - надо записывать в поля даты, экспорт - стандартно.

Re: ИЛИ - ИЛИ: выгрузка в Excel

Добавлено: 04 окт 2017, 11:27
mihalych_2017
Arcady писал(а):
04 окт 2017, 11:03
В действительности эта тема пересекается с другой более обширной задачей - выгрузки отформатированного ("красивого") экселя. С заданной шириной столбцов, возможно подсветкой и очень желательно формулами, там где надо, а не данным (например в строках "итого") и т.п.
Тут, я думаю, без VBA не обойтись.