Попытка
// Загрузка Microsoft Excel
Состояние(«Загрузка Microsoft Excel…»);
Excel = Новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«Ошибка при загрузке Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Excel.WorkBooks.Add();
row=1;
Для Каждого Элемент Из Результат Цикл
Excel.Cells(row, 1).Value = Элемент.Организация;
Excel.Cells(row, 2).Value = Элемент.Субконто1;
Excel.Cells(row, 3).Value = Элемент.Субконто2;
Excel.Cells(row, 4).Value = Элемент.Счет;
Excel.Cells(row, 5).Value = Элемент.СуммаОстатокДт;
Excel.Cells(row, 6).Value = Элемент.СуммаОстатокКт;
row = row+1;
КонецЦикла;
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 9193. Ответов 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 |
Andru
08.02.11 — 17:44
Excel = Новый COMОбъект(«Excel.Application»);
Excel.Application.Workbooks.Add(1);
Если МетодРасчета Тогда
Excel.Sheets(1).Cells(1,»A»).FormulaLocal = «=ДНЕЙ360(B1;C1;ИСТИНА)»;
Иначе
Excel.Sheets(1).Cells(1,»A»).FormulaLocal = «=ДНЕЙ360(B1;C1;ЛОЖЬ)»;
КонецЕсли;
Excel.Sheets(1).Cells(1,»B»).Value = ДатаНачало;
Excel.Sheets(1).Cells(1,»C»).Value = ДатаОкончания;
КоличествоДней = Excel.Sheets(1).Cells(1,»A»).Value;
Попытка
Excel.ActiveWorkBook.SaveAs(КаталогВременныхФайлов() + «FailRascheta.xls»);
Исключение
Сообщение = ОписаниеОшибки();
КонецПопытки;
Excel.Application.Quit();
Пишу вот такой код. Пользователи работают в терминале под одним пользователем отрабатывает отлично, у другого пользователя пишет ошибку «Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)» обошел все форумы, забивал формулу на английском. Все равно не работает.
izekia
1 — 08.02.11 — 17:54
а без буковок попробуй
Andru
2 — 08.02.11 — 17:57
Не совсем понял.
Tatitutu
3 — 08.02.11 — 17:58
Excel.Sheets(1).Cells(1,»A»)
=
Excel.Sheets(1).Cells(1,1)
Andru
4 — 08.02.11 — 17:58
без «А» в Cells(1,»A»)
Andru
5 — 08.02.11 — 17:59
понял, проблемка только завтра попробую.
dk
6 — 08.02.11 — 18:00
может там адреса в формате R1C1 забиты, хотя сумнительно
либо на англицком формулу забей в
….Formula = …
Andru
7 — 08.02.11 — 18:00
других вариантов нету?
Andru
8 — 08.02.11 — 18:01
«Formula =» пробовал не помогает, вообще неработало
Andru
9 — 08.02.11 — 18:02
«FormulaR1C1 =» тоже пробовал
Andru
10 — 08.02.11 — 18:03
могут быть какие-то настройки в самом EXL
Andru
11 — 08.02.11 — 18:03
???
Andru
12 — 08.02.11 — 18:05
везде на локальных машинах работает. Проблема только в терминале, хотя права у пользователей одинаковый.
dk
13 — 08.02.11 — 18:08
отладчик не предлагать?
Andru
14 — 08.02.11 — 18:12
проходил отладчиком, только я в таком состоянии, приму любое предложение которое не пробовал.
dk
15 — 08.02.11 — 18:19
тест 1
поменять формула на «=1»
Andru
16 — 08.02.11 — 18:21
проверить схавает хоть что-то?
dk
17 — 08.02.11 — 18:28
ну да, отсекаешь 1 причину за другой
Andru
18 — 08.02.11 — 18:29
отлично, попробую.
Капюшон
19 — 08.02.11 — 18:29
(0)может быть разные версии Оффис у юзеров? у меня изза этого раньше в VBA проблемы возникали.
Andru
20 — 08.02.11 — 18:36
на моей машине 2010, у клиента на локальных машинах и сервере 2003, и везде работает кроме терминала.
Andru
21 — 08.02.11 — 18:37
может при установки админ не на всех пользователей VBA установил.
Andru
22 — 08.02.11 — 18:39
????
dk
23 — 08.02.11 — 18:39
(21) excel без vba не ставится )
Andru
24 — 08.02.11 — 18:39
может это быть причиной?
Andru
25 — 08.02.11 — 18:41
я уже готов поверить в любое не вероятное.
supremum
26 — 08.02.11 — 18:43
(21) Только что проверил код в (0) под терминалом — все работает. Проблема может быть с правами пользователей.
Andru
27 — 08.02.11 — 18:45
я под своим пользователем в терминал заходил, у меня не работало, под сисадмином заходил работает, назначил права сисадмина себе все равно не работает.
Andru
28 — 08.02.11 — 18:50
может мой пользователь не входит какую-то группу типа «Пользователи DCOM»
kambala
29 — 08.02.11 — 18:54
Права на папку КаталогВременныхФайлов() посмотри на запись
Andru
30 — 08.02.11 — 18:56
я убирал строки
Если МетодРасчета Тогда
Excel.Sheets(1).Cells(1,»A»).FormulaLocal = «=ДНЕЙ360(B1;C1;ИСТИНА)»;
Иначе
Excel.Sheets(1).Cells(1,»A»).FormulaLocal = «=ДНЕЙ360(B1;C1;ЛОЖЬ)»;
КонецЕсли;
без них отрабатывало под всеми пользователями нормально.
Andru
31 — 08.02.11 — 18:58
так что права у всех на временный каталог есть.
dk
32 — 08.02.11 — 19:01
может там англицкий Excel у юзера, хотя сумнительно
Andru
33 — 08.02.11 — 19:04
Админ ставил под своим профелем и разрешил использовать всем пользователям, так что у всех один и тот же, но я проверю.
ХелпДеск
34 — 08.02.11 — 21:51
(0)
Подозрительное присвоение: Value = ДатаНачало
Соответствует ли тип значения и формат ячейки xls и тип переменной ДатаНачало
Потом надо подумать над присвоением: КоличествоДней = что-то
Возможно это что-то (Value) надо привести к строковому типу.
Для отладки можно присвоить строковые константы.
ХелпДеск
35 — 08.02.11 — 21:56
Лучше через setValue устанавливать значения, чем через прямое присвоение.
Andru
36 — 09.02.11 — 06:42
Суть в том что на присвоение даты не ругается, ругается на формулу
Andru
37 — 09.02.11 — 06:59
Это не сработало
Excel.Sheets(1).Cells(1,»A»)
=
Excel.Sheets(1).Cells(1,1)
dk
38 — 09.02.11 — 07:46
Excel.Sheets(1).Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
Andru
39 — 09.02.11 — 08:43
Этот тест сработал
тест 1
поменять формула на «=1»
Andru
40 — 09.02.11 — 08:46
Не сработало.
Excel.Sheets(1).Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
Andru
41 — 09.02.11 — 08:50
мне кажется это права, но не могу понять какие и на что
Rie
42 — 09.02.11 — 08:51
(40) Попробуй FormulaR1C1 — что скажет?
Andru
43 — 09.02.11 — 08:54
есть сдвиг
Excel.Sheets(1).Cells(1,1).FormulaLocal = «DAYS360(B1;C1;1)»
это сработало, но не посчитал.
Andru
44 — 09.02.11 — 08:54
Как правильно передать DAYS360(B1;C1;1) третий параметр в EXL истина или ложь
Rie
45 — 09.02.11 — 08:55
(43) А что должно было посчитать? И как именно «не посчитал»?
Andru
46 — 09.02.11 — 08:57
вернул неопределено
Andru
47 — 09.02.11 — 08:58
прошу прошения
Andru
48 — 09.02.11 — 08:58
я незаметил один знак
Andru
49 — 09.02.11 — 09:00
я написал вот так DAYS360(B1;C1;1), а надо было =DAYS360(B1;C1;1). И это не сработало. Извеняюсь.
dk
50 — 09.02.11 — 09:16
что есть «не сработало»?
Вылетела с ошибкой?
в файле что-нить сохранилось?
Aprobator
51 — 09.02.11 — 09:33
а под юзером у которого проблема в терминале эксель запустить слабо?
Andru
52 — 09.02.11 — 11:53
ошибка даже самая какая и была в начале
Andru
53 — 09.02.11 — 11:54
под пользователем у которого не работает, запускаю эксель и все работает если руками на прямую в эксель забиваешь.
Andru
54 — 09.02.11 — 11:55
поэтому и говорю не понятный глюк.
Aprobator
55 — 09.02.11 — 12:19
Сервис — Параметры — Общие — Стиль ссылок R1C1 под проблемным пользователем стоит?
Andru
56 — 09.02.11 — 12:20
нет не стоит
dk
57 — 09.02.11 — 12:21
Excel.Sheets(1).Cells(1,1).Formula = «=B1»;
dk
58 — 09.02.11 — 12:21
может тупо в формуле C или B в кириллице заведены
Andru
59 — 09.02.11 — 12:30
еще раз все перепроверил B это английская B, С тоже.
Aprobator
60 — 09.02.11 — 12:33
хм — а точно вылетает на установке формулы, а не раньше на
Excel.Sheets(1)? Не помню, честно говоря там индексы с 0 или с 1?
Andru
61 — 09.02.11 — 12:40
спецально отладчиком проходил, еще строку с присвоением формулы комментировал, затыкается только на формуле.
dk
62 — 09.02.11 — 12:52
Яч = Excel.Sheets(1).Cells(1,1);
Яч.Formula = «=B1»;
Andru
63 — 09.02.11 — 12:59
почему Formula? у меня это не сработало.
я пишу FormulaLocal.
Так же я пробовал Formula = «=B1» и FormulaLocal = «=B1», все отработало.
dk
64 — 09.02.11 — 13:11
а не пробовал сначала данные в B1 и С1 заполнить, а уже потом формулу? )
Andru
65 — 09.02.11 — 13:20
Попробовал В1 и С1 заполнил, и все равно заткнулся на формуле.
Andru
66 — 09.02.11 — 13:20
Ради интереса изменил формулу
Andru
67 — 09.02.11 — 13:21
Excel.Sheets(1).Cells(1,2).Value = 10;
Excel.Sheets(1).Cells(1,3).Value = 20;
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=Сумм(B1;C1)»;
И все равно ругается на присвоение формулы.
Aprobator
68 — 09.02.11 — 13:22
(67) лист не защищенный или ячейка?
Andru
69 — 09.02.11 — 13:23
я никаких защит не ставил. А как проверить?
Andru
70 — 09.02.11 — 13:24
новый лист создаю же.
dk
71 — 09.02.11 — 13:33
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=B1 + C1»;
Aprobator
72 — 09.02.11 — 13:35
Excel.Sheets(1).Cells(1,1).AllowEdit проверка на разрешение редактирования. Хотя можно проверить и просто попытвашись записать значение.
Еще можно формулу попытаться вписать так:
Excel.Sheets(1).Cells(1,1).RANGE.FormulaLocal = ...
Andru
73 — 09.02.11 — 13:44
Хоть что-то новенькое.
Ошибка.
Ошибка при получении значения атрибута контекста (Range): Неверное число параметров
Andru
74 — 09.02.11 — 13:45
А вот это посчитал
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=B1 + C1»;
Andru
75 — 09.02.11 — 13:48
я так понимаю проблема с использованием внутренних формул экселя, если простое сложение посчитал.
dk
76 — 09.02.11 — 13:50
Excel.Application.Workbooks.Add(1);
почему 1 в аргументе?
а если просто
Excel.Application.Workbooks.Add();
Andru
77 — 09.02.11 — 13:52
я где то взял пример создание нового документа и листа, и все работало пока в терминал не запустили.
dk
78 — 09.02.11 — 13:53
корявый пример )
Andru
79 — 09.02.11 — 13:54
(76) Не помогло.Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)
Aprobator
80 — 09.02.11 — 14:06
покопался по хелпу, там формула присваивается только на актином листе (в примерах).
Может стоит попробовать так:
Excel.Sheets(1).Activate;
ActiveSheet.FormulaLocal = ....
Aprobator
81 — 09.02.11 — 14:09
вот еще пример из хелпы:
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
dk
82 — 09.02.11 — 14:27
Excel = Новый COMОбъект(«Excel.Application»);
Excel.Application.Workbooks.Add();
Excel.Visible = Истина;
Aprobator
83 — 09.02.11 — 15:14
(79) кстати — попробуй по деревянному — зайди в эксель, создай формулу, а потом с 1Сы ее считай и посмотри как она выглядит )
Andru
84 — 09.02.11 — 16:03
спасибо большое, попробую но только завтра.
Andru
85 — 12.02.11 — 03:39
ничего не сработало. буду искать другой выход.
Andru
86 — 12.02.11 — 03:43
Я тут встречал расчеты.
Европейский метод —
?(День(Дата2)=31,30,День(Дата2))-?(День(Дата1)=31,30,День(Дата1))+30*(Год(Дата2)*12+Месяц(Дата2)-Год(Дата1)*12-Месяц(Дата1))
Американский метод —
?(День(Дата2)=31 И День(Дата1)<30,31,30)-?(День(Дата1)=31,30,День(Дата1))+30*(Год(Дата2)*12+Месяц(Дата2)-Год(Дата1)*12-Месяц(Дата1))
Европейский метод расчет еще боле менее, а вот американский не правильно считает, может кто нибудь уже пытался решить это в 1С.
Andru
87 — 12.02.11 — 03:52
к примеру задаеш период 26.08.2010-12.02.2011
Европейски метод дает 166
Американский метод дает 184
Andru
88 — 12.02.11 — 03:59
В экселе оба метода дают 166
azernot
89 — 12.02.11 — 05:30
В порядке бреда, попробуй поменять местами строки кода
Excel.Sheets(1).Cells(1,»B»).Value = ДатаНачало;
Excel.Sheets(1).Cells(1,»C»).Value = ДатаОкончания;
Если МетодРасчета Тогда
Excel.Sheets(1).Cells(1,»A»).FormulaLocal = «=ДНЕЙ360(B1;C1;ИСТИНА)»;
Иначе
Excel.Sheets(1).Cells(1,»A»).FormulaLocal = «=ДНЕЙ360(B1;C1;ЛОЖЬ)»;
КонецЕсли;
Т.е. сначала присвоить даты, а уже потом формулу ссылающуюся на даты..
Andru
90 — 12.02.11 — 06:38
пробовал не помогает.
Andru
91 — 12.02.11 — 07:22
кажись нашел
если кому интересно проверьте тоже, может я что-то не замечаю
Американский метод расчета
?(День(ДатаКон)=31,30,День(НачалоДня(ДатаКон)) — День(НачалоМесяца(ДатаКон)))+?(День(ДатаНач)=31,30,День(КонецМесяца(ДатаНач)) — День(НачалоДня(ДатаНач)))+30*(Год(ДатаКон)*12+(Месяц(ДатаКон)-1)-Год(ДатаНач)*12-Месяц(ДатаНач))
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 8354. Ответов 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 |
Ошибка при получении значения атрибута контекста (ТекущийПользователь)
bless18 |
|
||
---|---|---|---|
Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Где происходит их инициализация? |
Yandex |
|
||
---|---|---|---|
E_Migachev |
|
||
---|---|---|---|
Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код |
bless18 |
|
||
---|---|---|---|
А если не совпадают, можно как-нибудб привязать пользователя к сотруднику? |
E_Migachev |
|
||
---|---|---|---|
А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса) В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают: Код 1C v 8.х
Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы. Ну а дальше подставлять сопоставленное значение при создании соответствующего документа: Код 1C v 8.х
События модуля сеанса: |
bless18 |
|
||
---|---|---|---|
Спасибо вам огромное! Вы мне очень помогли! |
bless18 |
|
||
---|---|---|---|
Спасибо вам огромное! Вы мне очень помогли! |
E_Migachev |
|
||
---|---|---|---|
Пожалуйста |
Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или . |
Пишу вот такой код. Пользователи работают в терминале под одним пользователем отрабатывает отлично, у другого пользователя пишет ошибку «Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)» обошел все форумы, забивал формулу на английском. Все равно не работает.
= Excel.Sheets.Cells(1,1)
понял, проблемка только завтра попробую.
может там адреса в формате R1C1 забиты, хотя сумнительно либо на англицком формулу забей в ….Formula = …
«Formula =» пробовал не помогает, вообще неработало
«FormulaR1C1 =» тоже пробовал
могут быть какие-то настройки в самом EXL
везде на локальных машинах работает. Проблема только в терминале, хотя права у пользователей одинаковый.
проходил отладчиком, только я в таком состоянии, приму любое предложение которое не пробовал.
тест 1 поменять формула на «=1»
проверить схавает хоть что-то?
ну да, отсекаешь 1 причину за другой
может быть разные версии Оффис у юзеров? у меня изза этого раньше в VBA проблемы возникали.
на моей машине 2010, у клиента на локальных машинах и сервере 2003, и везде работает кроме терминала.
может при установки админ не на всех пользователей VBA установил.
excel без vba не ставится )
я уже готов поверить в любое не вероятное.
Только что проверил код в под терминалом — все работает. Проблема может быть с правами пользователей.
я под своим пользователем в терминал заходил, у меня не работало, под сисадмином заходил работает, назначил права сисадмина себе все равно не работает.
может мой пользователь не входит какую-то группу типа «Пользователи DCOM»
Права на папку КаталогВременныхФайлов посмотри на запись
я убирал строки КонецЕсли; без них отрабатывало под всеми пользователями нормально.
так что права у всех на временный каталог есть.
может там англицкий Excel у юзера, хотя сумнительно
Админ ставил под своим профелем и разрешил использовать всем пользователям, так что у всех один и тот же, но я проверю.
Подозрительное присвоение: Value = ДатаНачало Соответствует ли тип значения и формат ячейки xls и тип переменной ДатаНачало Потом надо подумать над присвоением: КоличествоДней = что-то Возможно это что-то (Value) надо привести к строковому типу. Для отладки можно присвоить строковые константы.
Лучше через setValue устанавливать значения, чем через прямое присвоение.
Суть в том что на присвоение даты не ругается, ругается на формулу
Это не сработало Excel.Sheets.Cells(1,»A») = Excel.Sheets.Cells(1,1)
Excel.Sheets.Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
Этот тест сработал тест 1 поменять формула на «=1»
мне кажется это права, но не могу понять какие и на что
Попробуй FormulaR1C1 — что скажет?
Excel.Sheets.Cells(1,1).FormulaLocal = «DAYS360(B1;C1;1)» это сработало, но не посчитал.
Как правильно передать DAYS360(B1;C1;1) третий параметр в EXL истина или ложь
А что должно было посчитать? И как именно «не посчитал»?
я написал вот так DAYS360(B1;C1;1), а надо было =DAYS360(B1;C1;1). И это не сработало. Извеняюсь.
что есть «не сработало»? Вылетела с ошибкой? в файле что-нить сохранилось?
а под юзером у которого проблема в терминале эксель запустить слабо?
ошибка даже самая какая и была в начале
под пользователем у которого не работает, запускаю эксель и все работает если руками на прямую в эксель забиваешь.
поэтому и говорю не понятный глюк.
Сервис — Параметры — Общие — Стиль ссылок R1C1 под проблемным пользователем стоит?
Excel.Sheets.Cells(1,1).Formula = «=B1»;
может тупо в формуле C или B в кириллице заведены
еще раз все перепроверил B это английская B, С тоже.
хм — а точно вылетает на установке формулы, а не раньше на Excel.Sheets? Не помню, честно говоря там индексы с 0 или с 1?
спецально отладчиком проходил, еще строку с присвоением формулы комментировал, затыкается только на формуле.
почему Formula? у меня это не сработало. я пишу FormulaLocal. Так же я пробовал Formula = «=B1» и FormulaLocal = «=B1», все отработало.
а не пробовал сначала данные в B1 и С1 заполнить, а уже потом формулу? )
Попробовал В1 и С1 заполнил, и все равно заткнулся на формуле.
Ради интереса изменил формулу
И все равно ругается на присвоение формулы.
лист не защищенный или ячейка?
я никаких защит не ставил. А как проверить?
Excel.Sheets.Cells(1,1).FormulaLocal = «=B1 + C1»;
Excel.Sheets.Cells(1,1).AllowEdit проверка на разрешение редактирования. Хотя можно проверить и просто попытвашись записать значение. Еще можно формулу попытаться вписать так:
Хоть что-то новенькое. Ошибка. Ошибка при получении значения атрибута контекста (Range): Неверное число параметров
А вот это посчитал Excel.Sheets.Cells(1,1).FormulaLocal = «=B1 + C1»;
я так понимаю проблема с использованием внутренних формул экселя, если простое сложение посчитал.
Excel.Application.Workbooks.Add; почему 1 в аргументе? а если просто Excel.Application.Workbooks.Add;
я где то взял пример создание нового документа и листа, и все работало пока в терминал не запустили.
Не помогло.Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)
покопался по хелпу, там формула присваивается только на актином листе (в примерах). Может стоит попробовать так:
кстати — попробуй по деревянному — зайди в эксель, создай формулу, а потом с 1Сы ее считай и посмотри как она выглядит )
спасибо большое, попробую но только завтра.
ничего не сработало. буду искать другой выход.
Я тут встречал расчеты. Европейский метод — ?(День(Дата2)=31,30,День(Дата2))-?(День(Дата1)=31,30,День(Дата1))+30*(Год(Дата2)*12+Месяц(Дата2)-Год(Дата1)*12-Месяц(Дата1)) Европейский метод расчет еще боле менее, а вот американский не правильно считает, может кто нибудь уже пытался решить это в 1С.
к примеру задаеш период 26.08.2010-12.02.2011 Европейски метод дает 166 Американский метод дает 184
В экселе оба метода дают 166
В порядке бреда, попробуй поменять местами строки кода Т.е. сначала присвоить даты, а уже потом формулу ссылающуюся на даты..
кажись нашел если кому интересно проверьте тоже, может я что-то не замечаю Американский метод расчета ?(День(ДатаКон)=31,30,День(НачалоДня(ДатаКон)) — День(НачалоМесяца(ДатаКон)))+?(День(ДатаНач)=31,30,День(КонецМесяца(ДатаНач)) — День(НачалоДня(ДатаНач)))+30*(Год(ДатаКон)*12+(Месяц(ДатаКон)-1)-Год(ДатаНач)*12-Месяц(ДатаНач))
Тэги:
Комментарии доступны только авторизированным пользователям
Ошибка в 1С 8. Ошибка при получении значения атрибута контекста (ОсновнаяРоль), Недопустимо использование свойства ОсновнаяРоль
Описание ошибки:
Проблема стала возникать после того, как в серверную базу УТ 10.3 был добавлен функционал Библиотеки МДЛП. Ошибка не проявляла себя явно при работе в режиме 1С: Предприятие, но негативно влияла на выполнение некоторых регламентных заданий, так что они аварийно прерывались.
Найденные решения:
{ОбщийМодуль.Пользователи.Модуль(116)}: Ошибка при получении значения атрибута контекста (ОсновнаяРоль)
по причине:
Недопустимо использование свойства «ОсновнаяРоль»
Проблема стала заметна случайно лишь тогда, когда в частности регламентное фоновое задание «Наличие новых ЭД» стало прерываться в процессе своего выполнения из за ошибки.
Рис. 1. Пример ошибки «Ошибка при получении значения атрибута контекста (ОсновнаяРоль)» в регламентном задании «Наличие новых эд в сервисе ЭДО«
Так же и в другом регламентном задании стала проявляться ошибка «Ошибка при получении значения атрибута контекста (ОсновнаяРоль) по причине: Недопустимо использование свойства «ОсновнаяРоль».
Рис. 2. Пример ошибки «Недопустимо использование свойства «ОсновнаяРоль» в регламентном задании «Выполнение обмена по сценарию…»
Удивителен тот факт, что код «Метаданные.ОсновнаяРоль» вполне нормальный. Т.е. конструкция вызывается в конфигураторе при конфигурировании как свойство объекта «Метаданные». Так же не возникает ошибок при проверка кода при сохранении изменений конфигурации.
Нажатие на изображении увеличит его
Рис. 3. Причина ошибки в коде, конструкция «Метаданные.ОсновнаяРоль = Неопределено».
Релиз используемой платформы 1С в базе, в которой возникла проблема — 8.3.18.1741
Рис. 4. Сведения о конфигурации, версии платформы и параметры конфигурации.
Удивительно, что описание данного свойства «ОсновнаяРоль» отсутствует в Синтакс-помощнике. Хотя, как уже было коротко упомянуто, свойство «ОсновнаяРоль» глобального свойства «Метеданные» используется в библиотеке МДЛП. Исходно основное назначение библиотеки — для конфигураций, работающих в режиме управляемого приложения. Конфигурация 1С: Управление торговлей 10.3 работает в другом режиме — обычного приложения. Поэтому получается, что конструкция кода эксплуатируется в редко используемой библиотеке и ее работоспособность не совсем понятна в текущем релизе платформы.
В сети оказалось достаточно мало вспомогательной информации об этой ошибке. Из найденного, что может кому-то помочь — это обсуждение на форуме forum.1c.ru «После обновления на 2.0.15.8 выпадает ошибка: Недопустимо использование свойства «ОсновнаяРоль».
Поэтому возможно, но это только неподтвержденное предположение, что метод работает только в конфигурациях, работающих в режиме управляемого приложения, т.к. о нем отсутствует какая-либо информация в официальной методике — «Синтакс-помощнике». Поскольку упоминание проблемы с «ОсновнаяРоль» и ее актуальное решение по приведенной выше ссылке действует для конфигурации 1С: Деньги, которая работает исключительно в режиме обычного приложения (интерфейса).
Рис. 5. Отсутствие в «Синтакс-помощнике» описания метода «ОсновнаяРоль»
Поэтому решением данной проблемы стало изменение кода на конструкцию: Метаданные.ОсновныеРоли.Количество()
Нажатие на изображении увеличит его
Рис. 6. Устранение ошибки «Ошибка при получении значения атрибута контекста (ОсновнаяРоль)» заменой текста кода.
Таким образом код стал актуальным для исполнения и в дальнейшем не вызывал ошибку.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
21-07-2022
Журавлев А.С.
(Сайт azhur-c.ru)
Описание ошибки:
Ошибка при установке значения атрибута контекста (Orientation) при установке атрибута листа Excel.
Найденные решения:
Попробуйте в Вашей Windows изменить размер шрифтов на стандартный.
Например в Windows 8: (правой кнопкой в свободной области рабочего стола вызываем меню) — пункт меню «Разрешение экрана» — «Изменение размеров текста и других элементов» — «Мелкий — 100% (по умолчанию)».
В Windows 7: (правой кнопкой в свободной области рабочего стола вызываем меню) — пункт меню «Разрешение экрана» — «Сделать текст и другие элементы больше или меньше» — «Мелкий — 100% (по умолчанию)».
В других версиях Windows процедура изменения размера шрифта отличается.
Других возможных вариантов решения проблемы в интернете не найдено. Если хотите поделится, то Ваше рашение будет добавлено на сайт со ссылкой на Ваш сайт или с сохранением авторства:
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
25-04-2014
Журавлев А.С.
(Сайт www.azhur-c.ru)