Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не выходит на печать отчет / 25 сообщений из 25, страница 1 из 1
10.08.2008, 20:03
    #35480288
Не выходит на печать отчет
столкнулся с таким траблом

записываю накладную, и после того как она записалась получаю её номер, делаю выборку по номеру этой накладной и печатаю... и тишина....
Код: plaintext
1.
2.
SELECT * FROM table  INTO CURSOR cur_rep
REPORT FORM накладная TO PRINTER NOCONSOLE

а если сделаю так, то печатает
Код: plaintext
1.
2.
3.
4.
SELECT table
browse
SELECT * FROM table  INTO CURSOR cur_rep
REPORT FORM накладная TO PRINTER NOCONSOLE
только вот этот browse мне совсем не катит... причем интересно, что когда делаю browse, то этой новой записанной накладной не видно, т.е. буд-то она не записалась, но на печать выводится...
...
Рейтинг: 0 / 0
10.08.2008, 20:28
    #35480304
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Ну, а самому проверить, что же попало в курсор?

Код: plaintext
1.
2.
SELECT * FROM table  INTO CURSOR cur_rep
BROWSE

Надеюсь, в курcе, что на команду Select-SQL влияет настройка SET DELETED?

Также желательно при использовании INTO CURSOR всегда добавлять опцию NOFILTER

Код: plaintext
1.
SELECT * FROM table  INTO CURSOR cur_rep NOFILTER

Также надо проверить, какие именно алиасы стоят в выражениях полей отчета. Есть ли что-то в DataEnvironment отчета.

В общем, направлений два:

1) У отчета явным образом указана таблица-источник и это не курсор
2) В курсор не попадает ни одной записи
...
Рейтинг: 0 / 0
10.08.2008, 21:29
    #35480336
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Код: plaintext
1.
2.
SELECT * FROM table  INTO CURSOR cur_rep
REPORT FORM накладная TO PRINTER NOCONSOLE

Попробуй вот так:
Код: plaintext
1.
2.
3.
SELECT * FROM table  INTO CURSOR cur_rep
SELECT cur_rep
REPORT FORM накладная TO PRINTER NOCONSOLE

а ещё в REPORT, может быть, явно указан принтер, который в данный момент не включён.
...
Рейтинг: 0 / 0
10.08.2008, 22:27
    #35480360
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
А может снова GRID виноват?
...
Рейтинг: 0 / 0
11.08.2008, 08:16
    #35480502
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
>
> записываю накладную, и после того как она записалась получаю её
> номер, делаю выборку по номеру этой накладной и печатаю... и тишина....
>
> SELECT * FROM table INTO CURSOR cur_rep
> REPORT FORM накладная TO PRINTER NOCONSOLE
>
> а если сделаю так, то печатает
>
> SELECT table
> browse
> SELECT * FROM table INTO CURSOR cur_rep
> REPORT FORM накладная TO PRINTER NOCONSOLE
> только вот этот browse мне совсем не катит... причем интересно, что когда
> делаю browse, то этой новой записанной накладной не видно, т.е. буд-то она
> не записалась, но на печать выводится...
> Тема Ответить Сообщение

Каким образом происходит запись в таблицу table?
Есть ли на этой таблице какая-нибудь буферизация?


PS очень похоже, что brows "передергивает" указатель записи, после чего сами
данные физически попадают в таблицу.

Попробуй вместо brows сделать goto recno('table') in table, что будет?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.08.2008, 10:34
    #35480714
Не выходит на печать отчет
to ВладимирМ

ну тут очевидно второе направление... вот так вот в курсор действительно не попадает ни одной записи..
Код: plaintext
1.
2.
3.
4.
SELECT table
SELECT * FROM table  INTO CURSOR cur_rep
browse
REPORT FORM накладная TO PRINTER NOCONSOLE

а вот так вот (т.е. с browse перред запросом) записи в курсор попадают
Код: plaintext
1.
2.
3.
4.
5.
SELECT table
browse
SELECT * FROM table  INTO CURSOR cur_rep
browse
REPORT FORM накладная TO PRINTER NOCONSOLE

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

нихера не понимаю...
...
Рейтинг: 0 / 0
11.08.2008, 11:07
    #35480778
q123qw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Небось файлики с именем "table" расплодились по диску, как кролики! ;)
...
Рейтинг: 0 / 0
11.08.2008, 12:21
    #35480982
Не выходит на печать отчет
вместо table можно подставить любой набор из буков...
...
Рейтинг: 0 / 0
11.08.2008, 15:17
    #35481455
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Так NOFILTER пробовал добавить? Таблица Table заполняется непосредственно перед запросом?

Что возвращает такая конструкция

Код: plaintext
1.
2.
SELECT * FROM table  INTO CURSOR cur_rep NOFILTER
MessageBox("Выбрано записей "+str(_TALLY))

Какая текущая настройка

Код: plaintext
?SET("DELETED")
...
Рейтинг: 0 / 0
11.08.2008, 15:53
    #35481533
Не выходит на печать отчет
ВладимирМТак NOFILTER пробовал добавить? Таблица Table заполняется непосредственно перед запросом?

Что возвращает такая конструкция

Код: plaintext
1.
2.
SELECT * FROM table  INTO CURSOR cur_rep NOFILTER
MessageBox("Выбрано записей "+str(_TALLY))

Какая текущая настройка

Код: plaintext
?SET("DELETED")


эта конструкция без browse перед селектом возвращает 0, а с browse как и надо...
(тут в примере я селект упростил, в реальности у меня селект из двух таблиц по джойн-условию...)... и ещё раз акцентрирую внимание на то, что с броуз перед запросом всё выбирается как надо, а без броуз ничего не выбирается...
...
Рейтинг: 0 / 0
11.08.2008, 16:39
    #35481667
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
КонецЦиклаэта конструкция без browse перед селектом возвращает 0, а с browse как и надо...
(тут в примере я селект упростил, в реальности у меня селект из двух таблиц по джойн-условию...)... и ещё раз акцентрирую внимание на то, что с броуз перед запросом всё выбирается как надо, а без броуз ничего не выбирается...
BROW может только сместить указатель текущей записи в таблице, для эксперимента замени BROW на SKIP -1

Показывай реальный код. И BROW туда заремленный вставь. Только убедись еще раз что с ним работает, а без него нет.
...
Рейтинг: 0 / 0
11.08.2008, 17:03
    #35481733
Не выходит на печать отчет
да я уже делал с go recno()... думаю skip тут тоже не поможет...
делал browse timeout 0.1 - не работает, а browse без таймаута работает... причём ещё раз отмечу, что када я делаю browse перед селектом я этой записанной накладной не вижу, но когда я делаю browse после селекта, то она уже отбирается...
...
Рейтинг: 0 / 0
11.08.2008, 17:12
    #35481754
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Что возвращает

Код: plaintext
1.
2.
3.
4.
SELECT ... FROM ... INTO ...
lcAlias = Alias()
BROWSE
MessageBox("До Browse " + m.lcAlias + chr( 13 ) + "После Browse "+Alias())
...
Рейтинг: 0 / 0
11.08.2008, 17:24
    #35481788
Не выходит на печать отчет
ВладимирМЧто возвращает

Код: plaintext
1.
2.
3.
4.
SELECT ... FROM ... INTO ...
lcAlias = Alias()
BROWSE
MessageBox("До Browse " + m.lcAlias + chr( 13 ) + "После Browse "+Alias())


и до browse и после возвращает имя курсора, в который происходит выборка селектом... курсор пустой...
...
Рейтинг: 0 / 0
11.08.2008, 17:32
    #35481807
Не выходит на печать отчет
вот так вот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT Mytable
lcAlias1 = Alias()
BROWSE
SELECT ... FROM Mytable INTO MyCursor
lcAlias = Alias()
BROWSE
MessageBox("До Select " + m.lcAlias1  + chr( 13 ) + "До Browse " + m.lcAlias + chr( 13 ) + "После Browse "+Alias())
возвращает Mytable, MyCursor, MyCursor и в курсор всё отбирается
а вот так вот
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT Mytable
lcAlias1 = Alias()
SELECT ... FROM Mytable INTO MyCursor
lcAlias = Alias()
BROWSE
MessageBox("До Select " + m.lcAlias1  + chr( 13 ) + "До Browse " + m.lcAlias + chr( 13 ) + "После Browse "+Alias())
тоже возвращает Mytable, MyCursor, MyCursor но в курсор НИЧЕГО не отбирается
...
Рейтинг: 0 / 0
11.08.2008, 17:41
    #35481824
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Что такое MyTable и как она заполняется? Select выполняется сразу после каких-либо модификаций в этой таблице?

Что возвращает

Код: plaintext
1.
2.
?DBF("MyTable")
?DBF("MyCursor")
...
Рейтинг: 0 / 0
11.08.2008, 18:10
    #35481870
Не выходит на печать отчет
ВладимирМЧто такое MyTable и как она заполняется? Select выполняется сразу после каких-либо модификаций в этой таблице?

Что возвращает

Код: plaintext
1.
2.
?DBF("MyTable")
?DBF("MyCursor")


есть "маршрутные задания": заголовок маршрутного задания Marsh_zad.dbf и содержимое (строки) маршрутного задания Marsh_zad_str.dbf
заводится новое маршрутное задание посредством вызова метода com-сервера
НомерНовогоМЗ = ox.new_marsh_zad()
этот метод чётко возвращает номер нового только, что записанного маршрутного задания
теперь мне его надо распечатать
SELECT Marsh_zad.pole1, Marsh_zad_str.pole2 FROM marsh_zad;
INNER JOIN marsh_zad_str ON Marsh_zad.nomer = Marsh_zad_str.nomer;
WHERE Marsh_zad.nomer = НомерНовогоМЗ INTO CURSOR cur_rep NOFILTER
IF _TALLY > 0
SELECT cur_rep
REPORT FORM marsh_zad TO PRINTER NOCONSOLE
ENDIF

и вот если я перед селектом просто тупо поставлю browse, то _TALLY>0, а не поставлю - _TALLY=0

а ?DBF("Marsh_zad") и ?DBF("cur_rep ") возвращают как и надо путь к dbf-файлу и пусть к tmp-файлу...
...
Рейтинг: 0 / 0
11.08.2008, 19:32
    #35481993
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Другими словами, данные в таблицу заносятся одним клиентом (процессом), а увидеть их надо другим клиентом (процессом)? Сразу после их занесения?

Между вводом данных в файл и появлением этих данных у клиента (в буфере клиента) есть некоторый интервал. Этот интервал определяется вторым параметром настройки

SET REFRESH TO

По умолчанию, этот интервал равен 5 секундам.

При этом, первый параметр этой же настройки определяет время обновления данных при отображении их в BROWSE-окне. По умолчанию, это 0. Т.е. BROWSE-окно считывает данные с диска.

С другой стороны, когда в команде Select-SQL в опции FROM Вы указываете имя, то сначала, анализатор запроса ищет алиас с указанным именем. И, если находит, то использует в качестве источникак данных рабочую область с указанным алиасом. Другими словами, считывает буфер таблицы.


Значит, у Вас есть две стартегии решения задачи:

1. Уменьшить интервал обновления буфера на сколько возможно.
2. Заставить читать данные не из буфера, а напрямую с диска.


Решить эту задачу также можно двумя способами:

1. Установить второй параметр настройки SET REFRESH на минимально допустимое значение (0.01) или установить значение -1, что означает читать данные с диска

Код: plaintext
1.
2.
3.
SET REFRESH TO  0 ,- 1 
SELECT ... FROM ...
SET REFRESH TO   0 ,  5  && сброс настройки в значение по умолчанию

2. Если в опции FROM команды Select-SQL указать расширение таблицы, то данные будут браться не из буфера, а напрямую из таблицы-источника

Код: plaintext
SELECT ... FROM MyTable.dbf INTO ...

Или же просто предварительно закрыть таблицу в указанной рабочей области

Код: plaintext
1.
2.
USE IN (SELECT("MyTable"))
SELECT ... FROM MyTable INTO ...
...
Рейтинг: 0 / 0
12.08.2008, 11:49
    #35482637
Не выходит на печать отчет
нда.... тяжелый случай... ничего не помогает....
SET REFRESH TO 0,-1 ругается на illegal value видимо потому, что 6 версия фокса... если выдержать сравнительно большую паузу перед тем, как нажать ignor, то все на печать выходит, а если нажать на ignor сразу, то ничего не печатается...
...
Рейтинг: 0 / 0
12.08.2008, 13:01
    #35482883
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Вообще-то, предупреждать надо о версии FoxPro.

Поскольку в VFP6 минимальное значение может быть равно 1 секунде, то и ставь принудительно секундную задержку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE Sleep IN Win32API INTEGER  

SET REFRESH TO  5 , 1 
=Sleep( 1000 )   && количество милисекунд задержки  1000  =  1  секунда

SELECT ... FROM ... INTO

SET REFRESH TO  0  && восстанавливаю исходные настройки

В принципе, для организации задержки можно использовать и Inkey(), но это менее надежно, поскольку она "сбрасывается" при нажатии на клавиши.
...
Рейтинг: 0 / 0
12.08.2008, 13:04
    #35482890
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Это не оно?

Purges memory cached by programs and data, and clears and refreshes buffers
for open tables.


SYS(1104 [, cAlias | nWorkArea])


Parameters
cAlias
Specifies the alias of a specific table or cursor for which cached memory
is purged.

nWorkArea
Specifies the work area of a specific table or cursor for which cached
memory is purged.

Return Value
Character. SYS(1104) returns the number of bytes that could not be purged.
SYS(1104) returns "0" if all memory is purged.

Remarks
You can improve performance by calling SYS(1104) after executing commands
that make extensive use of memory buffers. This function also clears
internal buffers for open tables, forcing the tables to be refreshed, which
is useful with large tables and in multiuser environments.

Note
The use of SYS(1104) will slow performance in applications that have a
large number of buffered tables open.



begin 666 collapse_all.gif
M1TE&.#EA"P`+`,0``)2HX_3U]0```/'R\O[^_O?W]_GY^>[N[^KKZ_O[^^7F
MY_S\_9NMY>#AXO___]O<W=77U\_0T0``````````````````````````````
M`````````````````````````"'Y! ``````+ `````+``L```4Z( .,)"DZ
M#D$LB5$$8[JV[S"JK!L,QYW7!\1H(2@:!8H1;1=4-$8Z'L+Y& &GC0=DQ,1J
)(P!1J<0(`0`[
`
end

begin 666 note.gif
M1TE&.#EA"@`*`+/_`(V,C?__S/_,`/\%!?]=7<# P-/3T\# P(6%A0("`@``
M`````````````````````"'Y! $```4`+ `````*``H`0 0H$,AI#AD@Z)U*
AR1HB)(8'<N,7&EJG;JV P4GZ&@D2(";<>HF@,.B)```[
`
end

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.08.2008, 15:42
    #35483385
Не выходит на печать отчет
Ура! Заработало!
Спасибо, Владимир!!!
...
Рейтинг: 0 / 0
12.08.2008, 17:15
    #35483651
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
Официально SYS(1104) была введена только в VFP7. Не знаю, будет ли она работать в VFP6. Хотя, наверное, можно попробовать. Только в VFP7 еще не было второго параметра. Шло обновление всех данных во всех рабочих областях.

Код: plaintext
1.
2.
=SYS( 1104 )
SELECT ... FROM ... INTO ...
...
Рейтинг: 0 / 0
12.08.2008, 18:25
    #35483844
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
ВладимирМОфициально SYS(1104) была введена только в VFP7. Не знаю, будет ли она работать в VFP6. Хотя, наверное, можно попробовать.
Если мне память не изменяет, то появилась она "неофициально" в каком-то из последних сервис-паков 6-ки.
...
Рейтинг: 0 / 0
12.08.2008, 19:41
    #35483983
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не выходит на печать отчет
не знаю как определить официальность, но до выхода 7-ки видел функцию в MSDN
и использовал в VFP6SP5


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не выходит на печать отчет / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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