Имя: Пароль:
1C
1C 7.7
v7: Как через sqlite выбрать документы по его статусу?
0 sysadminlk
 
01.07.20
15:27
Нужно найти не проведен и не удалён.
1 Djelf
 
гуру
01.07.20
15:47
(0) В чем сложность то? Это ну... Ну совсем простенький запрос.

SELECT
Журнал.IDDOCDEF||Журнал.IDDOC [Документ :Документ]
FROM Журнал
WHERE Журнал.Date BETWEEN :НачДата AND  :КонДата
AND Журнал.CLOSED='' AND Журнал.ISMARK!='*'
2 sysadminlk
 
01.07.20
16:09
(1) спасибо, не знал что через журнал
3 sysadminlk
 
01.07.20
16:09
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ОбрабатыватьДокументы НеПроведенные;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Док = Документ.Доставка.ТекущийДокумент;
    |"//}}ЗАПРОС
    ;
    Запрос = СоздатьОбъект("Запрос");
    Рез = Запрос.Выполнить(ТекстЗапроса);
    Сообщить(Рез);
    Если Рез = 1 Тогда
        запрос.Выгрузить(ТабФорм);    
    КонецЕсли;
    Запрос = "";    


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

    текст="SELECT Журнал.IDDOC [Документ :Документ.Доставка] FROM Журнал WHERE
    |Журнал.IDDOCDEF = :ВидДокумента.Доставка
    |and Журнал.CLOSED%2=0
    |and Журнал.ISMARK=''";
7 sysadminlk
 
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();
    Микро = Стоп-Старт;
    Сообщить(Микро);
8 sysadminlk
 
01.07.20
17:11
итог количество миллисекунд получилось в среднем такое
7
18
9 Djelf
 
гуру
01.07.20
17:29
(8) Ну так нельзя же сравнивать. В прямом нет ограничения на дату, а в чёрном есть.
Ну и 7мс и 18мс это значит что документов очень мало. Проверяй на Реализации, что-ли. Разница должна быть в 10 раз.
А в чёрный добавь еще |Без итогов; и |Группировка Докбез упорядочивания; еще пару мс может сэкономишь.
А в прямом Журнал.CLOSED%2=0 - лишние вычислительные затраты, пустой строки в данном случае вполне достаточно.
10 sysadminlk
 
01.07.20
18:40
(9) Журнал.CLOSED%2 там 4 почему что стоит, поэтому пустая строка не подходит
проведенные 5, а не проведенные 4
загуглил оказалось вот так надо (5)