Имя: Пароль:
1C
 
Как исправить ошибку несовпадения типа при загрузке данных из Excel?
0 Vika_22
 
21.10.10
13:36
Подскажите, пожалуйста, как можно решить следующую проблему
Гружу номенклатуру в документ, “взятую ” из Excel.
Сделала функцию получения значения из Excel:
Функция ПолучитьЗначение(Excel,у,х)
   Cell=Excel.Cells(у, х);
   Попытка
       Возврат Cell.Value;
   Исключение
       Возврат "ошибка";
   КонецПопытки;    
КонецФункции

Пытаюсь получить значение:
ШтрихКодExc        = СокрЛП(Строка(ПолучитьЗначение(Excel,НомСтр,1)));
Пишет «Несовпадение типов»
В самом Excel в этой ячейке написано «#Н/Д» - тип число.
1 andrewks
 
21.10.10
13:46
а если просто: СокрЛП(ПолучитьЗначение(Excel,НомСтр,1))?
2 1C-Nick
 
21.10.10
13:51
ИМХО нужно убрать все НД
3 Жан Пердежон
 
21.10.10
14:16
(0) почитай что такое #Н/Д в экселе и реши, что ты хочешь получить в 1С
4 myk0lka
 
21.10.10
14:25
Давно как то тянул данные толи из ёкселя, толи из скуля и тоже определённый тип данных (числовой) не хотел в строку конвертиться. Посоветовали сделать так:
создать процедурку на VB:
ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");// Процедура обработки значения поля запроса
ScrptCtrl.Language="vbscript";                           // приволит значение к строковому типу
ScrptCtrl.AddCode("                                      
|Function GetStr(field)                                  
|    GetStr = CStr(field.Value)                          
|End Function
|Function GetDate(field)                                  
|    GetDate = CStr(CDate(field.Value))                          
|End Function
|");

И получать данные с её помощью:
Рез=ScrptCtrl.Modules("Global").CodeObject.GetStr(RS.Fields(Сч));
Помогло.
5 Злопчинский
 
21.10.10
14:27
(0) Сначала проверяем Cell.Text на "набор" бяк - Н/Д, ЗНАЧ, С СЫЛКА и прочая.. и только потом кушаем Value
6 1C-Nick
 
22.10.10
10:07
(5) а как проверять?
7 FN
 
22.10.10
10:21
(6)
спОшибки=СоздатьОбъект("СписокЗначений");
           спОшибки.ДобавитьЗначение("#ПУСТО!");
           спОшибки.ДобавитьЗначение("#ДЕЛ/0!");
           спОшибки.ДобавитьЗначение("#ЗНАЧ!");
           спОшибки.ДобавитьЗначение("#ССЫЛКА!");
           спОшибки.ДобавитьЗначение("#ИМЯ?");
           спОшибки.ДобавитьЗначение("#ЧИСЛО!");
           спОшибки.ДобавитьЗначение("#Н/Д");
           //Для англ. версии
           спОшибки.ДобавитьЗначение("#NULL!");
           спОшибки.ДобавитьЗначение("#DIV/0!");
           спОшибки.ДобавитьЗначение("#VALUE!");
           спОшибки.ДобавитьЗначение("#REF!");
           спОшибки.ДобавитьЗначение("#NAME?");
           спОшибки.ДобавитьЗначение("#NUM!");
           спОшибки.ДобавитьЗначение("#N/A");

...
потом
Если спОшибки.НайтиЗначение(СокрЛП(ЗагружаемаяОбласть.Cells(х,у).Text))<>0 Тогда
                       ТЗ.УстановитьЗначение(х,у,ЗагружаемаяОбласть.Cells(х,у).Text);
//ТУТ можно сообщить вставить
                       Продолжить;
                   КонецЕсли;

примерно так
8 1C-Nick
 
22.10.10
10:48
(7) хм, оказывается без хитростей, спс
9 Vika_22
 
25.10.10
10:39
(8) согласна, без хитростей никак, но в моем варианте было проще попросить заказчиков избегать этих самых н\д, тем более что количество строк не так уж и велико.=)