Имя: Пароль:
1C
1С v8
помогите разобратся с загрузкой из DBF
0 rchervak
 
13.06.12
15:54
Всем Здрасте!!!

Подскажите пожалуйста, есть у меня dbf файл с колонкой DATA.

в колонке формат ячейки "Общий" внутри находится значение "26.02.2012" Вот только еще зеленый треугольник и если на него навести то увидиш сл. текст - "Текстовая дата с 2-значним годом"

Та вот при загрузке файла в 1с

ДБФ = Новый XBase;
   
ДБФ.Кодировка = КодировкаXBase.OEM;
ДБФ.ОткрытьФайл(ПутьКФайлуТоваров,,Ложь);

Он его читает , вот только

ДБФ.DATA = 01.01.0001.00.00.00

реально ли заставить 1С правильно прочитать файл?

PS:предлагать переделать формат файла не предлагать, так и делаем, только файл реально оч. большой и таких будет дофени
1 acsent
 
13.06.12
15:56
ну у тебя текст, а не дата, прелбразовывай
2 rchervak
 
13.06.12
15:58
(1) я бы с удовольствием, вот только как преобразовать?
после ДБФ.ОткрытьФайл(ПутьКФайлуТоваров,,Ложь);

в табло ДБФ.DATA = 01.01.0001.00.00.00

после хоть запереобразовывайся, ничего не меняется.
3 rchervak
 
13.06.12
15:58
нужно заставить как то 1С преобразовать в нужный формат при открытии... вот тока как?
4 mikecool
 
13.06.12
15:59
Дата() тебе в помощь
5 Irek-kazan
 
13.06.12
16:00
формат ячейки "Общий" а это случайно не про эксель речь?
6 Hande hoch
 
13.06.12
16:01
да он открыл dbf экселем
7 rchervak
 
13.06.12
16:01
(5)не, дбф.  возможно из экселя сохранили в дбф
8 rchervak
 
13.06.12
16:02
(4) говорю же не кактит. после открытия его уже никак не исправиш
9 mikecool
 
13.06.12
16:04
(8) за 500р скажу как  )))
10 Mafoni
 
13.06.12
16:04
когда читаеш строчку из дбф - то строковое значение в поле дата - какое ? -  "26.02.2012" - ?
Если да то что тебе мешает преобразовать его в нормальную дату ? с помощью (4)!!!!!
11 shamannk
 
13.06.12
16:04
выложи файлик
12 Mafoni
 
13.06.12
16:04
демпингую - за 450 р скажу как ! :)
13 mikecool
 
13.06.12
16:05
не мешайте мне делать бизнес, я же не торгую семками )))
14 rchervak
 
13.06.12
16:06
(9) ПопытаемсяПолучитьДату = ДАТА(ДБФ.ПолучитьЗначениеПоля("DATA"));
результат - 01.01.0001.00.00.00
15 Reset
 
13.06.12
16:06
Первая()
16 Kreont
 
13.06.12
16:06
(15) наверное угадал :)
17 Mafoni
 
13.06.12
16:07
(0) - и никгда - не открывай DBF - екселем - это же моветон !!!
18 Mafoni
 
13.06.12
16:08
(0) - Весь код покажи
19 rchervak
 
13.06.12
16:09
(15) - а что ПЕРВАЯ()?? она равна ИСТИНА
20 hhhh
 
13.06.12
16:09
(19) на первую запись перешел? Или хотя бы на вторую?
21 Reset
 
13.06.12
16:10
(19) сначала первая, потом (14)
22 Mafoni
 
13.06.12
16:10
(19) - блин покажи весь код как читаеш ДБФ файл или тут люди должны угадывать твой код ?
23 Reset
 
13.06.12
16:10
Потом, извиняюсь за капитанство, Следующая
24 rchervak
 
13.06.12
16:12
ну вот в кратце:

   ДБФ = Новый XBase;
   
   ДБФ.Кодировка = КодировкаXBase.OEM;
Попытка
       ДБФ.ОткрытьФайл(ПутьКФайлуТоваров,,Ложь);

       Исключение
       Сообщить("Ошибка открытия файла");
   Возврат;
КонецПопытки;

Пока Истина Цикл        
       ОбработкаПрерыванияПользователя();
       НоваяСтрока = Таблица.Добавить();
       НоваяСтрока.ДАТА =ДБФ.DATA;
           Если Не ДБФ.Следующая() Тогда
           Прервать
       КонецЕсли;    
   КонецЦикла;
25 Mafoni
 
13.06.12
16:13
(0) - кстати можеш еще версию дбф сказать ?
26 rchervak
 
13.06.12
16:14
(25) а где?
27 rchervak
 
13.06.12
16:15
где ее посмотреть?
28 rchervak
 
13.06.12
16:15
в свойствах файла нету.
29 Mafoni
 
13.06.12
16:16
ээээ батенька да вы гурман

xB.ОткрытьФайл("c:\test.dbf", "c:\test.cdx");
// Максимальное значение поля COST
xB.Первая();
МаксСтоимость = 0 ;
Пока Не xB.ВКонце() Цикл
   Если xB.COST > МаксСтоимость Тогда
       МаксСтоимость = xB.COST;
   КонецЕсли;
   xB.Следующая();
КонецЦикла;
30 Mafoni
 
13.06.12
16:17
Если что - это справка из Синтаксис-Помошника.
31 palpetrovich
 
13.06.12
16:17
(24) мда уж :)
32 Reset
 
13.06.12
16:17
(24)
   ДБФ = Новый XBase;
   
   ДБФ.Кодировка = КодировкаXBase.OEM;
Попытка
       ДБФ.ОткрытьФайл(ПутьКФайлуТоваров,,Ложь);

       Исключение
       Сообщить("Ошибка открытия файла");
   Возврат;
КонецПопытки;
ДБФ.Первая(); /// <-----
Пока Не ДБВ.ВКонце() Цикл
       ОбработкаПрерыванияПользователя();
       НоваяСтрока = Таблица.Добавить();
       НоваяСтрока.ДАТА =Дата(ДБФ.DATA+" 00:00:00"); // <-----
       ДБФ.Следующая(); // <-----
КонецЦикла;
33 Reset
 
13.06.12
16:19
Возможно, потребуется СокрЛП(ДБФ.DATA)
34 Mafoni
 
13.06.12
16:21
(0) - как успехи ?
35 rchervak
 
13.06.12
16:27
что то никак.. {Форма.Форма.Форма(157)}: Преобразование значения к типу Дата не может быть выполнено
НоваяСтрока.Дата   = Дата(СокрЛП(ДБФ.DATA)+" 00:00:00"); //
36 Reset
 
13.06.12
16:28
(35) В ДБФ.DATA что?
37 rchervak
 
13.06.12
16:30
самое интересное что формат там уже и так "ДАТА" а мы его пытаемся преобразовать
38 Reset
 
13.06.12
16:30
Выполни
Сообщить(ДБФ.DATA);
Сообщить(ТипЗнч(ДБФ.DATA));
39 palpetrovich
 
13.06.12
16:30
(36) смотри в отладчике
40 Reset
 
13.06.12
16:30
(37) Это не мы, это ты
Нам оно неизвестно, что у тебя там
41 rchervak
 
13.06.12
16:30
(36) ДБФ.DATA = 01.01.0001.00.00.00 тип ДАТА
42 palpetrovich
 
13.06.12
16:30
(37) не мы, а вы ;)
43 Kreont
 
13.06.12
16:30
Сделай в таблице сразу колонку с типом дата, и прямо пиши из дбф без форматирований всяких
44 Reset
 
13.06.12
16:31
Просто присваивай тогда
45 mikecool
 
13.06.12
16:31
прикольная тема )
46 Kreont
 
13.06.12
16:31
(41) что опять? :)
47 palpetrovich
 
13.06.12
16:31
(41) а код из (32) или свой?
48 rchervak
 
13.06.12
16:32
из 32
49 Mafoni
 
13.06.12
16:33
(45) - не то слово.
50 rchervak
 
13.06.12
16:33
(38)

01.01.0001 0:00:00
Дата
51 shamannk
 
13.06.12
16:36
выложи файлиГГГГГГГГГГГГГ
52 Kreont
 
13.06.12
16:37
Скопируй себе из
http://commerce.at.ua/publ/1-1-0-17
одну только ф-ю, делает полн.импорт дбф в ТЗ, и колонки под типы сама сделает нужные.
Функция ДБФвТаблицюЗначень(ПовнийШляхЗІмям,Кодування)

Странно что в книге знаний нету примера такой простой задачи, переведу ф-ю на рус.язык и добавлю :)
53 rchervak
 
13.06.12
16:37
могу скрин пойдет?
54 palpetrovich
 
