Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> При попытке прочтения ячейки #Н/Д вываливается ошибка "Несовпадение типов" и виснет клиент          
l2d808 Подменю пользователя
сообщение 27.02.18, 11:01
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0

Добрый день, уважаумое сообщество.
1с77. Самописная.
При чтении из Эксель файла есть ячкйка с значением #Н/Д. При попытке прочтения данной ячейки 1с77 вываливает ошибку "Несовпадение типов." а затем клент виснит. помогает только сняте задачи в диспечере устройств.
Пробовал
Цена=Лист.Cells(НомерСтроки,НомерКолонки).Text;

также не помегает:
Попытка Исключение КонецПопытки;

Пдскажите пожалуйста, кто знает, как или прочитать эту ячейку или ее пропустить...


 ! 

Правила: 4, 5
 


Сообщение отредактировал Vofka - 27.02.18, 11:16


Signature
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...

Naghual Подменю пользователя
сообщение 27.02.18, 11:11
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Доброго дня.
У загальному:
Цена = Лист.Cells(НомерСтроки, НомерКолонки).Value

У складному:
Цена = Число(Строка(Лист.Cells(НомерСтроки,НомерКолонки).Value))


Signature
Я желаю всем Счастья!

l2d808 Подменю пользователя
сообщение 27.02.18, 11:33
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0

Naghual @ Сегодня, 11:11 * ,
Помилка: Несовпадение типов продовжує випадати. Які ще будуть у Вас ідеї?


Спробував:
спОшибки=СоздатьОбъект("СписокЗначений");
        спОшибки.ДобавитьЗначение("#ПУСТО!");

        спОшибки.ДобавитьЗначение("#ДЕЛ/0!");

        спОшибки.ДобавитьЗначение("#ЗНАЧ!");

        спОшибки.ДобавитьЗначение("#ССЫЛКА!");

        спОшибки.ДобавитьЗначение("#ИМЯ?");

        спОшибки.ДобавитьЗначение("#ЧИСЛО!");

        спОшибки.ДобавитьЗначение("#Н/Д");

        //Для англ. версии

        спОшибки.ДобавитьЗначение("#NULL!");

        спОшибки.ДобавитьЗначение("#DIV/0!");

        спОшибки.ДобавитьЗначение("#VALUE!");

        спОшибки.ДобавитьЗначение("#REF!");

        спОшибки.ДобавитьЗначение("#NAME?");

        спОшибки.ДобавитьЗначение("#NUM!");

        спОшибки.ДобавитьЗначение("#N/A");


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

Не ловиться...
Та сама помилка...


Signature
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...

Naghual Подменю пользователя
сообщение 27.02.18, 11:34
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Щось не можу повторити таку поведінку. Поділиться проблемною часткою Екселя для експеріментів.


Signature
Я желаю всем Счастья!

l2d808 Подменю пользователя
сообщение 27.02.18, 11:43
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0

сч=0;
                        НомерСтроки=1;
                        пока сч<40 цикл
                            //Сообщить(сч);
                            колонка=спр2.цена;
                            попытка
                                Значение = Лист.Cells(НомерСтроки, колонка).Value;
                                если ПустоеЗначение(Значение)=0 тогда
                                    Если (число(Значение)>0) и (СтрДлина(Значение)=СтрДлина(число(Значение))) Тогда
                                        спОшибки=СоздатьОбъект("СписокЗначений");
                                        спОшибки.ДобавитьЗначение("#ПУСТО!");
                                        
                                        спОшибки.ДобавитьЗначение("#ДЕЛ/0!");
                                        
                                        спОшибки.ДобавитьЗначение("#ЗНАЧ!");
                                        
                                        спОшибки.ДобавитьЗначение("#ССЫЛКА!");
                                        
                                        спОшибки.ДобавитьЗначение("#ИМЯ?");
                                        
                                        спОшибки.ДобавитьЗначение("#ЧИСЛО!");
                                        
                                        спОшибки.ДобавитьЗначение("#Н/Д");
                                        
                                        //Для англ. версии
                                        
                                        спОшибки.ДобавитьЗначение("#NULL!");
                                        
                                        спОшибки.ДобавитьЗначение("#DIV/0!");
                                        
                                        спОшибки.ДобавитьЗначение("#VALUE!");
                                        
                                        спОшибки.ДобавитьЗначение("#REF!");
                                        
                                        спОшибки.ДобавитьЗначение("#NAME?");
                                        
                                        спОшибки.ДобавитьЗначение("#NUM!");
                                        
                                        спОшибки.ДобавитьЗначение("#N/A");
                                        
                                        
                                        Если спОшибки.НайтиЗначение(СокрЛП(Лист.Cells(НомерСтроки,спр2.Цена).Text))<>0 Тогда
                                            Цена=Лист.Cells(НомерСтроки,спр2.Цена).Text;
                                        Иначе
                                            Цена=Лист.Cells(НомерСтроки,спр2.Цена).Text;
                                        КонецЕсли;
                                        
                                        сообщить("Проверка на ошбку: "+Цена);
                                        позиции=позиции+1;
                                        Сообщить(НомерСтроки);
                                        сч=0;
                                        Название=Строка(Лист.Cells(НомерСтроки,спр2.Наименование_по_прайсу).Value);//Название
                                        ПолноеНазвание=Название;
                                        Если (пустоеЗначение(спр2.Доп_Наим_Полн_Колонка)=0) Тогда
                                            ПолноеНазвание=ПолноеНазвание+"**"+Строка(Лист.Cells(НомерСтроки,спр2.Доп_Наим_Полн_Колонка).Value);//Дополнительное название к колонке рядом
                                        КонецЕсли;
                                        Если (пустоеЗначение(спр2.Доп_Наим_Полн_Колонка1)=0) Тогда
                                            ПолноеНазвание=ПолноеНазвание+"**"+Строка(Лист.Cells(НомерСтроки,спр2.Доп_Наим_Полн_Колонка1).Value);//Дополнительное название к колонке рядом
                                        КонецЕсли;
                                        Если (пустоеЗначение(спр2.Доп_Наим_колонка)=0) и (пустоеЗначение(спр2.Доп_Наим_Строка)=0) Тогда
                                            ПолноеНазвание=ПолноеНазвание+"**"+Строка(Лист.Cells(спр2.Доп_Наим_Строка,спр2.Доп_Наим_колонка).Value);//Дополнительное название в ячейке
                                        Иначе
                                            Если (пустоеЗначение(спр2.Доп_Наим_колонка)=0) или (пустоеЗначение(спр2.Доп_Наим_Строка)=0) Тогда
                                                Сообщить("Ошибка в координатах допонительного наименования в "+Значение+" на листе № "+НомерЛиста);
                                                Эксель.Quit();
                                                возврат;
                                            КонецЕсли;
                                        КонецЕсли;
                                        //сообщить(Название);
                                        Если пустоеЗначение(спр2.Код_по_прайсу)=0 Тогда
                                            код=Лист.Cells(НомерСтроки,спр2.Код_по_прайсу).Value;//Артикул
                                            //Сообщить(код);
                                        КонецЕсли;
                                        Если пустоеЗначение(спр2.ед_изм)=0 Тогда
                                            ед=Лист.Cells(НомерСтроки,спр2.ед_изм).Value;//Единицы измерения
                                            //сообщить(ед);
                                        КонецЕсли;
                                        ТЗ.НоваяСтрока();
                                        ТЗ.Артикул=код;
                                        ТЗ.Наименование=Название;
                                        ТЗ.ПолноеНаименование=ПолноеНазвание;
                                        Если ПустоеЗначение(спр2.Валюта)=0 Тогда
                                            ТЗ.Валютная_Цена=ОКР(Число(Цена),2);
                                            ТЗ.Валюта=спр2.Валюта;
                                            ТЗ.Цена="";
                                        Иначе
                                            ТЗ.Валютная_Цена="";
                                            ТЗ.Валюта=спр2.Валюта;
                                            ТЗ.Цена=окр(Число(Цена),2);
                                            ТЗ.Сайт=спр.Сайт;
                                            ТЗ.ДатаЗагрузки=спр.ДатаЗагрузки;
                                        КонецЕсли;
                                        ТЗ.Наименование=сокрЛП(ТЗ.Наименование);
                                        ТЗ.ПолноеНаименование=СокрЛП(ТЗ.ПолноеНаименование);
                                        
                                        ТЗ.ед_изм=ед;
                                        ТЗ.Сайт=спр.Сайт;
                                        ТЗ.ДатаЗагрузки=спр.Датазагрузки;
                                    Конецесли;
                                Иначе
                                    сч=сч+1;
                                Конецесли;
                                
                            Исключение
                                
                            КонецПопытки;
                            НомерСтроки=НомерСтроки+1;
                        КонецЦикла;




