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

v7: Как получить количество строк в контексте документа через 1SQLite?

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

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

(0) Вам бы просто вести глобальный счетчик строк в  этом документе. Устанавливаете в ПриОткрытии и при каждом Добавлении/Удалении строки - счетчик увеличиваете/уменьшаете.
   Djelf
 
7 - 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
проверил.. жуть...
   alyuev
 
12 - 17.08.20 - 13:57
Если для текущего состояния (контекста) вызывать КоличествоСтрок() - оно выполняется очень быстро, плюс выдается текущее (не сохраненное) количество. Если вызывать через объект, т.е. выбДок.КоличествоСтрок() - тогда тупит.
   uno-group
 
13 - 17.08.20 - 14:21
Конт="КвоСтрок";
Открытьформу(ВыбДок,Конт);
В документе при открытии
Если Форма.Парметр="КвоСтрок" тогда
Форма.Парметр=КоличествоСтрок();
СтатусВозврата(0);
Возврат;
Бредово конечно но точно быстрее чем за 30 сек должно работать.
   Djelf
 
14 - 17.08.20 - 14:46
(12) Так по диспетчеру задач видно что 1С при выбДок.КоличествоСтрок() весь документ из базы вытягивает, на тесте в (7) 600 метров памяти потребовалось.
В (6) правильно было сказано: если нужно быстро получить количество строк - делай счетчик в шапке документа.
И я согласен с (10)! Нафехоа это вообще нужно?
Разве что разбивать документ на куски по 9999 строк, но на таких документах не сильно большие тормоза.
   trdm
 
15 - 17.08.20 - 15:53
(10) Садо-мазо-огородо.

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