Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
столкнулся с таким траблом

записываю накладную, и после того как она записалась получаю её номер, делаю выборку по номеру этой накладной и печатаю... и тишина....
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, то этой новой записанной накладной не видно, т.е. буд-то она не записалась, но на печать выводится...
10 авг 08, 20:03    [6049638]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Ну, а самому проверить, что же попало в курсор?

SELECT * FROM table  INTO CURSOR cur_rep
BROWSE

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

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

SELECT * FROM table  INTO CURSOR cur_rep NOFILTER

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

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

1) У отчета явным образом указана таблица-источник и это не курсор
2) В курсор не попадает ни одной записи
10 авг 08, 20:28    [6049666]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
alextashk
Member

Откуда:
Сообщений: 431
SELECT * FROM table  INTO CURSOR cur_rep
REPORT FORM накладная TO PRINTER NOCONSOLE

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

а ещё в REPORT, может быть, явно указан принтер, который в данный момент не включён.
10 авг 08, 21:29    [6049747]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
Redrik
Member

Откуда:
Сообщений: 808
А может снова GRID виноват?
10 авг 08, 22:27    [6049830]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

>
> записываю накладную, и после того как она записалась получаю её
> номер, делаю выборку по номеру этой накладной и печатаю... и тишина....
>
> 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

11 авг 08, 08:16    [6050372]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
to ВладимирМ

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

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

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

нихера не понимаю...
11 авг 08, 10:34    [6050807]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
q123qw
Guest
Небось файлики с именем "table" расплодились по диску, как кролики! ;)
11 авг 08, 11:07    [6051033]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
вместо table можно подставить любой набор из буков...
11 авг 08, 12:21    [6051497]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Так NOFILTER пробовал добавить? Таблица Table заполняется непосредственно перед запросом?

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

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

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

?SET("DELETED")
11 авг 08, 15:17    [6052703]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
ВладимирМ
Так NOFILTER пробовал добавить? Таблица Table заполняется непосредственно перед запросом?

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

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

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

?SET("DELETED")


эта конструкция без browse перед селектом возвращает 0, а с browse как и надо...
(тут в примере я селект упростил, в реальности у меня селект из двух таблиц по джойн-условию...)... и ещё раз акцентрирую внимание на то, что с броуз перед запросом всё выбирается как надо, а без броуз ничего не выбирается...
11 авг 08, 15:53    [6052932]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
Dima T
Member

Откуда:
Сообщений: 15272
КонецЦикла
эта конструкция без browse перед селектом возвращает 0, а с browse как и надо...
(тут в примере я селект упростил, в реальности у меня селект из двух таблиц по джойн-условию...)... и ещё раз акцентрирую внимание на то, что с броуз перед запросом всё выбирается как надо, а без броуз ничего не выбирается...

BROW может только сместить указатель текущей записи в таблице, для эксперимента замени BROW на SKIP -1

Показывай реальный код. И BROW туда заремленный вставь. Только убедись еще раз что с ним работает, а без него нет.
11 авг 08, 16:39    [6053235]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
да я уже делал с go recno()... думаю skip тут тоже не поможет...
делал browse timeout 0.1 - не работает, а browse без таймаута работает... причём ещё раз отмечу, что када я делаю browse перед селектом я этой записанной накладной не вижу, но когда я делаю browse после селекта, то она уже отбирается...
11 авг 08, 17:03    [6053393]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Что возвращает

SELECT ... FROM ... INTO ...
lcAlias = Alias()
BROWSE
MessageBox("До Browse " + m.lcAlias + chr(13) + "После Browse "+Alias())
11 авг 08, 17:12    [6053450]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
ВладимирМ
Что возвращает

SELECT ... FROM ... INTO ...
lcAlias = Alias()
BROWSE
MessageBox("До Browse " + m.lcAlias + chr(13) + "После Browse "+Alias())


и до browse и после возвращает имя курсора, в который происходит выборка селектом... курсор пустой...
11 авг 08, 17:24    [6053537]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
вот так вот
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 и в курсор всё отбирается
а вот так вот
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 но в курсор НИЧЕГО не отбирается
11 авг 08, 17:32    [6053591]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Что такое MyTable и как она заполняется? Select выполняется сразу после каких-либо модификаций в этой таблице?

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

?DBF("MyTable")
?DBF("MyCursor")
11 авг 08, 17:41    [6053658]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
ВладимирМ
Что такое MyTable и как она заполняется? Select выполняется сразу после каких-либо модификаций в этой таблице?

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

?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-файлу...
11 авг 08, 18:10    [6053862]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Другими словами, данные в таблицу заносятся одним клиентом (процессом), а увидеть их надо другим клиентом (процессом)? Сразу после их занесения?

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

SET REFRESH TO

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

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

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


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

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


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

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

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

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

SELECT ... FROM MyTable.dbf INTO ...

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

USE IN (SELECT("MyTable"))
SELECT ... FROM MyTable INTO ...
11 авг 08, 19:32    [6054110]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
нда.... тяжелый случай... ничего не помогает....
SET REFRESH TO 0,-1 ругается на illegal value видимо потому, что 6 версия фокса... если выдержать сравнительно большую паузу перед тем, как нажать ignor, то все на печать выходит, а если нажать на ignor сразу, то ничего не печатается...
12 авг 08, 11:49    [6055742]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Вообще-то, предупреждать надо о версии FoxPro.

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

DECLARE Sleep IN Win32API INTEGER  

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

SELECT ... FROM ... INTO

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

В принципе, для организации задержки можно использовать и Inkey(), но это менее надежно, поскольку она "сбрасывается" при нажатии на клавиши.
12 авг 08, 13:01    [6056292]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

Это не оно?

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

12 авг 08, 13:04    [6056310]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
КонецЦикла
Member

Откуда:
Сообщений: 273
Ура! Заработало!
Спасибо, Владимир!!!
12 авг 08, 15:42    [6057490]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Официально SYS(1104) была введена только в VFP7. Не знаю, будет ли она работать в VFP6. Хотя, наверное, можно попробовать. Только в VFP7 еще не было второго параметра. Шло обновление всех данных во всех рабочих областях.

=SYS(1104)
SELECT ... FROM ... INTO ...
12 авг 08, 17:15    [6058124]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
Sergey Sizov.
Guest
ВладимирМ
Официально SYS(1104) была введена только в VFP7. Не знаю, будет ли она работать в VFP6. Хотя, наверное, можно попробовать.

Если мне память не изменяет, то появилась она "неофициально" в каком-то из последних сервис-паков 6-ки.
12 авг 08, 18:25    [6058522]     Ответить | Цитировать Сообщить модератору
 Re: Не выходит на печать отчет  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

не знаю как определить официальность, но до выхода 7-ки видел функцию в MSDN
и использовал в VFP6SP5


Posted via ActualForum NNTP Server 1.4

12 авг 08, 19:41    [6058803]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить