|
tytttyFoyry
|
|
Fieldid в 1sblob.dbf22.10.2008, 13:39. Показов 26376. Ответов 9
Метки нет (Все метки)
Итак.
В известном файле имеется, например, строка реквизита "адрес" справочника "банки" 1W 8 0 23 114674, г.Москва, ул. Морская, д.49х остатков) ,где 1W - собственно значение поля FIELDID. Проблема в том, что кривизна моих рук не позволяет мне получить значение FIELDID (не залезая в 1SBLOB, разумеется). При использовании ЗначениеВСтрокуВнутр(Спр) , где Спр = СоздатьОбъект("Справочник.Банки") получаю "{"B","0","0","72","0","0"," 0 "}", но по-моему это не совсем то... Спасите! :( |
|
| 22.10.2008, 13:39 | |
|
Ответы с готовыми решениями:
9
Ошибка при загрузке DBF файлов с датой 'dd.mm.yy' (DBF FoxPro, TADOQvery, DataSource, DBGrid) Копирование данных из одной таблицы dbf в шаблон dbf Работа с dbf в C# - вывести содержимое dbf в dataGridView |
|
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
|
|
| 23.10.2008, 16:48 | |
|
Помогаю со студенческими работами здесь
10
Конвертирование файлов DBF III в DBF IV Как подключить базу данных созданную в DBF Navigator с форматом ".dbf" к приложению на Lazarus? Как "доказать" Delphi, что файл с расширением не DBF - все таки dbf
Необходимо произвести "Update" одинаковых данных в 2.dbf из 1.dbf Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Пошагово создадим проект для загрузки изображения. . .
|