Количество записей в справочнике

Форум 1С: Одинэс.Ру

Найти!

Количество записей в справочнике

Струнин
15.06.2009 - 12:26
База DBF
Просто рассуждаю. Раньше до 1с, количество записей в файле DBF (вроде не во всех типах но), можно было прочитать из заголовка файла. в 1с есть функция КоличествоЗаписей(). Так вот подумал, можно ли как-нибудь зная имя файла в котором хранится какой-либо справочник (например Номенклатура), открыть на чтение, да и прочитать число записей. Возникает вопрос как узнать имя файла. Можно достать из DD. Поиском названия справочника строчки перебрать и найти название, затем открыть и взять количество. Понятно, что количество может различаться от того, которое видно в пользовательском режиме и все же было бы полезно для некоторых манипуляций...
Но будет ли это быстее перебора элементов справочника?
А можно как-нибудь по другому узнать название не шерстя DD?
И вобще есть ли способы сразу количество элементов справочника узнать?
:)
К списку тем 1 > К списку форумов

Интересные темы

odines.ru
22.10.2020 - 15:24
Смотри также:
Оптимизация кода работы с СЕКЦИЯМИ
Проблема с загрузкой конфигурации
Передать больше одного парметра в ОткрытьФорму(обработка,p,) - только через Список Значений?

Re: Количество записей в справочнике

Sasha
1 - 15.06.2009 - 12:32
1cpp тебе в помощь

Re: Количество записей в справочнике

Reaper
2 - 15.06.2009 - 12:44
0-Струнин > XBase требует монопольного доступа, поэтому не взлетит. Как вариант решения механизмами платформы - запрос с выборкой всех элементов справочника и функцией счетчик. Обращение к функции запроса без обхода группировок и даст кол-во эл-тов.

Re: Количество записей в справочнике

Cthulhu
3 - 15.06.2009 - 13:00
тЗапрос=СоздатьОбъект("Запрос");
тЗапрос.Выполнить("ЭлСпр=Справочник.<ТыдДрыц>.ТекущийЭлемент; Функция Кво=Счётчик(); Группировка (ЭлСпр);");
Сообщить("Скока-скока.. вот стока: "+тЗапрос.Кво+"!..","!!!");

Re: Количество записей в справочнике

Чучундер
4 - 15.06.2009 - 13:08
из DD вытянуть длину записи, из ФС - разиер файла. одно поделить на другое.

Re: Количество записей в справочнике

USSR
5 - 15.06.2009 - 15:01
а нафиг надо? зачем?

Интересные темы

odines.ru
22.10.2020 - 15:24
Смотри также:
Может ли у внутреннего ИД документа закончиться нумерация?
Как в отчете сделать табличную часть?
Перенос данных из одной конфы в другую

Re: Количество записей в справочнике

Струнин
6 - 15.06.2009 - 15:44
прошу прощения не было интернета :)

Re: Количество записей в справочнике

Струнин
7 - 15.06.2009 - 16:51
(1) да думал без ВК
(5) прогресс бар или создание номера документа(справочника) если нумерация сбита. (Иногда нумерацию менять не хотят. Если номер занят, то назад на не занятый номер). И вот кол эл-тов (документов) нужно тогда знать. Ну это я так думаю, конечно может ошибаюсь :)
(2)(3) да запрос хорошо :), но где то читал, что иногда быстрее работает цикл (или может не правильно понял)
(4) Да, прикольно и просто.
 
А вот кроме как в DD, никак нельзя название файла узнать?

Re: Количество записей в справочнике

Reaper
8 - 15.06.2009 - 16:58
можно. MetaDataWorks в 1С++ дает такую возможность...

Re: Количество записей в справочнике

VZ
9 - 15.06.2009 - 17:08
Можно и без 1с++... Можно и без ДД... Можно совершенно штатными, прописанными в ЖКК, методами :))

Re: Количество записей в справочнике

USSR
10 - 15.06.2009 - 17:10
Если 1С++ то и запрос с COUNT(*) будет практически моментальным. Но лучше наладить нумерацию и не изгаляться. А прогрессбар лишь бы шевелился. Не часы же ждать твоих обработок. Сколько записей в справочнике?

Re: Количество записей в справочнике

USSR
11 - 15.06.2009 - 17:12
(9)просвяти, а то как Пит :) Если можно, я конечно и сам найду, мне просто не надо было )

Re: Количество записей в справочнике

VZ
12 - 15.06.2009 - 18:17
(11) ЗначениеВСтрокуВнутр() Даст тебе что-то такое: {"B","0","0","126","0","0","        57   "}
Третий элемент есть номер файла ;)

Re: Количество записей в справочнике

Reaper
13 - 15.06.2009 - 18:25
12-VZ > я так и догадывался. Союз Советских прав: когда не надо - тогда и не исследуешь. +100 за проведенное исследование

Re: Количество записей в справочнике

Cthulhu
14 - 15.06.2009 - 18:26
(7): запрос по справочник работает не быстро, угумц.. запрос по справочнику
работает очень быстро. проверено.
(перебор его обгоняет только если в запрос группировок напихать и внешних
функций).

Re: Количество записей в справочнике

USSR
15 - 15.06.2009 - 18:36
(12)Про номер я всегда знал, я думал речь идет о количестве записей. Ложная замануха :)))
(14)это недавно опять обсуждали, не обгоняет запрос под DBF, за счет чего он обгонит?? в CODEBASE нет поддержки запросов

Re: Количество записей в справочнике

VZ
16 - 15.06.2009 - 18:47
(15) Чего "ложная"? В (7) был вопрос: "А вот кроме как в DD, никак нельзя название файла узнать?". В (8) был ответ "можно. MetaDataWorks в 1С++ дает такую возможность...". В (9) я уточнил: "Можно совершенно штатными, прописанными в ЖКК, методами"...
Что не так?

Re: Количество записей в справочнике

Cthulhu
17 - 15.06.2009 - 18:50
(15): давай ты не будешь убеждать меня в том, что то, что я знаю на
самом деле неверно потому что обсуждали.. )))

Re: Количество записей в справочнике

USSR
18 - 15.06.2009 - 18:50
(16)Да все так, что так бурно реагировать?))) "Давайте жить дружно"

Re: Количество записей в справочнике

USSR
19 - 15.06.2009 - 18:52
(17)Что ты знаешь? Что запрос под DBF работает быстрее? Результаты в студию!!

Re: Количество записей в справочнике

USSR
20 - 15.06.2009 - 18:56
(17)я не исследовал специально, но читал давно тесты NS и зная что такое CODEBASE не вижу под DBF (!) возможностей запроса обогнать выборку

Re: Количество записей в справочнике

Струнин
21 - 16.06.2009 - 02:20
Извините, разница 4 часа, ребенка в сад и т.д. :)
VZ спасибо, я это и имел ввиду, штатным способом, предполагал ЗначениеВСтрокуВнутр, но спросить постеснялся :))), а проверять не стал.
Просто мысль иногда проскакивает, как элементы быстро посчитать...

Re: Количество записей в справочнике

Шухер
22 - 16.06.2009 - 04:42
Чет задача сформулирована, фик поймешь
>>открыть на чтение, да и прочитать число записей
Из заголовка файла прочитать и узнать кол-во записей ?
В DBF 4-7 байты, из спецификации DBF можно узнать, не спрашивая.
2. Каких записей считать надо ? Включая удаленые / помеченные на удаление
Ниче не понял, что для чего и зачем считать.
Из заголовка   и не узнаешь всего.
Запрос писать надо, я дык предпочитаю звать Фокспро на помощь, там быстро и красиво все получается. Эх ... вжик ... готово :)
count for not deleted() to i
? i
или
? reccount() // вжик и готово :)
или
select count(*) i ;
from rgХХ    //не очень также вжик, но тоже очень даже вжик, я бып сказал.
В сравнении с перебором в 1С - этот и вжик-то не заметишь  :)

Re: Количество записей в справочнике

USSR
23 - 16.06.2009 - 04:52
Устами Шухера глаголит истина. Вся эта затея с DD - хрень полная

Re: Количество записей в справочнике

Шухер
24 - 16.06.2009 - 05:34
+22 забыл, если из заголовка доставать, дык там все наоборот, не как у русских слева на право. Евреи, наверное, придумали компьютер. Младший байт первый пойдет  4-5-6-7.
И эта, то что 7 по спецификации DBF, это будет Восемь!, если карандашом тыкать в символы  //для Вованов напоминалка :)

Re: Количество записей в справочнике

Струнин
25 - 16.06.2009 - 07:22
Нашёл вот на вба:
Option Compare Database
Option Explicit
 
Public Function DBFRecCount(dbfFileName As String) As Long
'Error-handler inserted on 25.09.2004 at 15:32 by Dedushev M.N.
'
On Error GoTo DBFRecCount_Error
Dim FHandle As Integer, DBFHead As String
FHandle = FreeFile
Open dbfFileName For Binary As FHandle
DBFHead = Input(8, FHandle)
Input #FHandle, DBFRecCount
Input #FHandle, DBFRecCount
DBFRecCount = Asc(Mid$(DBFHead, 5, 1))
DBFRecCount = (Asc(Mid$(DBFHead, 6, 1)) * 256#) + DBFRecCount
DBFRecCount = (Asc(Mid$(DBFHead, 7, 1)) * 256# * 256#) + DBFRecCount
DBFRecCount = (Asc(Mid$(DBFHead, 8, 1)) * 256# * 256# * 256#) + DBFRecCount
Close FHandle
DBFRecCount_Exit:
Exit Function
DBFRecCount_Error:
MsgBox "Непредвиденная разработчиком ошибка - " & Err.Number _
& vbCrLf & vbCrLf & Error$, vbExclamation, "OUTTER - DBFRecCou"
Resume DBFRecCount_Exit
End Function
http://am.rusimport.ru/MsAccess/topic.aspx?ID=419
 
если из неё сделать dll и немонопольно, то работает...
 
типа
функция КолЗап(ВидСпр)
Спр = СоздатьОбъект("Справочник." + ВидСпр);
СтрФ = СокрЛП(ЗначениеВСтрокуВнутр(Спр));
 
СтрФ = Сред(СтрФ,2,СтрДлина(СтрФ)-2);
сзВнутр = СоздатьОбъект("СписокЗначений");
сзВнутр = глРазложить(СтрФ);
НомерФайла = СокрЛП(сзВнутр.ПолучитьЗначение(4));
НомерФайла = Сред(НомерФайла,2,СтрДлина(НомерФайла)-2);
ИмяФайла = КаталогИБ() + "SC" + НомерФайла + ".DBF";    
Если ФС.СуществуетФайл(ИмяФайла)=0 Тогда
Возврат;
КонецЕсли;
после
создать объект длл
КолЗап = ф(ИмяФала)
 

 

Re: Количество записей в справочнике

Шухер
26 - 16.06.2009 - 07:47
*покраснев уходит*
У-у! у VBA длиньшэ :\

Re: Количество записей в справочнике

Струнин
27 - 16.06.2009 - 08:31
все равно, не то... монопольно не работает :)
К списку тем 1 > К списку форумов
Тема закрыта и находится в архиве.
Но Вы можете начать новую тему.
« Как подключить весы CAS к 1С? Свёртка базы и УРБД. Подскажите. »
© 2009 Форум 1С: Одинэс.Ру