![]() |
![]() |
![]() |
|
Помощь в разборе DBF структуры | ☑ | ||
---|---|---|---|---|
0
DoctorPIX
18.04.14
✎
14:59
|
ЗДрасте, пожалуйста помогите разобраться в структуре требуемого файла.
Должено быть 3 файла как я понял DBF. Какие поля там будут? В 1С не силен, а напарник ушел в отпуск, оставив обработку. БД = Новый XBase; БД.ОткрытьФайл(ЭтаФорма.ПутьКФайлуПациентов,,Истина); Если НЕ БД.Открыта() Тогда Возврат; КонецЕсли; БД2 = Новый XBase; БД2.ОткрытьФайл(ЭтаФорма.ПутьКФайлуПолисов,ЭтаФорма.ПутьКФайлуИндексаПолисов,Истина); Если НЕ БД2.Открыта() Тогда Возврат; КонецЕсли; БД2.ТекущийИндекс = БД2.Индексы.IDX; МассивПациентов = Новый Массив; БД.Первая(); Счетчик = 1; БД.Первая(); Пока НЕ БД.ВКонце() и Счетчик < 2 Цикл Счетчик = Счетчик + 1; Пациент = Новый Структура; Пациент.Вставить("Фамилия", СокрП(БД.FAM)); Пациент.Вставить("Имя", СокрП(БД.IM)); Пациент.Вставить("Отчество", СокрП(БД.OT)); Пациент.Вставить("ДатаРождения", БД.DR); Пациент.Вставить("Пол", БД.W); Полис = СокрП(БД.SN_POL); Пробел = Найти(Полис, " "); Пациент.Вставить("ТипПолиса", БД.TIP_D); Если Пробел = 0 Тогда Пациент.Вставить("СерияПолиса", ""); Пациент.Вставить("НомерПолиса", Полис); Иначе Пациент.Вставить("СерияПолиса", Сред(Полис, 1, Пробел-1)); Пациент.Вставить("НомерПолиса", Сред(Полис, Пробел + 1)); КонецЕсли; Если не ПустаяСтрока(БД.TEL) Тогда Сч = 1; Пока Сч < 12 Цикл Если КодСимвола(БД.TEL, Сч) = 48 Тогда Сч = Сч + 1; Иначе Прервать; КонецЕсли; КонецЦикла; Если Сч = 1 Тогда Тел = "+" + Сред(БД.TEL, 1, 1) + " (" + Сред(БД.TEL, 2, 3) + ") " + Сред(БД.TEL, 5); Пациент.Вставить("ТипТелефона", "Сотовый"); ИначеЕсли Сч = 2 Тогда Тел = "(" + Сред(БД.TEL, 2, 3) + ") " + Сред(БД.TEL, 5); Пациент.Вставить("ТипТелефона", "Сотовый"); ИначеЕсли Сч = 5 Тогда Тел = Сред(БД.TEL, 5); Пациент.Вставить("ТипТелефона", "Домашний"); Иначе Тел = Сред(БД.TEL, Сч + 1); Пациент.Вставить("ТипТелефона", "Домашний"); КонецЕсли; Пациент.Вставить("Телефон", Тел); КонецЕсли; Пациент.Вставить("Улица", СокрП(БД.UL)); Пациент.Вставить("Дом", СокрП(БД.DOM)); Пациент.Вставить("Корпус", СокрП(БД.KOR)); Пациент.Вставить("Строение", СокрП(БД.STR)); Пациент.Вставить("Квартира", СокрП(БД.KV)); ТипДУЛ = БД.Q_PASP; НомерДУЛ = СокрП(БД.SN_PASP); Если Не ПустаяСтрока(НомерДУЛ) Тогда Если ТипДУЛ = "0" или ТипДУЛ = "1" или ТипДУЛ = " " Тогда Н_ = Найти(НомерДУЛ, "-"); Если Н_ > 0 Тогда ТипДУЛ = 0; СерияДУЛ = Сред(НомерДУЛ, 1, Н_ + 2); НомерДУЛ = Сред(НомерДУЛ, Н_ + 4); Иначе СерияДУЛ = Сред(НомерДУЛ, 1, 5); НомерДУЛ = Сред(НомерДУЛ, 7); ТипДУЛ = 1; КонецЕсли; ИначеЕсли ТипДУЛ = "9" Тогда ТипДУЛ = 2; СерияДУЛ = Сред(НомерДУЛ, 1, 6); НомерДУЛ = Сред(НомерДУЛ, 8); ИначеЕсли ТипДУЛ = "v" или ТипДУЛ = "w" Тогда СерияДУЛ = ""; ТипДУЛ = 3; СерияДУЛ = ""; КонецЕсли; Пациент.Вставить("ТипДУЛ", ТипДУЛ); Пациент.Вставить("СерияДУЛ", СерияДУЛ); Пациент.Вставить("НомерДУЛ", НомерДУЛ); КонецЕсли; Пациент.Вставить("ГруппаИнвалидности", СокрП(БД.INV)); Пациент.Вставить("СНИЛС", СокрП(БД.SS)); Пациент.Вставить("КЛАДР", СокрП(БД.KLADRID)); Пациент.Вставить("КодСМО", СокрП(БД.Q)); Пациент.Вставить("ТипСМО", СокрП(БД.QG)); Пациент.Вставить("НазваниеСМО", СокрП(БД.Q_NAME)); Пациент.Вставить("ГородСМО", СокрП(БД.Q_GOR)); СМО = БД.Q_NAME + БД.Q_GOR; Пациент.Вставить("Работа", СокрП(БД.RAB)); ЗаписьНайдена = БД2.Найти(Полис, "="); Если ЗаписьНайдена Тогда Пациент.Вставить("Карта", СокрП(БД2.C_I)); Иначе Сообщить(Пациент.Фамилия + " " + Пациент.Имя + " " + Пациент.Отчество); КонецЕсли; МассивПациентов.Добавить(Пациент); Если Не БД.Следующая() Тогда Прервать; КонецЕсли; КонецЦикла; БД.ЗакрытьФайл(); БД2.ЗакрытьФайл(); СоздатьПациентаИКарту(МассивПациентов); |
|||
1
Wobland
18.04.14
✎
15:00
|
и взрослых рядом нет?
|
|||
2
Сияющий в темноте
18.04.14
✎
15:15
|
А если сделать DBF-файлы и заглянут в них - не проще ли будет ?
|
|||
3
DoctorPIX
18.04.14
✎
15:35
|
(2) дак мне и надо понять как сделать их )
|
|||
4
Wobland
18.04.14
✎
15:36
|
(3) что мешает?
|
|||
5
Гобсек
18.04.14
✎
15:45
|
FAM
IM OT DR W SN_POL TIP_D и так далее. Например, в тексте модуля встречается выражение СокрП(БД.RAB) Значит, есть поле под названием RAB. Кроме того, поскольку в выражении использована функция СокрП, то это поле строковое. |
|||
6
Wobland
18.04.14
✎
15:50
|
(5) то это поле неизвестно какого типа приводится к строке
|
|||
7
DoctorPIX
18.04.14
✎
15:58
|
зачем файл индекса полисов?
|
|||
8
Wobland
18.04.14
✎
15:58
|
(7) для индексов
|
|||
9
SSSSS_AAAAA
18.04.14
✎
16:00
|
(0) А что с ней разбираться? Простой список полей.
1. Куча кода читающего из файла. Пишущего в файл код нет. Поэтому, каким боком тут вопрос "какие будут поля" к уже существующему файлу? В существующем файле поля ЕСТЬ, а не будут. 2. О каких трёх файлах речь? В приведенном коде открывается, читается и закрывается один файл. Может таки нормально сформулируете вопрос? |
|||
10
DoctorPIX
18.04.14
✎
16:03
|
1-ый файл БД.ОткрытьФайл(ЭтаФорма.ПутьКФайлуПациентов,,Истина);
2-ой и 3-ий файл БД2.ОткрытьФайл(ЭтаФорма.ПутьКФайлуПолисов,ЭтаФорма.ПутьКФайлуИндексаПолисов,Истина); 1.ПутьКФайлуПациентов 2.ПутьКФайлуПолисов 3.ПутьКФайлуИндексаПолисов В файлы ничего не пишется, наоборот с них идет загрузка в базу. Я хочу понять какой структуры файлы, чтобы наполнить их, и с помощью этой обработки загрузить данные в базу.! |
|||
11
Wobland
18.04.14
✎
16:04
|
а чем наполнять собрался?
|
|||
12
DoctorPIX
18.04.14
✎
16:05
|
дак мне и надо понять, чем наполнять :)
|
|||
13
DoctorPIX
18.04.14
✎
16:06
|
загрузка пациентов, ФИО ДАТА ПОЛИС и прочее прочее... только какие нужны я хз
|
|||
14
Wobland
18.04.14
✎
16:08
|
мда...
|
|||
15
SSSSS_AAAAA
18.04.14
✎
16:08
|
(10) Ну так просто откройте их любой смотрелкой dbf-файлов. Индексы смотреть не надо и заполнять их тоже не надо, они сами заполнятся.
|
|||
16
bolder
18.04.14
✎
22:13
|
(12) У вас есть пример кода на ЧТЕНИЕ кем то созданных dbf.
Если вы когда либо работали с ними, то должны понимать, что поля dbf называются так, как к ним обращается эта обработка.Тип полей нужно устанавливать из общих соображений.Например, БД.FAM - явно фамилия, это же по- русски написано,значит тип строковый, длиной скажем 100 символов, ну и так далее.Индексный файл нужно создать автоматически. |
|||
17
Garykom
гуру
19.04.14
✎
00:20
|
(0) Открой как ты базу 1С и смотри куда там эти поля грузятся - узнаешь что в них должно быть.
Конкретно глянь процедурку: СоздатьПациентаИКарту(МассивПациентов); В ней и происходит заполнение справочников из массива |
|||
18
Torquader
19.04.14
✎
01:48
|
Давайте вы расскажете задачу или ТЗ полностью и не будем страдать фигнёй и пытаться понять, зачем в dbf-файле поля.
|
|||
19
Miracle_
Miracle 19.04.14
✎
06:17
|
(0)Самый простой вариант спросить структуру требуемого файла(ов) у тех кому вы их сдавать собираетесь.
Например у клиент-банков (некоторых) строгое ограничение на длину поля и версию dbf.И гадание из (12) может сыграть злую шутку. |
|||
20
Wobland
19.04.14
✎
06:18
|
(18) ты ж на нашей стороне. давайте все вместе и придумаем, что нужно ТС и как этого добиться ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |