|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Поделитесь, как вы формируете отчеты в Excel ? В моем представлении формирование отчета разбито на 2 части?: 1) Нарисовать шаблон отчета (Шапка отчета, строка данных, строка итогов, подвал, ...). 2) Получить в FoxPro данные для вывода и используя шаблон сформировать отчет. Сейчас при формировании отчета я просто копирую области шаблона на лист отчета, и вставляю нужные данные (+ добавляется различное форматирование при необходимости). Все это дело жестко привязано к адресам областей и ячеек. Например, где то в отчете: 1) скопировать область R1:R3 (1-3 строка) из шаблона и вставить в отчет (в отчете это допустим будут строки 5-6). 2) затем я в эти скопированные строки вставляю значения, cell(R5:C4) = "2021.12.12" ... Сейчас думаю как сделать, что то наподобие следующего: 1) Отчет = лист отчета. 2) ОбластьШапка = Шаблон.получитьОбласть("Шапка"). 3) ОбластьШапка.Параметры.ИмяОтчета = "Отчет по приходу товара" 4) ОбластьШапка.Параметры.ДатаОтчета = "2021.12.12" 5) Отчет.вывести.ОбластьШапка. 6) ... Приветствуются любые идеи или примеры кода .... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 10:38 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Хотелось бы разделить работу на две части: 1) Дизайн отчета. 2) Наполнение отчета данными. Так один человек, например, рисует шаблон, как то именует области шаблона и описывает параметры этих областей. Второй, использует этот шаблон для быстрого формирования отчета. Т.е. как реализовать паттерн MVC при выводе данных foxpro в Excel? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 10:42 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen, Поищите eReport от Жени Банщикова, если его использовать, то достаточно будет в шаблоне определить поля для вывода, для 99% отчетов подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 10:54 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen, вариантов несколько. Вот два варианта без использования Excel для формирования файла: (подозрительная ссылка!) https://github.com/s-s-a/XLSX-Workbook-Class (подозрительная ссылка!) https://github.com/s-s-a/Advanced-RTF-Report ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 11:29 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Спасибо за инфу! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 13:39 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
На рисунке приведен шаблон, на основании которого делается отчет. Из шаблона на рабочий лист копируются области, затем в определенные точки области подставляются данные. Я для себя задал формат переменной в шаблоне: {!variable} С помощью команды replace пытаюсь подменять эти значения Код: sql 1. 2. 3.
Значение переменной lnGPartPrice = 8.5 (значение поля курсора, N(10,2)) Текстовые переменные заменяются норм, пробемы возникают с числами. Все ячейки шаблона куда подставляются числа имеют формат числовой с двумя знаками после запятой. Так некоторые значения выводятся с разделителем "." - точка, некоторые с разделителем "," - запятая. А некоторые, как в приведенном выше примере, вообще конвертятся в другое число. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 14:05 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Можно ли как то задать формат конвертации данных FoxPro в данные Excel? Пробовал писать так: Код: sql 1. 2. 3.
и так Код: sql 1. 2. 3.
В первом случае результат такой же. Во втором случае выводится норм - 8,50 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 14:08 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen Можно ли как то задать формат конвертации данных FoxPro в данные Excel? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 14:14 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Sergey Sizov, в Excel? И в шаблоне и на итоговом листе у меня все ячейки одинакового формата - числовой с двумя знаками после запятой. Только вот почему одни данные выводятся, например, с точкой, другие с запятой, а третьи вообще меняют значение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 14:18 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
У меня получается в шаблоне формат ячейки числовой с двумя знаками после запятой, но в самой ячейке стоит строковое значение - {!gpart_price}. Я потом эту область копирую на рабочий лист, и через команду замены, пытаюсь вставить значение. Получается не очень. Через XLSheet.Cells(20, 34).Value = lnGPartPrice все выводится ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 14:23 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen Sergey Sizov, в Excel? Только вот почему одни данные выводятся, например, с точкой, другие с запятой, а третьи вообще меняют значение ?Потому что данные туда надо правильно писать. И не вставлять строку в в ячейку для числа. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 16:17 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen У меня получается в шаблоне формат ячейки числовой с двумя знаками после запятой, но в самой ячейке стоит строковое значение - {!gpart_price}. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 16:19 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Sergey Sizov, если так, то все хреново (. У меня цель была расставить в шаблоне маяки: {! variable }, а потом их заменять в коде. Как и писал выше: Код: sql 1.
При такой системе у меня код не менялся бы после редактирования шаблона, а так, допустим у меня стоит Код: sql 1.
, потом я добавляю колонку в начало шаблона, и мне нужно лезть в код и менять на Код: sql 1.
Как пометить ячейку не использую строковое значение - хз (не будешь же цифровые коды ставить (аля -1 это цена, -2 это количество ...)) Была мысль еще именовать области и использовать их, но тогда теряется наглядность (переменные не видны в шаблоне, нужно выбрать эту переменную, чтобы подсветить область) Вобщем буду думать ... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 16:51 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen Sergey Sizov, если так, то все хреново (. У меня цель была расставить в шаблоне маяки: {! variable }, а потом их заменять в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 16:56 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Sergey Sizov, Так работает Код: sql 1. 2.
, но если придется поменять число знаков после запятой, опять же в код лезть нужно... Ну да ладно, пока остановлюсь на этом варианте. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 17:23 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen На рисунке приведен шаблон, на основании которого делается отчет. Из шаблона на рабочий лист копируются области, затем в определенные точки области подставляются данные. Сделайте наоборот 1. В одну строку шаблона (заранее отформатированный) вставляются данные 2. Затем эта заполненная строка шаблона копируется в нужное место рабочего листа. Со всем форматированием В этом случае нужные ячейки можно идентифицировать по адресам ("A1") или указать имя ячейки. Нет необходимости делать replace. Вы же будете обращаться к ячейкам шаблона, а он структуру не меняет. Единственный недостаток, придется каждый раз заполнять все поля строки шаблона даже если там пустые значения. Чтобы затереть результат заполнения предыдущей строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 11:04 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
ВладимирМ, думал над этим вариантом. Из минусов: 1) . То, что вы и написали, нужно заполнять все поля, чтобы затирать старые значения. Есть опасность, что значение для одной строки перекочует в другую строку и останется не замеченным - по факту в отчете будут данные, но неверные. В моем же случае, если я забуду вставить значение, то вместо него останется маяк - {!Variable} и пользователь быстро заметит ошибку. 2). Конкретная адресация - это то, от чего я хотел уйти (когда мы для вставки значения в ячейку точно определяем ее значение в коде (номер строки, номер столюца)). У меня ситуация такая: После разработки отчета от пользователей периодически поступают запросы на изменение шаблона отчета. Например, добавить дополнительные подписи, добавить какой нибудь текст в определенное место, удалить определенную строку и тд. И если копируемый шаблон содержит несколько строк, например, 10, то при добавлении строки в начало шаблоне, мне в коде придется менять адресацию всех значений, которые вставляются ниже (было (2,2) = ..., (4,6) = ... станет (3,2) = ..., (5,6) = ...). Я пока остановился на таком варианте (код приблизительный). Это простой отчет с шапкой, детальными записями и подвалом (набор подписей): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
В моем случае отчет не содержит конкретной адресации, и в большинстве случаев я могу менять шаблон без изменения кода. Например, на рисунке ниже я могу свободно добавлять в показанную область новые строки (например, добавить дополнительный текст в середину), столбцы, менять положение переменных (разместить подписи в начале, а не в середине), код при этом править не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 14:22 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen ВладимирМ, думал над этим вариантом. Из минусов: 1) . То, что вы и написали, нужно заполнять все поля, чтобы затирать старые значения. Есть опасность, что значение для одной строки перекочует в другую строку и останется не замеченным - по факту в отчете будут данные, но неверные. В моем же случае, если я забуду вставить значение, то вместо него останется маяк - {!Variable} и пользователь быстро заметит ошибку. На самом деле, это, скорее, гипотетическая ситуация. Заполнять Вы будет все поля для каждой строки. Всегда. Все. Без вариантов. Вне зависимости от способа формирования отчета Не заполненным поле может быть только если оно новое. Ранее не заполнялась. А оставить старое значение, так это и с метками можно сделать. faustgreen 2). Конкретная адресация - это то, от чего я хотел уйти (когда мы для вставки значения в ячейку точно определяем ее значение в коде (номер строки, номер столюца)). Опять же, это, скорее, гипотетическая проблема. Во-первых, крайне редко изменение отчета - это всего-лишь перемещение из одного места в другое. Обычно кроме самого шаблона также меняется и код по его заполнению. Сами же написали, добавить/убрать то или иное значение. А как Вы это сделаете не меняя кода? Заодно и подвинуть ранее созданные ячейки - не проблема В совсем уж простых случаях помогут именованные ячейки (также называют "именованный диапазон"). Почитайте в справке по Excel, что это такое. Вкратце, Вы можете одной или нескольким ячейкам присвоить имя. Скажем, "A1:D1" = NameReport, а затем обращаться к этим ячейкам по этому имени. Понятно, что вполне можно изменить адресацию. И под тем же именем NameReport будет уже другой набор ячеек, скажем "A2:D2". Т.е. в шаблоне сдвинули, а код заполнения не поменялся. "Имя" - это реквизит Excel. Будет хранится в самом шаблоне На самом деле, баловство, но производит впечатление чего-то нужного и полезного... Ну, пока не сделаешь сотню другую отчетов PS: Реально Вы бессмысленным занятием занимаетесь. На практике это все не нужно, поскольку изменение шаблона без изменения кода - крайне редкая и исключительная ситуация. В код Вам придется лезть в любом случае. И здесь изменения в шаблоне - это крайне незначительное время по сравнению с изменением кода. Т.е. Вы потратите огромное количество времени и сил для решения крайне незначительной проблемы (изменение шаблона без изменения кода). При этом вся эта система будет очень сложная как в понимании, так и в сопровождении. Тем не менее, отговаривать не буду. Во-первых, это хорошая практика для программиста (Вам придется очень сильно напрягаться, чтобы решать элементарные задачки). А во-вторых, это одна из тех вещей, которые можно понять только на практике. Никакие теоретические рассуждения не убедят... В смысле, понять, что это реально не имеет смысла. Кроме как ради обучения ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 19:40 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
Если актуально.. С очень минимальными приседаниями решается или через FoxyPreviewer, или чрез это https://github.com/VFPX/ExcelXML На ФоксКлубк Сергей Сизов давно говорит, по рукой ссылки нет, но если надо - и найду, и в почту отправлю, мне не трудно. А советую посмотреть на первое. 1) бесплатно и поддерживается до сих пор (!) 2) сам юзаю, смогу подсказать и даже под хртелки (не все!) запилить 3) МНОГО форматов. Все это бесплатно. Есть еще платный fox2any. Но по меркам РФ - дорого соотечественник. И вообще - ар фоксу Вам быстрее и продуктивнее там помогут. Не умаляю этот ресурс, на котором тоже помогут. Но там спец-форум по фоксу. Решать вам. И да за рекламу мне не платят, я не гоню на этот ресурс, просто там тоже спецы, И многие здесь так-то. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 06:31 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
На фоксе давно все решено, его сколько лет хоронят, а удивлю, что еще работают на нем. И спецы находятся. Что еще хоронили? И еще Чен VFPA ( VFP 10) пилит потихоньку. Люди уже доказывали (например наработки Григорьева и Юры Шутенко), что при своих классах - разворачивается простой учет на коленке. Да и Паша Кручинин имел свой фреймворк. Но да, будущего нет. Тут не поспоришь. "А не спешите вы хоронить..." :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 06:42 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
AK-Shah Если актуально.. Всегда актуально, не мне, так кому то еще может пригодится. Я остановился на том варианте, что описал выше. Пока все устраивает, разработка отчетов стала легче, понятнее и быстрее. Но это лично для меня, кто то может не согласится. Кроме Foxpro для себя Javа занимаюсь, там вебпроекты строятся на паттерне MVC (Model View Controller). Model - данные, View - представление данных, Controller - управление данными. Это довольно удобно, так как разные разработчики могут делать свою работу независимо от других, кто то делает дизайн, кто то работает с серверной частью приложения. Делал пару отчетов на 1C, там вообще есть СКД (система конструкторской документации). Простые отчеты вообще можно сделать без программного кода (не считая кода запроса). В обоих случаях код отделен от представления и это удобно! Вот и попробовал реализовать что то подобное на Foxpro. Понятно, что у каждого языка есть свои ограничения и специфика, и то что работает в одном может не подойти к другому. Но хорошие принципы можно и перенять (если есть возможность). AK-Shah На фоксе давно все решено, его сколько лет хоронят, а удивлю, что еще работают на нем. Тут спорно. Работаю на гос конторе, где есть приложения даже на foxpro 2.6. Но они все ждут своего времени, пока их не заменят. У нас сейчас активно внедряется 1С, и все помаленьку переводится на него. Бывают доработки Foxpro-шных приложений, но только тех, которые стоят в конце очереди на замену. Да и если зайти на сайт вакансий, вбить в поиск "Foxpro", то станет грустно ... Одна из причин, по которой Foxpro еще живет, возможно состоит в том, что проще доработать существующее, чем разработать что то с нуля. Вот похожий пример с языком Cobol - https://www.cnews.ru/news/top/2020-04-07_ssha_izza_koronavirusa_ponadobilis ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 11:42 |
|
Работа с MS Excel
|
|||
---|---|---|---|
#18+
faustgreen, добрый день. Вопрос по отчету. Удается ли связаться с ГИИС ДМДК? Мне из под Foxpro надо кое-какие данные предать, а даже до тестового сервиса достучаться не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 13:30 |
|
|
Start [/forum/topic.php?fid=41&msg=40106975&tid=1581423]: |
0ms |
get settings: |
16ms |
get forum list: |
16ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
46ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
446ms |
get tp. blocked users: |
0ms |
others: | 316ms |
total: | 849ms |
0 / 0 |