|
|
|
Как исправить ошибку несовпадения типа при загрузке данных из 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) согласна, без хитростей никак, но в моем варианте было проще попросить заказчиков избегать этих самых н\д, тем более что количество строк не так уж и велико.=)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |