Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite - Отбор по реквизиту шапки документа (число прочтений - 8759 )
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
1sqlite - Отбор по реквизиту шапки документа
27. Декабря 2010 :: 09:40
Печать  
В шапке документа есть реквизит "Владелец".

Отбор всех документов по реквизиту таким образом
Код
Выбрать все
Документ = СоздатьОбъект("Документ");
Документ.ВыбратьПоЗначению(,,"Владелец",владелец);
Пока (Документ.ПолучитьДокумент() = 1) Цикл
...
КонецЦикла
 



работает существенно быстрее, чем таким
Код
Выбрать все
select
  iddoc as [Документ :Документ.<ВидДокумента>]
from
  Документ_<ВидДокумента>
where
  Владелец = :Владелец 



Подозреваю, что это связано с необходимостью использования графы отбора журнала?
Может кто ткнет носом, как с ними работать в 1SQLite?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #1 - 27. Декабря 2010 :: 09:48
Печать  
Из Статьи о использовании прямых запросов
Цитата:
Графы отбора и подчиненные документы лежат в таблице _1SCRDOC. Вид графы в поле MDID, значение отбора или документа владельца в поле ParentVal

Пример: Выберем документы по графе отбора Контрагент

DBF вариант выглядит так:
Код
Выбрать все
| ТекстЗапроса = "
|SELECT
|	Жур.IDDoc [Док $Документ],
|	Жур.IDDocDef Док_вид
|FROM
|	1Sjourn Жур
|INNER JOIN
|	1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND
|				Отбор. MDID = $ГрафаОтбора.Контрагент AND
|			  Отбор.ParentVal = :ВыбКонтрагент* AND
|			  Отбор.ChildDate BETWEEN :НачДата~~ AND :КонДата~~";   



Чуть подрехтуй для 1sqlite и в путь!
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #2 - 27. Декабря 2010 :: 09:50
Печать  
Женя, спасибо, в принципе вроде разобрался методом научного тыка
Улыбка
Меня интересовало именно как в 1sqlite с этим работать, не нашел там такого параметра, как ГрафаОтбора
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #3 - 27. Декабря 2010 :: 09:58
Печать  
Из документации 1sqlite:
Цитата:
ГрафаОтбора / SelectionColumn
Подстановка идентификатора указанной графы отбора:

:ГрафаОтбора|SelectionColumn.ИмяГрафыОтбора[~]

При нулевом модификаторе подставляется строка длиной 4 символа - идентификатор графы отбора в 36ричной записи

При модификаторе 1 подставляется целое число - идентификатор графы отбора.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #4 - 27. Декабря 2010 :: 10:09
Печать  
Блин, вроде поиском искал в chm-ке, да не нашел..
Посыпаю голову пеплом..

Самое смешное, что нашел в своих же сохраненных запросах выбор документов с помощью графы отбора..
Старым становлюсь наверное Улыбка
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #5 - 27. Декабря 2010 :: 10:18
Печать  
Теперь сравниваю с таким запросом
Код
Выбрать все
select
  iddoc as [Док :Документ],
  iddocdef as Док_вид,
from __1s_crdoc as Ссылки
inner join Журнал on Журнал.iddoc = Ссылки.childid
where
  mdid = :ГрафаОтбора.Владелец
  and substr(parentval,7,9) = :Владелец
  and iddocdef = :ВидДокумента.<ВидДокумента> 


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

База dbf, лежит на сетевом ресурсе, число пользователей от 5 до 15
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #6 - 27. Декабря 2010 :: 10:58
Печать  
А если так:
Код
Выбрать все
select
  iddoc as [Док :Документ],
  iddocdef as Док_вид,
from __1s_crdoc as Ссылки
left join Журнал on Журнал.iddoc = Ссылки.childid
where
  mdid = :ГрафаОтбора.Владелец
  and parentval = :Владелец*
  and iddocdef = :ВидДокумента.<ВидДокумента>  

  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #7 - 27. Декабря 2010 :: 12:31
Печать  
Вот так резко лучше стало
Код
Выбрать все
select
  iddoc as [Док :Документ],
  iddocdef as Док_вид,
from __1s_crdoc as Ссылки
inner join Журнал on Журнал.iddoc = Ссылки.childid
where
  mdid = :ГрафаОтбора.Владелец
  and parentval = :Владелец*
  and iddocdef = :ВидДокумента.<ВидДокумента>
 


Что за модификатор "*"?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #8 - 27. Декабря 2010 :: 13:30
Печать  
Ты как в первый раз Подмигивание
выдержки из тойже документации по 1sqlite:
Цитата:
Символ '*' обозначает модификатор '-1', количество же символов '~' следующих за именем параметра задает его номер.

Цитата:
Значение любого типа с модификатором -1 преобразуется в тип базы данных "Неопределенный", строка 23 символа. Модификаторы от 0 и выше для разных типов значений действуют по разному.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #9 - 27. Декабря 2010 :: 13:45
Печать  
Чесслово, про "*" в доке не нашел.
Все облазил, даже поиском искал..

Цитата:
Преобразование значений 1С в значения базы данных (работа с параметрами)
...
Значение любого типа с модификатором -1 преобразуется в тип базы данных "Неопределенный", строка 23 символа. Модификаторы от 0 и выше для разных типов значений действуют по разному.

Ниже приводятся правила действия модификаторов на типы значений 1С.
...

  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #10 - 27. Декабря 2010 :: 13:48
Печать  
А, вот, нашел..
в описании метода "Подставлять"...
А я в разделе "Преобразование значений 1С в значения базы данных (работа с параметрами)" искал
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #11 - 27. Декабря 2010 :: 13:50
Печать  
*-это "старое" название модификатора, аналогично тильде ~

Ну а дальше, всё есть в доке :

Значение типа Справочник
0: Строка длинной 9 - внутренний идентификатор значения
1: Строка длинной 13 - внутренний идентификатор значения с видом значения
2: Строка длинной 4 - внутренний идентификатор вида значения
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #12 - 27. Декабря 2010 :: 13:52
Печать  
Eprst писал(а) 27. Декабря 2010 :: 13:50:
Ну а дальше, всё есть в доке :

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #13 - 27. Декабря 2010 :: 13:55
Печать  
Eprst писал(а) 27. Декабря 2010 :: 13:50:
*-это "старое" название модификатора, аналогично тильде ~

Ну а дальше, всё есть в доке :

Значение типа Справочник
0: Строка длинной 9 - внутренний идентификатор значения
1: Строка длинной 13 - внутренний идентификатор значения с видом значения
2: Строка длинной 4 - внутренний идентификатор вида значения

Как это старое?
Тильда == модификотор 1
Две тильды == модификатор 2
и т.д.
* == модификатор -1 (или очень много тильд)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite - Отбор по реквизиту шапки документа
Ответ #14 - 27. Декабря 2010 :: 13:57
Печать  
CaBaT писал(а) 27. Декабря 2010 :: 13:52:
Eprst писал(а) 27. Декабря 2010 :: 13:50:
Ну а дальше, всё есть в доке :

Это видел, просто я забыл про подраздел в описании метода "Подставлять"...
Всем спасибо за помощь! Улыбка

Ну так чё там по времени выполнения?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать