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

v7: Побуквенный подбор из справочника

v7: Побуквенный подбор из справочника
Я
   jah1111
 
05.08.20 - 13:44
Есть справочник Справочник.ТМЦ
В нем есть поле ввода ПолеПоиск
Возможно ли реализовать чтоб при вводе каждой последуещей буквы в ПолеПоиск выполнялся поиск в справочнике и активизация строки?
пока сделал так:

Процедура ПоискПоБукв()
    ТабПоиск = СоздатьОбъект("Справочник.ТМЦ");
    Поиск= ТабПоиск.НайтиПоНаименованию(ПолеПоиск,0,0);
    ТоварП = ТабПоиск.ТекущийЭлемент();    
    АктивизироватьОбъект(ТоварП);
   КонецПроцедуры //ПоискПоБукв()

а как реализовать, так сказать, динамический поиск? (похож на штатный поиск в справочнике когда активирована строка справочника и вводишь имя элемента с клавиатуры).

на вопросы "Зачем?" сразу отвечаю "Да, ТСД". "Нет, я не наркоман". :)
   Ёпрст
 
1 - 05.08.20 - 13:53
(0) штатно, нет
если религия позволяет, то активикс на форме и прямой запрос для поиска
   Ёпрст
 
2 - 05.08.20 - 13:53
недавно тут кто-то вспоминал былое
   jah1111
 
3 - 05.08.20 - 13:59
если не затруднит, ссылочку
   Ёпрст
 
4 - 05.08.20 - 14:31
   Ёпрст
 
5 - 05.08.20 - 14:37
http://catalog.mista.ru/public/141197/

вот, можешь и готовое изделие посмотреть, если писать лень
   MWWRuza
 
6 - 06.08.20 - 12:03
+(4) Это мое поделие... Там, в теме, есть ссылки для скачки. У меня у пользователей на продуктиве работает, в принципе - всем нравится.
   jah1111
 
7 - 06.08.20 - 21:04
(5) там все очень красиво, но у меня срабатывает только по "ентер"
если кто шарит в чем проблема - помогите
   jah1111
 
8 - 06.08.20 - 21:05
win10 64
   Злопчинский
 
9 - 06.08.20 - 21:22
(7) Формекс стоит? 1С++ стоит? указанные в комментах компоненты - установлены?
   jah1111
 
10 - 06.08.20 - 21:32
(9) да....  ну разве может версии не те....
   Ёпрст
 
11 - 06.08.20 - 22:46
(7) дык доработать надо, в классе подменять поле на активикс в котором пасти нажатия клавиш, но, это уже будет совсем другая поделка.

А так, смотри (4) там есть примеры перехвата нажатий и поиск.
Просто в (5) - попытка универсально сделать везде.
Можно и доработать, только кому это надо нынче ?)
Снеговик же на марше
   victuan1
 
12 - 07.08.20 - 06:14
(11) Надо. У меня все клиенты на 7.7 и их очень много, постоянно обращаются новые, но я их не беру, т.к. некуда уже. Для 1с8 времени совсем нет, т.к. даже 1С 7.7 не успеваю заниматься.
   Креатив
 
13 - 07.08.20 - 09:09
(12)Открой фирму, найми рабов.
   jah1111
 
14 - 07.08.20 - 09:14
(13) на 7.7 очень много людей сидит, возможно фирма имела бы успех
   jah1111
 
15 - 07.08.20 - 09:17
(11) жалко, я думал (5) таки внатуре "алявосьмерка"
   Сияющий в темноте
 
16 - 07.08.20 - 09:41
основное поеимущество побукаенного поиска в браузере а том,что поиск выполняется на сераере параллельно со вводом пользователя и поток пользователя делает только отправку запроса и показ результата.
   trdm
 
17 - 07.08.20 - 09:42
(12) Есть свободное время, перекидывай заказы.
   obs191
 
18 - 07.08.20 - 11:57
(12) Если неспешно устроит, то могу помочь удаленно.
   jah1111
 
19 - 07.08.20 - 17:41
(17) (18) эй, если у вас времени так много, то "алявосьмерку" допилите
ато разОФФтопились тут :)
а я то, наверное, не сдюжу - слишком тяжело для меня
   Злопчинский
 
20 - 07.08.20 - 18:39
и эти люди глумятся надо мной что я на клюшках сижу...
   Djelf
 
21 - 07.08.20 - 18:54
(20) Кто эти люди? оО В этой теме ни одного негатива нет.
А для (0): если ТСД - нарисуй свою клавиатуру на 1С с любым подбором по любому параметру.
Что-то типа дополнительного "Поиск" внизу формы, ну а дальше - любые фантазии.
Не уверен что от ТСД можно в 7.7 поймать событие "Нажатие кнопки".
   Злопчинский
 
22 - 07.08.20 - 19:45
(21) "нажатие кнопки"
я хз, что там нужно,
но у себя на ТСД в 77 я работаю по нажатиям клавиш в поле ввода.
на нормально построенных процессах где используется ТСД как командное устройство (отдающее команды и принимающее подтверждения) - делать какие-то быстрые поиски по нажатию каждой клавиши (типа быстрого поиска в 8-ке) - это настолько редкие и форсмажорные случаи - что ими можно вообще нахер пренебречь и совершенно спокойно отрабатывать "по энтеру".
   Злопчинский
 
23 - 07.08.20 - 19:46
(21) и с учетом того что на ТСД отлавливаются формексовские ПриНажатииКлавиши - то вообщем все нормально.
   jah1111
 
24 - 07.08.20 - 23:11
(22)
"но у себя на ТСД в 77 я работаю по нажатиям клавиш в поле ввода."

не совсем понял, что Вы имеете в виду
   Злопчинский
 
25 - 07.08.20 - 23:19
(24) на ТСД - форма. на форме - единственное поле ввода (видимое или сдвинутое за экран).
на компе/серевре - никаких допдрайверов не стоит. ТСД работает в разрыв клавиатуры.
все.
дальше смотри по ссылке (и там есть ссылки на предыдущее) http://forums.kuban.ru/f1040/0_5off_%2A_6_ill_back_ili_ckromnost-_ukrashaet_kogda_net_drugih_dostoinstv-8764164.html

по этой ссылке - АРМ на ПК - но сделан так, что на ТСД переносится на раз.
в более ранних ссылках-ветках - там ТСД-шных экранов вагоy. втыкай.
если что непонятно - стучись в личку скайп Zlopun
   Злопчинский
 
26 - 07.08.20 - 23:20
   Злопчинский
 
27 - 07.08.20 - 23:22
   Злопчинский
 
28 - 07.08.20 - 23:23
   Злопчинский
 
29 - 07.08.20 - 23:34
вот здесь рабочая каркасная демо-конфига для ТСД
http://catalog.mista.ru/public/266256/
   trdm
 
30 - 08.08.20 - 09:32
(19) я бы эту задачу решал на более низком уровне.
 
 Рекламное место пустует
   jah1111
 
31 - 08.08.20 - 10:13
(30) выслушаю и Вас
   jah1111
 
32 - 09.08.20 - 21:45
Это все актуально не так для ТСД как для сенсорных мониторов, поэтому я так настаиваю на "алявосьморке".
Вот еще нашел: http://catalog.mista.ru/public/248100/ может кто знаком, отзовитесь
   Злопчинский
 
33 - 10.08.20 - 00:15
(32) еще раз: не надо на ТСД переносить идеологию списков и десктопной работы.
если нет складской системы работы или нет желания ее сделать - тогда да, делайте как на десктопе.
основной принцип реализации складских регламентов - это плановость и предсказуемост результата.
а не выдача кладовщику в руки стопицот альтернатив.
примерно так.

"Это все актуально не так для ТСД как для сенсорных мониторов"
-с точностью до наоборот: примерно так как сделаноу меня по вышеприведенным ссылкам - сделаны все системы которые активно используют ТСД как направляющий и указывающий инструмент для кладовщика. ТСД говорит кладовщику что делать. а не наоборот. Но такой подход требует пересмотра сложившегося бардака на складе. на что многие конторы не готовы. Поэтому ТСД остается (и похоже и у тебя останется) как и был - вариантом оконечного устройства где планирующая и командная роль отводится кладовщику.
   Ёпрст
 
34 - 10.08.20 - 12:03
(19) пиши сам, или возьми готовые классы от рикцента
   Ёпрст
 
35 - 10.08.20 - 12:06
   Ёпрст
 
36 - 10.08.20 - 12:11
   jah1111
 
37 - 10.08.20 - 19:20
(36) не завелось у меня, может и руки кривые, но:

    _Форма = КонтекстФормы.Форма;
{Обработка.классОбщие_ПолеВыбораЗначения.Форма.Модуль(497)}: Значение не не представляет агрегатный объект (Форма)

вот здесь

Процедура ПриОтжатииЛевойКнопки(Сост, Лево, Верх) Экспорт
    _Форма = КонтекстФормы.Форма;
    
    Если _Форма.АктивныйЭлемент() <> ИдентификаторП оляВвода Тогда
        Если стрПрефиксНаименования <> "" Тогда
            стрПрефиксНаименования = "";
            ПоказатьТекстНаФорме("", 0);
        КонецЕсли;
        фОбрабатываетсяНажатиеКлавиатуры = 0;
    КонецЕсли;
КонецПроцедуры

че не так-то?  вообще выглядит как-то диковато:
https://ibb.co/t2xyVjX
   Ёпрст
 
38 - 10.08.20 - 22:19
(37)База, надеюсь, sql ?
вот, всё работает:

http://pics.rsh.ru/img/_02o814fl.png
   trdm
 
39 - 10.08.20 - 23:21
(35) уже не работает ссыль.
   trdm
 
40 - 10.08.20 - 23:26
   jah1111
 
41 - 22.09.20 - 10:39
Ребята, помогите подрихтовать поиск в спавочнике. Есть обработка, в которой текстовое поле "Поле" и таблица значенийй ТабВиб. Цель: при вводе текста в "Поле", в ТЗ ТабВиб должна появлятся подборка товаров из справочника наименование которых осоответствует значению "Поле".



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


выдает ошибку:

 пока Спр.ПолучитьЭлемент()=1 цикл
{Обработка.Вибор.Форма.Модуль(9)}: Не выбран элемент!
   Ёпрст
 
42 - 22.09.20 - 10:49
(41) сбиваешь выборку своим найтипоНаименованию
   jah1111
 
43 - 22.09.20 - 10:54
(42) а как надо то? я только учусь...
   trdm
 
44 - 22.09.20 - 10:56
если Спр.Наименование = Поле Тогда
или
если Найти(Спр.Наименование,Поле) > 0 Тогда
   jah1111
 
45 - 22.09.20 - 11:07
(44) (42)  НайтиПоНаименованию при определенных параметрах ище по первых буквах...
   jah1111
 
46 - 22.09.20 - 11:11
(44) а так чето совсем не ищет...
   Bigbro
 
47 - 22.09.20 - 11:15
ты в цикле где спр.получитьэлемент
сбиваешь выборку спр.НайтиПоНаименованию
сделай себе спр2 и в нем изщи по наименованию а спр оставь для цикла.
   jah1111
 
48 - 22.09.20 - 11:35
(47)                                    Спр = СоздатьОбъект("Справочник.Товар");
                    Спр2 = СоздатьОбъект("Справочник.Товар");
                    ном=0;
                    Спр.ВыбратьЭлементы(0);
                    пока Спр.ПолучитьЭлемент()=1 цикл 
                        Если Спр2.НайтиПоНаименованию(Поле,0,0) = 1
                                        Тогда
                     ном=ном+1;
                         ТоварП = Спр2.ТекущийЭлемент(); 
                         Если ТоварП.ЭтоГруппа() = 0 тогда 
                            ТабВиб.НоваяСтрока(ном);
                            ТабВиб.УстановитьЗначение(ном,"Товар",ТоварП); 
                            конецесли;
                        КонецЕсли;
                    КонецЦикла;



вроде все правильно, но не взлетает.....
   trdm
 
49 - 22.09.20 - 11:53
(46) Все там ищет.
Найти(<?>,)
Find(<?>,)
Синтаксис:
Найти(<Строка1>,<Строка2>)
Назначение:
Возвращает позицию первого вхождения в строку поиска заданной подстроки.
Параметры:
<Строка1> - строка в которой ищем (место поиска);
<Строка2> - строка которую ищем (шаблон поиска).
Замечание:
Если не находит - возвращает число 0.
Первая позиция имеет индекс 1.
   trdm
 
50 - 22.09.20 - 11:54
НайтиПоНаименованию(<?>,,);
FindByDescr(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наименование>,<Режим>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.
Замечание:
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
   jah1111
 
51 - 22.09.20 - 12:01
(50) я понял, взгляните пожалуйста (48)
почему не заполняет таблицу?
   Ёпрст
 
52 - 22.09.20 - 12:01
(48) выкинь из кода цикл и выбратьЭлементы к едрени фени, он там не нужен от слова совсем
   jah1111
 
53 - 22.09.20 - 12:10
выкинул, совсем запутался.
как сделать что бы при вводе в "Поле" к  примеру строки "ма" мне в ТЗ ТабВиб показало список всех элементов - не груп, наименование которых начинается с "ма"?
   Ёпрст
 
54 - 22.09.20 - 12:14
(52)  запросом с descr like 'ма%'
   Mikeware
 
55 - 22.09.20 - 12:18
(54) напомни, плз - фоксовый драйвер для работы с файловой базой обязательно ставить?
   alyuev
 
56 - 22.09.20 - 12:22
(55) Если 1sqlite использовать, то не нужен.
   Ёпрст
 
57 - 22.09.20 - 12:23
(55) ага
   Ёпрст
 
58 - 22.09.20 - 12:23
можно 1sqlite, но он медленнее, на многих запросах
   Ёпрст
 
59 - 22.09.20 - 12:23
хотя и удобнее, писать проще, есть поставщик данных для табличного поля, есть укладка ТЗ в фильтр и т.д..+CTE
   jah1111
 
60 - 22.09.20 - 12:51
охренеть, я такое до смерти не сваяю
а без прямых запросов никак?
 
 Рекламное место пустует
   Ёпрст
 
61 - 22.09.20 - 12:53
(60) Ну чорный запрос пиши, он тоже отработает, только ммееееедлннно.

Или НайтиПоНаименованию в ложном удалении (только можно обломаться, если форма справочника у кого-то открыта)
   Ёпрст
 
62 - 22.09.20 - 12:53
Ну или перебором и Найти
   Ёпрст
 
63 - 22.09.20 - 12:53
еще медленнеее
   jah1111
 
64 - 22.09.20 - 13:00
блин... я в ступоре. если не затруднит дайте пример на 1sqlite или на прямой запрос.  я в этом вообще не петрю, но может разберусь
   trad
 
65 - 22.09.20 - 13:05
Ёп опять жути навел! ))
   Mikeware
 
66 - 22.09.20 - 13:11
(59) как его (1sqlite) в моксель закинуть? (как в том примере, что ты давал?)
   Ёпрст
 
67 - 22.09.20 - 13:12
(64)

    Попытка
        база = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        база = СоздатьОбъект("SQLiteBase");
    КонецПопытки;
    
    база.Открыть(":memory:");
    запрос = база.НовыйЗапрос();
        ТекстЗапроса = "select id [Номенклатура :Справочник.Номенклатура] from Справочник.Номенклатура where descr like 'ма%'";
        ТЗ = запрос.ВыполнитьЗапрос(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();



(65) :)
   Ёпрст
 
68 - 22.09.20 - 13:15
(66) эээ..было несколько решений по упаковке, и средствами самой 1с-ины и утилитами exe.. Вот какой именно, не помню, надо покопаться.
Помню тока, что Малаева(МалЯева?) изначальная упаковка не работала, если несколько упаковано в мокселе, пришлось другое решение вкорячивать
   Mikeware
 
69 - 22.09.20 - 13:20
(68) ну у тебя по одной длл на моксель
   trad
 
70 - 22.09.20 - 13:24
(69) off
- Сколько длл на моксель?
- Одна.
- Какую засунем, Формекс или 1цпп?
- Вам шашечки или ехать?
   Ёпрст
 
71 - 22.09.20 - 13:24
(69) да, но поделка Маляева не умела извлекать несколько..
вот это посмотри, не помню, надо в архивах поискать

http://catalog.mista.ru/public/19857/
   Ёпрст
 
72 - 22.09.20 - 13:25
И можно было в один моксель положить
   Ёпрст
 
