Имя: Пароль:
1C
1С v8
Проблемка с доступом к Excel через ADO
0 Omskdizel
 
11.08.11
11:53
Собственно проблемка:
Файлик Экселя с около 15к строк (это прайс поставщика, задача прикрутить остатки из него к заказу поставщику)
База УТ11, которая 7.2, но это не принципиально.
Имеется следующий код:

MyCon = Новый COMОбъект ("ADODB.Connection");
MyCon.Open("Driver={Microsoft Excel Driver (*.xls)};" +
  "DriverId=790;" +
  "Dbq=d:\1.xls;" +
  "DefaultDir=d:\");
MyRst = Новый COMОбъект ("ADODB.Recordset");
MyStr = "select * from [Sklad$]";
MyRst.Open (MyStr, MyCon, 2, 3);//adOpenDynamic, adLockOptimistic
MyRst.MoveNext();
Пока НЕ MyRst.EOF() Цикл
   НН=Формат((MyRst.Fields(КолонкаНН).Value),"ЧГ=0");
   Если (НН<>"0") И (НН<>"") Тогда
Стр=ТЗ.Добавить();
Стр.ГруппаОборудования=СокрЛП(Строка(MyRst.Fields(КолонкаГруппаОборудования).Value));
Стр.ВидОборудования=СокрЛП(Строка(MyRst.Fields(КолонкаВидОборудования).Value));
Стр.Производитель=СокрЛП(Строка(MyRst.Fields(КолонкаПроизводитель).Value));
Стр.НН=НН;
Стр.ПартНомер=СокрЛП(Строка(MyRst.Fields(КолонкаПартНомер).Value));
Стр.НаименованиеОборудования=СокрЛП(Строка(MyRst.Fields(КолонкаНаименованиеОборудования).Value));
Стр.Цена=СокрЛП(Строка(MyRst.Fields(КолонкаЦена).Value));
Стр.ОстаткиОмск=СокрЛП(Строка(MyRst.Fields(КолонкаОстаткиОмск).Value));
Стр.ОстаткиНовосибирск=СокрЛП(Строка(MyRst.Fields(КолонкаОстаткиНовосибирск).Value));
Стр.ОстаткиЦО=СокрЛП(Строка(MyRst.Fields(КолонкаОстаткиЦО).Value));
КонецЕсли;
MyRst.MoveNext();    
КонецЦикла;
MyRst.Close();
MyCon.Close();

Файл читается, ошибки не выдаются, но...
Некоторые строки из файла передаются пустыми в 1С. Т.е. иду трассировкой по строкам, а они реально пустые передаются. Причем тут же смотрю это в Экселе - там все отображается как обычно. Пропусков строк просто нет. Может кто сталкивался с подобным?

Еще по дороге вопросик - есть у RecordSet какое-нибудь свойство, чтобы посмотреть, какую строку он обрабатывает в данный момент? Посмотрел на MSDN, все примерно подходящие по смыслу пробнул, но оне не показывают номер строки. Методов тож не обнаружил.

Заранее спасибо за помощь.
1 Omskdizel
 
11.08.11
11:54
Пардон, не въехал сходу как отформатировать текст кода, несколько плохо читабелен...
2 Omskdizel
 
11.08.11
12:23
Скопировал кусок файла отдельно, без всяких макросов, тупо текстом. Та же ерунда на именно тех же строках.
3 ado
 
11.08.11
12:34
>> Еще по дороге вопросик - есть у RecordSet какое-нибудь свойство, чтобы посмотреть, какую строку он обрабатывает в данный момент?

Нет. Насколько я знаю, RecordSet принципиально ничего не знает о таблице в целом, только о текущей записи.
4 Omskdizel
 
11.08.11
12:47
Похоже нашел в чем проблема, только как она с ADO связана я не понял. В некоторых ячейках в определенной колонке вместо количества в цифрах было слово Склад. Строки с этим значением не читались.

(3) Спасибо
5 Omskdizel
 
11.08.11
13:52
Мда, оно не читает все отличное от нуля или положительного значения в этих колонках. Теперь приходится идти огородом - получаем файл по электронке, прогоняем по нему скрипт, который удаляет неугодное, и только потом подсовываем 1Ске. Даже и не знаю теперь кому адресовать лестные отзывы...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший