Имя: Пароль:
1C
1C 7.7
v7: Как через sqlite найти документ
,
0 sysadminlk
 
24.11.20
20:45
в форме элемента справочника пишу:
запрос.ВыполнитьЗапрос("create virtual table ДопДост using dbeng(Документ.ДоставкаДоп)");

        запрос.Подставлять("ТекЭл", ТекущийЭлемент());
        текст="SELECT * FROM ДопДост WHERE Основание = :ТекЭл;";
        тз=запрос.ВыполнитьЗапрос(текст);

При этом Основание это реквизит документа неопределенного типа

в итоге получаю пустую тз (не находит короче)
как его оптимизировать чтоб искала пока не пойму
1 sysadminlk
 
24.11.20
21:51
запрос.Подставлять("ТекЭл", ТекущийЭлемент());        
        текст="SELECT * FROM ДопДост WHERE Основание = :ТекЭл~;";
        аа = запрос.ОбработатьТекстЗапроса(текст);
        Сообщить(аа);
        
результат:
//SELECT * FROM ДопДост WHERE Основание = ' 5Y4    2Q   ';

но если сделать WHERE 1
то видно что в Основание
значения в другом формате
типа:
O1 1V2     0          
B1 5Y4    2Q

не понятно что такое B1 и О1
потому что дальше понятно
5Y4    это вид мое справочника
2Q мой конкретный элемент этого справочника
а что такое B1 - не понятно и как его подставить в запрос тоже пока не понятно
2 sysadminlk
 
24.11.20
22:02
замутил костыль
        запрос.Подставлять("ТекЭл", ТекущийЭлемент());        
        текст="SELECT * FROM ДопДост WHERE Основание = 'B1'||:ТекЭл~;";

что такое B1 пока загадка
Есть идеи?
3 Злопчинский
 
24.11.20
22:02
я бы как незнающий сделал так
ДокНеопределенныйТип = СоздатьОбъект("Документ");
ДокНеопределенныйТип.НайтиДокумент(ЧтоТо); //здесь в выборке всех документов позиционируемся на нужном
НайденныйЭлемент = ДокНеопределенныйТип.ТекущийЭлемент();
запрос.Подставлять("ТекЭл", НайденныйЭлемент); //подсовываем ссылку неопределенного типа документов
и вообще у тебя ТекущийЭлемент() - ЭТО К ДОКУМЕНТУ ССЫЛКА ОТНОСИТСЯ?!
4 Злопчинский
 
24.11.20
22:03
тьфу, в коде выше
НайденныйЭлемент = ДокНеопределенныйТип.ТекущийДокумент(); - ТАК Д.Б.
5 Злопчинский
 
24.11.20
22:04
основание - ДОКУМЕНТ а подсовываешь туда ТекущийЭлемент()?
6 sysadminlk
 
24.11.20
22:07
(3) я из справочника хочу найти все документы где в шапке этого документа есть этот элемент справочника
там документ можно сделать на основании элемента справочника
или она основании другого документа
поэтому в документе поле основание это не определенный тип
7 sysadminlk
 
24.11.20
22:17
я придумал как можно штатно это сделать
вот рабочий код:

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

Но интересно бы на sqlite это провернуть.
8 Злопчинский
 
24.11.20
22:20
(6) "Основание это реквизит документа неопределенного типа"
ты уже бля определись. основание это у тебя реквизит "Документ" или "Неопределенный"
9 Злопчинский
 
24.11.20
22:22
(7) ненавижу конструкцию тиакие - экономия миллисикгнуда, а чтение кода усложняет шо капец.
я тупо без если написал бы.
10 sysadminlk
 
24.11.20
22:23
(8) Основание - Тип значения {Неопределенный}
11 sysadminlk
 
24.11.20
22:25
(9) я сначала тупанул и не подумал что штатно тоже можно сделать )
а теперь интересно стало
12 sysadminlk
 
24.11.20
22:27
там просто в конфиге уже и так целая тонна отборов
13 Ёпрст
 
25.11.20
09:13
Ты ужо определись, че те там над, Основание или ДопДостОснование. Перввое, это реквизит с типом <Документ> неопределкнного вида, а второе, вероятно, твой реквизит с типом Справочник.Вася..
>
14 Mikeware
 
25.11.20
09:31
(1) B1 и O1 - это типы объектов в строке(23)
[Type(2)][Kind(4)][ID(6)][Sign(3)] = 23 символов
О1 - вроде документ, B1 - справочник... хотя могу ошибаться.
15 Sserj
 
25.11.20
09:48
текстЗапроса = "select * from [Документ.ДоставкаДоп] as док where док.ДопДостОснование = :ТекЭл*";
запрос.Подставлять("ТекЭл", ТекущийЭлемент());
тз=запрос.ВыполнитьЗапрос(текст);
16 Mikeware
 
25.11.20
09:49
(15) звездочка - не в строка(13) конвертит?
17 Sserj
 
25.11.20
09:51
(16) Древняя дока говорит:
:ВыбТовар - модификатор 0
:ВыбКлиент~ - модификатор 1
:ПозДок~~~ - модификатор 3
:Установить* - модификатор -1

Значение любого типа с модификатором -1 преобразуется в тип базы данных "Неопределенный", строка 23 символа.
18 sysadminlk
 
04.12.20
13:50
Разобрался.

запрос.ВыполнитьЗапрос("create virtual table Шапка using dbeng(Документ.Расходная)");    
запрос.Подставлять("Основание", Вар.ТекущийДокумент());

SELECT * FROM Шапка WHERE 1
видно что в колонке записано O1 1E0  2P8R

далее через Сообщить(запрос.ОбработатьТекстЗапроса(текст)); смотрю что для меня подходит

SELECT * FROM Шапка WHERE Основание = :Основание
SELECT * FROM Шапка WHERE Основание = '  2P8R   '

SELECT * FROM Шапка WHERE Основание = :Основание~
SELECT * FROM Шапка WHERE Основание = ' 1E0  2P8R   '

SELECT * FROM Шапка WHERE Основание = :Основание~~
SELECT * FROM Шапка WHERE Основание = ' 1E0'

SELECT * FROM Шапка WHERE Основание = :Основание~~~
SELECT * FROM Шапка WHERE Основание = '202012048XVD28  2P8R   '

SELECT * FROM Шапка WHERE Основание = :Основание*
SELECT * FROM Шапка WHERE Основание = 'O1 1E0  2P8R           '

ООО вот мой вариант!
Получается мне подходит :Основание*

В манах про это инфы почему-то нет
Символ '*' обозначает модификатор '-1', количество же символов '~' следующих за именем параметра задает его номер.

Значение типа Документ
0: Строка длинной 9 - внутренний идентификатор значения
1: Строка длинной 13 - внутренний идентификатор значения с видом значения
2: Строка длинной 4 - внутренний идентификатор вида значения
3: Строка длинной 23 - позиция документа в формате date_time_iddoc
4: Строка длинной 24 - позиция документа в формате date_time_iddoc + 'Я'

А про -1 ничего не написали.