73 - 22.09.20 - 13:26
   Ёпрст
 
74 - 22.09.20 - 13:29
Скорее всего, вот последнюю из (73) использовал.
   Mikeware
 
75 - 22.09.20 - 13:35
(70) надо и спп, и формекс, и 1склайт.
Одна из бывших устроилась в какую-то контроку, в которой живут на файловых клюшках. взмолилась. Революцию я там устраивать не хочу, а помочь (совместив с разминкой мозгов) - почему бы и нет?
   jah1111
 
76 - 22.09.20 - 13:44
(67)  Ёпрст, будь другом, обьясни синтаксис этой строчки

ТекстЗапроса = "select id [Номенклатура :Справочник.Номенклатура] from Справочник.Номенклатура where descr like 'ма%'";

что в квадратных скобках, что после фром (я так полагаю идентификатор справочника)
ну и главное  - вместо 'ма%' мне надо переменное Поле туда всунуть, как это по одинсикюэловски правильно сделеать?
   Mikeware
 
77 - 22.09.20 - 14:04
"select id [Номенклатура :Справочник.Номенклатура] from Справочник.Номенклатура where descr like 'ма%'";

Выбрать колонку "ид", назвать ее в выходном наборе "номеклатура" и типизировать как "справочник.номенклатура" из таблицы Справочник.Номенклатура где поле наименование подобно "ма%"

Ну а правила "подобия" смотри в доке
   jah1111
 
78 - 22.09.20 - 14:31
Попытка
        база = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        база = СоздатьОбъект("SQLiteBase");
    КонецПопытки;

    
    база.Открыть(":memory:");
    запрос = база.НовыйЗапрос();
        ТекстЗапроса = "
        |select id
        |[Товар :Справочник.Товар] 
        |from 
        |Справочник.Товар
        |where descr like 'ма%'";
        ТабВиб = запрос.ВыполнитьЗапрос(ТекстЗапроса);
    ТабВиб.ВыбратьСтроку();


в итоге ошибка:
 ТабВиб = запрос.ВыполнитьЗапрос(ТекстЗапроса);
{Обработка.Вибор.Форма.Модуль(42)}: no such table: Справочник.Товар

НАЗВАНИЕ СПРАВОЧНИКА ПИШУ ПРАВИЛЬНО
   Ёпрст
 
79 - 22.09.20 - 14:35
(78)

|from
        |[Справочник.Товар]
   jah1111
 
80 - 22.09.20 - 15:22
спасибо, добрые люди
в итоге начало получаться.
теперь надо научиться отсеивать группы. это как-то через is folder реализуется, да?
   Ёпрст
 
81 - 22.09.20 - 15:23
(80) да
   Ёпрст
 
82 - 22.09.20 - 15:24
where isfolder = 0
   alyuev
 
83 - 22.09.20 - 15:40
Не, так нужно:

"Where isfolder=2"

см. здесь про значения isfolder и не только: https://script-coding.com/v77tables.html
   alyuev
 
84 - 22.09.20 - 15:41
   jah1111
 
85 - 22.09.20 - 16:11
(83) спасибо!!!!
помогите еще переменную "Поле" в запрос вставить, ну никак не допетраю
и знак доллара ставлю и че только не делаю...

|select id
        |[Товар :Справочник.Товари] 
        |from 
        |[Справочник.Товари]
        |where isfolder=2 and descr like '.$Поле%.'"

Поле - текстовое поле в котором текст по которому ищут
   alyuev
 
86 - 22.09.20 - 16:21
Тю... Дык просто:

|where isfolder=2 and descr like '."+Поле+"%.'"
   jah1111
 
87 - 22.09.20 - 16:32
просто то прсто, а не летит никуда....



Процедура ПоискПоБукв() 

       Попытка
        база = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        база = СоздатьОбъект("SQLiteBase");
    КонецПопытки;

    
    база.Открыть(":memory:");
    запрос = база.НовыйЗапрос();
        ТекстЗапроса = "
        
        |select id
        |[Товар :Справочник.Товар] 
        |from 
        |[Справочник.Товар]
        |where isfolder=2 and descr like '."+Поле+"%.'";
        ТЗ = запрос.ВыполнитьЗапрос(ТекстЗапроса);
       ТабВиб.Загрузить(ТЗ);

КонецПроцедуры//ПошукПоБукв()


Я ЗАМАНАЛСО
   Sserj
 
88 - 22.09.20 - 16:36
(87) Ну как вариант: like '."+СокрЛП(Поле)+"%.'" ни или может быть: like '."+СокрП(Поле)+"%.'". Если в начале имени пробелы могут быть.
   Sserj
 
89 - 22.09.20 - 16:36
+(88) У тебя же поле это строка большая и в в конец все что не написано забито пробелами.
   Ёпрст
 
90 - 22.09.20 - 16:46
А точку то зачем перед поиском ?
   Ёпрст
 
91 - 22.09.20 - 16:47
Да и Подставлять есть..
   alyuev
 
92 - 22.09.20 - 17:00
Ну, да. С точками это я протупил... :

|where isfolder=2 and descr like '"+СокрЛП(Поле)+"%'"

СокрЛП - только если нужно.
   jah1111
 
93 - 22.09.20 - 17:41
добавил фильтр по пометке на удаление ismark и опять ничего не ищет, хоспади какой же ад с этими запросами!

|select id
        |[Товар :Справочник.Товари] 
        |from 
        |[Справочник.Товари]
        |where 
        |ismark=0 and
        |isfolder=2  
        |and descr like '"+СокрЛП(Поле)+"%'";
   Ёпрст
 
94 - 22.09.20 - 17:42
*
   alyuev
 
95 - 22.09.20 - 18:21
Да,

and IsMark<>'*'
   trdm
 
96 - 22.09.20 - 18:24
(93) > |[Товар :Справочник.Товари]

"Справочник.Товари" ?????
   Djelf
 
97 - 22.09.20 - 18:40
(96) Возможно потому что не Россия.
Вангую! Следующий вопрос будет такой: "почему sqlite не правильно работает с Украинским алфавитом".
   jah1111
 
98 - 22.09.20 - 21:38
(97) мимо.
следующий вопрос будет как делать запрос по остаткам товара, чтобы в ТабВиб отображалась колонка "остаток" с остатками по каждому найденому товару
(94) (95)  Ёпрст,   alyuev - СПАСИБИЩЕ!!! Сегодня за 1 день я научился больше чем за все мои 2 месяца ковыряний в 1с 7.7
   Ёпрст
 
99 - 22.09.20 - 21:51
(98)

ТекстЗапроса = "

    |    SELECT
    |      Итоги.Товар [Товар :Справочник.Товари]
    |      ,Итоги.Количество Останки
    |    FROM
    |        [РегистрИтоги.ОстаткиТовари] as Итоги
    |
    |    WHERE
    |        Итоги.period = :НачПериод 
        |            and Итоги.Товар in (select id from [Справочник.Товари] where  descr like '"+СокрЛП(Поле)+"%'";
      мд = СоздатьОбъект("MetaDataWork");
    НачПериод = мд.ПолучитьНачПериода(НачДата)//начало периода

    Запрос.Подставлять("НачПериод",НачПериод);
    ТЗ = запрос.ВыполнитьЗапрос(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();


   Djelf
 
100 - 23.09.20 - 10:58
(99) Не очень хороший запрос для sqlite.
В sqlite, IN нужно использовать только если иначе никак уже не получается!
Запрос в (99) будет прогонять условие в IN для каждой строки в Итоги.Товар
Лучше либо использовать INNER JOIN (если нужны только товары на остатках)
FROM [РегистрИтоги.ОстаткиТовари] as Итоги
INNER JOIN [Справочник.Товари] AS ТовариON Товари.ID=Итоги.Номенклатура AND Товари.descr like '"+СокрЛП(Поле)+"%'"

Либо поменять местами таблицы, если нужны все Товари, а не только на остатках
SELECT
 Товари.ID [Товар :Справочник.Номенклатура]
 ,Итоги.Количество [Количество]
FROM
 [Справочник.Товари] AS Товари
LEFT JOIN
 [РегистрИтоги.ОстаткиТовари] as Итоги ON Товари.ID=Итоги.Номенклатура AND Итоги.period = :НачПериод 
WHERE
 Товари.descr like '"+СокрЛП(Поле)+"%'"

  1  2   

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