13.06.12
16:39
(53) файл жалко? что скрин даст-то?
55 shamannk
 
13.06.12
16:39
(53) Скрин чаго? файлика в папке? думаю со зрением у тебя в порядке и ты действительно видеш свою дату. нужен файлик
56 rchervak
 
13.06.12
16:42
ща. попрубую. выложить
57 rchervak
 
13.06.12
16:44
тут куда обычно выкладывают? на файлообменник пойдет?
58 rchervak
 
13.06.12
16:46
59 0_Serg_0
 
13.06.12
16:52
(32) правильно

НО если в ДБФ тип Дата - то не надо преобразховывать
"НоваяСтрока.ДАТА =Дата(ДБФ.DATA+" 00:00:00"); "
60 rchervak
 
13.06.12
16:56
(59) т.е.
НоваяСтрока.ДАТА =ДБФ.DATA+" 00:00:00"; ??

или

НоваяСтрока.ДАТА =ДБФ.DATA; ???

ни в том ни в том случай в колонку не загружается дата.
61 palpetrovich
 
13.06.12
16:57
(58) действительно есть трабл. поле DATA - типа дата, причем встречаюся даты за 2016, 2018 года ...что-то тут нечисто :)
62 Reset
 
13.06.12
16:59
Файл странный, да
63 rchervak
 
13.06.12
17:01
ну наверное прийдется сначала с файлом работатть, изменять на нужный формат, а потом уже загружать.. жаль..
64 palpetrovich
 
13.06.12
17:03
(63) в общем не парься, все равно даты левые :)
65 rchervak
 
13.06.12
17:03
все равно спасибо всем кто откликнулся..
66 rchervak
 
13.06.12
17:04
(64) почему левые? я открываю экселем - нормальные вполне.
67 shamannk
 
13.06.12
17:05
v8: Загрузить дату из DBF тут написанно как
68 palpetrovich
 
13.06.12
17:08
(66) я смотрю WinDBFview и вижу даты с годами 2024, 2030 и т.д.
69 Mafoni
 
13.06.12
17:12
Каталог = "D:\tmp\";// каталог базы
   DBConn = Новый COMОбъект("ADODB.Connection");
   ADOCommand = Новый COMОбъект("ADODB.Command");
   // подключаемся к каталогу
   DBConn.Open("Provider=VFPOLEDB.1;Data Source=" + Каталог+ ";");
   // обявляем публичную переменную
   ADOCommand.ActiveConnection = DBConn;
   ADOCommand.CommandText = "EXECSCRIPT('PUBLIC KLN_RPC')";
   ADOCommand.Execute();
   ADOCommand.CommandText = "EXECSCRIPT('KLN_RPC=10')";
   ADOCommand.Execute();
   // собственно само подключение к файлу и выборка
   DBFBase = DBConn.Execute("Select * from [HARDWARE.DBF]");
   Count = 0;
   Пока НЕ DBFBase.EOF() Цикл
       Count = Count +1;
       Сообщить(Count);
       Для Каждого Поле из DBFBase.Fields Цикл
           Сообщить(Поле.Name + " - " + DBFBase.Fields(Поле.Name).Value);
       КонецЦикла;
       DBFBase.MoveNext();
   
   КонецЦикла;
70 palpetrovich
 
13.06.12
17:13
+(68) а DBFNavigator.exe показывает пустые значения в поле ДАТА
71 mikecool
 
13.06.12
17:14
вы все еще кипятите? (с) )))
72 shamannk
 
13.06.12
17:15
(68) Боязнь дат больше текущей?
73 rchervak
 
13.06.12
17:16
(68)(69) - ответ как мне кажется в (67) - действительно этот файл выгружают из 1с 7.7 -  буду связыватся с програмистом - пущай исправляет выгрузку
74 palpetrovich
 
13.06.12
17:18
(72)  не то что-бы, просто странноое поведение (68) и (70)
75 rchervak
 
13.06.12
17:20
(45)а тема действительно получилсь прикольной...
76 Mafoni
 
13.06.12
17:23
(75) - при выгрузке данных в дбф в поле дата - было не верно записано значение - очень на это похоже.
77 Mafoni
 
13.06.12
17:27
(75) - если с помощью любого редактора подправить дату во всех строках то код в (69) отрабатывает на ура.
78 ukolabrother
 
13.06.12
17:37
Каждая тема чтения из дбф - перл!
79 Mafoni
 
13.06.12
18:14
(78) - да тут дбф явно кривой :)