Имя: Пароль:
1C
1C 7.7
v7: Как получить количество строк в контексте документа через 1SQLite?
,
0 alyuev
 
14.08.20
11:03
Есть сохраненный документ. Как после редактирования строк табличной части (например, добавили или удалили строки) - получить лайтом количество строк?
Запрос вида:
текЗапроса="Select Count(NСтр)
|From ДокументСтроки_"+ВидДок+" as Док
|Where Док.IDDOC = :ТекДок
|";
Вернет количество ранее сохраненного документа.
А как текущее значение вернуть лайтом?
1 ДенисЧ
 
14.08.20
11:08
А зачем это делать черз склайт?
2 Djelf
 
14.08.20
11:09
Примерно так же

SELECT
count(*)
FROM [ДокументСтроки.ВидДокумента]
WHERE IDDOC=:ТекДок
3 Djelf
 
14.08.20
11:12
(1) А вдруг у него документы больше 9999 строк? Я что-то не уверен что 7ка в КоличествоСтрок() вернет правильное значение.
4 alyuev
 
14.08.20
11:35
Да, строк бывает гораздо больше 9999. Стандартное КоличествоСтрок() возвращает правильное значение. Но долго. Делали замер: стандартное - 30сек. Лайтовский запрос - несколько секунд.
(2) Не работает.
5 Djelf
 
14.08.20
11:41
Потому что :ТекДок надо правильно подставлять!
Проверь что в SELECT :ТекДок у тебя id9 подставляется.
6 Salimbek
 
14.08.20
12:35
(5) Вы уверены? Там, как я понял, товарищ всякую всячину в _Открытом_ документе делает, и вот ему, без записи, хочется сразу узнать - сколько строк у него в документе. Запрос sqlite - вернет данные из базы, как автор в (0) и говорит - "количество ранее сохраненного документа".

(0) Вам бы просто вести глобальный счетчик строк в  этом документе. Устанавливаете в ПриОткрытии и при каждом Добавлении/Удалении строки - счетчик увеличиваете/уменьшаете.
7 Djelf
 
14.08.20
12:47
А "текущее количество строк".
Ну так у не записанного документа и в mssql бессмысленно запросом вычислять количество строк.

А у записанного, да, жуткая жуть!

sqlite count 260000 149мс монопольно
sqlite count 260000 6842мс разделенный режим
sqlite count 260000 157мс разделенный режим в транзакции
ВыбДок.КоличествоСтрок() 260000 244886мс
ВыбДок.КоличествоСтрок() 260000 225415мс в транзакции
черный запрос 260000 211336мс
8 Злопчинский
 
14.08.20
19:56
фу. бякасть какая, неужели количествоСтрок так тупит..? сейчас тупо прорверю
9 Ёпрст
 
14.08.20
20:15
(0) никак
10 Ёпрст
 
14.08.20
20:16
Да и.. зачем ?
11 Злопчинский
 
14.08.20
20:36
проверил.. жуть...
12 alyuev
 
17.08.20
13:57
Если для текущего состояния (контекста) вызывать КоличествоСтрок() - оно выполняется очень быстро, плюс выдается текущее (не сохраненное) количество. Если вызывать через объект, т.е. выбДок.КоличествоСтрок() - тогда тупит.
13 uno-group
 
17.08.20
14:21
Конт="КвоСтрок";
Открытьформу(ВыбДок,Конт);
В документе при открытии
Если Форма.Парметр="КвоСтрок" тогда
Форма.Парметр=КоличествоСтрок();
СтатусВозврата(0);
Возврат;
Бредово конечно но точно быстрее чем за 30 сек должно работать.
14 Djelf
 
17.08.20
14:46
(12) Так по диспетчеру задач видно что 1С при выбДок.КоличествоСтрок() весь документ из базы вытягивает, на тесте в (7) 600 метров памяти потребовалось.
В (6) правильно было сказано: если нужно быстро получить количество строк - делай счетчик в шапке документа.
И я согласен с (10)! Нафехоа это вообще нужно?
Разве что разбивать документ на куски по 9999 строк, но на таких документах не сильно большие тормоза.
15 trdm
 
17.08.20
15:53
(10) Садо-мазо-огородо.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn