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)
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Ошибка при выборе листа эксель |
Я |
falselight
21.03.19 — 10:34
Использую обработку для загрузки данных с эксель листов.
На форме появилось дерево, файла эксель и его листов. Выбираю лист.
Жму прочитать, в тз появляются данные.
Но если выбрать другой лист и нажать прочитать, то, выходит ошибка
{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(319)}: Ошибка при вызове метода контекста (Sheets)
Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
по причине:
Произошла исключительная ситуация (0x800a03ec)
То есть как её исключить? Что бы перечитывался другой выбранный лист?
falselight
1 — 21.03.19 — 10:39
Вижу ошибку, Excel — не определена в этом случае. Наверное в этом дело.
falselight
2 — 21.03.19 — 10:44
Все же ошибка идет, не подскажете почему?
{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(329)}: Ошибка при вызове метода контекста (Sheets)
Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
по причине:
Произошла исключительная ситуация (0x800a03ec)
Дмитрий
3 — 21.03.19 — 10:44
ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы чему равно?
falselight
4 — 21.03.19 — 10:51
Почему вот это бывает пустое?????
При первой загрузке там COMОбъект
(3) Названию выбранного листа.
falselight
5 — 21.03.19 — 10:51
(4+) Excel.Sheets
falselight
6 — 21.03.19 — 10:57
Точку останова ставлю, вроде как обновляются данные
без точки останова ошибка, как будто COMОбъект не успевает считаться, как тут быть?
falselight
7 — 21.03.19 — 10:58
как с этим быть? Что то не понятно!!!!
falselight
8 — 21.03.19 — 11:06
Почему не видна функция в 1с ТекущееВремя() ?
falselight
9 — 21.03.19 — 11:08
Хотел вот такую функцию использовать, паузу. но она не работает.
Процедура Пауза(Время)
чЧас=0; чМин=0; чСек=0;
ТекущееВремя(чЧас,чМин,чСек);
чТекВремя = чЧас*3600+чМин*60+чСек;
чВремяЗавершения = чТекВремя+Время;
Пока чТекВремя<чВремяЗавершения Цикл
ТекущееВремя(чЧас,чМин,чСек);
чТекВремя = чЧас*3600+чМин*60+чСек;
КонецЦикла;
КонецПроцедуры;
falselight
10 — 21.03.19 — 12:17
Ставлю точку останова на этой строке.
// ЧТЕНИЕ ЛИСТА
Процедура КоманднаяПанель1ПрочитатьДанныеСЛиста(Кнопка)
Если ОбрЗавершена = 1 Тогда
Сообщить(«Данный файл уже был обработан. Перезапустите обработку и выберите новый файл для загрузки!»);
Возврат;
КонецЕсли;
//
// Необходимый лист
Если Найти(СокрЛП(Строка(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы)), «xls») > 0 Тогда
Предупреждение(«Выберите конкретный лист для загрузки, а не сам файл!»);
Возврат;
КонецЕсли;
//
Если Excel = неопределено Тогда
Попытка
Excel = новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.»);
Возврат;
КонецПопытки;
//НашФайл = Excel.Workbooks.Open(ИмяФайла);
Excel.Workbooks.Open(ИмяФайла);
КонецЕсли;
//
//ПаузаПустымЦиклом(5);
//
Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
Читаю листы, у загруженного файла в дерево. Читается как и один так и другой.
Останавливаясь на точке останова. Как только я убираю точку останова, при этих же действиях вываливается ошибка.
{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(333)}: Ошибка при вызове метода контекста (Sheets)
Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
по причине:
Произошла исключительная ситуация (0x800a03ec)
Что нужно поправить? Подскажите пожалуйста!
falselight
11 — 21.03.19 — 12:21
Решил вопрос.
Нужно было сделать так, —
Excel = Неопределено;
//
КонецПроцедуры
Ошибка при выборе листа эксель |
Я |
falselight
21.03.19 — 10:34
Использую обработку для загрузки данных с эксель листов.
На форме появилось дерево, файла эксель и его листов. Выбираю лист.
Жму прочитать, в тз появляются данные.
Но если выбрать другой лист и нажать прочитать, то, выходит ошибка
{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(319)}: Ошибка при вызове метода контекста (Sheets)
Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
по причине:
Произошла исключительная ситуация (0x800a03ec)
То есть как её исключить? Что бы перечитывался другой выбранный лист?
falselight
1 — 21.03.19 — 10:39
Вижу ошибку, Excel — не определена в этом случае. Наверное в этом дело.
falselight
2 — 21.03.19 — 10:44
Все же ошибка идет, не подскажете почему?
{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(329)}: Ошибка при вызове метода контекста (Sheets)
Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
по причине:
Произошла исключительная ситуация (0x800a03ec)
Дмитрий
3 — 21.03.19 — 10:44
ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы чему равно?
falselight
4 — 21.03.19 — 10:51
Почему вот это бывает пустое?????
При первой загрузке там COMОбъект
(3) Названию выбранного листа.
falselight
5 — 21.03.19 — 10:51
(4+) Excel.Sheets
falselight
6 — 21.03.19 — 10:57
Точку останова ставлю, вроде как обновляются данные
без точки останова ошибка, как будто COMОбъект не успевает считаться, как тут быть?
falselight
7 — 21.03.19 — 10:58
как с этим быть? Что то не понятно!!!!
falselight
8 — 21.03.19 — 11:06
Почему не видна функция в 1с ТекущееВремя() ?
falselight
9 — 21.03.19 — 11:08
Хотел вот такую функцию использовать, паузу. но она не работает.
Процедура Пауза(Время) чЧас=0; чМин=0; чСек=0; ТекущееВремя(чЧас,чМин,чСек); чТекВремя = чЧас*3600+чМин*60+чСек; чВремяЗавершения = чТекВремя+Время; Пока чТекВремя<чВремяЗавершения Цикл ТекущееВремя(чЧас,чМин,чСек); чТекВремя = чЧас*3600+чМин*60+чСек; КонецЦикла; КонецПроцедуры;
falselight
10 — 21.03.19 — 12:17
Ставлю точку останова на этой строке.
// ЧТЕНИЕ ЛИСТА Процедура КоманднаяПанель1ПрочитатьДанныеСЛиста(Кнопка) Если ОбрЗавершена = 1 Тогда Сообщить("Данный файл уже был обработан. Перезапустите обработку и выберите новый файл для загрузки!"); Возврат; КонецЕсли; // // Необходимый лист Если Найти(СокрЛП(Строка(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы)), "xls") > 0 Тогда Предупреждение("Выберите конкретный лист для загрузки, а не сам файл!"); Возврат; КонецЕсли; // Если Excel = неопределено Тогда Попытка Excel = новый COMОбъект("Excel.Application"); Исключение Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel."); Возврат; КонецПопытки; //НашФайл = Excel.Workbooks.Open(ИмяФайла); Excel.Workbooks.Open(ИмяФайла); КонецЕсли; // //ПаузаПустымЦиклом(5); // Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select();
Читаю листы, у загруженного файла в дерево. Читается как и один так и другой.
Останавливаясь на точке останова. Как только я убираю точку останова, при этих же действиях вываливается ошибка.
{ВнешняяОбработка.ЗагрузкаИзExcel_1_2.Форма.Форма.Форма(333)}: Ошибка при вызове метода контекста (Sheets) Excel.Sheets(ЭлементыФормы.ДеревоЛистов.ТекущаяСтрока.Листы).select(); по причине: Произошла исключительная ситуация (0x800a03ec)
Что нужно поправить? Подскажите пожалуйста!
falselight
11 — 21.03.19 — 12:21
Решил вопрос.
Нужно было сделать так, -
Excel = Неопределено;
//
КонецПроцедуры
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
shtucer-igor 04.03.2009 at 12:54
однозначно плюс !
а можно тоже самое но чтобы грузило в установку цен номенклатуры контрагента ?
Reply ↓
softbear 11.03.2009 at 00:25
однозначно плюс !
Reply ↓
COMPER 19.03.2009 at 11:51
не работает. Но красиво
Reply ↓
COMPER 19.03.2009 at 11:53
Pim 19.03.2009 at 19:10
не работает :-(. Самый главный минус всех подобных обработок в том, что они грузят только одну цену в УТ. По крайней мере, я других не видел. Эта обработка похоже тоже грузит только одну цену, да ещё и запоролена…
А что делать, если мне надо загружать сразу четыре разных типов цен в один документ. (Не надо предлагать загружать по-одному — заказчик не хочет).
Reply ↓
egorover 20.03.2009 at 16:26
внимательней, там загрузка идёт по всем типам цен в строку
Reply ↓
olee 23.03.2009 at 00:40
У меня пишет:
{ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)
по причине:
Произошла исключительная ситуация (0x8002000b)
Reply ↓
egorover 23.03.2009 at 08:03
всё времени нет, укажите имя листа excel Лист1
Reply ↓
olee 23.03.2009 at 10:39
Создался пустой документ с комментарием из какого файла загружен.
Пытаюсь снова загрузить цены — пишет в регистре есть такая строка.
Захожу в регистр сведений — нет такой записи:(
Reply ↓
olee 25.03.2009 at 00:44
Разобрался, все работает!
Очень нужная обработка.
Плюс.
Reply ↓
dev_gen 31.03.2009 at 13:35
Ищу по всему инету такую разработку уже неделю.
Огромное спасибище
Reply ↓
kozakm 11.04.2009 at 08:26
VikFx 28.04.2009 at 11:00
то, что нужно, спасибо
Reply ↓
4emodan 06.05.2009 at 01:22
Большое спасибо! Давно искал.
Reply ↓
4emodan 06.05.2009 at 01:39
А можно сделать, чтоб находило товары не по артикулу, а по коду?
Reply ↓
petrash 06.06.2009 at 11:50
Выручил! Спасибо большое!
Reply ↓
qwertylion@rambler.ru 07.06.2009 at 19:01
Обработка хорошее но вот только документ пустой создается, не подскажите как быть?
Reply ↓
steelrat1976 20.06.2009 at 15:19
нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял
Reply ↓
qwertylion@rambler.ru 26.06.2009 at 22:20
при записи в ценообразование пустой лист
Reply ↓
qwertylion@rambler.ru 26.06.2009 at 22:22
все нормально разобрался нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял СПАСИБО steelrat1976
Reply ↓
Dimka74 21.07.2009 at 04:29
Пожалуй повторюсь: «А можно сделать, чтоб находило товары не по артикулу, а по коду?»
Reply ↓
sly99 07.10.2009 at 21:25
можно поподробнее, что где писать?
выдает ошибку
{ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)
по причине:
Произошла исключительная ситуация (0x8002000b)
Reply ↓
cooldanie 06.11.2009 at 15:51
Автор зачет! а можно по наименованию товара а не по артикулу? или сделайте универсально — по коду, по наименованию, по артикулу — и цены не будет вашей обработке. А если 2 колонки цены? опт и розница — 2я и 3я?
Reply ↓
helloworld 09.11.2009 at 14:31
{ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)
по причине:
Произошла исключительная ситуация (0x8002000b)
Это наверное когда страница Екселя названа не Лист1. Автор, выбрал бы просто первую страницу — Excel.Sheets(1).select();
Reply ↓
labuh 26.11.2009 at 03:38
Автору респект и уважуха.
А как быть с одинаковыми ценами номенклатуры? Обработка не читает одинаковые цены из экселя, — пишет «не нашли артикул ……..»
Reply ↓
labuh 27.11.2009 at 23:51
Здесь что, больше никто не живет???
Reply ↓
meser 06.12.2009 at 22:22
Спасибо, действительно обработка нужная, я бы добавил еще поиск не только по артиклу, но и по коду, наименованию.
Reply ↓
nikser 11.01.2010 at 18:40
Ничего не понимаю . у кого она работает??? документ изменения цен то создался , но пустой .
Reply ↓
Epishko 14.02.2010 at 22:04
Потратил массу времени — вбил артикулы, а в результате создает пустой документ. Жаль убитого воскресенья! Все-таки несмотря на обильные ссылки по поиску — эту задачку так пока никто и не решил качественно.
Reply ↓
Родная 14.04.2010 at 10:56
изначально все получается, но при загрузке, выбранных цен в 1С выдается ошибка
{ВнешняяОбработка.ЗагрузкаЦен(120)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Закупочная : ******* (Регистр сведений: Цены номенклатуры; Номер строки: 43)
по причине:
Запись с такими ключевыми полями существует! : Закупочная :**********(Регистр сведений: Цены номенклатуры; Номер строки: 43)
при том что справочник «Установка цен номенклатуры» пуст.
Что я не так делаю?
Reply ↓
provnick 24.01.2011 at 21:39
Да уж, было б описание, то немного времени потратить на заполнение формы, оказывается нужно файлик подготовить Excelский, страница Екселя названа должна Лист1 и артикул форматнуть в текстовой, а цены в числовой и заполняется таблица для передачи в документ. Но вопрос вот в чем: как две цены закинуть, поле то одно для выбора цены, у кого получилось? egorover пишет (6) «внимательней, там загрузка идёт по всем типам цен в строку» , но выходит только одна цена, что и как? Да еще пароль, понятно, а то…, что ж мышает второе поле для второй цены сделать, а? хоть бы приходную да расходную. В целом гуд и +, ще б поправить.
Reply ↓
Glenas 28.01.2011 at 14:46
Здравсвуйте. Помогайте, очень надо. Версия 8,2, УТ 11. При открытии выдавал ошибку, поменял ТипыЦенНоменклатуры на ВидыЦен. Обработка открывается, загружает файл xls, корректно находит цены. При попытке загрузки выдаёт {ВнешняяОбработка.ЗагрузкаЦен.МодульОбъекта(90)}: Поле объекта не обнаружено (НеПроводитьНулевыеЗначения) А код модуля запаролен! Что делать, автор? Спасибо
Reply ↓
egorover 29.07.2011 at 10:03
lenka-nes@mail.ru 13.10.2011 at 10:19
спасибо!пригодилось
Reply ↓
wwizard 01.11.2011 at 17:05
Пишет Ошибка при вызове метода контекста (Sheets)
Что делать?
Reply ↓
tgnike 08.11.2011 at 12:30
Она со всеми екселями работате?
Reply ↓
w22u 21.11.2011 at 14:54
Спасибо, протестируем Вашу обработку.
Reply ↓
Belka063 30.11.2011 at 09:30
Работает.Спасибо.Помогло
Reply ↓
AruslanM 07.12.2011 at 10:41
Спасибо за идею, пригодилось.
Reply ↓
Ibrogim 19.12.2011 at 10:51
Спасибо за обработку, помогла как пример
Reply ↓
ASoft 18.01.2012 at 22:14
maratsat 21.01.2012 at 17:44
Во-первых, хорошая обработка. Спасибо. Значительно сокращает время ввода документа.
Во-вторых, предложения по улучшению
Думаю было бы еще лучше, сделать ввод нескольких типов цен за один раз.
Или как вариант сделать возможным добавлять разные типы цен к одному документу.
А иначе получается, что розничные, оптовые и крупнооптовые цены в разных документах, что не удобно.
Reply ↓
wwizard 21.01.2012 at 23:25
(35) так что делать то
Reply ↓
egorover 23.01.2012 at 21:18
(42) так для этого и создавалось, колонки в таблице excel и есть различные типы цен
Reply ↓
egorover 23.01.2012 at 21:19
(43) имя листа в книге excel
Reply ↓
FE_D_OR83 31.01.2012 at 15:11
Спасибо за обработку,сэкономила время. Радует что каждый может доработать под себя.
Кстати неплохо бы в неё добавить возможность указывать цены для номенклатуры с характеристиками.
Reply ↓
fonomo0 31.01.2012 at 15:24
Автор С какими версиями Excel работает ваша отработка?
Reply ↓
AlexxxMksv 29.04.2012 at 12:17
Скажите ваша обработка может проверять соответствие единицы измерения из файла не с базовой единицей, не с единицей хранения остатков, не с единицей для отчетов, не с единицей мест, а с единицами по классификатору?
Reply ↓
TitanLuchs 17.06.2012 at 13:20
Замечательная штука, спасибо автору, помог сэкономить время на написание своего подобного «велосипеда»!
Reply ↓
MyPuK_OLD 19.11.2013 at 15:46
Есть какое-то описание или инструкция по использованию данной обработки? Подойдет ли она для работы с Комплексной автоматизацией редакция 1.1?
Reply ↓
egorover 19.11.2013 at 21:23
Пробуйте, не пробовал, код открыт
Reply ↓
Здравствуйте! Подскажите, пожалуйста! Загружаю из 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);
Товар = Справочники.Номенклатура.ПустаяСсылка();
// Ищем товар в справочнике по коду
Товар = Справочники.Номенклатура.НайтиПоКоду.Артикул;
// Если не нашли по коду, то ищем по наименованию
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.НайтиПоНаименованию.Наименование;
Конецесли;
//Если не нашли создаем новый
Если Товар.Пустая() Тогда
Товар = Справочники.Номенклатура.СоздатьЭлемент();
Товар.Наименование = НаименованиеТовара;
Товар.Артикул = Артикул;
Товар.БазоваяЕдиницаИзмерения = ЕдиницаИзмерения;
Товар.СтранаПроисхождения = НомерКолонкиСтрана;
Товар.Записать();
Конецесли;
КонецЦикла;
КонецПроцедуры
Народ, помогите, не могу понять почему на одном и том компе под разными пользователями работает и не работает, вываливает ошибку «Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)»? гуглом пользоваться умею, но ответа так и не нашел.
поправка, ексель 2010, работаем на терминалах по РДП, есть домен.
Sheets — лист книги. может обращается к несущствующему?
коллекция листов вообще-то
от этого сильно смысл последнего предложения поменялся? код покажи-то. и где именно валится
в смысле, от того что ты неправильное определение свойству дала? кстати, автор, Sheets — это не метод
самое интересное, что под одним пользователем работает нормально, а под другим пользователем вываливает ошибку
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
shtucer-igor 04.03.2009 at 12:54
однозначно плюс !
а можно тоже самое но чтобы грузило в установку цен номенклатуры контрагента ?
Reply ↓
softbear 11.03.2009 at 00:25
однозначно плюс !
Reply ↓
COMPER 19.03.2009 at 11:51
не работает. Но красиво
Reply ↓
COMPER 19.03.2009 at 11:53
Pim 19.03.2009 at 19:10
не работает :-(. Самый главный минус всех подобных обработок в том, что они грузят только одну цену в УТ. По крайней мере, я других не видел. Эта обработка похоже тоже грузит только одну цену, да ещё и запоролена…
А что делать, если мне надо загружать сразу четыре разных типов цен в один документ. (Не надо предлагать загружать по-одному — заказчик не хочет).
Reply ↓
egorover 20.03.2009 at 16:26
внимательней, там загрузка идёт по всем типам цен в строку
Reply ↓
olee 23.03.2009 at 00:40
У меня пишет:
{ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)
по причине:
Произошла исключительная ситуация (0x8002000b)
Reply ↓
egorover 23.03.2009 at 08:03
всё времени нет, укажите имя листа excel Лист1
Reply ↓
olee 23.03.2009 at 10:39
Создался пустой документ с комментарием из какого файла загружен.
Пытаюсь снова загрузить цены — пишет в регистре есть такая строка.
Захожу в регистр сведений — нет такой записи:(
Reply ↓
olee 25.03.2009 at 00:44
Разобрался, все работает!
Очень нужная обработка.
Плюс.
Reply ↓
dev_gen 31.03.2009 at 13:35
Ищу по всему инету такую разработку уже неделю.
Огромное спасибище
Reply ↓
kozakm 11.04.2009 at 08:26
VikFx 28.04.2009 at 11:00
то, что нужно, спасибо
Reply ↓
4emodan 06.05.2009 at 01:22
Большое спасибо! Давно искал.
Reply ↓
4emodan 06.05.2009 at 01:39
А можно сделать, чтоб находило товары не по артикулу, а по коду?
Reply ↓
petrash 06.06.2009 at 11:50
Выручил! Спасибо большое!
Reply ↓
qwertylion@rambler.ru 07.06.2009 at 19:01
Обработка хорошее но вот только документ пустой создается, не подскажите как быть?
Reply ↓
steelrat1976 20.06.2009 at 15:19
нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял
Reply ↓
qwertylion@rambler.ru 26.06.2009 at 22:20
при записи в ценообразование пустой лист
Reply ↓
qwertylion@rambler.ru 26.06.2009 at 22:22
все нормально разобрался нужно обязательно вводить коэффициент, если цена равна базовой, то коэффициент = 1 и тогда поля не пустые. Хотя можно было бы сказать сразу, а то сам часа два мучался пока не понял СПАСИБО steelrat1976
Reply ↓
Dimka74 21.07.2009 at 04:29
Пожалуй повторюсь: «А можно сделать, чтоб находило товары не по артикулу, а по коду?»
Reply ↓
sly99 07.10.2009 at 21:25
можно поподробнее, что где писать?
выдает ошибку
{ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)
по причине:
Произошла исключительная ситуация (0x8002000b)
Reply ↓
cooldanie 06.11.2009 at 15:51
Автор зачет! а можно по наименованию товара а не по артикулу? или сделайте универсально — по коду, по наименованию, по артикулу — и цены не будет вашей обработке. А если 2 колонки цены? опт и розница — 2я и 3я?
Reply ↓
helloworld 09.11.2009 at 14:31
{ВнешняяОбработка.ЗагрузкаЦен(7)}: Ошибка при вызове метода контекста (Sheets): Произошла исключительная ситуация (0x8002000b)
по причине:
Произошла исключительная ситуация (0x8002000b)
Это наверное когда страница Екселя названа не Лист1. Автор, выбрал бы просто первую страницу — Excel.Sheets(1).select();
Reply ↓
labuh 26.11.2009 at 03:38
Автору респект и уважуха.
А как быть с одинаковыми ценами номенклатуры? Обработка не читает одинаковые цены из экселя, — пишет «не нашли артикул ……..»
Reply ↓
labuh 27.11.2009 at 23:51
Здесь что, больше никто не живет???
Reply ↓
meser 06.12.2009 at 22:22
Спасибо, действительно обработка нужная, я бы добавил еще поиск не только по артиклу, но и по коду, наименованию.
Reply ↓
nikser 11.01.2010 at 18:40
Ничего не понимаю . у кого она работает??? документ изменения цен то создался , но пустой .
Reply ↓
Epishko 14.02.2010 at 22:04
Потратил массу времени — вбил артикулы, а в результате создает пустой документ. Жаль убитого воскресенья! Все-таки несмотря на обильные ссылки по поиску — эту задачку так пока никто и не решил качественно.
Reply ↓
Родная 14.04.2010 at 10:56
изначально все получается, но при загрузке, выбранных цен в 1С выдается ошибка
{ВнешняяОбработка.ЗагрузкаЦен(120)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : Закупочная : ******* (Регистр сведений: Цены номенклатуры; Номер строки: 43)
по причине:
Запись с такими ключевыми полями существует! : Закупочная :**********(Регистр сведений: Цены номенклатуры; Номер строки: 43)
при том что справочник «Установка цен номенклатуры» пуст.
Что я не так делаю?
Reply ↓
provnick 24.01.2011 at 21:39
Да уж, было б описание, то немного времени потратить на заполнение формы, оказывается нужно файлик подготовить Excelский, страница Екселя названа должна Лист1 и артикул форматнуть в текстовой, а цены в числовой и заполняется таблица для передачи в документ. Но вопрос вот в чем: как две цены закинуть, поле то одно для выбора цены, у кого получилось? egorover пишет (6) «внимательней, там загрузка идёт по всем типам цен в строку» , но выходит только одна цена, что и как? Да еще пароль, понятно, а то…, что ж мышает второе поле для второй цены сделать, а? хоть бы приходную да расходную. В целом гуд и +, ще б поправить.
Reply ↓
Glenas 28.01.2011 at 14:46
Здравсвуйте. Помогайте, очень надо. Версия 8,2, УТ 11. При открытии выдавал ошибку, поменял ТипыЦенНоменклатуры на ВидыЦен. Обработка открывается, загружает файл xls, корректно находит цены. При попытке загрузки выдаёт {ВнешняяОбработка.ЗагрузкаЦен.МодульОбъекта(90)}: Поле объекта не обнаружено (НеПроводитьНулевыеЗначения) А код модуля запаролен! Что делать, автор? Спасибо
Reply ↓
egorover 29.07.2011 at 10:03
lenka-nes@mail.ru 13.10.2011 at 10:19
спасибо!пригодилось
Reply ↓
wwizard 01.11.2011 at 17:05
Пишет Ошибка при вызове метода контекста (Sheets)
Что делать?
Reply ↓
tgnike 08.11.2011 at 12:30
Она со всеми екселями работате?
Reply ↓
w22u 21.11.2011 at 14:54
Спасибо, протестируем Вашу обработку.
Reply ↓
Belka063 30.11.2011 at 09:30
Работает.Спасибо.Помогло
Reply ↓
AruslanM 07.12.2011 at 10:41
Спасибо за идею, пригодилось.
Reply ↓
Ibrogim 19.12.2011 at 10:51
Спасибо за обработку, помогла как пример
Reply ↓
ASoft 18.01.2012 at 22:14
maratsat 21.01.2012 at 17:44
Во-первых, хорошая обработка. Спасибо. Значительно сокращает время ввода документа.
Во-вторых, предложения по улучшению
Думаю было бы еще лучше, сделать ввод нескольких типов цен за один раз.
Или как вариант сделать возможным добавлять разные типы цен к одному документу.
А иначе получается, что розничные, оптовые и крупнооптовые цены в разных документах, что не удобно.
Reply ↓
wwizard 21.01.2012 at 23:25
(35) так что делать то
Reply ↓
egorover 23.01.2012 at 21:18
(42) так для этого и создавалось, колонки в таблице excel и есть различные типы цен
Reply ↓
egorover 23.01.2012 at 21:19
(43) имя листа в книге excel
Reply ↓
FE_D_OR83 31.01.2012 at 15:11
Спасибо за обработку,сэкономила время. Радует что каждый может доработать под себя.
Кстати неплохо бы в неё добавить возможность указывать цены для номенклатуры с характеристиками.
Reply ↓
fonomo0 31.01.2012 at 15:24
Автор С какими версиями Excel работает ваша отработка?
Reply ↓
AlexxxMksv 29.04.2012 at 12:17
Скажите ваша обработка может проверять соответствие единицы измерения из файла не с базовой единицей, не с единицей хранения остатков, не с единицей для отчетов, не с единицей мест, а с единицами по классификатору?
Reply ↓
TitanLuchs 17.06.2012 at 13:20
Замечательная штука, спасибо автору, помог сэкономить время на написание своего подобного «велосипеда»!
Reply ↓
MyPuK_OLD 19.11.2013 at 15:46
Есть какое-то описание или инструкция по использованию данной обработки? Подойдет ли она для работы с Комплексной автоматизацией редакция 1.1?
Reply ↓
egorover 19.11.2013 at 21:23
Пробуйте, не пробовал, код открыт
Reply ↓
Автор beztrud, 19 июн 2014, 23:26
0 Пользователей и 1 гость просматривают эту тему.
Цитировать
1. Создаем реквизит формы Таблица
2. Заполняем ее на клиенте (отключаемся от ADO)
А если без реквизита Таблица — то я так понимаю можно использовать таблицу значений, а затем в табличную часть грузить из нее?
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Цитировать
Все что надо это:
1. Начальная строка
2. Количество колонок
3. Признак когда остановиться
Можете привести код с пояснениями, пожалуйста.
Попытка
ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
Исключение
ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке());
Отказ = Истина;
Возврат;
КонецПопытки;
СписокИмпорта.Очистить();
счСтроки = НачальнаяСтрока;
НомСтр = 0;
Пока ИСТИНА Цикл
НомСтр = НомСтр + 1;
ОбработкаПрерыванияПользователя();
ПроверочнаяЯчейка = СокрЛП(ФайлЭксель.Sheets(1).Cells(СчСтроки,1).Value);
Если ПроверочнаяЯчейка = "#" Тогда
Прервать;
КонецЕсли;
Если ПроверочнаяЯчейка = "" Тогда
Прервать;
КонецЕсли;
Состояние("Загрузка: строка №"+счСтроки);
НоваяСтрока = СписокИмпорта.Добавить();
НоваяСтрока.НомерСтроки = НомСтр;
Для Ш=1 По СписокИмпорта.Колонки.Количество()-1 Цикл
мКолонка = СписокИмпорта.Колонки.Получить(Ш);
ЗначениеЯчейки = ФайлЭксель.Sheets(1).Cells(СчСтроки,Ш).Value;
ЗаполнитьЗначениеПоТипуКолонки(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], мКолонка);
ОтформатироватьЗначениеПоля(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], Ш); //очистим от ненужных символов и пр.
КонецЦикла;
счСтроки = счСтроки + 1;
КонецЦикла;
ФайлЭксель.Application.Quit();
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
Если выбираем xls, то всё нормально, ну а если xlsx — то
{Обработка.ВычислениеПластика.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
ФайлЭксель = ПолучитьCOMОбъект(ИмяФайла);
по причине:
Ошибка получения объекта COM: -2147467259(0x80004005): Неопознанная ошибка
Добавлено: 20 июн 2014, 21:31
Кстати эта ошибка появляется при повторном выборе файла. При первом выборе ошибки нет, хоть и подгружает дольше, чем xls. Может быть проблема в
ФайлЭксель.Application.Quit();
Добавлено: 20 июн 2014, 21:59
После многократных попыток выяснилось, что ошибка не имеет последовательности. Т.е. может вылезти а может и нет.
Да такое поведение нормальное для конструкции
ПолучитьCOMОбъект(ИмяФайла);
если открыть файл закрыть и тут же снова открыть, на медленных компах процесс не успевает завершиться и ПолучитьCOMОбъект() подключается к существующему процессу снова, ну а процесс то уже не рабочий…
СП
Основное применение функции ПолучитьCOMОбъект — это получение COM-объекта, соответствующего файлу. Для этого следует в качестве первого параметра функции задать имя файла, который будет определять COM-объект. Например, фрагмент кода:
Таб = ПолучитьCOMОбъект(«C:DATADATA.XLS»);
создает объект Excel.Application и открывает с его помощью файл документа «C:DATADATA.XLS». Если указанный файл во время выполнения данного фрагмента уже открыт с помощью MS Excel, то будет получена ссылка на уже существующий объект.
Для файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
cska-fanat-kz
ПроверочнаяЯчейка = СокрЛП(ФайлЭксель.Sheets(1).Cells(СчСтроки,1).Value);
Выдает
{Обработка.ВычислениеПластика.Форма.Форма.Форма(72)}: Ошибка при вызове метода контекста (Cells)
ПроверочнаяЯчейка = Эксель.Sheets(1).Cells(СчСтроки,2).Value;
по причине:
Произошла исключительная ситуация (0x800a03ec)
Dethmontt
ЦитироватьДля файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Это как?
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
cska-fanat-kz
ЗаполнитьЗначениеПоТипуКолонки(ЗначениеЯчейки, НоваяСтрока[мКолонка.Имя], мКолонка);
А это что за функция?
Добавлено: 21 июн 2014, 08:43
Вернемся все-таки к ADO. Уважаемый Dethmontt просьба помочь. У меня на форме есть ТабличнаяЧасть.Вычисления. Реквизиты этой табличной части — ЧастьИзделия, ВысотаФасада, ШиринаФасада, КоличествоФасадов. Есть файл эксель без наименования столбцов в первой строке, т.е в первой строке уже находятся данные. Структура файла эксель всегда одинакова во второй колонке файла эксель всегда содержится ЧастьИзделия, в четвертой колонке всегда ВысотаФасада, в пятой — ШиринаФасада и в шестой — КоличествоФасадов. Вы писали — 1. Создаем реквизит формы Таблица — т.е нужно создать на форме ТабличныйДокумент с именем Таблица и грузить в него? Или как?
Все что пришло мне в голову это выбрать файл на клиенте а на сервере считать с него данные и передать на клиент. Но вот моя функция с переменной СтрокаТабличнойЧасти ругается, хоть и грузит данные. У меня к Вам просьба, если не сложно, выложите пожалуйста клиентскую и серверную процедуры для загрузки файла, применимо к моим реквизитам.
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 9287. Ответов 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-Месяц(ДатаНач))
Heltarion 2 / 2 / 0 Регистрация: 21.11.2011 Сообщений: 57 |
||||
1 |
||||
02.12.2011, 11:18. Показов 9452. Ответов 11 Метки нет (Все метки)
Добрый день! ТПП — «табличное поле правил», в ней уже занесены некотрые значения из XML Код процедуры:
0 |
309 / 309 / 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 |
309 / 309 / 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 |
309 / 309 / 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 |
309 / 309 / 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 |
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
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
08.02.11
✎
17:54
а без буковок попробуй
Andru
08.02.11
✎
17:57
Не совсем понял.
Tatitutu
08.02.11
✎
17:58
Excel.Sheets(1).Cells(1,»A»)
=
Excel.Sheets(1).Cells(1,1)
Andru
08.02.11
✎
17:58
без «А» в Cells(1,»A»)
Andru
08.02.11
✎
17:59
понял, проблемка только завтра попробую.
dk
08.02.11
✎
18:00
может там адреса в формате R1C1 забиты, хотя сумнительно
либо на англицком формулу забей в
….Formula = …
Andru
08.02.11
✎
18:00
других вариантов нету?
Andru
08.02.11
✎
18:01
«Formula =» пробовал не помогает, вообще неработало
Andru
08.02.11
✎
18:02
«FormulaR1C1 =» тоже пробовал
Andru
08.02.11
✎
18:03
могут быть какие-то настройки в самом EXL
Andru
08.02.11
✎
18:03
???
Andru
08.02.11
✎
18:05
везде на локальных машинах работает. Проблема только в терминале, хотя права у пользователей одинаковый.
dk
08.02.11
✎
18:08
отладчик не предлагать?
Andru
08.02.11
✎
18:12
проходил отладчиком, только я в таком состоянии, приму любое предложение которое не пробовал.
dk
08.02.11
✎
18:19
тест 1
поменять формула на «=1»
Andru
08.02.11
✎
18:21
проверить схавает хоть что-то?
dk
08.02.11
✎
18:28
ну да, отсекаешь 1 причину за другой
Andru
08.02.11
✎
18:29
отлично, попробую.
Капюшон
08.02.11
✎
18:29
(0)может быть разные версии Оффис у юзеров? у меня изза этого раньше в VBA проблемы возникали.
Andru
08.02.11
✎
18:36
на моей машине 2010, у клиента на локальных машинах и сервере 2003, и везде работает кроме терминала.
Andru
08.02.11
✎
18:37
может при установки админ не на всех пользователей VBA установил.
Andru
08.02.11
✎
18:39
????
dk
08.02.11
✎
18:39
(21) excel без vba не ставится )
Andru
08.02.11
✎
18:39
может это быть причиной?
Andru
08.02.11
✎
18:41
я уже готов поверить в любое не вероятное.
supremum
08.02.11
✎
18:43
(21) Только что проверил код в (0) под терминалом — все работает. Проблема может быть с правами пользователей.
Andru
08.02.11
✎
18:45
я под своим пользователем в терминал заходил, у меня не работало, под сисадмином заходил работает, назначил права сисадмина себе все равно не работает.
Andru
08.02.11
✎
18:50
может мой пользователь не входит какую-то группу типа «Пользователи DCOM»
kambala
08.02.11
✎
18:54
Права на папку КаталогВременныхФайлов() посмотри на запись
Andru
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
08.02.11
✎
18:58
так что права у всех на временный каталог есть.
dk
08.02.11
✎
19:01
может там англицкий Excel у юзера, хотя сумнительно
Andru
08.02.11
✎
19:04
Админ ставил под своим профелем и разрешил использовать всем пользователям, так что у всех один и тот же, но я проверю.
ХелпДеск
08.02.11
✎
21:51
(0)
Подозрительное присвоение: Value = ДатаНачало
Соответствует ли тип значения и формат ячейки xls и тип переменной ДатаНачало
Потом надо подумать над присвоением: КоличествоДней = что-то
Возможно это что-то (Value) надо привести к строковому типу.
Для отладки можно присвоить строковые константы.
ХелпДеск
08.02.11
✎
21:56
Лучше через setValue устанавливать значения, чем через прямое присвоение.
Andru
09.02.11
✎
06:42
Суть в том что на присвоение даты не ругается, ругается на формулу
Andru
09.02.11
✎
06:59
Это не сработало
Excel.Sheets(1).Cells(1,»A»)
=
Excel.Sheets(1).Cells(1,1)
dk
09.02.11
✎
07:46
Excel.Sheets(1).Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
Andru
09.02.11
✎
08:43
Этот тест сработал
тест 1
поменять формула на «=1»
Andru
09.02.11
✎
08:46
Не сработало.
Excel.Sheets(1).Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
Andru
09.02.11
✎
08:50
мне кажется это права, но не могу понять какие и на что
Rie
09.02.11
✎
08:51
(40) Попробуй FormulaR1C1 — что скажет?
Andru
09.02.11
✎
08:54
есть сдвиг
Excel.Sheets(1).Cells(1,1).FormulaLocal = «DAYS360(B1;C1;1)»
это сработало, но не посчитал.
Andru
09.02.11
✎
08:54
Как правильно передать DAYS360(B1;C1;1) третий параметр в EXL истина или ложь
Rie
09.02.11
✎
08:55
(43) А что должно было посчитать? И как именно «не посчитал»?
Andru
09.02.11
✎
08:57
вернул неопределено
Andru
09.02.11
✎
08:58
прошу прошения
Andru
09.02.11
✎
08:58
я незаметил один знак
Andru
09.02.11
✎
09:00
я написал вот так DAYS360(B1;C1;1), а надо было =DAYS360(B1;C1;1). И это не сработало. Извеняюсь.
dk
09.02.11
✎
09:16
что есть «не сработало»?
Вылетела с ошибкой?
в файле что-нить сохранилось?
Aprobator
09.02.11
✎
09:33
а под юзером у которого проблема в терминале эксель запустить слабо?
Andru
09.02.11
✎
11:53
ошибка даже самая какая и была в начале
Andru
09.02.11
✎
11:54
под пользователем у которого не работает, запускаю эксель и все работает если руками на прямую в эксель забиваешь.
Andru
09.02.11
✎
11:55
поэтому и говорю не понятный глюк.
Aprobator
09.02.11
✎
12:19
Сервис — Параметры — Общие — Стиль ссылок R1C1 под проблемным пользователем стоит?
Andru
09.02.11
✎
12:20
нет не стоит
dk
09.02.11
✎
12:21
Excel.Sheets(1).Cells(1,1).Formula = «=B1»;
dk
09.02.11
✎
12:21
может тупо в формуле C или B в кириллице заведены
Andru
09.02.11
✎
12:30
еще раз все перепроверил B это английская B, С тоже.
Aprobator
09.02.11
✎
12:33
хм — а точно вылетает на установке формулы, а не раньше на
Excel.Sheets(1)? Не помню, честно говоря там индексы с 0 или с 1?
Andru
09.02.11
✎
12:40
спецально отладчиком проходил, еще строку с присвоением формулы комментировал, затыкается только на формуле.
dk
09.02.11
✎
12:52
Яч = Excel.Sheets(1).Cells(1,1);
Яч.Formula = «=B1»;
Andru
09.02.11
✎
12:59
почему Formula? у меня это не сработало.
я пишу FormulaLocal.
Так же я пробовал Formula = «=B1» и FormulaLocal = «=B1», все отработало.
dk
09.02.11
✎
13:11
а не пробовал сначала данные в B1 и С1 заполнить, а уже потом формулу? )
Andru
09.02.11
✎
13:20
Попробовал В1 и С1 заполнил, и все равно заткнулся на формуле.
Andru
09.02.11
✎
13:20
Ради интереса изменил формулу
Andru
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
09.02.11
✎
13:22
(67) лист не защищенный или ячейка?
Andru
09.02.11
✎
13:23
я никаких защит не ставил. А как проверить?
Andru
09.02.11
✎
13:24
новый лист создаю же.
dk
09.02.11
✎
13:33
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=B1 + C1»;
Aprobator
09.02.11
✎
13:35
Excel.Sheets(1).Cells(1,1).AllowEdit проверка на разрешение редактирования. Хотя можно проверить и просто попытвашись записать значение.
Еще можно формулу попытаться вписать так:
Excel.Sheets(1).Cells(1,1).RANGE.FormulaLocal = ...
Andru
09.02.11
✎
13:44
Хоть что-то новенькое.
Ошибка.
Ошибка при получении значения атрибута контекста (Range): Неверное число параметров
Andru
09.02.11
✎
13:45
А вот это посчитал
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=B1 + C1»;
Andru
09.02.11
✎
13:48
я так понимаю проблема с использованием внутренних формул экселя, если простое сложение посчитал.
dk
09.02.11
✎
13:50
Excel.Application.Workbooks.Add(1);
почему 1 в аргументе?
а если просто
Excel.Application.Workbooks.Add();
Andru
09.02.11
✎
13:52
я где то взял пример создание нового документа и листа, и все работало пока в терминал не запустили.
dk
09.02.11
✎
13:53
корявый пример )
Andru
09.02.11
✎
13:54
(76) Не помогло.Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)
Aprobator
09.02.11
✎
14:06
покопался по хелпу, там формула присваивается только на актином листе (в примерах).
Может стоит попробовать так:
Excel.Sheets(1).Activate;
ActiveSheet.FormulaLocal = ....
Aprobator
09.02.11
✎
14:09
вот еще пример из хелпы:
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
dk
09.02.11
✎
14:27
Excel = Новый COMОбъект(«Excel.Application»);
Excel.Application.Workbooks.Add();
Excel.Visible = Истина;
Aprobator
09.02.11
✎
15:14
(79) кстати — попробуй по деревянному — зайди в эксель, создай формулу, а потом с 1Сы ее считай и посмотри как она выглядит )
Andru
09.02.11
✎
16:03
спасибо большое, попробую но только завтра.
Andru
12.02.11
✎
03:39
ничего не сработало. буду искать другой выход.
Andru
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
12.02.11
✎
03:52
к примеру задаеш период 26.08.2010-12.02.2011
Европейски метод дает 166
Американский метод дает 184
Andru
12.02.11
✎
03:59
В экселе оба метода дают 166
azernot
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
12.02.11
✎
06:38
пробовал не помогает.
Andru
12.02.11
✎
07:22
кажись нашел
если кому интересно проверьте тоже, может я что-то не замечаю
Американский метод расчета
?(День(ДатаКон)=31,30,День(НачалоДня(ДатаКон)) — День(НачалоМесяца(ДатаКон)))+?(День(ДатаНач)=31,30,День(КонецМесяца(ДатаНач)) — День(НачалоДня(ДатаНач)))+30*(Год(ДатаКон)*12+(Месяц(ДатаКон)-1)-Год(ДатаНач)*12-Месяц(ДатаНач))
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
Что то наверно накосячил, помогите найти в чем косяк. Вот код: Тип поля ВрНачало — Дата, но когда запускаю вылетает с ошибкой «Ошибка при установке значения атрибута контекста (ВидСравнения): Недопустимый тип сравнения Отбор[«ВрНачала»].ВидСравнения = ВидСравнения. ИнтервалВключаяГраницы; по причине: Недопустимый тип сравнения » перепробывал все типы, работает только с типом равно. в чем косяк??
сначала установи вид сравнения, а потом границы задавай
пробывал, вид сравнения устанваливать и до и после, и просто ставить «Больше», никак не катит (
дело в «Если Отбор.Найти(«ВрНачала») = Неопределено Тогда» клянусь своей треуголкой: одно из двух — либо поля такого нет принципиально в данных СписокЗаданийНаДень, либо оно имеет тип какой-то не кошерный
В отладчике открываю отбор, там есть тип поля «Врначала» тип Дата, и по умолчанию тип сравнения стоит «Равно», если ставить такой-же то все работает. Но мне нужен другой тип сравнения. (
Попробуй перед установкой отбора Отбор[«ВрНачала»].Использование = Ложь;
СписокЗаданийДень — это кто?
потом лезь в СП и внимательно читай про отбор этого типа.
Это регистр сведений, а ВрНачала — это его измерение
Если это набор записей: Использование: Только чтение. Описание: Тип: Отбор. Содержит объект Отбор, по которому осуществляется текущая фильтрация записей при считывании или записи набора. Список свойств объекта зависит от свойств регистра: для регистров сведений, для которых в конфигураторе установлен режим записи «Подчинение регистратору», отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений, для непериодических — только по значению измерений. Важно! Отбор может устанавливаться только на равенство.
Регистр у меня непериодический, и способ записи независимый,вот толькоинтересно почему отбор нельзя по другому выставить Спасибо
Тэги:
Комментарии доступны только авторизированным пользователям
После обновления модуля 4.0.0.3 {ПланОбмена.Б_ОбменССайтом.Форма.ФормаСписка.Форма(193)}: Метод объекта не обнаружен (ЗаполнитьПорядокПостроителяТоваров) Когда будет обновление модуля для 1С ? |
|
Администратор Сообщений: 4915 |
Посмотрю в чем дело. Если ошибка у меня воспроизведется — в новой версии будет поправлено. |
Администратор Сообщений: 4915 |
В версии 4.0.0.6 эта бага будет поправлена. |
а когда версия 4.0.0.6 — просто без этого тестить трудновато |
|
Александр Денисюк
Администратор Сообщений: 4915 |
#5 28.04.2014 12:27:51
Специально для вас сейчас собрал. Можете скачать по ссылке http://yadi.sk/d/49KQrpWHNUT6V |
||
спасибо! Будем дальше изучать . |
|
Александр Денисюк
Администратор Сообщений: 4915 |
#7 28.04.2014 15:29:08
Не за что. Если что — пишите. Баги исправим, замечания или предложения рассмотрим и, возможно, добавим. |
||
вот такая ошибка выходит например, при попытке обмена заказами: УТ 10.3.29.1 модуль обмена 4.0.0.3 и 4.0.0.6 по ссылке выше попробовали. Такая же ошибка выходила и при выгрузке товаров у html-описания товара. видимо не нравиться MaxLength. описания все удалили, обмен товарами прошел. а заказы не ходят. |
|
Администратор Сообщений: 4915 |
Да, есть такая проблема в XDTO… Посмотрю, что можно сделать. Придется проверять длину на данные, хотя и не хотелось бы, т.к. упадет скорость.. |
Александр Денисюк
Администратор Сообщений: 4915 |
#10 28.04.2014 16:05:48
С описанием товаров поправил, а вот с контрагентом не совсем понятно.Походу первоначально он пришел с сайта и у него длина Ид больше 40.. |
||
Пользователь 9984 Эксперт Сообщений: 303 |
#11 28.04.2014 16:23:34
Похоже что так. Спасибо! Может скомпилируете сборку на попробовать? skype: bob_kulikoff |
||
Александр Денисюк
Администратор Сообщений: 4915 |
#12 28.04.2014 16:37:30
Тут http://yadi.sk/d/JngBHM_3NWm5N лежит 4.0.0.7 |
||||
Спасибо! Теперь обмен с заказами прошел легко и непринужденно. Александр, не подскажите, не планируется ли обмен «рекомендуемых товаров», т.е. сопутки? Новый компонент для сопутки уже есть, а можно ли будет ее штатно выгружать? Пока для себя делаем с новым обменом на произвольном справочнике. |
|
Александр Денисюк
Администратор Сообщений: 4915 |
#14 28.04.2014 16:53:30
Пока, насколько мне известно, не планируется. Сейчас надо бы модули обмена оттестировать и выпустить адаптации. А в будущем посмотрим. |
||
Александр, тестируем дальше. Создали справочник c одним реквизитом и одной ТЧ. Типы данных ссылочные на номенклатуру. В выгрузке отмечаем только «обмен пользовательскими справочниками». При выгрузке сразу ошибка: {ОбщийМодуль.Б_ПроцедурыОбменаССайтом.Модуль(144 }: Ошибка при вызове метода контекста (Выполнить) |
|
Александр Денисюк
Администратор Сообщений: 4915 |
#16 29.04.2014 13:22:32
Тут есть нюанс. Если вы сами создаете свой справочник, то вам его нужно добавить в состав узла Б_ОбменССайтом. К сожалению 1С не позволяет сразу указать всевозможные справочники, поэтому по там стоят только типовые. |
||
Идем еще проще. Создали справочник с одним текстовым реквизитом. При записи элемента получаем сообщение: Не удалось зарегистрировать изменение для элемента 0000000001. Элемент не будет отправлен на сайт Битрикс в режиме изенений. |
|
Зарегистрировали в узле. Но сейчас созданный пользовательский справочник с одним текстовым реквизитом не выгружается: Выгрузка информации по пользовательским справочникам Перед этим, штатный справочник «Должности организаций» выгрузился без проблем. |
|
Администратор Сообщений: 4915 |
Может там есть нечитаемый символ? Ошибка как раз во время разбора XML на стороне сайта. |
Александр, а табличная часть справочника не выгружается, правильно? |
|
Александр Денисюк
Администратор Сообщений: 4915 |
#21 29.04.2014 15:05:29
Нет, не выгружается. |
||
кстати после интеграции Ошибка при выполнении обработчика — ‘ПриЗаписи’ |
|
Как я понял |
|
Александр Денисюк
Администратор Сообщений: 4915 |
#24 30.04.2014 10:44:40
Задумывалось, что все документы, которые влияют на заказ, должны регистрировать эти заказы. Но вообще, можно указать только заказы и отгрузки. |
||
Александр Денисюк
Администратор Сообщений: 4915 |
#25 30.04.2014 11:25:33
В следующей версии будет поправлено. |
||