Версия для печати темы (https://pro1c.org.ua/index.php?s=10ff7d1f8087e8df47b1782639c3ddbc&showtopic=730)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Работа в программе с внешним DBF файлом

Автор: хакерок 29.07.09, 11:07

Если хто слышал есть такая фирма Intercars
База данных автозапчастей этой фирмы составляет 723660 записей (не вникая в дополнительные данные)
Есть dbf файл цен (kod name price)

Задача зделать форму в 1С которой можно было вести поиск
по полю kod в таблице

Кто что делал подобное ?

Автор: logist 29.07.09, 12:25

А почему для этого нужно использовать именно 1С 7.7, а не что нибудь другое? FoxPro, MS Excel например smile.gif

Автор: zetovich 29.07.09, 12:27

смотря что вы хотите потом с этим все делать...
1с может на таком обьемы выдохнутся......а может и нет.
вообщем чего хотит потом то?

Автор: хакерок 29.07.09, 12:36

Цитата(zetovich @ 29.07.09, 14:27) *
смотря что вы хотите потом с этим все делать...
1с может на таком обьемы выдохнутся......а может и нет.
вообщем чего хотит потом то?

Я в 1С набросал систему типа Стол Заказов сделал втягивание заказов клиентов из вне
тепер стоит вопрос совподения кодов ... Если код не совпадает на символ или пробел запчасть не приедет. Это первое зачем это нужно а второе менеджер с бумажки забивает заказ вбивает код если программа находит его в dbf файле показывает название и цену и только после этого разрешает внести в табличную часть.

Автор: хакерок 29.07.09, 12:41

Цитата(logist @ 29.07.09, 14:25) *
А почему для этого нужно использовать именно 1С 7.7, а не что нибудь другое? FoxPro, MS Excel например smile.gif

У меня уже всё это работает. Взялся что отдельные удобные программы по учёту заказов , обработки заказов , ведения взаиморасчётов обединить в одну конфу 1С ... в 1С удобств для программиста много а для позльзователя пока вобще не сделал.

Автор: Кузьмич 29.07.09, 13:31

Цитата
Кто что делал подобное ?

Не понял: ты спрашиваешь или хвастаешь?
Здесь многие делали то, что тебе даже не приходило в голову.

Автор: sarius 29.07.09, 13:55

icon_beer17.gif верно

Автор: zetovich 29.07.09, 13:56

ужос.....вот это пропусканая способность мысли.
так что надо то? хрен уследишь за автором.

Автор: Valerka 29.07.09, 13:59

Пофлудить, я думаю smile.gif

Автор: sarius 29.07.09, 14:00

мессаги в нуль?

Автор: хакерок 29.07.09, 14:02

Цитата(Кузьмич @ 29.07.09, 15:31) *
Не понял: ты спрашиваешь или хвастаешь?
Здесь многие делали то, что тебе даже не приходило в голову.


Да причём здесь хвастаюсь ... интерисуюсь может ктото чтото подобное уже делал

Я вот сделал процедуру она работате только с файлами длина имени файла которого не больше
8 символов. В имени файле Intercars.dbf 9 символов


Машина ругаеться.
ДБФ.ОткрытьФайл(ПутьДБ);
{Документ.Заказ.Форма.Модуль(7)}: Длина имени файла превысила 8 символов!



Файл bmw.dbf открывает

Вот текст процедуры.

Процедура Открыть_dbf()
ДБФ = СоздатьОбъект("XBase");
ИмяФайла = "";
ИмяПути = "";
ФС.ВыбратьФайл(0, ИмяФайла, ИмяПути, , "*.*", , );
ПутьДБ = ИмяПути + ИмяФайла;
ДБФ.ОткрытьФайл(ПутьДБ);
Если ДБФ.Открыта() = 1 Тогда
Предупреждение("База открыта", 2);
ДБФ.Первая();
КодПос = ДБФ.Kod; // Подразумевается, что поле FIO имеется в открытой БД
Предупреждение(КодПос, 5);
Иначе
Предупреждение("НЕ смогли открыть Базу!", 2);
КонецЕсли;

КонецПроцедуры

Автор: zetovich 29.07.09, 14:07

низзя более 8 символов.

Автор: Fynjy 29.07.09, 14:08

Intercars.dbf заменить на Interca~.dbf эх маладёжь ...

Автор: Valerka 29.07.09, 14:13

Мне просто интересно, что помешало аффтару написать вопрос в первом посте, а не флудить?

Автор: хакерок 29.07.09, 14:13

Цитата(Fynjy @ 29.07.09, 16:08) *
Intercars.dbf заменить на Interca~.dbf эх маладёжь ...

Так таких файлов 50 штук и их название менять нельзя потому что они привязаны к другим программам
.
Кроме того есть IntercarsU.dbf в украие IntercarsP.dbf в Poland

Автор: Fynjy 29.07.09, 14:15

И что? Не умеем работать со строками? Не умеем парсить?

Автор: хакерок 29.07.09, 14:22

Цитата(Fynjy @ 29.07.09, 16:15) *
И что? Не умеем работать со строками? Не умеем парсить?

Не хотелось бы обрезать имя.

Может есть сисемные настройки снимающие органичение?
Где можно поковырять объект XBASE?

Можно б было б и по другому решить если б фалы были не по 500 Мб.

Автор: sarius 29.07.09, 14:35

Копай Оли, Сомы....
Почитай про 1С++

Автор: хакерок 29.07.09, 15:00

Цитата(Fynjy @ 29.07.09, 16:15) *
И что? Не умеем работать со строками? Не умеем парсить?

Если чесно со строками разобраться могу а вот парсить не приходилось...
это тупо Intercars.dbf переименовываеться в Interca~.dbf мне такое не подходит

Автор: хакерок 29.07.09, 16:54

Цитата(zetovich @ 29.07.09, 16:07) *
низзя более 8 символов.

Как поступать :~(

Автор: Batchir 29.07.09, 17:24

Пробуй копировать во временный каталог и переименовывать, по окончанию работы с файлом - удаляй, но если файл конечно большой, то это не удобная по времени процедура (смотря какая машинка обрабатывает)

Автор: Fynjy 29.07.09, 20:30

Хакерок - я где то написал, что файл нужно переименовывать? Передай имя файла таким образом ...

Автор: Fynjy 29.07.09, 20:45

Создаем на диске c: - ya_superlamer.dbf
Далее делаем обработку ...
Запускаем ... И понимаем - нужно плотно учить матчасть ...
//*******************************************
Процедура Сформировать()
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл("C:\ya_sup~1.dbf");
Если ДБФ.Открыта() = 1 Тогда
Сообщить("Хакерок - Ламер");
Иначе
Сообщить("Fynjy - ламер");
КонецЕсли;
КонецПроцедуры

PS: DOS рулит smile.gif

Автор: sarius 30.07.09, 8:53

Курите АДО, товарищи...
http://pro1c.org.ua/redirect.php?http://www.kb.mista.ru/article.php?id=309

Все уже украдено написано до нас

Автор: sarius 30.07.09, 8:53

В принципе, могу помочь - стучи в аську...

Автор: хакерок 30.07.09, 9:37

Цитата(Fynjy @ 29.07.09, 22:45) *
Создаем на диске c: - ya_superlamer.dbf
Далее делаем обработку ...
Запускаем ... И понимаем - нужно плотно учить матчасть ...
//*******************************************
Процедура Сформировать()
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл("C:\ya_sup~1.dbf");
Если ДБФ.Открыта() = 1 Тогда
Сообщить("Хакерок - Ламер");
Иначе
Сообщить("Fynjy - ламер");
КонецЕсли;
КонецПроцедуры

PS: DOS рулит smile.gif


Так. У меня есть файл С:\Sprice\Intercars.dbf размером 800 Мб

Его нельзя переименовывать
потому что он используеться ещё 3 программами.



Процедура Сформировать()
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл("С:\Sprice\Interc~1.dbf ");
Если ДБФ.Открыта() = 1 Тогда
Сообщить("Хакерок - Ламер");
Иначе
Сообщить("Fynjy - ламер");
КонецЕсли;
КонецПроцедуры

Не обежайся но система ответила Fynjy - ламер


Думаю то что файл С:\Sprice\Intercars.dbf а не С:\Intercars.dbf не важно.

Автор: zetovich 30.07.09, 9:37

во млин развили......
мысль возникла..
ну лана...упсть хоть 30 буковок...
но перед работе скопировать куда нить в ТЕМР....переименовать....обрабатывать таблицу/выбирать/загружать/радоваться.

Автор: sarius 30.07.09, 9:46

800 метров копировать? апстену...

Автор: zetovich 30.07.09, 9:48

а чо реально сток получается7
ну тогда переименовали...поработали...вернули как было.

Автор: sarius 30.07.09, 9:55

не забываем, что с этим файлом еще прога одна работает, возможно - в то же время...
здесь не нужно использовать XBase - ничего хорошего из этого не выйдет

Автор: zetovich 30.07.09, 10:01

ну то ваще были мысли вслух....
з.ы. ничего хорошего не будет с такими объемами выгрузки работать.

Автор: sarius 30.07.09, 10:03

вот потому и не нужно даже искать способа решить вопрос ограничения 8-3, а нужно копать в сторону правильного запроса к таблице.

Автор: хакерок 30.07.09, 10:06

Цитата(Fynjy @ 29.07.09, 22:45) *
Создаем на диске c: - ya_superlamer.dbf
Далее делаем обработку ...
Запускаем ... И понимаем - нужно плотно учить матчасть ...
//*******************************************
Процедура Сформировать()
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл("C:\ya_sup~1.dbf");
Если ДБФ.Открыта() = 1 Тогда
Сообщить("Хакерок - Ламер");
Иначе
Сообщить("Fynjy - ламер");
КонецЕсли;
КонецПроцедуры

PS: DOS рулит smile.gif


Переписал в С:\Intercars.dbf

Заработала

Система написала Хакерок - Ламер

Несовсем удобно копии файлов в двух местах иметь но тем немение какой ни какой выход.



Процедура Сформировать()
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл("С:\Interc~1.dbf ");
Если ДБФ.Открыта() = 1 Тогда
Сообщить("Хакерок - Ламер");
Иначе
Сообщить("Fynjy - ламер");
КонецЕсли;
КонецПроцедуры

Автор: хакерок 30.07.09, 10:07

Цитата(sarius @ 30.07.09, 10:53) http://pro1c.org.ua/index.php?act=findpost&pid=3099

Все уже украдено написано до нас


Очень часто использую ADO спасибо за ссылку.

Автор: sarius 30.07.09, 10:11

ну раз часто используешь - то разберешься что к чему
вывод - большие файлы и цэ-1 лучше дружить через тетб петю - или ВК или адо/ком/оля....... ни в коем случае не встроенные механизмы
тогда обработки ваши будут ламерами называть не вас, а недругов ваших =)

Автор: хакерок 30.07.09, 10:19

Цитата(sarius @ 30.07.09, 12:11) *
ну раз часто используешь - то разберешься что к чему
вывод - большие файлы и цэ-1 лучше дружить через тетб петю - или ВК или адо/ком/оля....... ни в коем случае не встроенные механизмы
тогда обработки ваши будут ламерами называть не вас, а недругов ваших =)


А если Обрашаться через ADO к таблице базы Данных Access оно быстро открывает таблицу или
с задержками?

Автор: sarius 30.07.09, 10:22

А хз
попробуйте

Автор: хакерок 30.07.09, 10:22

Цитата(Fynjy @ 29.07.09, 22:45) *
ДБФ.ОткрытьФайл("C:\ya_sup~1.dbf");
PS: DOS рулит smile.gif


Спасибо дружище помог ...Реально можно тему прикрывать

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua