Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как через sqlite найти документ

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

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

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

в итоге получаю пустую тз (не находит короче)
как его оптимизировать чтоб искала пока не пойму
   sysadminlk
 
1 - 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 - не понятно и как его подставить в запрос тоже пока не понятно
   sysadminlk
 
2 - 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
основание - ДОКУМЕНТ а подсовываешь туда ТекущийЭлемент()?
   sysadminlk
 
6 - 24.11.20 - 22:07
(3) я из справочника хочу найти все документы где в шапке этого документа есть этот элемент справочника
там документ можно сделать на основании элемента справочника
или она основании другого документа
поэтому в документе поле основание это не определенный тип
   sysadminlk
 
7 - 24.11.20 - 22:17
я придумал как можно штатно это сделать
вот рабочий код:

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

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

Значение любого типа с модификатором -1 преобразуется в тип базы данных "Неопределенный", строка 23 символа.
   sysadminlk
 
18 - 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 ничего не написали.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.