![]() |
![]() |
|
v8: Работа 1С XLS непонятные глюки | ☑ | ||
---|---|---|---|---|
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)" обошел все форумы, забивал формулу на английском. Все равно не работает. |
|||
1
izekia
08.02.11
✎
17:54
|
а без буковок попробуй
|
|||
2
Andru
08.02.11
✎
17:57
|
Не совсем понял.
|
|||
3
Tatitutu
08.02.11
✎
17:58
|
Excel.Sheets(1).Cells(1,"A")
= Excel.Sheets(1).Cells(1,1) |
|||
4
Andru
08.02.11
✎
17:58
|
без "А" в Cells(1,"A")
|
|||
5
Andru
08.02.11
✎
17:59
|
понял, проблемка только завтра попробую.
|
|||
6
dk
08.02.11
✎
18:00
|
может там адреса в формате R1C1 забиты, хотя сумнительно
либо на англицком формулу забей в ....Formula = ... |
|||
7
Andru
08.02.11
✎
18:00
|
других вариантов нету?
|
|||
8
Andru
08.02.11
✎
18:01
|
"Formula =" пробовал не помогает, вообще неработало
|
|||
9
Andru
08.02.11
✎
18:02
|
"FormulaR1C1 =" тоже пробовал
|
|||
10
Andru
08.02.11
✎
18:03
|
могут быть какие-то настройки в самом EXL
|
|||
11
Andru
08.02.11
✎
18:03
|
???
|
|||
12
Andru
08.02.11
✎
18:05
|
везде на локальных машинах работает. Проблема только в терминале, хотя права у пользователей одинаковый.
|
|||
13
dk
08.02.11
✎
18:08
|
отладчик не предлагать?
|
|||
14
Andru
08.02.11
✎
18:12
|
проходил отладчиком, только я в таком состоянии, приму любое предложение которое не пробовал.
|
|||
15
dk
08.02.11
✎
18:19
|
тест 1
поменять формула на "=1" |
|||
16
Andru
08.02.11
✎
18:21
|
проверить схавает хоть что-то?
|
|||
17
dk
08.02.11
✎
18:28
|
ну да, отсекаешь 1 причину за другой
|
|||
18
Andru
08.02.11
✎
18:29
|
отлично, попробую.
|
|||
19
Капюшон
08.02.11
✎
18:29
|
(0)может быть разные версии Оффис у юзеров? у меня изза этого раньше в VBA проблемы возникали.
|
|||
20
Andru
08.02.11
✎
18:36
|
на моей машине 2010, у клиента на локальных машинах и сервере 2003, и везде работает кроме терминала.
|
|||
21
Andru
08.02.11
✎
18:37
|
может при установки админ не на всех пользователей VBA установил.
|
|||
22
Andru
08.02.11
✎
18:39
|
????
|
|||
23
dk
08.02.11
✎
18:39
|
(21) excel без vba не ставится )
|
|||
24
Andru
08.02.11
✎
18:39
|
может это быть причиной?
|
|||
25
Andru
08.02.11
✎
18:41
|
я уже готов поверить в любое не вероятное.
|
|||
26
supremum
08.02.11
✎
18:43
|
(21) Только что проверил код в (0) под терминалом - все работает. Проблема может быть с правами пользователей.
|
|||
27
Andru
08.02.11
✎
18:45
|
я под своим пользователем в терминал заходил, у меня не работало, под сисадмином заходил работает, назначил права сисадмина себе все равно не работает.
|
|||
28
Andru
08.02.11
✎
18:50
|
может мой пользователь не входит какую-то группу типа "Пользователи DCOM"
|
|||
29
kambala
08.02.11
✎
18:54
|
Права на папку КаталогВременныхФайлов() посмотри на запись
|
|||
30
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;ЛОЖЬ)"; КонецЕсли; без них отрабатывало под всеми пользователями нормально. |
|||
31
Andru
08.02.11
✎
18:58
|
так что права у всех на временный каталог есть.
|
|||
32
dk
08.02.11
✎
19:01
|
может там англицкий Excel у юзера, хотя сумнительно
|
|||
33
Andru
08.02.11
✎
19:04
|
Админ ставил под своим профелем и разрешил использовать всем пользователям, так что у всех один и тот же, но я проверю.
|
|||
34
ХелпДеск
08.02.11
✎
21:51
|
(0)
Подозрительное присвоение: Value = ДатаНачало Соответствует ли тип значения и формат ячейки xls и тип переменной ДатаНачало Потом надо подумать над присвоением: КоличествоДней = что-то Возможно это что-то (Value) надо привести к строковому типу. Для отладки можно присвоить строковые константы. |
|||
35
ХелпДеск
08.02.11
✎
21:56
|
Лучше через setValue устанавливать значения, чем через прямое присвоение.
|
|||
36
Andru
09.02.11
✎
06:42
|
Суть в том что на присвоение даты не ругается, ругается на формулу
|
|||
37
Andru
09.02.11
✎
06:59
|
Это не сработало
Excel.Sheets(1).Cells(1,"A") = Excel.Sheets(1).Cells(1,1) |
|||
38
dk
09.02.11
✎
07:46
|
Excel.Sheets(1).Cells(1,1).Formula = "=DAYS360(B1;C1;0)";
|
|||
39
Andru
09.02.11
✎
08:43
|
Этот тест сработал
тест 1 поменять формула на "=1" |
|||
40
Andru
09.02.11
✎
08:46
|
Не сработало.
Excel.Sheets(1).Cells(1,1).Formula = "=DAYS360(B1;C1;0)"; |
|||
41
Andru
09.02.11
✎
08:50
|
мне кажется это права, но не могу понять какие и на что
|
|||
42
Rie
09.02.11
✎
08:51
|
(40) Попробуй FormulaR1C1 - что скажет?
|
|||
43
Andru
09.02.11
✎
08:54
|
есть сдвиг
Excel.Sheets(1).Cells(1,1).FormulaLocal = "DAYS360(B1;C1;1)" это сработало, но не посчитал. |
|||
44
Andru
09.02.11
✎
08:54
|
Как правильно передать DAYS360(B1;C1;1) третий параметр в EXL истина или ложь
|
|||
45
Rie
09.02.11
✎
08:55
|
(43) А что должно было посчитать? И как именно "не посчитал"?
|
|||
46
Andru
09.02.11
✎
08:57
|
вернул неопределено
|
|||
47
Andru
09.02.11
✎
08:58
|
прошу прошения
|
|||
48
Andru
09.02.11
✎
08:58
|
я незаметил один знак
|
|||
49
Andru
09.02.11
✎
09:00
|
я написал вот так DAYS360(B1;C1;1), а надо было =DAYS360(B1;C1;1). И это не сработало. Извеняюсь.
|
|||
50
dk
09.02.11
✎
09:16
|
что есть "не сработало"?
Вылетела с ошибкой? в файле что-нить сохранилось? |
|||
51
Aprobator
09.02.11
✎
09:33
|
а под юзером у которого проблема в терминале эксель запустить слабо?
|
|||
52
Andru
09.02.11
✎
11:53
|
ошибка даже самая какая и была в начале
|
|||
53
Andru
09.02.11
✎
11:54
|
под пользователем у которого не работает, запускаю эксель и все работает если руками на прямую в эксель забиваешь.
|
|||
54
Andru
09.02.11
✎
11:55
|
поэтому и говорю не понятный глюк.
|
|||
55
Aprobator
09.02.11
✎
12:19
|
Сервис - Параметры - Общие - Стиль ссылок R1C1 под проблемным пользователем стоит?
|
|||
56
Andru
09.02.11
✎
12:20
|
нет не стоит
|
|||
57
dk
09.02.11
✎
12:21
|
Excel.Sheets(1).Cells(1,1).Formula = "=B1";
|
|||
58
dk
09.02.11
✎
12:21
|
может тупо в формуле C или B в кириллице заведены
|
|||
59
Andru
09.02.11
✎
12:30
|
еще раз все перепроверил B это английская B, С тоже.
|
|||
60
Aprobator
09.02.11
✎
12:33
|
хм - а точно вылетает на установке формулы, а не раньше на
Excel.Sheets(1)? Не помню, честно говоря там индексы с 0 или с 1? |
|||
61
Andru
09.02.11
✎
12:40
|
спецально отладчиком проходил, еще строку с присвоением формулы комментировал, затыкается только на формуле.
|
|||
62
dk
09.02.11
✎
12:52
|
Яч = Excel.Sheets(1).Cells(1,1);
Яч.Formula = "=B1"; |
|||
63
Andru
09.02.11
✎
12:59
|
почему Formula? у меня это не сработало.
я пишу FormulaLocal. Так же я пробовал Formula = "=B1" и FormulaLocal = "=B1", все отработало. |
|||
64
dk
09.02.11
✎
13:11
|
а не пробовал сначала данные в B1 и С1 заполнить, а уже потом формулу? )
|
|||
65
Andru
09.02.11
✎
13:20
|
Попробовал В1 и С1 заполнил, и все равно заткнулся на формуле.
|
|||
66
Andru
09.02.11
✎
13:20
|
Ради интереса изменил формулу
|
|||
67
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)"; И все равно ругается на присвоение формулы. |
|||
68
Aprobator
09.02.11
✎
13:22
|
(67) лист не защищенный или ячейка?
|
|||
69
Andru
09.02.11
✎
13:23
|
я никаких защит не ставил. А как проверить?
|
|||
70
Andru
09.02.11
✎
13:24
|
новый лист создаю же.
|
|||
71
dk
09.02.11
✎
13:33
|
Excel.Sheets(1).Cells(1,1).FormulaLocal = "=B1 + C1";
|
|||
72
Aprobator
09.02.11
✎
13:35
|
Excel.Sheets(1).Cells(1,1).AllowEdit проверка на разрешение редактирования. Хотя можно проверить и просто попытвашись записать значение.
Еще можно формулу попытаться вписать так: |
|||
73
Andru
09.02.11
✎
13:44
|
Хоть что-то новенькое.
Ошибка. Ошибка при получении значения атрибута контекста (Range): Неверное число параметров |
|||
74
Andru
09.02.11
✎
13:45
|
А вот это посчитал
Excel.Sheets(1).Cells(1,1).FormulaLocal = "=B1 + C1"; |
|||
75
Andru
09.02.11
✎
13:48
|
я так понимаю проблема с использованием внутренних формул экселя, если простое сложение посчитал.
|
|||
76
dk
09.02.11
✎
13:50
|
Excel.Application.Workbooks.Add(1);
почему 1 в аргументе? а если просто Excel.Application.Workbooks.Add(); |
|||
77
Andru
09.02.11
✎
13:52
|
я где то взял пример создание нового документа и листа, и все работало пока в терминал не запустили.
|
|||
78
dk
09.02.11
✎
13:53
|
корявый пример )
|
|||
79
Andru
09.02.11
✎
13:54
|
(76) Не помогло.Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)
|
|||
80
Aprobator
09.02.11
✎
14:06
|
покопался по хелпу, там формула присваивается только на актином листе (в примерах).
Может стоит попробовать так: |
|||
81
Aprobator
09.02.11
✎
14:09
|
вот еще пример из хелпы:
|
|||
82
dk
09.02.11
✎
14:27
|
Excel = Новый COMОбъект("Excel.Application");
Excel.Application.Workbooks.Add(); Excel.Visible = Истина; |
|||
83
Aprobator
09.02.11
✎
15:14
|
(79) кстати - попробуй по деревянному - зайди в эксель, создай формулу, а потом с 1Сы ее считай и посмотри как она выглядит )
|
|||
84
Andru
09.02.11
✎
16:03
|
спасибо большое, попробую но только завтра.
|
|||
85
Andru
12.02.11
✎
03:39
|
ничего не сработало. буду искать другой выход.
|
|||
86
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С. |
|||
87
Andru
12.02.11
✎
03:52
|
к примеру задаеш период 26.08.2010-12.02.2011
Европейски метод дает 166 Американский метод дает 184 |
|||
88
Andru
12.02.11
✎
03:59
|
В экселе оба метода дают 166
|
|||
89
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;ЛОЖЬ)"; КонецЕсли; Т.е. сначала присвоить даты, а уже потом формулу ссылающуюся на даты.. |
|||
90
Andru
12.02.11
✎
06:38
|
пробовал не помогает.
|
|||
91
Andru
12.02.11
✎
07:22
|
кажись нашел
если кому интересно проверьте тоже, может я что-то не замечаю Американский метод расчета ?(День(ДатаКон)=31,30,День(НачалоДня(ДатаКон)) - День(НачалоМесяца(ДатаКон)))+?(День(ДатаНач)=31,30,День(КонецМесяца(ДатаНач)) - День(НачалоДня(ДатаНач)))+30*(Год(ДатаКон)*12+(Месяц(ДатаКон)-1)-Год(ДатаНач)*12-Месяц(ДатаНач)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |