Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос к разным видам документов (число прочтений - 7016 )
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Запрос к разным видам документов
Ответ #15 - 13. Декабря 2010 :: 07:17
Печать  
Dmitry The Wing писал(а) 13. Декабря 2010 :: 06:46:
А разве не проще будет сделать так:
Код
Выбрать все
select
...
from [Журнал] Ж
left join [Документ.Первый] Д on Ж.iddoc=Д.iddoc
where Ж.iddocdef in (:ВидДокумента.Первый, :ВидДокумента.Второй, :ВидДокумента.Третий)
and (
case Ж.iddocdef
when :ВидДокумента.Первый then Д.Фирма = выбФирма
when :ВидДокумента.Втрой then Д.Клиент = выбКлиент
when :ВидДокумента.Третий then Д.Поставщик = выбПоставщик
end
) = 1
 


Ну вообще-то это у тебя выборка только по одному виду документов.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #16 - 13. Декабря 2010 :: 08:33
Печать  
orefkov писал(а) 13. Декабря 2010 :: 07:17:
Ну вообще-то это у тебя выборка только по одному виду документов.
ой, стормозил Улыбка
  
Наверх
 
IP записан
 
Kondarat
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 21. Декабря 2007
Re: Запрос к разным видам документов
Ответ #17 - 13. Декабря 2010 :: 15:30
Печать  
orefkov писал(а) 12. Декабря 2010 :: 21:42:
Никаких union'ов в не должно быть !
Запрос должен быть прост, как три рубля, типа такого
Код
Выбрать все
select
...
from [Журнал] Ж
left join [Документ.Первый] Д1 on (Ж.iddoc=Д1.iddoc and Ж.iddocdef=:ВидДокумента.Первый)
left join [Документ.Второй] Д2 on (Ж.iddoc=Д2.iddoc and Ж.iddocdef=:ВидДокумента.Второй)
left join [Документ.Третий] Д3 on (Ж.iddoc=Д3.iddoc and Ж.iddocdef=:ВидДокумента.Третий)

where Ж.iddocdef in (:ВидДокумента.Первый, :ВидДокумента.Второй, :ВидДокумента.Третий)
and (
case Ж.iddocdef
when :ВидДокумента.Первый then Д1.Фирма = выбФирма
when :ВидДокумента.Втрой then Д2.Клиент = выбКлиент
when :ВидДокумента.Третий then Д1.Поставщик = выбПоставщик
end
) = 1
 



Ну и естественно, ключ порядка idx_date_time_iddoc


Это если выбФирма, выбКлиент, выбПоставщик являются реквизитами документов, а у меня один или несколько реквизитов - Общие. В данном случае выбФирма.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Запрос к разным видам документов
Ответ #18 - 13. Декабря 2010 :: 21:37
Печать  
Kondarat писал(а) 13. Декабря 2010 :: 15:30:
Это если выбФирма, выбКлиент, выбПоставщик являются реквизитами документов, а у меня один или несколько реквизитов - Общие. В данном случае выбФирма.

Ну и прелестно!
Если отбор по Фирма включен, значит, поле вообще в журнале.
Код
Выбрать все
where Ж.Фирма = :выбФирма
 


Если отбора нет - зачит, поле есть в каждой шапке:
Код
Выбрать все
where coalesce(Д1.Фирма, Д2.Фирма, Д3.Фирма) = :выбФирма
 


В чем вопрос то?
Условия наложить?

Еще раз - структура основного запроса для SQLiteDataProvider'а по документам всегда одна - выборка из журнала (с ключом порядка по idx_date_time_iddoc) к которому лефтджойнятся шапки нужных доков, и накладывается ограничение по необходимым iddocdef или idjournal.
Ну и далее накладывай ограничения - что показывать, что нет.
  
Наверх
 
IP записан
 
Kondarat
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 21. Декабря 2007
Re: Запрос к разным видам документов
Ответ #19 - 14. Декабря 2010 :: 13:54
Печать  
orefkov писал(а) 13. Декабря 2010 :: 21:37:
Kondarat писал(а) 13. Декабря 2010 :: 15:30:
Это если выбФирма, выбКлиент, выбПоставщик являются реквизитами документов, а у меня один или несколько реквизитов - Общие. В данном случае выбФирма.

Ну и прелестно!
Если отбор по Фирма включен, значит, поле вообще в журнале.
Код
Выбрать все
where Ж.Фирма = :выбФирма
 


Если отбора нет - зачит, поле есть в каждой шапке:
Код
Выбрать все
where coalesce(Д1.Фирма, Д2.Фирма, Д3.Фирма) = :выбФирма
 


В чем вопрос то?
Условия наложить?

Еще раз - структура основного запроса для SQLiteDataProvider'а по документам всегда одна - выборка из журнала (с ключом порядка по idx_date_time_iddoc) к которому лефтджойнятся шапки нужных доков, и накладывается ограничение по необходимым iddocdef или idjournal.
Ну и далее накладывай ограничения - что показывать, что нет.


Может я и не прав, но: если применить условие

where Ж.Фирма = :выбФирма

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

Например пользователь работает с приходными накладными по фирме1, а с расходными по Фирме2. В случае фильтра по журналу
(IN (Фирма1, Фирма2)) он будет видеть документы обоих видов, а мне нужно, чтобы не видел. Или я не прав?




  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Запрос к разным видам документов
Ответ #20 - 14. Декабря 2010 :: 21:34
Печать  
Kondarat писал(а) 14. Декабря 2010 :: 13:54:
orefkov писал(а) 13. Декабря 2010 :: 21:37:
Kondarat писал(а) 13. Декабря 2010 :: 15:30:
Это если выбФирма, выбКлиент, выбПоставщик являются реквизитами документов, а у меня один или несколько реквизитов - Общие. В данном случае выбФирма.

Ну и прелестно!
Если отбор по Фирма включен, значит, поле вообще в журнале.
Код
Выбрать все
where Ж.Фирма = :выбФирма
 


Если отбора нет - зачит, поле есть в каждой шапке:
Код
Выбрать все
where coalesce(Д1.Фирма, Д2.Фирма, Д3.Фирма) = :выбФирма
 


В чем вопрос то?
Условия наложить?

Еще раз - структура основного запроса для SQLiteDataProvider'а по документам всегда одна - выборка из журнала (с ключом порядка по idx_date_time_iddoc) к которому лефтджойнятся шапки нужных доков, и накладывается ограничение по необходимым iddocdef или idjournal.
Ну и далее накладывай ограничения - что показывать, что нет.


Может я и не прав, но: если применить условие

where Ж.Фирма = :выбФирма

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

Например пользователь работает с приходными накладными по фирме1, а с расходными по Фирме2. В случае фильтра по журналу
(IN (Фирма1, Фирма2)) он будет видеть документы обоих видов, а мне нужно, чтобы не видел. Или я не прав?

Код
Выбрать все
where Ж.iddocdef in (:ВидДокумента.Первый, :ВидДокумента.Второй, :ВидДокумента.Третий)
and (
case Ж.iddocdef
when :ВидДокумента.Первый then Ж.Фирма = :фирма1
when :ВидДокумента.Втрой then Д2.Клиент = :выбКлиент and Ж.Фирма = :фирма2
when :ВидДокумента.Третий then Д3.Поставщик = :выбПоставщик and Ж.Фирма = :фирма3
end
) = 1
 


« Последняя редакция: 15. Декабря 2010 :: 05:34 - orefkov »  
Наверх
 
IP записан
 
Kondarat
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 21. Декабря 2007
Re: Запрос к разным видам документов
Ответ #21 - 15. Декабря 2010 :: 14:50
Печать  
Код
Выбрать все
where Ж.iddocdef in (:ВидДокумента.Первый, :ВидДокумента.Второй, :ВидДокумента.Третий)
and (
case Ж.iddocdef
when :ВидДокумента.Первый then Ж.Фирма = :фирма1
when :ВидДокумента.Втрой then Д2.Клиент = :выбКлиент and Ж.Фирма = :фирма2
when :ВидДокумента.Третий then Д3.Поставщик = :выбПоставщик and Ж.Фирма = :фирма3
end
) = 1
 