Пробовал проводить проверку на ошибку
Если Найти (Эксель.Cells(з1, з2).Formula,"#REF") =0 Тогда

Не ловит тоже...


Signature
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...

Naghual Подменю пользователя
сообщение 27.02.18, 11:44
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

По перше, я питав про Ексель файл а ви привели код 1С.
По друге:
-
Если (число(Значение)>0) и (СтрДлина(Значение)=СтрДлина(число(Значение))) Тогда
тут (число(Значение)) вже буде помилка (двічі) при невірних даних екселю.
-
спОшибки=СоздатьОбъект("СписокЗначений"); ....
Нащо створювати та наповнювати список кожного разу?


Signature
Я желаю всем Счастья!

l2d808 Подменю пользователя
сообщение 27.02.18, 11:48
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0

Цей код поки що тестовий... зліплений з кусків.
Підкажіть, як швидко Вам скинуті цей файл?


Signature
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...

Naghual Подменю пользователя
сообщение 27.02.18, 11:49
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

-
Если (число(Значение)>0) и (СтрДлина(Значение)=СтрДлина(число(Значение))) Тогда
не бачу в цьому сенсу


Signature
Я желаю всем Счастья!

l2d808 Подменю пользователя
сообщение 27.02.18, 11:52
Сообщение #9

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 248
Из: Советский Союз
Спасибо сказали: 64 раз
Рейтинг: 0

[необходимо зарегистрироваться для просмотра ссылки]

Цитата(Naghual @ 27.02.18, 11:49) *
не бачу в цьому сенсу

Я з Вами згоден. :-)


Signature
Короеды это не жуки. Это пользователи. Они едят кору головного мозга ...

Naghual Подменю пользователя
сообщение 27.02.18, 16:25
Сообщение #10

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Excel.DisplayAlerts = 0;
Пока НомерСтроки < 40 Цикл
    Если Excel.IsError(Лист.Cells(НомерСтроки, Колонка)) = -1 Тогда
        НомерСтроки = НомерСтроки + 1;
        Продолжить;
    КонецЕсли;
    Попытка
        Значение = Лист.Cells(НомерСтроки, Колонка).Value;
        Сообщить(Значение);
    КонецПопытки;
    НомерСтроки = НомерСтроки + 1;
КонецЦикла;


Цитата(Zaval @ 27.02.18, 17:23) *
Я б спробував конструкцію "Попытка - Исключение"

Не спрацює, бо помилка виникає на стороні ОЛЄ-Сервера.


Signature
Я желаю всем Счастья!

Спасибо сказали: mister-x,

Zaval Подменю пользователя
сообщение 27.02.18, 16:35
Сообщение #11

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Цитата(Naghual @ 27.02.18, 16:25) *
Не спрацює, бо помилка виникає на стороні ОЛЄ-Сервера.

Тоді треба аналізувати "на тій стороні" - засобами Екселя. Або модифікувати там.

Naghual Подменю пользователя
сообщение 27.02.18, 16:37
Сообщение #12

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Цитата(Zaval @ 27.02.18, 17:35) *
Тоді треба аналізувати "на тій стороні" - засобами Екселя. Або модифікувати там.

Саме таке рішення я і запропонував:
 Если Excel.IsError(Лист.Cells(НомерСтроки, Колонка)) = -1 Тогда


Signature
Я желаю всем Счастья!

Спасибо сказали: l2d808,

Zaval Подменю пользователя
сообщение 27.02.18, 16:46
Сообщение #13

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Цитата(Naghual @ 27.02.18, 16:37) *
Саме таке рішення я і запропонував:

Варіант, але чи сприймає сам Ексель це як помилку?

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

Naghual Подменю пользователя
сообщение 27.02.18, 16:50
Сообщение #14

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Цитата(Zaval @ 27.02.18, 17:46) *
Варіант, але чи сприймає сам Ексель це як помилку?

Повинен. Я перевіряв - у мене працює.

А решта коду - то лише для тестування. )


Signature
Я желаю всем Счастья!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 15:48
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!