Имя: Пароль:
1C
1C 7.7
v7: Как РассчитатьРегистрыНА() через ОЛЕ, если заранее не известно имя регистра?
,
0 vSobolev
 
13.07.12
17:57
Классический пример расчета остатков регистра по ОЛЕ:
Рег = БазаОЛЕ.createobject("Регистры");
ВремРег=Рег.Товары;
ВремРег.ВременныйРасчет(1);
Рег.РассчитатьРегистрыНА(ТекДата);
А если заранее не известны имена регистров, надо тупо перебрать все регистры по Метаданным, тогда как получить ВремРег?
Для Сч=1 по Метаданные.Регистр() Цикл
  Идентификатор = Метаданные.Регистр(Сч).Идентификатор;
  ВремРег = ???;
КонецЦикла;
1 дущ
 
13.07.12
18:04
Ну этааа... сейчас не помню, но попробуй так

Рег = СоздатьОбъект("Регистры." + ИмяРега);
Рег.РассчитатьРегистрыНа(ТекДата);
2 Rie
 
13.07.12
18:04
ПолучитьАтрибут(...)
3 vSobolev
 
13.07.12
18:10
Рег = СоздатьОбъект("Регистры." + ИмяРега);
Рег.РассчитатьРегистрыНа(ТекДата);
Здесь мы имеем объект - регистр, а у регистра нет метода РассчитатьРегистрыНа(ТекДата), соответственно, возвращается ошибка "Поле агрегатного объекта не обнаружено (РассчитатьРегистрыНа)"
4 vSobolev
 
13.07.12
18:13
ПолучитьАтрибут(...) - а как это можно использовать???
5 Z1
 
13.07.12
18:14
(0) Вызывай глобальную процедуру по OLE
Вот только как передавать обратно то что рассчитал уже
не помню
В крайнем случае точно через файл получиться.
6 vSobolev
 
13.07.12
18:17
(5) Но прежде чем вызвать глобальную процедуру, надо во всех регистрах признак временного расчета установить. А как это сделать через метаданные?
7 Rie
 
13.07.12
18:20
(4)
Регистры = БазаОЛЕ.CreateObject("Регистры");
Рег = Регистры.ПолучитьАтрибут(ИмяМоегоРегистра);
8 Rie
 
13.07.12
18:21
(6)
После (7)
Рег.ВременныйРасчет(1);
9 vSobolev
 
13.07.12
18:22
(7)(8) Спасибо, сейчас попробую
10 Serginio1
 
13.07.12
18:23
8+ и закинуть в список.
11 Serginio1
 
13.07.12
18:25
10 а может и не надо.
12 vSobolev
 
13.07.12
19:02
Всем участникам спасибо, все работает.