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

v7: Как через sqlite выбрать документы по его статусу?

v7: Как через sqlite выбрать документы по его статусу?
Я
   sysadminlk
 
01.07.20 - 15:27
Нужно найти не проведен и не удалён.
   Djelf
 
1 - 01.07.20 - 15:47
(0) В чем сложность то? Это ну... Ну совсем простенький запрос.
SELECT
Журнал.IDDOCDEF||Журнал.IDDOC [Документ :Документ]
FROM Журнал
WHERE Журнал.Date BETWEEN :НачДата AND  :КонДата
AND Журнал.CLOSED='' AND Журнал.ISMARK!='*'

   sysadminlk
 
2 - 01.07.20 - 16:09
(1) спасибо, не знал что через журнал
   sysadminlk
 
3 - 01.07.20 - 16:09
ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |ОбрабатыватьДокументы НеПроведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Док = Документ.Доставка.ТекущийДокумент;
    |"//}}ЗАПРОС

    ;
    Запрос = СоздатьОбъект("Запрос");
    Рез = Запрос.Выполнить(ТекстЗапроса);
    Сообщить(Рез);
    Если Рез = 1 Тогда
        запрос.Выгрузить(ТабФорм);    
    КонецЕсли;
    Запрос = "";    


хотел через нативный запрос
но чет ничего не выводит
а где тут ошибка?
   Злопчинский
 
4 - 01.07.20 - 16:34
(3) Группировку воткни!
   sysadminlk
 
5 - 01.07.20 - 17:01
может пригодится кому:
Проведен="and (Журнал.CLOSED%2=1)";
Непроведен="and (Журнал.CLOSED%2=0 and Журнал.ISMARK='')";
ПомеченНаУдаление="and (Журнал.ISMARK='*')";
НеПомеченНаУдаление="and (Журнал.ISMARK='')";
   sysadminlk
 
6 - 01.07.20 - 17:01
итог такой 

    текст="SELECT Журнал.IDDOC [Документ :Документ.Доставка] FROM Журнал WHERE
    |Журнал.IDDOCDEF = :ВидДокумента.Доставка
    |and Журнал.CLOSED%2=0
    |and Журнал.ISMARK=''";
   sysadminlk
 
7 - 01.07.20 - 17:10
Всё-таки SQLite быстрее

    Старт = _GetPerformanceCounter();
    запрос.ВыполнитьЗапрос("create virtual table Журнал using dbeng(Журнал)");
    запрос.Подставлять("Сотрудник", Вар);    
    текст="SELECT Журнал.IDDOC [Документ :Документ.Доставка] FROM Журнал WHERE
    |Журнал.IDDOCDEF = :ВидДокумента.Доставка
    |and Журнал.CLOSED%2=0
    |and Журнал.ISMARK=''";
    //Сообщить(запрос.ОбработатьТекстЗапроса(текст));

    тз=запрос.ВыполнитьЗапрос(текст);
    тз.Выгрузить(ТабФорм);
    базаДанных.Закрыть();
    Стоп = _GetPerformanceCounter();
    Микро = Стоп-Старт;
    Сообщить(Микро);
    
    ТабФорм.Очистить();
    
    Старт = _GetPerformanceCounter();
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с Дата1 по Дата2;
    |ОбрабатыватьДокументы НеПроведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Док = Документ.Доставка.ТекущийДокумент;
    |Группировка Док;
    |"//}}ЗАПРОС

    ;
    Запрос = СоздатьОбъект("Запрос");
    Рез = Запрос.Выполнить(ТекстЗапроса);
    Если Рез = 1 Тогда
        запрос.Выгрузить(ТабФорм);    
    КонецЕсли;
    Запрос = "";    
    Стоп = _GetPerformanceCounter();
    Микро = Стоп-Старт;
    Сообщить(Микро);
   sysadminlk
 
8 - 01.07.20 - 17:11
итог количество миллисекунд получилось в среднем такое
7
18
   Djelf
 
9 - 01.07.20 - 17:29
(8) Ну так нельзя же сравнивать. В прямом нет ограничения на дату, а в чёрном есть.
Ну и 7мс и 18мс это значит что документов очень мало. Проверяй на Реализации, что-ли. Разница должна быть в 10 раз.
А в чёрный добавь еще |Без итогов; и |Группировка Докбез упорядочивания; еще пару мс может сэкономишь.
А в прямом Журнал.CLOSED%2=0 - лишние вычислительные затраты, пустой строки в данном случае вполне достаточно.
   sysadminlk
 
10 - 01.07.20 - 18:40
(9) Журнал.CLOSED%2 там 4 почему что стоит, поэтому пустая строка не подходит
проведенные 5, а не проведенные 4
загуглил оказалось вот так надо (5)

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