Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / создание отчёта в Foxpro 6.0 / 12 сообщений из 12, страница 1 из 1
26.11.2010, 14:24
    #36979168
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
вот пытаюсь создать отчёт, который бы из определённой БД вытаскивал некие данные:

таблицы из базы:
umenurbs - меню-раскладки
umenursp - блюда меню-раскладки
umenurfd - Список продуктов блюда в меню-раскладке
ufood - продукты питания

всё делала по инструкции ( http://pascal.dnovo.ru/foxpro/glava8/index6.htm)
схема связей таблиц (если важно)
http://foto.nnov.ru/psh640/0/e3/14/b659e844cb80943c6bda884b.jpg
создала отчёт с 2мя колонками (выражения для колонок m.y и m.x)
застряла на коде, вот что написала:

Procedure rp_calori5
Parameters nCallCode, oCaller, nProgram, X, Y

If Type("nCallCode") # 'N'
nCallCode = 0
Endif

If m.nCallCode = 2
Return
Endif

do m
.Y=""
.X=0

Select Umenurbs_1.name as stol, round(sum(UFOOD_1.CALORI*UMENURFD.NETTO*10*(100-UMENURSP_1.CLOST)/100),3) as calori1 ;
from UMENURFD ;
left join UMENURSP as UMENURSP_1 on (UMENURFD.MASTER_RN = UMENURSP_1.RN) ;
left join UMENURBS as UMENURBS_1 on (UMENURSP_1.MASTER_RN = UMENURBS_1.RN) ;
left join UFOOD as UFOOD_1 on (UMENURFD.RN_FOOD = UFOOD_1.RN_FOOD) ;
where (Umenurbs_1.date_doc = oSystem.date) ;
GROUP BY UMENURBS_1.rn ;
into cursor crCalori

Report form e:\progi\rp_calori51.frx
* [scope all]
* [preview nowait]
for i=1 to 15
do m
.Y = crCalori.stol
.X = crCalori.calori1


ENDPROC

*___________________________________________________
точно знаю, что вот эта часть:

Select Umenurbs_1.name as stol, round(sum(UFOOD_1.CALORI*UMENURFD.NETTO*10*(100-UMENURSP_1.CLOST)/100),3) as calori1 ;
from UMENURFD ;
left join UMENURSP as UMENURSP_1 on (UMENURFD.MASTER_RN = UMENURSP_1.RN) ;
left join UMENURBS as UMENURBS_1 on (UMENURSP_1.MASTER_RN = UMENURBS_1.RN) ;
left join UFOOD as UFOOD_1 on (UMENURFD.RN_FOOD = UFOOD_1.RN_FOOD) ;
where (Umenurbs_1.date_doc = oSystem.date) ;
GROUP BY UMENURBS_1.rn ;
into cursor crCalori

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

P.S. nCallCode, oCaller, nProgram - параметры глобальные, чтоб не выбрасывало из программы, из которой я пытаюсь вызвать rp_calori5.app
...
Рейтинг: 0 / 0
27.11.2010, 12:52
    #36980701
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
alyssa, во-первых, сдается мне, не закончен цикл for-endfor. Во-вторых, нужно привести текст подпрограммы m, может, там что не так. Наконец, для полного счастья нужно бы переслать сюда кусок проекта (полностью автономный) с таблицами, формами, программами и пр., чтобы местные знатоки смогли разобраться, в чем дело, и виртуально вкусить, наконец, то, что подают нынче в уральских ресторанах. Таблицы можно уменьшить до нескольких записей в каждой.
Кстати, первая ссылка упала.
...
Рейтинг: 0 / 0
27.11.2010, 16:07
    #36980819
создание отчёта в Foxpro 6.0
alyssa Select Umenurbs_1.name as stol, round(sum(UFOOD_1.CALORI*UMENURFD.NETTO*10*(100-UMENURSP_1.CLOST)/100),3) as calori1 ;
from UMENURFD ;
left join UMENURSP as UMENURSP_1 on (UMENURFD.MASTER_RN = UMENURSP_1.RN) ;
left join UMENURBS as UMENURBS_1 on (UMENURSP_1.MASTER_RN = UMENURBS_1.RN) ;
left join UFOOD as UFOOD_1 on (UMENURFD.RN_FOOD = UFOOD_1.RN_FOOD) ;
where (Umenurbs_1.date_doc = oSystem.date) ;
GROUP BY UMENURBS_1.rn ;
into cursor crCalori

Report form e:\progi\rp_calori51.frx
...

Проблема вот в чём: как вывести всё это на печать так и не поняла.И что непонятно? Что "это"? В процитированном первая команда создает курсор для отчета, вторая отчет формирует. Все остальное, особенно после процитированного, у отчету уже никакого отношения не имеет. Какие строки, какие циклы?
...
Рейтинг: 0 / 0
28.11.2010, 13:40
    #36981597
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
igorbikalyssa, во-первых, сдается мне, не закончен цикл for-endfor. Во-вторых, нужно привести текст подпрограммы m, может, там что не так. Наконец, для полного счастья нужно бы переслать сюда кусок проекта (полностью автономный) с таблицами, формами, программами и пр., чтобы местные знатоки смогли разобраться, в чем дело, и виртуально вкусить, наконец, то, что подают нынче в уральских ресторанах. Таблицы можно уменьшить до нескольких записей в каждой.
Кстати, первая ссылка упала.

цикл понятно. закончу.
rn - не подпрограмма, а ключевое поле в каждой таблице (на схеме связей таблиц оно в каждой таблице видно). ссылка1 это на онлайн учебник по фоксу, таблицы обрезать не могу. я беру полную базу и как обрезать таблицы если я даже их открыть не могу?
...
Рейтинг: 0 / 0
28.11.2010, 13:43
    #36981601
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
проходящий.,

не могу вывести таблицу на экран. я думала надо как-то задать в цикле передачу переменных из курсора в печатную форму
...
Рейтинг: 0 / 0
28.11.2010, 13:57
    #36981615
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
igorbik,

извиняюсь не разглядела.
вы не про rn писали , а про m (из-за шрифта не разобрать что за буква)
всё-равно m - не подпрограмма. это переменная, которая встречается в любой программе и как мне объяснили

авторобъект "m"
могу очень по-дилетантски объяснить. Это такой стандартный объект. В процедуре объявляются переменные, например, A1. обратиться к этой переменной можно по A1, а можно по m.A1

вот как объяснили мне)))
...
Рейтинг: 0 / 0
28.11.2010, 15:25
    #36981729
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
alyssa igorbik,

извиняюсь не разглядела.
вы не про rn писали , а про m (из-за шрифта не разобрать что за буква)
всё-равно m - не подпрограмма. это переменная, которая встречается в любой программе и как мне объяснили

авторобъект "m"
могу очень по-дилетантски объяснить. Это такой стандартный объект. В процедуре объявляются переменные, например, A1. обратиться к этой переменной можно по A1, а можно по m.A1

вот как объяснили мне)))
В тексте есть строки
Do m
Что это за "m" ?
...
Рейтинг: 0 / 0
28.11.2010, 15:46
    #36981750
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
igorbik,

уже написала что это за m
...
Рейтинг: 0 / 0
28.11.2010, 15:50
    #36981755
alyssa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
igorbik,

m можно не писать
...
Рейтинг: 0 / 0
28.11.2010, 16:23
    #36981802
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
alyssa, в твоей программе есть строки "do m"
В таком виде это означает "выполнить программу m"
Если убрать "m", то что останется?
Я понимаю, что есть, например, переменная m.asd, и asd, и что это ЧАЩЕ ВСЕГО одно и то же, но не всегда, особенно если речь идет об именах полей таблицы и одноименных переменных.
Но сейчас речь не об этом. Посмотри внимательно на код и расскажи, как понимать команду "Do m" (???) Например, эта команда есть в незакрытом цикле for-endfor, да и раньше тоже.
...
Рейтинг: 0 / 0
28.11.2010, 16:31
    #36981814
создание отчёта в Foxpro 6.0
alyssaпроходящий.,

не могу вывести таблицу на экран. я думала надо как-то задать в цикле передачу переменных из курсора в печатную формуЭтим занимается команда report form.
...
Рейтинг: 0 / 0
28.11.2010, 16:32
    #36981816
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание отчёта в Foxpro 6.0
Вот я специально выделил &&***** те строки, где мне непонятно назначение буквы m

Procedure rp_calori5
Parameters nCallCode, oCaller, nProgram, X, Y

If Type("nCallCode") # 'N'
nCallCode = 0
Endif

If m.nCallCode = 2
Return
Endif

do m && *************************************

.Y=""
.X=0

Select Umenurbs_1.name as stol, round(sum(UFOOD_1.CALORI*UMENURFD.NETTO*10*(100-UMENURSP_1.CLOST)/100),3) as calori1 ;
from UMENURFD ;
left join UMENURSP as UMENURSP_1 on (UMENURFD.MASTER_RN = UMENURSP_1.RN) ;
left join UMENURBS as UMENURBS_1 on (UMENURSP_1.MASTER_RN = UMENURBS_1.RN) ;
left join UFOOD as UFOOD_1 on (UMENURFD.RN_FOOD = UFOOD_1.RN_FOOD) ;
where (Umenurbs_1.date_doc = oSystem.date) ;
GROUP BY UMENURBS_1.rn ;
into cursor crCalori

Report form e:\progi\rp_calori51.frx
* [scope all]
* [preview nowait]
for i=1 to 15

do m &&***********************************

.Y = crCalori.stol
.X = crCalori.calori1

ENDPROC
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / создание отчёта в Foxpro 6.0 / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]