Имя: Пароль:
1C
1С v8
как присвоить выпадающий список в ячейке Excel из 1с 8
,
0 EarthsSoul
 
26.09.11
07:11
Здравствуйте, стоит задача выгрузки данных из 1c 8 в Excel,
записывать в простые ячейки Excel знаю как, но вот если в Excel реализованы выпадающие списки то при присвоении выдает

{Форма.Форма.Форма(86)}: Ошибка при установке значения атрибута контекста (Value)
   Excel.Cells(Строка,11).Value =Выборка.Звание;
по причине:
Произошла исключительная ситуация (0x800a03ec)

При том что в выборе возможного значения ячейки присваиваемое значение имеется.

то есть если вручную присвоить возможное значение "Старший сержант" и посмотреть его значение в отладчике то получим


Excel.Cells(Строка,11).Value имеет значние "Старший сержант" с типом Строка.

Но если мы попытаемся
Excel.Cells(Строка,11).Value = "Старший сержант";

то получим ошибку

{Форма.Форма.Форма(86)}: Ошибка при установке значения атрибута контекста (Value)
   Excel.Cells(Строка,11).Value =Выборка.Звание;
по причине:
Произошла исключительная ситуация (0x800a03ec)
1 EarthsSoul
 
26.09.11
07:17
Вопрос конечно как корректно присвоить значение Excel.Cells(Строка,11).Value =Выборка.Звание;?
2 Птах
 
26.09.11
07:37
Сделай выпадающий список элементом формы экселя вместо элемента эктивХ. Элемент формы ссылается на диапазон ячеек, туда свои значения и пиши.
3 Kookish
 
26.09.11
07:47
Как я понял, у ТС в Excel уже есть ячейка, значения которой выбираются из выпадающего списка. И программно нужно ввести в эту ячейку одно из значений этого списка. Естественно, просто присвоить значение она не даст. Нужно, чтобы оно было выбрано из этого самого списка. Пока есть мысль только указать индекс значения в этом списке. См. свойство Validation.
4 Kookish
 
26.09.11
07:57
Попробуй посмотреть значение Value и Text у ячеек, в которых значение уже выбрано из выпадающего списка.
5 Птах
 
26.09.11
08:03
(3) Точно, я не понял... Непонятно зачем только, элементы формы удобнее.
6 Kookish
 
26.09.11
08:19
Посмотрел, называется. Там везде тупо строка. Вот этот текст у меня почему-то работает.

   Эксель = Новый COMОбъект("Excel.Application");
   Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
   Лист = Книга.Sheets(1);
   Для C = 1 по 9 Цикл
       Если C = 5 Тогда
           Лист.Cells(C, 1).Value = "Заменяем";
       КонецЕсли;
       Значение = Лист.Cells(C, 1).Value;
       Текст = Лист.Cells(C, 1).Text;

       Сообщить("Значение = " + Значение + ", текст = " + Текст);
   КонецЦикла;  
   Эксель.Save();
   Эксель.Quit();

Хотя ячейки так и остаются выбираемыми из списка. Офис 2007.
7 Kookish
 
26.09.11
08:22
(1) Пробовал Выборка.Звание.Наименование? Подозреваю, что в Выборка.Звание не строка, а значение перечисления или что-то вроде.
8 EarthsSoul
 
26.09.11
12:25
В общем странности развиваются дальше, для того чтобы в Выборка.Звание не было всяких левых типов данных я делал завуилированное приведение типов ""+Выборка.Звание, однако и тоже выдавало ошибку указанную в (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 строки не заполнять файл?
9 Kookish
 
26.09.11
12:41
(8) Может потому, что там до этого не пустые значения? В отладчике проверял?
Еще раз спрашиваю: Выборка.Звание.Наименование пробовал поставить?
10 EarthsSoul
 
26.09.11
13:57
Заменил свою не осмысленную проверку на

Если СокрЛП(Строка(Выборка.ПодразделениеОрганизации))<>"" Тогда
   Excel.Cells(Строка,2).Value=СокрЛП(Строка(Выборка.ПодразделениеОрганизации));
КонецЕсли;

Если СокрЛП(Строка(Выборка.Должность))<>"" Тогда
   Excel.Cells(Строка,3).Value=СокрЛП(Строка(Выборка.Должность));
КонецЕсли;

Если СокрЛП(Строка(Выборка.Наименование))<>"" Тогда
   Excel.Cells(Строка,6).Value =СокрЛП(Строка(Выборка.Наименование));
КонецЕсли;

(Вообще конечно столбиков много, привожу только пример)
(9) Да попробовал эффект не изменился, и попробовал выгружать не в этот Excel навороченный макросами файл, а в чистую книгу и теперь записывает 284 строки и выдает ошибку:

{Форма.Форма.Форма(109)}: Ошибка при установке значения атрибута контекста (Value)
Excel.Cells(Строка,11).Value =СокрЛП(Строка(Выборка.ЗваниеНаименованиее));
по причине:
Произошла исключительная ситуация (0x800ac472)

в следующей строке:

Excel.Cells(Строка,11).Value= СокрЛП(Строка(Выборка.ЗваниеНаименованиее));

В отладчике
Выражение Тип СокрЛП(Строка(Выборка.ЗваниеНаименованиее)),Значение "мл. сержант" с типом Строка
Excel.Cells(Строка,11).Value Неопределено

Что бы еще могло быть не так? ))
11 EarthsSoul
 
27.09.11
13:12
В общем оказалось что колонка которою так сразу не видно была заполнена в документе по 142 строку, заполнил её липовыми данными (так как это заполняет пользователь по определению, потом сами перезаполнят и все благополучно выгрузилось из 1с в Excel за три запуска обработки начиная со строки в которой остановился в прошлый раз, выгрузка очень не стабильно работает...)

С спасибо за участие!