Ошибка при вызове метода контекста cells 1с
Добрый день!
Посмотрите пожалуйста. Есть в обработке таблица значений, в которую я выгружаю данные их XML, после этого я корректирую таблицу и хочу чтобы программа сохранила ее в новый документ эксель. Для этого я создал процедуру "Процедура СохранитьНажатие(Элемент) Экспорт". При сохранении выскакивает: "Ошибка при установке значения атрибута контекста (Value)". Насколько я понимаю, программе не нравится тип значения, который я передаю.
Переменные:
ТПП - "табличное поле правил", в ней уже занесены некотрые значения из XML
НоменклатураЗагрузки, НоменклатураБазы - имена столбцов ТПП
СтолбЗагр, СтолбБаз - столбцы в экселе
Помощь в написании контрольных, курсовых и дипломных работ здесь
Выгрузка картинок в Excel
Выгружаю список номенклатуры из 1с в ексель, при этом в номенклатуре храниться путь картинки, при.
Выгрузка информации из Excel в 1с
Добрый день! Случилась такая проблема, что на рабочем компьютере пропал файл с выгрузкой реализации.
Подскажите пожалуйста(выгрузка в excel)
Помогите пожалуйста. Выгружаю из 1С оборотно-сальдовую ведомость в шаблонный файл excel, т.е.
Выгрузка в excel
Как сделать выгрузку в Excel справочника и документа
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель(); СохранитьНажатие(Элемент) это событие формы
в этой процедуре пропиши вызов другой процедуры, например СохранитьВЭксель();
саму же процедуру СохранитьВЭксель() добавь в модуль объекта и сделай её экспортной. Вставь свой код представленный выше.
обращение из формы будет ЭтотОбъект.СохранитьВЭксель(); В МодулеОбъекта создал функцию "Процедура СохранитьВЭксель(ТПП) Экспорт"
Прописал в ней тотже код, что выше. В событии формы написал: ЭтотОбъект.СохранитьВЭксель(ТПП);
Выскочила ошибка: Ошибка при вызове метода контекста (Cells)
Что я нетак сделал? процедуру ИнициализацияЭкселя() тоже закинь в модуль объекта
СохранитьВЭксель(ТПП), параметр ТПП скорее всего не нужен
Да я именно так и сделал, просто забыл упомянуть, ТПП нужна в противном случае он не понимает что это за переменная
Добавлено через 4 минуты
Проблема вот в чем:
Sheet.Cells(стр,СтолбЗагр).Value=1;
Sheet.Cells(стр,СтолбБаз).Value=2;
Так работает, но если я поставлю
Sheet.Cells(стр,СтолбБаз).Value=стр.НоменклатураБазы;
Выдает ошибку "Ошибка при установке значения атрибута контекста (Value)".
Дело в том что "стр.НоменклатураБазы" - это справочник ссылка, если у нее текстовый тип то программа глотает и записывает.
загружаю фаил ".xls" через переработаную обработку клиент банка.
видает вот такую ошибку.
Не возможно загрузить данные из листа, по причине: : Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec)
вигружаю из клиент банка ОТП в стандартную бухгалтерию для Украини (1.2.13.4)
1С:Предприятие 8.2 (8.2.17.169)
вот в етой строке ошибка:
а вот код цикла
Для НомСтр = НачСтр По НашЛист.Cells(1,1).SpecialCells(11).Row Цикл
ДатаИзФайлаСтр = СокрЛП(НашЛист.Cells(НомСтр,КолДатаДокумента).Text);
ДатаИзФайла = Дата(Лев(ДатаИзФайлаСтр,4),Сред(ДатаИзФайлаСтр,6,2),Прав(ДатаИзФайлаСтр,2));
Если (ДатаИзФайла<=КонПериода) и (ДатаИзФайла>=НачПериода) Тогда
Таб = ДокументыДляИмпорта.Добавить();
Таб.Операция = "ПЛАТЕЖНОЕПОРУЧЕНИЕ";
Таб.Номер = СокрЛП(НашЛист.Cells(НомСтр,КолНомерДокумента).Text);
Таб.Дата = ПривестиЗначение(ДатаИзФайла);
Таб.Сумма = Формат(Число(НашЛист.Cells(НомСтр,КолСуммаДокумента).Value),"ЧГ=0");
Таб.НазначениеПлатежа = СокрЛП(НашЛист.Cells(НомСтр,КолКомментарий).Text);
Таб.ДатаСписано = ПривестиЗначение(ДатаИзФайла);
Таб.ДатаПоступило = ПривестиЗначение(ДатаИзФайла);
Таб.Плательщик = СокрЛП(НашЛист.Cells(НомСтр,КолНаименование_А).Value);
Таб.ПлательщикСчет = Формат(НашЛист.Cells(НомСтр,КолСчет_А).Value,"ЧГ=0");
Таб.ПлательщикМФО = Формат(НашЛист.Cells(НомСтр,КолМФО_А).Value,"ЧГ=0");
Таб.ПлательщикОКПО = Формат(НашЛист.Cells(НомСтр,КолОКПО_А).Value,"ЧГ=0");
Таб.Получатель = СокрЛП(НашЛист.Cells(НомСтр,КолНаименование_Б).Value);
Таб.ПолучательСчет = Формат(НашЛист.Cells(НомСтр,КолСчет_Б).Value,"ЧГ=0");
Таб.ПолучательМФО = Формат(НашЛист.Cells(НомСтр,КолМФО_Б).Value,"ЧГ=0");
Таб.ПолучательОКПО = Формат(НашЛист.Cells(НомСтр,КолОКПО_Б).Value,"ЧГ=0");
РаспознатьДанныеВСтрокеДокумента(Таб);
НомерСтроки = НомерСтроки + 1;
Таб.НомерСтроки = НомерСтроки;
// Для каждого реквизита (= колонка) надо проверить на пустое значение
Для каждого КолонкаИмпорта из ДокументыДляИмпорта.Колонки Цикл
ПроверитьНаПустоеЗначениеИмпорта(Таб, КолонкаИмпорта.Имя, КолонкаИмпорта.Заголовок);
КонецЦикла;
Excel.Cells(Строка,11).Value =Выборка.Звание;
по причине:
Произошла исключительная ситуация (0x800a03ec)
При том что в выборе возможного значения ячейки присваиваемое значение имеется.
то есть если вручную присвоить возможное значение "Старший сержант" и посмотреть его значение в отладчике то получим
Excel.Cells(Строка,11).Value имеет значние "Старший сержант" с типом Строка.
Но если мы попытаемся
Excel.Cells(Строка,11).Value = "Старший сержант";
то получим ошибку
: Ошибка при установке значения атрибута контекста (Value)
Excel.Cells(Строка,11).Value =Выборка.Звание;
по причине:
Произошла исключительная ситуация (0x800a03ec)
Вопрос конечно как корректно присвоить значение Excel.Cells(Строка,11).Value =Выборка.Звание;?
В общем странности развиваются дальше, для того чтобы в Выборка.Звание не было всяких левых типов данных я делал завуилированное приведение типов ""+Выборка.Звание, однако и тоже выдавало ошибку указанную в (1), однако после того как сделал Строка(Выборка.Звание) то присвоение стало работать нормально. По крайней мере ошибку не выдает но теперь выдает другую ошибку.
При выгрузке последовательно присваиваются значения благополучно 142 строки, потом начинается присвоение тех же самых результатов выборки (Теже имена людей), больше не присваиваются в строках, и в результате строки
Если Excel.Cells(Строка,2).Value<>Null Тогда
Excel.Cells(Строка,2).Value=Строка(Выборка.ПодразделениеОрганизации);
КонецЕсли;
Если Excel.Cells(Строка,3).Value<>Null Тогда
Excel.Cells(Строка,3).Value=Строка(Выборка.Должность);
КонецЕсли;
Если Excel.Cells(Строка,6).Value<>Null Тогда
Excel.Cells(Строка,6).Value =Строка(Выборка.Наименование);
КонецЕсли;
начиная с 142 строки больше не меняют значений.
К стати если в процессе работы обработки открыть Excel файл то визуально уведите как заполняются значения ячеек, а со 142 от выдает прямо Excel предупреждение о том что колонку 4,6,7,8,10 надо заполнить. (Возможно предупреждения это уже функционал реализованы макросами. )
Так вот вопрос почему он может после 142 строки не заполнять файл?
Попробуйте следующую конструкцию:Excel.Cells(Строка,11).Value = Строка(Выборка.Звание); Вы знаете 2 совет помог, что весьма странно, пробовал делать приведение типов не Строка(Выржаение) а просто ""+выражение, результат одинаковый получается (получается Выржаение с типом строка) если их сравнить то получается истина, однако по факту работы с COMОбъект("Excel.Application"); получаются разные результаты. И еще в процессе отладки у меня как то вышло открыть Excel файл в который выгружались данные, и процессе выгрузки я наблюдал как заполняются ячейки :-), может кто подскажет как это получилось? :) Понял, надо просто запускать отладку и открывать файл, в диалоговом окне указать что открыть не сохранный, а файл в памяти и вуаля увидите автоматическое заполнение Excel файла ) Попробуй вместо Value изпользовать FormulaR1C1. Если у тебя валидация (режим проверки) в книге, то не поможет. Тут надо внести в список проверки твое значение, прежде, чем присваивать
На счет отображения листа Excel во время заполнения: Это нормальная штатная работа приложения.
Для ускорения вывода информации в Excel можно отключить обновление экрана. Соответственно ничего не увидим.
xl.ScreenUpdating = 0;
xl.EnableEvents = 0;
xl.Visible = 0;
Затем, когда таблица будет сформирована, вновь включить обновление экрана. Если не применять эти функции, или принудительно их выставить в значение:
xl.ScreenUpdating = 1;
xl.EnableEvents = 1;
xl.Visible = 1;
Увидим как 1С переливает данные на лист.
Но при включенной видимости не надо вмешиваться в работу обработки - начнет глючить, ошибаться писать не в те ячейки.
Еще момент с работой Excel: Проверяйте не осталось ли открытых экземпляров приложения Excel(Это для режима с отключенным обновлением экрана) - (в диспетчере задач)
Совет: Попробуйте немного изменить направление изысканий, для того, чтобы избежать проблем с типами:
как вариант: заполняете Табличный документ и сохраняете макет как .xls -файл, далее открываете его и вставляете выпадающие списки.
Если остановитесь на Вашем варианте реализации: проблемы со 142 скорее всего могут возникать из-за разных типов данных: Выполняйте явные преобразования типов:
Если СокрЛП(Строка(Excel.Cells(Строка,6).Value)) <> "" Тогда
Да теперь переписал так как вы рекомендовали в (9), и попробовал выгружать в этот Excel навороченный макросами файл, а в чистую книгу и теперь записывает 284 строки и выдает ошибку:
Читайте также: