Имя: Пароль:
1C
 
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 проверка на разрешение редактирования. Хотя можно проверить и просто попытвашись записать значение.
Еще можно формулу попытаться вписать так:

Excel.Sheets(1).Cells(1,1).RANGE.FormulaLocal = ...
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
покопался по хелпу, там формула присваивается только на актином листе (в примерах).
Может стоит попробовать так:

Excel.Sheets(1).Activate;
ActiveSheet.FormulaLocal = ....
81 Aprobator
 
09.02.11
14:09
вот еще пример из хелпы:

Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
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-Месяц(ДатаНач))