Здравствуйте! Подскажите, пожалуйста! Загружаю из Excel данные, хочу обратиться к именованной области, выдает следующую ошибку: «Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec)
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
по причине:
Произошла исключительная ситуация (0x800a03ec)»
Процедура ОсновныеДействияФормыЗагрузить(Кнопка)
НомерКолонкиАртикул = ЭлементыФормы.ТабличныйДокумент.Область(«R2C1»;
НомерКолонкиНаименованияТовара = ЭлементыФормы.ТабличныйДокумент.Область(«R2C2»;
НомерКолонкиЕдиницаИзмерения = ЭлементыФормы.ТабличныйДокумент.Область(«R2C3»;
НомерКолонкиСтрана = ЭлементыФормы.ТабличныйДокумент.Область(«R2C4»;
//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Excel = новый COMОбъект(«Excel.Application»;
Версия = Лев(Excel.Version,Найти(Excel.Version,».»-1);
Если Версия = «8» тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(2,1).SpecialCells(21).Row;
ФайлКолонок = Excel.Cells(2,1).SpecialCells(21).Column;
Конецесли;
// Выбираем данные из файла
Для а = Excel.Cells(2,1).SpecialCells(21).Row по ФайлСтрок Цикл
//Полуим данные из соответсвующих ячеек
Артикул = СокрЛП(Excel.Cells(а,Артикул).Value);
НаименованиеТовара = СокрЛП(Excel.Cells(а,НомерКолонкиНаименованияТовара).Value);
ЕдиницаИзмерения = СокрЛП(Excel.Cells(а,НомерКолонкиЕдиницаИзмерения).Value);
Товар = Справочники.Номенклатура.ПустаяСсылка();
// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;
// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
Конецесли;
//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = НаименованиеТовара;
Товар.Артикул = Артикул;
Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
Товар.СтранаПроисхождения = НомерКолонкиСтрана;
Товар.Записать();
Конецесли;
КонецЦикла;
КонецПроцедуры
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 8725. Ответов 11 Метки нет (Все метки)
Добрый день! ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML Код процедуры:
__________________
0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 11:32 |
2 |
СохранитьНажатие(Элемент) это событие формы
1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 11:56 [ТС] |
3 |
СохранитьНажатие(Элемент) это событие формы В МодулеОбъекта создал функцию «Процедура СохранитьВЭксель(ТПП) Экспорт»
0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 12:10 |
4 |
процедуру ИнициализацияЭкселя() тоже закинь в модуль объекта
1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 12:19 [ТС] |
5 |
Да я именно так и сделал, просто забыл упомянуть, ТПП нужна в противном случае он не понимает что это за переменная Добавлено через 4 минуты Так работает, но если я поставлю Дело в том что «стр.НоменклатураБазы» — это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.
0 |
19 / 18 / 1 Регистрация: 15.11.2011 Сообщений: 54 |
|
02.12.2011, 12:22 |
6 |
чет вы мудрено делаете.
1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 12:28 [ТС] |
7 |
В данный момент ему не нравится присваемое значение к ячейке экселя (если я правильно понимаю сообщение «Ошибка при установке значения атрибута контекста (Value)» ) Причем если тип значения строка, то он его получает без вопросо, если тип значения СправочникССсылка, то он руегается на «Ошибка при установке значения атрибута контекста (Value)». Я просто не понимаю как обратиться к такому типу переменных чтобы получить значение типа строка.
0 |
19 / 18 / 1 Регистрация: 15.11.2011 Сообщений: 54 |
|
02.12.2011, 12:30 |
8 |
а принудительно все значения в текст перевести нельзя?
1 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 12:30 |
9 |
стр.НоменклатураБазы.Наименование например
1 |
2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
|
02.12.2011, 12:32 [ТС] |
10 |
стр.НоменклатураБазы — это уже есть наименование интересующего меня поля (имя столбца), в некотрых случаях можно писать: стр.НоменклатураБазы.Значение, но это нетот случай Добавлено через 56 секунд
0 |
308 / 308 / 1 Регистрация: 16.01.2011 Сообщений: 1,073 |
|
02.12.2011, 12:34 |
11 |
значение из Excel?
1 |
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
02.12.2011, 12:43 [ТС] |
12 |
|||
Рабочий код:
0 |
Автор Sweety Bell, 24 ноя 2015, 12:44
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте! Мне надо загрузить данные из excel в 8.2 обычное приложение. В цикле вывода возникает ошибка в методе Добавить. Первые 2 итерации пропускает нормально, потом выдает ошибку:
НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов,ИмяКолонки);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Процедура ОкрытьФайлНажатие(Элемент)
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок ="Выберите файл";
Если ДиалогВыбора.Выбрать()Тогда
ИмяФайла=ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли ;
Таблица.Очистить();
Таблица.Колонки.Очистить();
Попытка
Excel=Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Excel");
ExcelЛист=Excel.Sheets(1);
Исключение
Сообщить("шибка при открытии файла");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Версия =Лев(Excel.Version,Найти(Excel.Version,".")-1);
Если Версия="8" Тогда
ФайлСтрок =Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок =Макс(Excel.Cells.CurrentRegion.Columns.Count,13);
Иначе
ФайлСтрок =Excel.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок =Excel.Cells(1,1).SpecialCells(11).Column;
КонецЕсли;
Счетчик=1;
Пока ЗначениеЗаполнено(Excel.Cells(1,Счетчик).Text)Цикл
ИмяКолонки=Excel.Cells(1,Счетчик).Text;
ИмяБезПробелов=СтрЗаменить(ИмяКолонки," ","");
//Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);
Таблица.Колонки.Добавить(ИмяКолонки);
НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов,ИмяКолонки);
НоваяКолонка.Данные=ИмяБезПробелов;
Счетчик=Счетчик+1;
КонецЦикла;
Для нс=2 по Файлстрок Цикл
НоваяСтрока=Таблица.Добавить();
Для НомерКолонки=1 По Таблица.Колонки.Количество()Цикл
ТекущееЗначение=Excel.Cells(нс.НомерКолонки).Text;
ИмяКолонки=Таблица.Колонких[НомерКолонки-1].Имя;
НоваяСтрока[ИмяКолонки]=ТекущееЗначение;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Смело запускайте отладчик. Он вам покажет название колонки.
показал колонку Наименование.
После этого на форме появляются 3 пустые колонки.
Помогите, пожалуйста, вывести на экран. Начальство убивает:fdbsdfbsd:
Вы слово «отладчик» сознательно не видите?
Вижу. Он показывает на эту строку
НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяКолонки);
Цитата: Sweety Bell от 24 ноя 2015, 13:12
Вижу. Он показывает на эту строку
НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяКолонки);
В приведенном вами коде нет такой строки. Есть такая:
НоваяКолонка=ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов,ИмяКолонки);
Скажите, а что такое отладчик вы вообще знаете? Вывод строки с ошибкой и отладчик — это знаете ли, очень разные вещи.
Цитата: vitasw от 24 ноя 2015, 13:25
Скажите, а что такое отладчик вы вообще знаете? Вывод строки с ошибкой и отладчик — это знаете ли, очень разные вещи.
инструмент для пошаговой отладки. Я им и пользуюсь. Значение смотрю на табло
Добавлено: 24 ноя 2015, 13:47
Оно зависает на этом месте кода
ИмяКолонки=Excel.Cells(1,Счетчик).Text;
ИмяКолонки=СокрЛП(Excel.Cells(1,Счетчик).Value);
исправила. Теперь другая ошибка: Ошибка при вызове метода контекста (Cells)
Пока ЗначениеЗаполнено(Excel.Cells(1,Счетчик).Value)Цикл
по причине:
Произошла исключительная ситуация (0x800a03ec)
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
загрузка данных из excel в 8.2
Похожие темы (5)
Поиск
Показывать по
10
20
40
сообщений
Новая тема
Ответить
Olga3891
Дата регистрации: 10.10.2006
Сообщений: 497
внешняя обработка. читается файлик из ексель. база серверная, «100 лет» обработка работала, и вот вдруг перестала файлики читать, Ошибка при вызове метода контекста (Cells)
НомерИсследования=ТекЛист.Cells(2,3).Value;
по причине:
Неизвестная ошибка
причем вылетает то в одном месте при попытке cells, то в другом. на файловой базе все норм.
голову уже сломала, что еще предпринять.
сервер 1с перегружала.
ABell
Дата регистрации: 22.07.2007
Сообщений: 324
Аналогично. Если не стоит Микрософтовский Excel на машине.
Показывать по
10
20
40
сообщений
-
Платформа 8,2 УПП. Задача загрузить из Excel файла данные в Справочники.бюджет. При загрузке файла такое ощущения что он зацикливается. и выкидывает ошибку {Форма.Форма.Форма(29)}: Ошибка при вызове метода контекста (Cells)
БюдОбъект.Комментарий = СокрЛП(Ex.Cells(НС,2).Value);
по причине:
Произошла исключительная ситуация (0x800a03ec)
Подскажите что не так я выполняю. сам кодЗапрос = Новый Запрос("ВЫБРАТЬ | Бюджеты.Наименование КАК Наименование , | Бюджеты.НаименованиеПолное КАК НаимПолное , | Бюджеты.Комментарий КАК Комментарий |ИЗ | Справочник.Бюджеты КАК Бюджеты"); Выборка=Запрос.Выполнить().Выбрать(); //проверим что файл существует ФайлНаДиске = Новый Файл(Файл); Если Не ФайлНаДиске.Существует() Тогда Предупреждение("Файл не найден!"); Возврат; КонецЕсли; Ex = ПолучитьТаблицуExcel(Файл); БюдОбъект=Справочники.Бюджеты.СоздатьЭлемент(); СтруктураДанных = Новый Структура("Комментарий"); НС = 1; Пока Истина Цикл СтруктураДанных.Комментарий = СокрЛП(Ex.Cells(НС,2).Value); Если СтруктураДанных.Комментарий = "" Тогда Прервать; КонецЕсли; БюдОбъект.Комментарий= СтруктураДанных.Комментарий; #Если Клиент Тогда Состояние("Номер обработанной строки: " + НС); #КонецЕсли БюдОбъект.Записать(); НС = НС + 1; КонецЦикла; Ex.Quit();
-
Offline
Tiger86
Модераторы
Команда форума
Модератор- Регистрация:
- 24 мар 2011
- Сообщения:
- 6.407
- Симпатии:
- 108
- Баллы:
- 104
1. вы в один и тот же элемент комментарии сыплете и перезаписываете в коде.
2. скорее всего зацикливает -
Народ подскажите почему он сохраняет и заносит последнию строку из цикла а не весь список
Запрос = Новый Запрос("ВЫБРАТЬ | Бюджеты.Наименование КАК Наименование , | Бюджеты.НаименованиеПолное КАК НаимПолное , | Бюджеты.Комментарий КАК Комментарий |ИЗ | Справочник.Бюджеты КАК Бюджеты"); Выборка=Запрос.Выполнить().Выбрать(); //проверим что файл существует ФайлНаДиске = Новый Файл(Файл); Если Не ФайлНаДиске.Существует() Тогда Предупреждение("Файл не найден!"); Возврат; КонецЕсли; Ex = ПолучитьТаблицуExcel(Файл); БюдОбъект=Справочники.Бюджеты.СоздатьЭлемент(); НС = 1; Пока Истина Цикл ПодСтрока=СокрЛП(Ex.Cells(НС,2).Value); ПодСтрока1=Сред(ПодСтрока,Найти(ПодСтрока,"инв.№")); БюдОбъект.Наименование=Прав(ПодСтрока1,8); БюдОбъект.НаименованиеПолное ="Ебись оно все конем по цене="+ СокрЛП(Ex.Cells(НС,4).Value); БюдОбъект.Комментарий = СокрЛП(Ex.Cells(НС,2).Value); БюдОбъект.Записать(); Если БюдОбъект.Комментарий = "" Тогда Прервать; КонецЕсли; #Если Клиент Тогда Состояние("Номер обработанной строки: " + НС); #КонецЕсли НС = НС + 1; КонецЦикла; Ex.Quit(); КонецПроцедуры
-
Потому, что получение объекта, у вас вне цикла, где вы его заполняете. По коду получается, что вы многократно перезаполняете и записываете один и тот-же объект
И еще
Пока Выборка.Следующий() Цикл
-
Процедура ИмяПроцедуры(Файл) //Вначале проверим что файл существует ФайлНаДиске = Новый Файл(Файл); Если Не ФайлНаДиске.Существует() Тогда Предупреждение("Файл не найден!"); Возврат; КонецЕсли; Запрос = Новый Запрос(" |ВЫБРАТЬ | Бюджеты.Ссылка КАК Ссылка, | Бюджеты.Наименование КАК Наименование, | Бюджеты.НаименованиеПолное КАК НаимПолное, | Бюджеты.Комментарий КАК Комментарий |ИЗ | Справочник.Бюджеты КАК Бюджеты |"); Выборка = Запрос.Выполнить().Выбрать(); // Чтение файла Exel = ПолучитьТаблицуExcel(Файл); Индекс = 1; Пока Выборка.Следующий() Цикл ПодСтрока = СокрЛП(Exel.Cells(Индекс,2).Value); ПодСтрока1 = Сред(ПодСтрока,Найти(ПодСтрока,"инв.№")); Если СокрЛП(Exel.Cells(Индекс,2).Value) = "" Тогда Продолжить; КонецЕсли; // Если комментарий не получен, переходим к следующему элементу БюдОбъект = Выборка.Ссылка.ПолучитьОбъект(); // Получим объект для заполнения // заполняем объект БюдОбъект.Наименование = Прав(ПодСтрока1,8); БюдОбъект.НаименованиеПолное = "<Ненормативная лексика> по цене=" + СокрЛП(Exel.Cells(Индекс,4).Value); БюдОбъект.Комментарий = СокрЛП(Exel.Cells(Индекс,2).Value); // Запись заполненного объекта Попытка БюдОбъект.Записать(); #Если Клиент Тогда Состояние("Номер обработанной строки: " + Индекс); #КонецЕсли Исключение #Если Клиент Тогда Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное); #КонецЕсли КонецПопытки; // увеличиваем индекс на 1 Индекс = Индекс + 1; КонецЦикла; // Закрытие файла Exel.Quit(); КонецПроцедуры
-
Спасибо за корректировку кода
-
Народ подскажите пожалуйста как создать группу в справочнике 1с когда мы экспортируем из excel. Я хочу что бы те строки которые выделены жирным стали группами в справочнике 1с