Огромное спасибо. Все работает именно так как надо.
Вы лучший.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #22 - 16. Декабря 2010 :: 09:49
Печать  
Я влезу немного...
И это можно было решить через класс. Но если хочется самому, то я только за, хорошо когда человек тянется к знаниям, а не ищет легких путей Улыбка.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #23 - 16. Декабря 2010 :: 09:59
Печать  
vandalsvq писал(а) 16. Декабря 2010 :: 09:49:
Я влезу немного...
И это можно было решить через класс. Но если хочется самому, то я только за, хорошо когда человек тянется к знаниям, а не ищет легких путей Улыбка.

По мне так, прямой путь намного легче... уже потому, что он понятнее, а значит, - более гибок.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Запрос к разным видам документов
Ответ #24 - 16. Декабря 2010 :: 14:34
Печать  
Dmitry The Wing писал(а) 16. Декабря 2010 :: 09:59:
vandalsvq писал(а) 16. Декабря 2010 :: 09:49:
Я влезу немного...
И это можно было решить через класс. Но если хочется самому, то я только за, хорошо когда человек тянется к знаниям, а не ищет легких путей Улыбка.

По мне так, прямой путь намного легче... уже потому, что он понятнее, а значит, - более гибок.

Легче он до тех пор, пока не надо будет реализовать не просто ТП с документами, а полную функциональность журнала документов - кнопочки-менюшечки-итд. Вот тогда прикинешь объем работы, и начинаешь изучать доку на ПоставщикДанных.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #25 - 17. Декабря 2010 :: 02:13
Печать  
orefkov писал(а) 16. Декабря 2010 :: 14:34:
Dmitry The Wing писал(а) 16. Декабря 2010 :: 09:59:
vandalsvq писал(а) 16. Декабря 2010 :: 09:49:
Я влезу немного...
И это можно было решить через класс. Но если хочется самому, то я только за, хорошо когда человек тянется к знаниям, а не ищет легких путей Улыбка.

По мне так, прямой путь намного легче... уже потому, что он понятнее, а значит, - более гибок.

Легче он до тех пор, пока не надо будет реализовать не просто ТП с документами, а полную функциональность журнала документов - кнопочки-менюшечки-итд. Вот тогда прикинешь объем работы, и начинаешь изучать доку на ПоставщикДанных.

Реализовывал. Разделил функционал на отдельные классы: дерево, закладки, тулбар, менюшки (без плагиата, ибо сделал это до того, как узнал о поставщике). Подключаю по мере возникновения необходимости и не имею столь сложного динозавра. Зато все прозрачно и легко подчиняется контролю и отладке.
Тут все упирается в точку зрения. Для меня важно понять, как оно работает, иначе как я обойду все его минусы и на максимум запользую плюсы? Для семерки это очень критично, особенно при тех объемах данных, что вертятся в конторе...
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #26 - 17. Декабря 2010 :: 06:49
Печать  
Все прозрачно и легко в твоем классе только для тебя Подмигивание
Для других, думаю, это будет динозавр похлеще.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #27 - 17. Декабря 2010 :: 07:23
Печать  
JohnyDeath писал(а) 17. Декабря 2010 :: 06:49:
Все прозрачно и легко в твоем классе только для тебя Подмигивание
Для других, думаю, это будет динозавр похлеще.

Я не один в команде Улыбка с классом всегда идет als и ints + всегда можно обратиться к автору Улыбка В общем, никто не жалуется.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #28 - 17. Декабря 2010 :: 08:08
Печать  
Согласись, у тебя и аудитория поменьше.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос к разным видам документов
Ответ #29 - 17. Декабря 2010 :: 09:55
Печать  
Согласен. Поменьше. Просто потому, что загрузка не позволяет доводить классы до "товарного" вида. А без этого выкладывать их для общего использования совесть не позволяет...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать