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 — 08.02.11 — 17:54
а без буковок попробуй
2 — 08.02.11 — 17:57
Не совсем понял.
3 — 08.02.11 — 17:58
Excel.Sheets(1).Cells(1,»A»)
=
Excel.Sheets(1).Cells(1,1)
4 — 08.02.11 — 17:58
без «А» в Cells(1,»A»)
5 — 08.02.11 — 17:59
понял, проблемка только завтра попробую.
6 — 08.02.11 — 18:00
может там адреса в формате R1C1 забиты, хотя сумнительно
либо на англицком формулу забей в
….Formula = …
7 — 08.02.11 — 18:00
других вариантов нету?
8 — 08.02.11 — 18:01
«Formula =» пробовал не помогает, вообще неработало
9 — 08.02.11 — 18:02
«FormulaR1C1 =» тоже пробовал
10 — 08.02.11 — 18:03
могут быть какие-то настройки в самом EXL
11 — 08.02.11 — 18:03
???
12 — 08.02.11 — 18:05
везде на локальных машинах работает. Проблема только в терминале, хотя права у пользователей одинаковый.
13 — 08.02.11 — 18:08
отладчик не предлагать?
14 — 08.02.11 — 18:12
проходил отладчиком, только я в таком состоянии, приму любое предложение которое не пробовал.
15 — 08.02.11 — 18:19
тест 1
поменять формула на «=1»
16 — 08.02.11 — 18:21
проверить схавает хоть что-то?
17 — 08.02.11 — 18:28
ну да, отсекаешь 1 причину за другой
18 — 08.02.11 — 18:29
отлично, попробую.
19 — 08.02.11 — 18:29
(0)может быть разные версии Оффис у юзеров? у меня изза этого раньше в VBA проблемы возникали.
20 — 08.02.11 — 18:36
на моей машине 2010, у клиента на локальных машинах и сервере 2003, и везде работает кроме терминала.
21 — 08.02.11 — 18:37
может при установки админ не на всех пользователей VBA установил.
22 — 08.02.11 — 18:39
????
23 — 08.02.11 — 18:39
(21) excel без vba не ставится )
24 — 08.02.11 — 18:39
может это быть причиной?
25 — 08.02.11 — 18:41
я уже готов поверить в любое не вероятное.
26 — 08.02.11 — 18:43
(21) Только что проверил код в (0) под терминалом — все работает. Проблема может быть с правами пользователей.
27 — 08.02.11 — 18:45
я под своим пользователем в терминал заходил, у меня не работало, под сисадмином заходил работает, назначил права сисадмина себе все равно не работает.
28 — 08.02.11 — 18:50
может мой пользователь не входит какую-то группу типа «Пользователи DCOM»
29 — 08.02.11 — 18:54
Права на папку КаталогВременныхФайлов() посмотри на запись
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;ЛОЖЬ)»;
КонецЕсли;
без них отрабатывало под всеми пользователями нормально.
31 — 08.02.11 — 18:58
так что права у всех на временный каталог есть.
32 — 08.02.11 — 19:01
может там англицкий Excel у юзера, хотя сумнительно
33 — 08.02.11 — 19:04
Админ ставил под своим профелем и разрешил использовать всем пользователям, так что у всех один и тот же, но я проверю.
34 — 08.02.11 — 21:51
(0)
Подозрительное присвоение: Value = ДатаНачало
Соответствует ли тип значения и формат ячейки xls и тип переменной ДатаНачало
Потом надо подумать над присвоением: КоличествоДней = что-то
Возможно это что-то (Value) надо привести к строковому типу.
Для отладки можно присвоить строковые константы.
35 — 08.02.11 — 21:56
Лучше через setValue устанавливать значения, чем через прямое присвоение.
36 — 09.02.11 — 06:42
Суть в том что на присвоение даты не ругается, ругается на формулу
37 — 09.02.11 — 06:59
Это не сработало
Excel.Sheets(1).Cells(1,»A»)
=
Excel.Sheets(1).Cells(1,1)
38 — 09.02.11 — 07:46
Excel.Sheets(1).Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
39 — 09.02.11 — 08:43
Этот тест сработал
тест 1
поменять формула на «=1»
40 — 09.02.11 — 08:46
Не сработало.
Excel.Sheets(1).Cells(1,1).Formula = «=DAYS360(B1;C1;0)»;
41 — 09.02.11 — 08:50
мне кажется это права, но не могу понять какие и на что
42 — 09.02.11 — 08:51
(40) Попробуй FormulaR1C1 — что скажет?
43 — 09.02.11 — 08:54
есть сдвиг
Excel.Sheets(1).Cells(1,1).FormulaLocal = «DAYS360(B1;C1;1)»
это сработало, но не посчитал.
44 — 09.02.11 — 08:54
Как правильно передать DAYS360(B1;C1;1) третий параметр в EXL истина или ложь
45 — 09.02.11 — 08:55
(43) А что должно было посчитать? И как именно «не посчитал»?
46 — 09.02.11 — 08:57
вернул неопределено
47 — 09.02.11 — 08:58
прошу прошения
48 — 09.02.11 — 08:58
я незаметил один знак
49 — 09.02.11 — 09:00
я написал вот так DAYS360(B1;C1;1), а надо было =DAYS360(B1;C1;1). И это не сработало. Извеняюсь.
50 — 09.02.11 — 09:16
что есть «не сработало»?
Вылетела с ошибкой?
в файле что-нить сохранилось?
51 — 09.02.11 — 09:33
а под юзером у которого проблема в терминале эксель запустить слабо?
52 — 09.02.11 — 11:53
ошибка даже самая какая и была в начале
53 — 09.02.11 — 11:54
под пользователем у которого не работает, запускаю эксель и все работает если руками на прямую в эксель забиваешь.
54 — 09.02.11 — 11:55
поэтому и говорю не понятный глюк.
55 — 09.02.11 — 12:19
Сервис — Параметры — Общие — Стиль ссылок R1C1 под проблемным пользователем стоит?
56 — 09.02.11 — 12:20
нет не стоит
57 — 09.02.11 — 12:21
Excel.Sheets(1).Cells(1,1).Formula = «=B1»;
58 — 09.02.11 — 12:21
может тупо в формуле C или B в кириллице заведены
59 — 09.02.11 — 12:30
еще раз все перепроверил B это английская B, С тоже.
60 — 09.02.11 — 12:33
хм — а точно вылетает на установке формулы, а не раньше на
Excel.Sheets(1)? Не помню, честно говоря там индексы с 0 или с 1?

61 — 09.02.11 — 12:40
спецально отладчиком проходил, еще строку с присвоением формулы комментировал, затыкается только на формуле.
62 — 09.02.11 — 12:52
Яч = Excel.Sheets(1).Cells(1,1);
Яч.Formula = «=B1»;
63 — 09.02.11 — 12:59
почему Formula? у меня это не сработало.
я пишу FormulaLocal.
Так же я пробовал Formula = «=B1» и FormulaLocal = «=B1», все отработало.
64 — 09.02.11 — 13:11
а не пробовал сначала данные в B1 и С1 заполнить, а уже потом формулу? )
65 — 09.02.11 — 13:20
Попробовал В1 и С1 заполнил, и все равно заткнулся на формуле.
66 — 09.02.11 — 13:20
Ради интереса изменил формулу
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)»;
И все равно ругается на присвоение формулы.
68 — 09.02.11 — 13:22
(67) лист не защищенный или ячейка?
69 — 09.02.11 — 13:23
я никаких защит не ставил. А как проверить?
70 — 09.02.11 — 13:24
новый лист создаю же.
71 — 09.02.11 — 13:33
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=B1 + C1»;
72 — 09.02.11 — 13:35
Excel.Sheets(1).Cells(1,1).AllowEdit проверка на разрешение редактирования. Хотя можно проверить и просто попытвашись записать значение.
Еще можно формулу попытаться вписать так:
Excel.Sheets(1).Cells(1,1).RANGE.FormulaLocal = ...
73 — 09.02.11 — 13:44
Хоть что-то новенькое.
Ошибка.
Ошибка при получении значения атрибута контекста (Range): Неверное число параметров
74 — 09.02.11 — 13:45
А вот это посчитал
Excel.Sheets(1).Cells(1,1).FormulaLocal = «=B1 + C1»;
75 — 09.02.11 — 13:48
я так понимаю проблема с использованием внутренних формул экселя, если простое сложение посчитал.
76 — 09.02.11 — 13:50
Excel.Application.Workbooks.Add(1);
почему 1 в аргументе?
а если просто
Excel.Application.Workbooks.Add();
77 — 09.02.11 — 13:52
я где то взял пример создание нового документа и листа, и все работало пока в терминал не запустили.
78 — 09.02.11 — 13:53
корявый пример )
79 — 09.02.11 — 13:54
(76) Не помогло.Ошибка при установке значения атрибута контекста (FormulaLocal): Произошла исключительная ситуация (0x800a03ec)
80 — 09.02.11 — 14:06
покопался по хелпу, там формула присваивается только на актином листе (в примерах).
Может стоит попробовать так:
Excel.Sheets(1).Activate;
ActiveSheet.FormulaLocal = ....
81 — 09.02.11 — 14:09
вот еще пример из хелпы:
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
82 — 09.02.11 — 14:27
Excel = Новый COMОбъект(«Excel.Application»);
Excel.Application.Workbooks.Add();
Excel.Visible = Истина;
83 — 09.02.11 — 15:14
(79) кстати — попробуй по деревянному — зайди в эксель, создай формулу, а потом с 1Сы ее считай и посмотри как она выглядит )
84 — 09.02.11 — 16:03
спасибо большое, попробую но только завтра.
85 — 12.02.11 — 03:39
ничего не сработало. буду искать другой выход.
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С.
87 — 12.02.11 — 03:52
к примеру задаеш период 26.08.2010-12.02.2011
Европейски метод дает 166
Американский метод дает 184
88 — 12.02.11 — 03:59
В экселе оба метода дают 166
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;ЛОЖЬ)»;
КонецЕсли;
Т.е. сначала присвоить даты, а уже потом формулу ссылающуюся на даты..
90 — 12.02.11 — 06:38
пробовал не помогает.
Andru
91 — 12.02.11 — 07:22
кажись нашел
если кому интересно проверьте тоже, может я что-то не замечаю
Американский метод расчета
?(День(ДатаКон)=31,30,День(НачалоДня(ДатаКон)) — День(НачалоМесяца(ДатаКон)))+?(День(ДатаНач)=31,30,День(КонецМесяца(ДатаНач)) — День(НачалоДня(ДатаНач)))+30*(Год(ДатаКон)*12+(Месяц(ДатаКон)-1)-Год(ДатаНач)*12-Месяц(ДатаНач))
Пишу вот такой код. Пользователи работают в терминале под одним пользователем отрабатывает отлично, у другого пользователя пишет ошибку «Ошибка при установке значения атрибута контекста (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. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов
|
_Azazel_ 0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
||||
|
1 |
||||
|
27.04.2012, 12:12. Показов 3554. Ответов 19 Метки нет (Все метки)
Есть вот такой код. По идее, он должен выгружать данные из табличной части и рассчитывать среднее значение по каждому столбцу, но он этого не делает.
__________________
0 |
|
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
|
27.04.2012, 12:52 |
2 |
|
Первый и второй считаются нормально, а вот последующие нет. Первый и второй — это кто? Не совсем ясно в чем проблема. На взгляд, все вроде работоспособно, нужно только чуть подчистить мелкие косяки, не влияющие на результат. Смущает использование Resize, мне думается, что в Вашем случае нужно использовать Range. Добавлено через 5 минут
1 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
27.04.2012, 12:56 |
3 |
|
Открываете справку по VBA и смотрите
1 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
27.04.2012, 17:27 [ТС] |
4 |
|
Первый и второй — это кто? Не совсем ясно в чем проблема. На взгляд, все вроде работоспособно, нужно только чуть подчистить мелкие косяки, не влияющие на результат. Смущает использование Resize, мне думается, что в Вашем случае нужно использовать Range. Добавлено через 5 минут Да мне надо модель марковица сделать, методы не принципиальны Добавлено через 1 час 0 минут
0 |
|
_Azazel_ 0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
||||
|
01.05.2012, 12:39 [ТС] |
5 |
|||
|
И снова затык. Ошибка : {Справочник.МодельМарковица.Форма.ФормаЭлемента.Фо рма(65)}: Ошибка при установке значения атрибута контекста (FormulaLocal)
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
01.05.2012, 13:46 |
6 |
|
«={МОБР(«+Лист.Cells(12,1).Address+»:»+Лист.Cells( j-1,НомерСтроки+2).Address(0,1)+»)}» Не корректную формулу устанавливаешь, проверяй строку формулы
1 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
01.05.2012, 13:58 [ТС] |
7 |
|
Спасибо, уже разобралась, там FormulaArray был) Задам еще один глупый вопрос — как в текушем элементе справочника добавить строку в табличную часть программным методом?
0 |
|
Dethmontt Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
||||
|
01.05.2012, 14:12 |
8 |
|||
0 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
01.05.2012, 16:03 [ТС] |
9 |
|
пробовала. но у меня данные, которые нужны при этом не записываются в колонки. почему?
0 |
|
Dethmontt Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
||||
|
01.05.2012, 16:39 |
10 |
|||
0 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
01.05.2012, 17:48 [ТС] |
11 |
|
а что за оператор такой «текущий объект»?
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
01.05.2012, 18:01 |
12 |
|
Это не оператор, а переменная. Добавлено через 3 минуты
0 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
01.05.2012, 18:04 [ТС] |
13 |
|
извините. я неточно выразилась. я не знаю как получить значение текущего объекта. просто при открытой форме мне надо в колонки табличной части добавить значения программно. как это сделать -понятия не имею, потому что ни в одной книге нет обозначения колонок табличных частей и текущего объекта. извините еще раз, я просто стараюсь разобраться(((( Добавлено через 1 минуту
0 |
|
Dethmontt Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
||||
|
01.05.2012, 18:08 |
14 |
|||
1 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
01.05.2012, 18:10 [ТС] |
15 |
|
Книги которые я читала — Технологии Интеграции, Практическое руководство разработчика, Простые примеры разработки…все издательства 1с, там этого нет, в интернете тоже искала, поймите, мне не лень набить в поисковике, но я не нашла — если вы знаете где находится, помогите буду благодарна Добавлено через 32 секунды
0 |
|
Dethmontt Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
||||
|
01.05.2012, 18:14 |
16 |
|||
|
Это если писать в модуле формы элемента справочника Если из внешней обработки то объект сначала нужно получать Добавлено через 3 минуты
0 |
|
_Azazel_ 0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
||||
|
01.05.2012, 18:15 [ТС] |
17 |
|||
|
Модуль формы. Пишу вот такую строчку
Это нормально, если потом реквизиты не всплывают при написании Строка. <реквизит>?
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
01.05.2012, 18:18 |
18 |
|
Простите, у вас управляемые формы?
0 |
|
0 / 0 / 2 Регистрация: 06.11.2009 Сообщений: 85 |
|
|
01.05.2012, 18:21 [ТС] |
19 |
|
ага, они самые
0 |
|
Dethmontt Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
||||
|
01.05.2012, 18:26 |
20 |
|||
|
Это нормально, если потом реквизиты не всплывают при написании Строка. <реквизит>? Да это нормально Добавлено через 2 минуты
кстати, а если стоит значение «справочник. ссылка» в колонке, можно как-то загружать данные туда из массива? Можно.
0 |
<?php // Полная загрузка сервисных книжек, создан 2023-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='
Related Posts
Получение логина и пароля техподдержки 1С из базы
Класс для вывода отчета в Excel
Счет-фактура для УПП
Библиотека классов для создания внешней компоненты 1С на C#
Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
Прайс-лист с артикулом в отдельной колонке
19 Comments
-
-
Обработка предлагает очень разумную технологию назначения цен оптовому покупателю, упрощает ему работу с каталогом продавца, помогает стимулировать продажи и дает возможность получить от покупателя заказ в электронном виде, что способно упростить и работу с заказами покупателей. Благодарю автора за прекрасные идеи, щедрость и профессиональное исполнение.
Reply ↓
-
(2) metodist, благодарю за отзыв.
Поддержите голосом (плюсом)
Reply ↓
-
Испытал в УПП на трехстах двух номенклатурах с картинками, анализом наличия на 2 складах и пятью типами цен. В конце:
{ВнешняяОбработка.ПрайсЛистВЕксель.МодульОбъекта(150)}: Ошибка при установке значения атрибута контекста (FormulaLocal)
ТекЛист.Range(Обл).FormulaLocal = «=»+СтрФормула.Формула;
по причине:
Произошла исключительная ситуация (0x800a03ec)
Получил в точности такое сообщение 2 раза при выгрузке из файловой базы.
При этом сумма заказа не считается и формулы расчета в ней нет, документ сам не записывается, увидеть и записать его приходится постараться.
Если уменьшить кол-во номенклатур, например — до 281, то все работает. Или можно оставить кол-во номенклатур, но уменьшить кол-во складов до одного. Тоже все тогда нормально.
Если при тех же параметрах база SQL, то 300 номенклатур выгружаются нормально, а 301 уже проблемно (зачем-то открываются в Экселе «Книга2» и «Книга 3»). При количестве еще немного большем база 1 раз зависла и Эксел не удавалось закрыть из-за требования открыть какую-то папку. Требование это не убиралось.
Reply ↓
-
(4) metodist, интересный момент
проверю
Reply ↓
-
У меня в упп ругалась на незаполненное поле (дополнительноеописаниетовара) решается комментированием 252 строки кому надо
Reply ↓
-
Всё работает.
Только при открытии сохранённого файла эксель, открывается ещё одна книга эксель, с теми же данными, что и в первой и при закрытии требует сохранения. Это так задумано?
Reply ↓
-
(7) NatalyaVP,
Нет. не должно быть так.
Просьба отписаться об этой проблеме всех у кого происходит то же самое.
Reply ↓
-
(8), возможно проблема в самом экселе. После перезагрузки компьютера никаких дополнительных окон не открывается.
Reply ↓
-
Доброго времени суток, не приходит обработка на почту((( Пишет что отправлено и все.
Reply ↓
-
-
(1)не хватает например нормальных отборов, в том яисле по свойствам и категориям, вообще конечно лучше было бы чтоб запрос был в построителе, или лучше даже на СКД.. а так конечно идея хорошая, делал подобное по 7-ку еще, на 8 было лень.Спасибо.
Reply ↓
-
(8)
У меня похожая проблема. Писал об этом (см.№4).
Reply ↓
-
Если цены в 1С установлены на характеристику, что актуально в детской одежде и женских колготках где от размера меняется цена в одном артикуле.
Reply ↓
-
(14) Ничего страшного.
В обработке предусмотрен вывод характеристик, ну и соответственно цен в разрезе характеристик.
Reply ↓
-
мне нужна такая обработка с ценами по характеристикам.
Reply ↓
-
-
У меня ут 10.3 а вы пример показали ут11. Есть возможность ценообразования по характеристикам и наличие тоже. Спасибо
Reply ↓
-
в этой версии нет к сожалению
Reply ↓
Leave a Comment
Ваш адрес email не будет опубликован. Обязательные поля помечены *

