powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Надо немного переделать запрос
10 сообщений из 10, страница 1 из 1
Надо немного переделать запрос
    #35132761
GavRYshA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В фоесе я проктически бот, так чт оне судите строго
Работа идет в 9-ом фоксе.

это код на кнопке вызова отчета
Код: plaintext
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.
39.
40.
o1=thisform.olecontrol1
o2=thisform.olecontrol2
date1=CTOD(STR(o1.day, 2 )+'/'+STR(o1.month, 2 )+'/'+STR(o1.year, 4 ))
date2=CTOD(STR(o2.day, 2 )+'/'+STR(o2.month, 2 )+'/'+STR(o2.year, 4 ))

SELECT a.kod_nazv,;
       b.naim1 as naim,;
       c.naim1 as avtor,;
       b.god_izd,;
       d.kod as kod_izd;           
FROM soc a,nazv b,avtor c,izdatel d;
WHERE a.kod_nazv = b.kod AND;
      b.kod_avtor = c.kod AND;
      b.kod_izd = d.kod; 
INTO CURSOR _1
  
SELECT a.kod_nazv,;
       a.naim,;
       a.avtor,;
       a.god_izd,;
       a.kod_izd,;
       ROUND(b.cena_post*( 100 +b.nds)/ 100 , 0 ) as cenands,;
       IIF(ISNULL(c.kol), 0 ,c.kol) as kol,;
       IIF(ISNULL(e.publGrID), 0 ,e.publGrID) as publGrID;
FROM _1 a INNER JOIN;
       (prihod b LEFT OUTER JOIN; 
         (rashod c INNER JOIN;
           (bibl d LEFT OUTER JOIN bibl_publGr e ON d.publGrID = e.publGrID);
         ON c.k_k = d.k_k);
        ON b.kod_nazv = c.kod_nazv AND b.kcen = c.kcen;
          AND c.dt_dok BETWEEN date1 AND date2);
     ON a.kod_nazv = b.kod_nazv ; 
INTO CURSOR _2;
    
SELECT kod_nazv,naim,avtor,god_izd,kod_izd,cenands,publGrID,SUM(kol) as kol;
FROM _2 GROUP BY  1 , 2 , 3 , 4 , 5 , 6 , 7 ;
INTO CURSOR _rash  

  DO bibl_otch4 WITH date1,date2 
  REPORT FORM rep_2 TO PRINTER PROMPT preview

а это запрос из программы bibl_otch4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
.....................
SELECT MAX(god_izd) AS god FROM _rash;
INTO CURSOR _god
SELECT a.PublGrID,;
       b.Name,;
       SUM(a.kol) AS kolt,;
       SUM(a.kol*a.cenands) AS sumt,;
       SUM(IIF(a.god_izd = _god.god,a.kol, 0 )) AS kol,;
       SUM(IIF(a.god_izd = _god.god,a.kol * a.cenands, 0 )) AS sum;
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
WHERE a.PublGrID >  0  AND a.kod_izd = _izd_kod;
GROUP BY  1 , 2 ;
ORDER BY  2 ;
INTO CURSOR _otch
......................

То что выше все работает, но мне щас надо переделать это все так чтобы вместо publGrID выбор шел по полю shkol (логическое), т.е. где .t. вести подсчет.

Впринципе мне надо тольло общая сумма и количество за определенный период по одному коду издателя (_izd_kod), так что все остольное мне не важно

В архиве я скинул 2 таблицы: bibl.dbf и bibl_publgr.dbf

Плиз очень нужно сегодня сделать
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35132849
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не вдаваясь в задачу обращу внимание на необходимость, по моему мнению, замены
Код: plaintext
1.
date1=CTOD(STR(o1.day, 2 )+'/'+STR(o1.month, 2 )+'/'+STR(o1.year, 4 ))
date2=CTOD(STR(o2.day, 2 )+'/'+STR(o2.month, 2 )+'/'+STR(o2.year, 4 ))
на
Код: plaintext
1.
date1=Date(o1.year,o1.month,o1.day)
date2=Date(o2.year,o2.month,o1.day)
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35132868
GavRYshA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
код писал не я ... и о его логичности плиз не судите

тут просто нужно переделать по 1-2 строки в запросах
ХЕЛЛППП...
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35132886
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо
Код: plaintext
WHERE a.PublGrID >  0  AND a.kod_izd = _izd_kod;
поставьте
Код: plaintext
WHERE  shkol AND a.kod_izd = _izd_kod;
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35132905
GavRYshA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишет что не пожет найти столбец shkol
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35132977
GavRYshA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в коде кнопки я так понимаю формируется таблица _rash из которой далее вытягиваются по определенному запросу данные ... вот как то, где там и надо прописать поле shkol вместо publGrID и все что с ним связано
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35134557
GavRYshA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лин помогите кто ... тут как я понимаю надо всего поменять правильно 2 строки
...............
(bibl d LEFT OUTER JOIN bibl_publGr e ON d.publGrID = e.publGrID);
...............


...............
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
...............
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35136565
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, при формировании курсора _2 практически ничего менять не надо. Надо только добавить выбор еще и поля Bibl.Shkol по аналогии с полем e.publGrID

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT ;
       ...;
       IIF(ISNULL(c.kol), 0 ,c.kol) as kol,;
       IIF(ISNULL(e.publGrID), 0 ,e.publGrID) as publGrID,;
* Вот эту строчку добавляем не забыв вставить запятую в конец предыдущей
       IIF(ISNULL(d.Shkol),.F.,d.Shkol) as Shkol,;
FROM _1 a INNER JOIN;
...
INTO CURSOR _2

В результате, ты получаешь в курсоре _2 нужное тебе поле.

А вот дальнейшие действия зависят от того, как используется курсор _rash в форме bibl_otch4 и отчете rep_2.

Простейший алгоритм действий - это добавить новое поле Shkol в группировку для получения курсора _rash

Код: plaintext
1.
2.
3.
SELECT kod_nazv,naim,avtor,god_izd,kod_izd,cenands,publGrID, Shkol, SUM(kol) as kol;
FROM _2 GROUP BY  1 , 2 , 3 , 4 , 5 , 6 , 7 ,  8  ;
INTO CURSOR _rash 


Соответственно, в последнем запросе у тебя уже будет поле _rash.Shkol по которому можно выполнить анализ. Банально заменяешь a.publGrID на a.Shkol в условии WHERE

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT a.PublGrID,;
       b.Name,;
       SUM(a.kol) AS kolt,;
       SUM(a.kol*a.cenands) AS sumt,;
       SUM(IIF(a.god_izd = _god.god,a.kol, 0 )) AS kol,;
       SUM(IIF(a.god_izd = _god.god,a.kol * a.cenands, 0 )) AS sum;
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
WHERE a.Shkol AND a.kod_izd = _izd_kod;
GROUP BY  1 , 2 ;
ORDER BY  2 ;
INTO CURSOR _otch

Но здесь нет уверенности, поскольку не известна общая постановка задачи. Не помешает ли лишнее условие группировки работе формы и отчета? Да и запросы очень неряшлево написаны.
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35136836
GavRYshA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вкратце о пастановке: надо из найти кольчество и сумму книг которые закупали определенные библиотеки (публичне, школьные, иные учреждения образ.) опреденныех издателей (_izd_kod их у меня всего 9). с публичными все работает т к это уже было написано, а вот для остальных мне надо доделать. Выбирать для shkol надо есть в таблице bibl стоит .T. , так же как и для publGrID только publGrID смотрит если > 0 значит публичная и тянет еще название ее с таблицы bibl_publGr для shkol это не надо.

Вроде как поле добавилось, только выдает все значения 0
я так думаю что в курсоре 2 не идет сам выбор по полю shkol вот и остаются там все .f.

Желательно сделать в одном запросе и для publGrID и для Shkol, но это не критично
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT a.kod_nazv,;
       a.naim,;
       a.avtor,;
       a.god_izd,;
       a.kod_izd,;
       ROUND(b.cena_post*( 100 +b.nds)/ 100 , 0 ) as cenands,;
       IIF(ISNULL(c.kol), 0 ,c.kol) as kol,;
       IIF(ISNULL(e.publGrID), 0 ,e.publGrID) as publGrID,;
       IIF(ISNULL(d.Shkol),.F.,d.Shkol) as Shkol;       
FROM _1 a INNER JOIN;
       (prihod b LEFT OUTER JOIN; 
         (rashod c INNER JOIN;
*вот что то по онологии с publGrID надо написать про shkol только не обращаясь к таблице
*bibl_publGr она просто со shkol не нужна
           (bibl d LEFT OUTER JOIN bibl_publGr e ON d.publGrID = e.publGrID);
         ON c.k_k = d.k_k);
        ON b.kod_nazv = c.kod_nazv AND b.kcen = c.kcen;
          AND c.dt_dok BETWEEN date1 AND date2);
     ON a.kod_nazv = b.kod_nazv ; 
INTO CURSOR _2;

дальше в прг
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ELECT a.PublGrID,;
       b.Name,;
       SUM(a.kol) AS kolt,;
       SUM(a.kol*a.cenands) AS sumt,;
       SUM(IIF(a.god_izd = _god.god,a.kol, 0 )) AS kol,;
       SUM(IIF(a.god_izd = _god.god,a.kol * a.cenands, 0 )) AS sum;
*по ходу и тут надо исправить под поле Shkol
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
WHERE a.Shkol AND a.kod_izd = _izd_kod;
GROUP BY  1 , 2 ;
ORDER BY  2 ;
INTO CURSOR _otch


В скинутом файле код программы для вывода в отчет. Отчет сам состоит из одной строки _str
Как такового отчета еще нету мне пока главное поулчить правильные числа
...
Рейтинг: 0 / 0
Надо немного переделать запрос
    #35136846
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В глаза бросилось:
Код: plaintext
IIF(ISNULL(c.kol), 0 ,c.kol)
можно так писать
Код: plaintext
nvl(c.kol,  0 )

По поводу запросов, если хочешь чтобы тебе помогли - сделай тестовый набор данных (dbf-ки с полями участвующими в запросе) выложи сюда, тут такие вещи в уме никто общитывать не умеет. Тем более задачу ты тоже слабо описал.
И правильный результат покажи, чтобы понятно было к чему стремится.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Надо немного переделать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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