Формат файла отличен от dbf
Преждевременно была закрыта тема "DBF юзают неудачники?"
А зря. Весьма интересный и поучительный там диалог был.
Фиксин против форматов СУБД.
Миллионы типовых объектов против тысяч видов малочисленных документов.
1с-ники с графиками презентаций против неодобряемого 1с-ом "старья".
Что делать и куда бечь, когда перед тобой поставили задачу выгрузки чего-то там откуда-то туда.
Сегодня дошли руки сделать выгрузку из 7.7.
Справочник номенклатуры - 31 тыс наименований.
Выгружается весь - 30 полей каждой карточки.
Сделал через DBF - выгрузка заняла 2,5 минуты. До этого - сутки выгружалось через правила КД в XML.
Размеры файлов - 220 Мб против 345 Мб.
Снова было доказано непреложное:
если данные однотипные и структурированы, и их очень много - только DBF. Причем в текстовый файл тоже самое выгружается часа полтора. Но текстовик размером 300 МБ потом будет читаться часов 25.
Честно, поражен скоростью DBF.
Для выгрузки миллионострочных справочников - самое то.
Впрочем, если напрячься, и есть время - то и документов тоже. Правда, с документами сложнее - если их больше 5 видов, долго писать структуры для DBF - надо же на шапку, на ТЧ свои таблицы выгрузки. Да еще с поиском либо созданием элементов справочников.
Но - впечатлен. Не ожидал, что DBF ТАК обставит текстовый файл - собственно, как самолет велосипед.
Конечно, "прогрессивные" 1с-ники могут попенять на конкретную реализацию выгрузки-чтения текстовика в 1с. Но что есть, то есть. И в конце концов, на то они и "прогрессивные" в 1с, чтобы ругать все, что выходит за рамки концепций и представлений 1с.
(0)(1)
"2,5 минуты"(с) для такого объема - это очень много. Думаю, основное время уходит на чтение исходного справочника. Точнее, время уходит на вытаскивание информации из полей БД в "1С-структуры представления" информации в оперативной памяти. И обратные действия для результирующего DBF-а 1С делает очень медленно. А сама запись в DBF на уровне его движка, для такого объем, займет несколько секунд. ;-)
(2) hogik,
какое много! если сравнивать с записью в текстовики (txt, xml, csv, тут же и mxl) - это почти что секунды!
Я когда первый раз выгружал - чай приготовил (по аналогии с прошлыми выгрузками), так чай так и остыл из-за нехватки на него времени ))
И что еще немаловажно - открытый файл DBF вполне читабельный и прокручиваемый, в отличие от того же XML - который после 10 МБ надо по полминуты ждать обновления страницы, да еще далеко не всякий вьювер и прочитает такой объем.
Да, здоровенные xml и txt файлы читаются и открываются ну очень долго и тяжело.
Но зато - формат открытый, добавляй что хочешь и сколько хочешь, а в DBF даже поле новое программно добавить это как-то непросто. Так что - выигрыш в скорости, проигрыш в гибкости.
(5) Alex_Japanese_Student,
Есть масса DBF-редакторов.
Покажите хоть один XML-редактор данных (не вьювер и не веб)?
(7) AlexO,
Отстаете от жизни батенька.
уже белее 6 лет существует XML Notepad от мелкомягких. Причем бесплатно.
Забрать можно здесь - XML Notepad
(11),(12) bzmax,
Вам непонятно слово "не-веб редакторы"? ))
т.е. разницы между файлом веб-xml и файлом данных xml вы не видите?
(13) AlexO,
А с чего вы решили что XML Notepad web-редактор?
Или лучше скажем так.
По пунктам распишите что бы понимаете под веб-редактором :)
(14) bzmax,
с того, что редактировать xml можно и вобычном текстовом редакторе (и даже более того - схему узлов можно просматривать в браузере с поддержкой спецификации xml), а вот заточенность и специфики как файла данных (причем огромного файла данных) - нет.
(15) AlexO,
Давайте все таки вещи называть своими именами.
XML как был текстовым, так текстовым и остался(!)
Специфики никакой. Теги и текст. даже двоичные данные (если нужно передать) кодируются алгоритмом base64 в текстовую строку.
Единственное что вас беспокоит, как я понял - это ТОЛЬКО размер файла.
Так вот вы возьмите XML Notepad и попробуйте поработать. Вероятней всего он и будет долго открывать.
Но я в данном случае рассматривал не скорость работы. А опровергал ваше утверждение что не существует "нормально" XML редактора.
Есть такой редактор. И структура XML файла в нем просматривается очень хорошо и удобно.
И вместо того что бы разводить 30 минут демагогию. Уже давно скачал бы и попробовал.
(22) bzmax,
это вы крутится начали, наверняка, и пу поддерживаете ))
но это оффтоп - тут другая тема для этого есть в Лайф.
А поиск и замена есть в обычном NotePad. Самое интересное - что вы назаменяете этой заменой и где :))
(14) bzmax,
т.е. вы никогда не интересовались, что такое вообще БД, и реляционные таблицы БД в частности? ))
Покажите, где в вашем редакторе поиск и сортировка по записям? Вероятней, что нет даже и по узлам, хотя это отнюдь не записи БД.
(16) AlexO,
:) Хех :)) Тогда и надо было говорить следующее "Мне нужен не XML редактор, а приложение которое может работать с XML как с СУБД - выборка, поиск, анализ."
(18) bzmax,
ээ. собственно, если я испорльзую стараниями 1с формат XML как средство передачи данных - я на что могу рассчитывать в плане управления этими самыми данными? :)
MS SQL или IBM DB - великолепные СУБД которые имеют инструментарий по работе с XML - файлами как с СУБД. Даже запросы можно формировать.
Да и обычный парсер WINDOWS-а тот который использует 1С для формирования и чтения XML файлов может использовать специализированный язык запросов для XML.
вы сами-то пользовались им? я - нет, да и, как вы сами сказали "великолепные СУБД" имеют великолепные и быстродействующие средства обмена безо всяких XML, если уж мне взбредет в голову привлекать для этого сервера с MS SQL или IBM DB :))
(7)Пользуюсь только XmlSpy 3.5, вполне отличный редактор. Именно версия 3.5, потому как, все что старше - ужасный комбайн, в котором можно запутаться
dbf это древний формат еще со времен ДОСа, в те времена не было многоядерных процов, оперативка смешная, а диски были тоже не огромные, поэтому понятное дело что оптимизировали его по самое нихачу, как и все тогда.
а хмл уже современный формат, более удобо читаемый
как уже сказано предыдущим
dbf это древний формат еще со времен ДОСа, в те времена не было многоядерных процов, оперативка смешная
"древний" DBF на современном компе, на многоядерном проце, на несмешной оперативке затыкает "современный" текстовый XML - даже не знаю, с чем сравнить. пуля и пешеход.
(0)(4)
Я обратил Ваше внимание на скорость движка DBF-а и скорость 1С, использующей этот движок. ;-) Приведу только числа.
Читается таблица 2'500'000 записей, размером около 1 гигабайта. Используется индекс с размером ключа 20-40 байт. Режим - локальный. Приложение ничего не делает - просто читает все записи подряд.
Чтение в среде 1С 7.7:
1) Запуск после перезагрузки системы - 150 сек.
2) Все повторные запуски - 120 сек.
Чтение в "среде" С/С++:
1) Запуск после перезагрузки системы - 30 сек.
2) Все повторные запуски - 3 сек.
Т.е., примерно, 120 секунд трясутся байты и объекты в кишках самой 1С-а. :-)
Замеры проводились на клиент-серверном движке на базе СУБД Advantage 8.1.
Она позволяет работать с БД одновременно навигационным способом и запросами.
Пользуясь такой возможностью, выполнил запросом функцию SUM для одного поля тестовой таблицы. Получил время - 1сек.
Напрашивается простой вывод. ;-)
Использование запросов, и "запросных" СУБД в 1С-продуктах - это ускорения работы самих кишок 1С-а и мнимое упрощение процесса кодирование для программиста. А т.к. с иерархическими структурами (что и требуется в НАШИХ задачах) логичней и эффективнее работать навигационными методами приходится "изобретать" многоуровневые системы - переходники к "запросным" СУБД. Это, я к вопросу "выигрыш в скорости, проигрыш в гибкости"(5). Это когда гибкость инструмента предназначенного для ПРОСТЫХ задач оборачивается сложностью, дороговизной и низкой скоростью в РЕАЛЬНЫХ задачах.
А формат XML (как и SQL) создан для простых и конкретных задач. Т.е. "гибкость" для облегчения труда "программиста" (точнее, - кодировщика) в ущерб ВСЕГО остального.
А формат XML (как и SQL) создан для простых и конкретных задач. Т.е. "гибкость" . в ущерб ВСЕГО остального.
(26)
Именно это и написал. ;-)
В любой системе для "обмена" информации должно быть два формата. Один для "взаимосвязи" с другими системами, а второй для передачи внутри системы (продуктов одной линейки, одного изготовителя). Первому формату - универсальность для взаимодействия "разнородных" систем, второму - скорость и надежность.
При этом скорость разработки правил обмена (удобство "программирования"-кодирования) находятся на последнем месте в оценке-выборе формата обмена информацией.
Разработчики 1С-продуктов придерживаются диаметрально противоположного взгляда в задачах обмена информации. И во многих других задачах - аналогично. Что позволяет им успешно продавать свои продукты ориентированные на низкий уровень "само-сознания" покупателя. ;-) Т.е. продавать "системки" для быстрого изготовления "портянок" при помощи низкоквалифицированных "программистов" в угоду "хотелок" заказчика, который находится на "бумажном" уровне развития информационных технологий. Увы. :-(
P.S. Задачи обмена информации в рамках одной системы - не существует. Т.е. выгрузка-загрузка внутри, например, "1С 8.х" говорить об наличии огромных ошибок в проектировании самой системы.
Т.е. выгрузка-загрузка внутри, например, "1С 8.х" говорить об наличии огромных ошибок в проектировании самой системы.
полностью соглачен.
Даже идентичные конфы со временем начинают отличаться - GUID типовых объектов, содержащимися данными, порядком объектов и т.д. - вплоть до глюков платформы, когда неизменные объекты вдруг начинают показываться как "измененные" в сравнении.
Самый лучший способ обмена - все так же, по старинке, принудительная запись в формализованные по типам данных поля.
Т.е. прозрачный обмен - подобно dbf.
Все остальное - непредсказуемые последствия и неправильные записи.
Для всего свой формат, когда речь идет об обмене объектов со сложной и не однородной структурой, то без xml не обойтись, да и при том затраты на разработку обмена в формате xml уменьшаются если пользоваться конфой Конвертация данных
она может некорректно перенести, и её результаты крайне сложно контролировать.
Если у вас задвоятся десятки справочников - вы их как отлавливать будете? а при переносе через Кд может быть не только задвоние самих элементов, но и задвоение и кодов, и других уникальных для конкретного справочника полей, о чем КД вам не сообщит, конечно же.
(38) hogik,
:) я имел ввиду не форматы а походы к переносу данных.
1) с помощью КД через XML;
2) с помощью самописных обработок через DBF/CSV/TXT и.т.д.
(39)
Основные подходы:
1) Иерархический.
2) Сетевой.
3) Реляционный.
4) Объектный.
Всё остальное - удобство программиста. Включая конкретизацию (выражение, описание) структур данных в том или ином формате с использованием тех или иных средств программирования.
КД, XML, DBF, CSV, TXT и т.д. - очередная подмена содержания "внешней" формой.
(40) hogik,
Давайте определим предмет обсуждения.
1) если мы обсуждаем типы моделей данных, то разговор ни о чем, каждый имеет свои + и -. Как уже было сказано выше реляционный лучше для работы с большими объемами однотипных данных. Иерархические при работе с разнородными данными и неоднородной структурой.
2) если по п.1 у нас нет разногласий, тогда можем перейти к практическим вопросам. Как было указано, реляционный подход хорош при переносе больших объемов "ДБФ это если перекинуть 1-2 больших таблицы".
При переносе сложных структур в использовании удобнее иерархический подход "при десятках таблиц и объектов обеспечить ссылочную целостность в выгружаемых данных задача нетривиальная."
Полностью согласен с
(29) Relfirby,
"А что касается выбора между *.dbf или *.xml, то к этому стоит подходит как к выбору конкретного инструмента в конкретной задаче. Если мне нужно срочно и единожды перенести некий справочник (документ), то конечно же, сделаю через dbf. А вот настроить постоянный обмен сложной структуры, то уж увольте, через xml."
Мне на практике чаще приходится работать со сложными и регулярными обменами. Поэтому поддерживаю развитие фирмой 1С соответствующих инструментов.
(41)
Константин (GreyJoJo).
Действительно "разговор ни о чем"(с).
Вы пытаетесь сложить килограммы с метрами. ;-)
1) "реляционный хорош при переносе больших объемов"(с)
"При переносе сложных структур в использовании удобнее иерархический подход"(с)
Т.е. сравниваем объем и сложность? :-)
2) "при десятках таблиц и объектов обеспечить ссылочную целостность в выгружаемых данных задача нетривиальная"(с)
Т.е. реляционная модель плохо обеспечивает ссылочную целостность? Используя продукты 1С Вы преобразовали иерархическую модель реальной жизни (как её видят разработчики 1С-а) в реляционную модель. Обеспечили ссылочную целостность. Ну и выгружайте информацию без обратного преобразования.
3) "Мне на практике чаще приходится работать со сложными и регулярными обменами."(с)
Я задавал вопрос-призыв в исходной теме.
Задам и в этой теме:
"Если "Требуется выгрузить расходные накладные за период со всеми элементами справочников . "(с), то надо задуматься не о "формате" передачи данных, а о причинах возникновения такой "постановки задачи" в 1С-продуктах. И устранять причину, а не следствие. "
4) "Поэтому поддерживаю развитие фирмой 1С соответствующих инструментов."(с)
А я не поддерживаю. ;-) Т.к. эти "инструменты" называются - лоскутная АвтоМехАнизация. Начиная от архитектуры платформы и кончая многочисленными конфигурациями, каждая из которых имеет свою собственную схему базы данных. И как следствие этого зверинца-бардака появления продуктов типа "КД" реализованного (в части формата передачи) в угоду моде и огромного количества узких "специалистов" в области знаний под названием "1С-продукт".
(43) hogik,
Я не понимаю что вы хотите доказать. Свою позицию я изложил.
"А я не поддерживаю. ;-) Т.к. эти "инструменты" называются - лоскутная АвтоМехАнизация. Начиная от архитектуры платформы и кончая многочисленными конфигурациями, каждая из которых имеет свою собственную схему базы данных. И как следствие этого зверинца-бардака появления продуктов типа "КД" реализованного (в части формата передачи) в угоду моде и огромного количества узких "специалистов" в области знаний под названием "1С-продукт". "
Ну что же если у вас есть достойные предложение тогда надо идти в отдел разработки 1С-озолотят и с руками оторвут. Или героически писать правильные решения и платформы :)
Удачи в столь нелегком труде!
За сим откланиваюсь.
(44)
Константин (GreyJoJo).
Да, уж. Лучше друг-другу откланяться. А то и эту тему форума закроют. ;-)
Пустой у нас с Вами разговор получается. Вы излагаете свою позицию. А я не излагаю свою позицию, а пытаюсь Вам нечто доказывать. :-)
(46)
Константин (GreyJoJo).
Это называется - слово за слово . по столу. ;-)
Вы меня упрекнули в том, что я Вам нечто доказываю.
И признались, что не понимаете ЧТО я Вам доказываю.
Я сообщил Вам, что НИЧЕГО не доказываю, а излагаю (как и Вы) свою точку зрения.
Заметьте, без рекомендаций Вам - где и как Вам работать. :-)
да никого они не озолотят - что втемяшили, то и пиарят. Причем из крайности в крайность бросает, а пользователи - крайние по разгребанию и приведению этого бардака в порядок.
И как следствие этого зверинца-бардака появления продуктов типа "КД" реализованного (в части формата передачи) в угоду моде и огромного количества узких "специалистов" в области знаний под названием "1С-продукт".
абсолютно согласен.
КД развивается также, как и вся 1С - кто-то где-то что-то напридумал, другой - придумал, как это использовать, третий - поднаписал то, что не укладывалось в схему второго.
А в результате - неустойчивая и крайне громоздкая и неповоротливая система переноса, и это - не считая вопроса, уже здесь рассмотренного, что нет средств управления XML-файлом данных.
из этого я делаю вывод - что вы не делали переносов через DBF-TXT-CSV, а только краем уха слышали. Иначе - ни за что бы не объединили такие совсем разные переносы в фразе че-то там "самописные переносы".
Это у 1С, быстрей, на коленке переносы сделаны.
А тут три совершенно разных подхода к переносу - и по скорости, и по удобству, и по надежности.
ДБФ это если перекинуть 1-2 больших таблицы. Все остальное от лукавого.
при десятках таблиц и объектов обеспечить ссылочную целостность в выгружаемых данных задача нетривиальная. КД это все берет на себя.
А если надо внести изменения в какой нить 100 лет назад не тобой написанный перенос через ДБФ - можно сразу накрываться простыней и ползти на кладбище. В такие моменты понимаешь прелести КД.
ЗЫ: Еще ДБФ хорош любителям поперебирать ручками таблицы (а-ля 7.7) выбратьстроки() получитьстроку() - удовольствие (сомнительное) получает махровый прогер, а оплачивает часы разработки предприятие.
Прекрасно перекидываются справочники, документы и прочее. Главное - все видно, ЧТО выгружаешь, и ЧТО загружаешь.
при десятках таблиц и объектов обеспечить ссылочную целостность в выгружаемых данных задача нетривиальная. КД это все берет на себя.
да, обеспечивает. Но именно это и выходит боком - что там перенеслось, как - может быть вообще невообразимая мешанина.
Если интересно - я тут тему поднял про частный случай, где КД вообще лажу выдает.
Интересно, где?
А вот там, когда перегружаешь в базу, где те же самые объекты (для пользователя те же самые), которые в источнике, были введены вручную в приемник (с другими ИД).
Все. Накрывается медным тазом все - и КД, и ЗагрузкаВыгрузкаXML (ПереносМеждуИдентичнымиКонфигурациями).
А если надо внести изменения в какой нить 100 лет назад не тобой написанный перенос через ДБФ - можно сразу накрываться простыней и ползти на кладбище.
Ничего подобного. С нуля делать - да, нужно четкую структуру разрабатывать, не совсем просто. А изменения вносить - спросите у vkr, сколько десятков он переносов сделал на основе одной своей разработки.
ЗЫ: Еще ДБФ хорош любителям поперебирать ручками таблицы (а-ля 7.7) выбратьстроки() получитьстроку() - удовольствие (сомнительное) получает махровый прогер, а оплачивает часы разработки предприятие.
Например, создадим файл, идентичный по структуре исходному.
//При этом применяется метод ОписаниеПоля, который возвращает характеристики поля с указанным номером
//синтаксис: ОписаниеПоля(,,,,)
Для работы с файлом DBF неизвестной структуры часто применяются следующие методы:
ПолучитьЗначениеПоля();
УстановитьЗначениеПоля(,);
Работа с удаленными записями
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.
Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Стоит еще отметить про метод Очистить(), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа "строковый" приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».
Работа с индексами
Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.
Каждый индекс имеет наименование, признак уникальности, выражение индекса и фильтр. Наименование индекса используется для идентификации индекса. Выражение индекса и фильтр представляют собой написанные на специальном языке выражения, вычисление значения которых для каждой записи позволяет определить ее место при упорядочивании и необходимость помещения ее в упорядоченный список (индекс может содержать упоминание не обо всех записях таблицы, а только об удовлетворяющих выражению фильтра). Уникальный индекс (имеющий установленным признак уникальности) позволяет иметь в индексе ссылки на записи только с различным значением индексного выражения.
Основное правило: индекс нужен, чтобы быстро искать нужную запись.
Нужно быстро найти Комаров. В неупорядоченном исходном файле искать его можно только последовательным перебором всех записей, что будет очень долго при большом числе записей. В индексе найти Комарова можно очень быстро, поскольку индекс отсортирован по полю Фамилия. При этом мы узнаем физический номер записи в файле DBF и производим прямое позиционирование на нужную запись.
После создания структуры базы данных можно добавить индексы следующим образом:
//Синтаксис: ДобавитьИндекс(, , , , )
После сбоя рекомендуется заново переформировать все индексы
В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.
Отбор по значению поля
Часто возникают вопросы по фильтрации файла БД по значению
определенного поля.
Предположим , что в предыдущем примере сотрудники работают в разных
подразделениях «Офис» и «Филиал» ,
и нужно вывести всех сотрудников работающих в офисе.
Нетрудно увидеть, что в языке нет явных способов получить записи
по фильтру, но имея индекс тем не менее, данную операцию
можно эффективно (без перебора всех записей) осуществить.
1. Создадим файл индекса, если он ранее не был создан
2. Откроем Файл базы с индексом
3.Прейдем на первую запись
4. И так как все записи упорядочены по индексу - достаточно пройтись
по записям, пока не встретится запись с другим значением поля "Otdel" :
Ребята подскажите с чего начать мне необходимо решить такую задачку. Есть несколько dbf файлов, обработка должна их объединить в 1 сводный файл и данные вывести в сводный отчет?
(1) LadyDy, создаете новый объект (ДБФ = Новый XBase;)
После чего считываете. И обрабатываете. (56) LadyDy, пропорционально необходимо указать в привязках. И все у тебя получится. Удачи.
1. Открыть и считать данные из файлов в цикле, на примере
2. Записать данные в ТаблицуЗначений
3. Выгрузить данные в единый файл из ТЗ
4. Сформировать отчет запросом, в запрос передать ТЗ.
(4) alexhline, считать данные - считала, в таблицу значений отправила, а как теперь в единый файл? файл уже создала.
// ПРИМЕР ЧТЕНИЯ ФАЙЛА
ДБФ=СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл("c:\zeni.dbf");
Если дбф.открыта()=0 Тогда
Предупреждение("не открыт файл",60);
возврат;
КонецЕсли;
ДБФ.Первая();
Пока ДБФ.ВКонце()=0 Цикл
к данным в файле обращаешься через точку - как к реквизитам, например: ДБФ.TOVAR, где "TOVAR" - наименование одной из колонок ДБФ файла.
xB = Новый xBase(ПутьКФайлу);
xB.Кодировка = КодировкаXBase.OEM;
xB.Первая();
Пока Не xB.ВКонце() Цикл
в п.п. (8) описано как в 1С8 открывать файл и проводить его последовательное считывание, то что Вы пишите - это применимо для 1С7.7
(20) alexhline, пишет такую ошибку
Ошибка при вызове метода контекста (Первая)
Ф1.Первая();
по причине:
Перед выполнением операции нужно открыть базу
Цикл следующий
Ф1 = Новый xBase("c:\1\");
Ф1.Первая(); //позиционируемся на первой записи
Пока Не Ф1.ВКонце() Цикл //пока не дошли до конца, крутим цикл
НомерЗаписи = Ф1.НомерЗаписи(); //получаем номер текущей записи
SBB = Ф1.SBB; //получаем значение поля
OSB = Ф1.OSB;
NVD = Ф1.NVD;
Ф1.Следующая(); //переходим на следующую запись
ОбработкаПрерыванияПользователя();
КонецЦикла;
создаешь таблицу значений, программно или как объект обработки (что проще), добавляешь все необходимые колонки в тз.
а программно (сложнее):
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИндексСортировки" , Новый ОписаниеТипов("Число"));
ТЗ.Колонки.Добавить("ИмяРаздела" , Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("ДатаКорр" , Новый ОписаниеТипов("Дата"));
ТЗ.Колонки.Добавить("БезусловноеУдаление" , Новый ОписаниеТипов("Булево"));
ТЗ.Колонки.Добавить("Номенклатура" , Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("ДанныеРаздела" , Новый ОписаниеТипов("Структура"));
// пример создания колонок "число" и "строка" с уточнением параметров:
ТЗ.Колонки.Добавить("ПроцентВыполнения" , Новый ОписаниеТипов("Число" , Новый КвалификаторыЧисла(18, 2)));
(10) alexhline, файл считать, считала, таблицу значений создала, не могу понять как данные из файла будут попадать в таблицу значений.
НовСтрока = тз.Добавить();
новСтрока.Наименование = DBF.NAME;
новСтрока.Код = DBF.CODE;
.
(12) alexhline, туплю.
//считаем данные из файлов
Ф1.ОткрытьФайл("c:\1\re11"+Формат(ДатаКон,"ДФ=ММ")+".dbf");
Если Ф1.Открыта()=0 Тогда //проверяем, удалось ли открыть файл
Сообщить("Не удалось открыть файл!");
КонецЕсли;
Ф1.Первая(); //позиционируемся на первой записи
Пока Ф1.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
НомерЗаписи = Ф1.НомерЗаписи(); //получаем номер текущей записи
SBB = Ф1.SBB; //получаем значение поля
OSB = Ф1.OSB;
NVD = Ф1.NVD;
Ф1.Следующая(); //переходим на следующую запись
КонецЦикла;
Ф2.ОткрытьФайл("c:\1\re16"+Формат(ДатаКон,"ДФ=ММ")+".dbf");
Если Ф2.Открыта()=0 Тогда //проверяем, удалось ли открыть файл
Сообщить("Не удалось открыть файл!");
КонецЕсли;
Ф2.Первая(); //позиционируемся на первой записи
Пока Ф2.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
НомерЗаписи = Ф2.НомерЗаписи(); //получаем номер текущей записи
SBB = Ф2.SBB; //получаем значение поля
OSB = Ф2.OSB;
NVD = Ф2.NVD;
Ф2.Следующая(); //переходим на следующую запись
КонецЦикла;
Ф3.ОткрытьФайл("c:\1\re20"+Формат(ДатаКон,"ДФ=ММ")+".dbf");
Если Ф3.Открыта()=0 Тогда //проверяем, удалось ли открыть файл
Сообщить("Не удалось открыть файл!");
КонецЕсли;
Ф3.Первая(); //позиционируемся на первой записи
Пока Ф3.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
НомерЗаписи = Ф3.НомерЗаписи(); //получаем номер текущей записи
SBB = Ф3.SBB; //получаем значение поля
OSB = Ф3.OSB;
NVD = Ф3.NVD;
Ф3.Следующая(); //переходим на следующую запись
КонецЦикла;
я считала данные из 3х файлов, а как цикл организовать, чтоб когда из 1 все попали в таблицу значений, только тогда начинали попадать из 2ого ф-ла?
см. (12)
Пока Ф1.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
НовСтрока = тз.Добавить();
НовСтрока.НомерЗаписи = Ф1.НомерЗаписи();
НовСтрока.SBB = Ф1.SBB; //получаем значение поля
НовСтрока.OSB = Ф1.OSB;
НовСтрока.NVD = Ф1.NVD;
Ф1.Следующая(); //переходим на следующую запись
КонецЦикла;
я считала данные из 3х файлов, а как цикл организовать, чтоб когда из 1 все попали в таблицу значений, только тогда начинали попадать из 2ого ф-ла? Так ведь код будет выполнятся последовательно. Сначала первый цикл (первый файл), потом второй и т.д.
Однако, ошибки не выскакивают? Не видно добавления в таблицу. Для чего Ф1.НомерЗаписи() ? И т.д.
Пока Ф1.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
да также, как в п.п. 15 написано, последовательно считываем и сразу в этом же цикле записываем данные в таблицу (сначала из одного файла, в следующем цикле из другова)
Переменная Ф1 описана
Выдает ошибку:
Значение не является значением объектного типа (ОткрытьФайл)
Ф1.ОткрытьФайл("c:\1\re11"+Формат(ДатаКон,"ДФ=ММ")+".dbf");
Имя файла почему не указано.
Ф1 = Новый xBase("c:\1\"); .
что то вроде: Ф1 = Новый xBase("c:\MyFile.dbf");
(23) alexhline, понятно
просто имя файла меняется в зависимости от месяца, а вот такое не воспринимает
ИФ1 = "c:\1\re11"+Формат(ДатаКон,"ДФ=ММ")+".dbf";
Ф1 = Новый xBase(ИФ1);
И что значит не воспринимает, может наоборот всё хорошо и нет ошибок )))
(25) alexhline, не воспринимает, в смысле если я описываю имя файла таким образом, выдает ошибку что файл нужно открыть, он не открыт, а имя файла должно быть таким re1105.dbf если май, re1106.dbf если июнь и т.д.
а файл то существует. на самом деле, когда вы его пытаетесь открыть. попробуйте переименовать файл в file1.dbf и указать прямой путь, без всяких формул.
(27) alexhline, файл существует, при прямом обращении, без формул нормально принимает и обрабатывает, а вот с формулами нет :(
ИФ1 = "c:\1\re11"+Формат(ДатаКон,"ДФ=ММ")+".dbf";
сообщить(ИФ1);
Ф1 = Новый xBase(ИФ1);
Вполне рабочий вариант:
"c:\1\re11"+Формат(ТекущаяДата(),"ДФ=ММ")+".dbf" результат: "c:\1\re1107.dbf"
может дата передаётся неверно.
для каждого ТекСрока из ТЗ Цикл
ФДБ.Добавить(); (помоему эта функция добавляет сроку в ДБФ)
ФДБ.Реквизит1 = ТекСтрока.Реквизит1;
.
(35) alexhline,
пустой файл создает, а данные не добавляет сделала так:
ДБФ = Новый xBase("C:\1\reestr.dbf");
ДБФ.Поля.Добавить("SBB","C",25,0);
ДБФ.Поля.Добавить("OSB","C",25,0);
ДБФ.Поля.Добавить("NVD","C",4,0);
ДБФ.СоздатьФайл(ИмяФайла+".dbf");
ДБФ.Кодировка = КодировкаXBase.OEM;
// добавим записи в новый файл
Для Каждого НовСтрока из ТЗ Цикл
ДБФ.Добавить(); //(помоему эта функция добавляет сроку в ДБФ)
ДБФ.SBB = НовСтрока.SBB;
ДБФ.OSB = НовСтрока.OSB;
ДБФ.NVD = НовСтрока.NVD;
КонецЦикла;
Репутация: нет
Всего: нет
Нужно из файла .dbf перекинуть данные о сотрудниках в 1С-ий справочник Сотрудники. Обработка почти дописана, а проверить не могу - сам файл не открывается.
1С выдает ошибку "Формат файла отличен от .DBF!"
Хотя он имеет точно DBF. Что делать, не знаю. Может кто-нибудь еще что посоветует?
Репутация: нет
Всего: нет
попробуй открыть файл в экселе или втащить туда через "импорт внешних данных" (ODBC) и сохранить в формате dBaseIII, правда, может проще обработку написать для импорта из экселя.
Репутация: 15
Всего: 24
Цитата(pharaone @ 21.2.2007, 11:13 ) |
Хотя он имеет точно DBF. Что делать, не знаю. Может кто-нибудь еще что посоветует? |
Непонял, ты пытаешься открыть средствами 1С, dbf файл написаный другой программой? Ясен фиг не сработает, если его структура хотябы на капельку различны.
Если есть возможность средствами 1С прочитать структуру файла, то можешь пользоваться, если нет, то с помощью той программы которой был создан файл, или которая моет прочитать его, выгружай данные в отдельные файл, например в текстовый, а потом средствами 1С, пиши обработку по загруки.
Репутация: нет
Всего: нет
Запрещается!
Пробуйте искать сами или обращайтесь в приват к участникам форума.
Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.
Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п. )
2. Давать ссылки на взломанные продукты
- Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
- Название темы должно отражать её суть
- Действия модераторов можно обсудить здесь
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема » |
[ Время генерации скрипта: 0.0925 ] [ Использовано запросов: 20 ] [ GZIP включён ]
Формат DBF применяется к текстовым и числовым файлам Системы Управления Базой Данных (СУБД). В стать.
Формат DBF применяется к текстовым и числовым файлам Системы Управления Базой Данных (СУБД). В статье рассмотрим особенности формата и чем открыть DBF файл.
Общее описание формата DBF
DBF расшифровывается как DataBase File. Файлы DBF первоначально использовались в dBase II вплоть до dBase Version IV.
Внутри DBF-файл состоит из заголовка с порядковым номером формата и непосредственно информации в виде таблицы установленного размера.
История возникновения
В 1978 году Уэйн Рэтлифф запустил проект формата для СУБД Vulcan. В следующем году программа Вулкан в составе с первой сборкой формата DBF поступила в продажу.
Затем в 1980 году Вулкан получил другое название – dBase II. В программе стала применяться вторая ревизия формата. Право продажи получила фирма Ashton−Tate.
Далее последовали сборки dBase III и dBase III+, использовавшие третью версию DBF. Программы оказались несовместимы по размеру.
Последний (седьмой) вариант формата появился вместе с dBase 7 for Windows.
Как и чем открыть файл DBF расширения
Мы подготовили список инструментов, чем открыть DBF в программе Excel или просмотреть онлайн.
Как открыть формат DBF в Excel
Начнем с электронных таблиц Excel. Программа входит в офисный пакет Microsoft и в ней присутствует функция чтения формата DBF.
Если на компьютере не установлен пакет Office, то скачайте дистрибутив с сайта Microsoft и установите нужные программы.
Чтобы открыть файл DBF в таблице Excel:
- нажмите на документ правой кнопкой мыши, чтобы вызвать контекстное меню;
- наведите курсор мыши на «Открыть» с помощью и переходите в пункт Выбрать программу;
- выберите Microsoft Office Excel, нажмите «Ок»;
- нужный файл откроется в виде таблицы Excel.
Открываем расширение DBF онлайн
Открывается файл формата DBF и на веб-сайте Jobtools. Правда, без редактирования.
Чтобы попасть на страницу просмотрщика:
Файл отобразится в окне браузера.
Интерфейс простой, нет опций кроме просмотра и постраничной прокрутки.
Чтобы открыть другой файл, нажмите кнопку «Reset» и повторите загрузку.
Чем открыть DBF на компьютере
Кроме стандартного Офиса открываются и правятся файлы DBF через сторонние программы.
Приложение DBF Commander предоставляет распространенные операции с файлами DBF: просмотр, редактура и распечатка файлов. Поддерживается экспорт в форматы CSV, XML, HTML и Excel. Файл кодируется и декодируется алгоритмом AES-256 (Rijndael). Записи удаляются и восстанавливаются, доступна сборка таблицы.
Какие могут быть проблемы с DBF файлом
Случается, что при попытке открыть файл с расширением DBF программа выбивает ошибку File not found (Файл не найден).
В этом случае откройте файл в другой программе. Подойдет Advantage Data Base. Создайте таблицу, импортируйте исходный файл и поменяйте компоненты.
Другой выход – конвертируйте в текстовый формат doc, docx или exl и откройте в офисной программе.
Следующий тип ошибки – file or table does not exist. Это значит, что файл оказался в папке с временной копией. Откройте папку и задайте значение TSession. для переменной Session.PrivateDir.
Если программа выбивает ошибку Table Level Changed,значит,несовместимы компоненты. Установите компоненты TTable. Проверьте, правильно ли связаны файл DBF и хранилище pft.
Если не открывается файл при подключении к базе, откройте соединение и задайте новое имя OleDbCommand cmd = new OleDbCommand ("SELECT * FROM Employees") с расширением DBF.
Читайте также: