Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/139: Рейтинг темы: голосов - 139, средняя оценка - 4.81
tytttyFoyry

Fieldid в 1sblob.dbf

22.10.2008, 13:39. Показов 26376. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак.
В известном файле имеется, например, строка реквизита "адрес" справочника "банки"
1W 8 0 23 114674, г.Москва, ул. Морская, д.49х остатков)
,где 1W - собственно значение поля FIELDID.
Проблема в том, что кривизна моих рук не позволяет мне получить значение FIELDID (не залезая в 1SBLOB, разумеется).
При использовании
ЗначениеВСтрокуВнутр(Спр) ,
где Спр = СоздатьОбъект("Справочник.Банки") получаю
"{"B","0","0","72","0","0"," 0 "}", но по-моему это не совсем то...
Спасите! :(
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2008, 13:39
Ответы с готовыми решениями:

Ошибка при загрузке DBF файлов с датой 'dd.mm.yy' (DBF FoxPro, TADOQvery, DataSource, DBGrid)
Возьмем для примера текущую дату - '04.09.2003'. В результате выполнения этого запроса данные сохраняются. Но если в системных настройках...

Копирование данных из одной таблицы dbf в шаблон dbf
Есть источник файл med.dbf с данными, необходимо перенести часть данных в файл-шаблон med.dbf. Особенность заключается в том, что в файле...

Работа с dbf в C# - вывести содержимое dbf в dataGridView
Необходимо вывести содержимое dbf в dataGridView, подскажите как сделать.... Заранее спасибо....

9
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
22.10.2008, 19:28
При использовании оператора
ЗначениеВСтроку(Спр.Адрес) ( а не ЗначениеВСтрокуВнутр)
получишь то, что надо
("строка","114674, г.Москва, ул. Морская, д.49х остатков")
А поле FIELDID - вещь в себе. Оно содержит строку из 4 знаков...
0
tytttyFoyry
22.10.2008, 22:07
Спасибо за ответ, но я , видимо не точно сформулировал проблему.
В итоге мне действительно нужно получить Спр.Адрес . Но проблема в том, что заранее мне неизвестны ни справочник, ни его реквизиты.
Я конечно могу их получить как строку, и получить значение реквизита через запрос.
Но реквизит Адрес имеет неограниченную длину ! А такой тип данных Запрос не поддерживает !
Я не вижу других путей получить такой реквизит, кроме как прямо из 1sblob.dbf.
И, если я все правильно понял именно значение поля FIELDID (в моем примере - 1W) связывает строку базы со справочником.
В примерах я видел, что ID получают из последней строки полученной ЗначениеВСтроку(Спр.Адрес) или ЗначениеВСтроку(Спр),
но во втором случае (как видно из 1го поста) последняя строка - это "0", а в первом я имею ЗначениеВСтрокуВнутр(Спр.Адрес) = "{"S","0","0","0","0","0","105554, г.Москва, ул. Садовая, д.77"}" , что меня несколько огорчает...
Да и вообще я себе не очень представляю, как я передам в функцию Спр.Адрес, только получив из метаданных строку "Адрес", говорящую о наличии такого реквизита...
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
23.10.2008, 01:46
заранее мне неизвестны ни справочник, ни его реквизиты
Что-то я не понимаю. Справочник имеет тип "Банки", там есть реквизит "Адрес". А по какому признаку ищется Адрес ? По Наименованию ? По коду ?
0
tytttyFoyry
23.10.2008, 09:21
ну это частный пример )
К слову это вроде как выгрузка должна быть )
Вообще перебираются справочники способом Метаданные.Справочник(Счетчик).
Потом у выбранных справочников берем имена реквизитов Метаданные.Справочник(НомерСпр).Реквизит (Счетчик) (ну или как-то так, нет кода перед носом )
И получается, что у меня только строка "Адрес" - идентификатор реквизита. Нет ни кода ни наименования, но они и не шибко нужны, т.к. хочется просто узнать, какие строки в 1sblob.dbf соответствуют реквизитам текущего справочника, а дальше вроде бы можно разобраться будет...
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
23.10.2008, 14:19
И все же хотелось бы понять, что происходит ?
Ну, перебираем справочники, внутри них реквизиты... А в какой момент и по какому критерию останавливаемся, чтобы что-то делать с адресом ?
0
tytttyFoyry
23.10.2008, 14:59
ну, если с самого начала, то дело обстоит так:
1) выдаем все справочники пользователю в списке значений
2) пользователь отмечает справочники, нужные для выгрузки (мы получаем идентификаторы в виде строк)
3) имея идентификаторы нужных справочников, находим в 1Cv7.DD соответствующие им файлы dbf, а из метаданных берем идентификаторы реквизитов
4) открываем найденный дбф и читаем все реквизиты, кроме строк неопределенной длины и периодических
5) и тут встает вопрос о том, как же мне достать реквизит, тип которого - строка неопределенной длины...
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
23.10.2008, 15:34
я бы сделал не так. Не выбирать реквизиты из файла, соответствующего справочнику, а собственно из справочника.
При этом сформировать файл DBF для этого справочника, и если там реквизит неопределенной длины - сформировать в файле обмена поле с запасом (например,300 символов). Периодические же реквизиты получать, например, на дату обмена.

Вот примерный кусочек кода для формирования структуры файла обмена:

Function CreateDBF()
Var k;
DBF.AddField("Group",1,1,0);
Ref = MetaData.Reference(НомерНужногоСправочик а);
if Ref.CodeType = "Числовой" then
CodeType = 1
else CodeType = 2
endif;
CodeLength = Ref.CodeLength;
DescriptionLength = Ref.DescriptionLength;
DBF.AddField("Code",CodeType,CodeLength, 0);
DBF.AddField("Descr",2,DescriptionLength ,0);
for i = 1 to Ref.Attribute() do
RefAttr = Ref.Attribute(i);
Length = 0; Precision = 0;
if RefAttr.Type = "Число" then
Type = 1; Length = RefAttr.Length; Precision = RefAttr.Precision
elsif RefAttr.Type = "Строка" then
Type = 2; Length = RefAttr.Length;
if Length = 0 then Length = 200 endif; // для строк неопределенной длины
elsif RefAttr.Type = "Дата" then
Type = 3;
elsif RefAttr.Type = "Справочник" then
if EmptyValue(RefAttr.Kind) = 0 then // для справочников определенного вида
RefNumber = RefList.FindValue(RefAttr.Kind);
// элемент справочника я передаю кодом
Length = MetaData.Reference(RefNumber).CodeLength ;
if MetaData.Reference(RefNumber).CodeType = "Числовой" then
if Length > 0 then
Type = 1;
else
Type = 2
endif;
else
Type = 2;
endif;
if Length = 0 then Length = 100 endif;
else
// для справочников неопределенного вида
Type = 2; Length = 100;
endif;
elsif RefAttr.Type = "Перечисление" then ,,// сохраняем номером
Type = 1;
Length = 3;

elsif RefAttr.Type = "Счет" then
Type = 2;
Length = 20;
endif;
DBF.AddField("Field"+String(i),Type,Leng th,Precision);
enddo;
if TrimAll(String(RefOwner)) <> "Метаданные" then
// для подчиненных справочников
OwnerNumber = RefList.FindValue(RefOwner); // владелец подчиненного справочника определяется на уровне перебора справочников по метаданным
CodeType = MetaData.Reference(OwnerNumber).CodeType ;
CodeLength = MetaData.Reference(OwnerNumber).CodeLeng th;
if CodeType = "Числовой" then
CType = 1
else CType = 2
endif;
DBF.AddField("Owner",CType,CodeLength,0) ;
endif;
DBF.CreateFile(ИмяАрхива);
Message("Создан файл "+ИмяАрхива);
Return 1
EndFunction
//**************************************** **************************************
0
tytttyFoyry
23.10.2008, 15:40
Спасибо, попытаюсь переварить
Но вопрос "как же в принципе можно получить значение поля Fieldid в 1sblob.dbf для какого-либо объекта???" остается открытым...
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
23.10.2008, 16:48
собственно строки неограниченной длины в 1sblob живут в поле block, а так как оно имеет длину 80 символов, то все, что длиннее 80, живет где-то в других местах (Не знаю, как этот файл устроен). Вот поэтому-то с ним я бы и не стал связываться. Я использую для всех целей работы со справочниками самописную обработку, использующую файл обмена DBF, txt или xls. За три года вполне довел ее до ума и проблем не испытываю. В твоем случае я бы использовал нечто подобное - сформированные данные вывести в ТЗ, отметить нужные и далее их либо выгружать в содаваемый файл, либо загружать из сформированного файла. Все основано на структуре метаданных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2008, 16:48
Помогаю со студенческими работами здесь

Конвертирование файлов DBF III в DBF IV
Существует некая форма, которая подключается к dbf файлам и берет из них данные. строка подключения такая: ConnP.ConnectionString =...

Как подключить базу данных созданную в DBF Navigator с форматом ".dbf" к приложению на Lazarus?
1) Обязательно ли эти БД хранить ТОЛЬКО на диске C 2) Дайте полный алгоритм подключения их к проекту. Вот есть форма что на неё...

Как "доказать" Delphi, что файл с расширением не DBF - все таки dbf
Добрый день, коллеги-сокнопочники! Бьюсь-ломлюсь в открытую дверь (как мне кажется). Есть файл с именем *.0ew или *.1t6, но на самом...

Прочитать содержимое dbf (файл SER.Dbf). И вывести содержимое нескольких полей
Всем привет) Можете пожалуйста помочь, может кто хорошо разбирается в работе с dbf файлами... Задача такая: прочитать содержимое dbf...

Необходимо произвести "Update" одинаковых данных в 2.dbf из 1.dbf
зарание извеняюсь за корявость темы? вопрос такой. Есть два dbf файла структура баз полностью идентичная (назовем их 1.dbf и 2.dbf) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru