Имя: Пароль:
1C
1C 7.7
v7: OLE как в базе OLE выполнить ВРЕМЕННЫЙРАСЧЕТ
0 sergsol
 
22.06.12
13:20
Нужно из оле-базы получить данные из регистров не на ТА, а на какой-то произвольный момент. Как в местной базе задать "ВременныйРасчет" и "РассчитатьРегистрыПО" для оле-базы?
Подскажите пожалуйста как это можно реализовать?
1 sergsol
 
25.06.12
11:42
Дайте какую-нибудь зацепку.
2 ДенисЧ
 
25.06.12
11:44
рег = БазаТам.CreateObject("Регистр.МестаХранения");
рег.ВременныйРасчет(1);
БазаТам.РассчитатьРегистрыПо('01.04.2012');
3 sergsol
 
25.06.12
17:19
Спасибо. Принято.Проблема была в одинарных кавычках.

Еще проблема.

ТЗОле=БазаОле.CreateObject("ТаблицаЗначений");
РегОле.ВыгрузитьИтоги(ТЗОле);
БазаОле.глННРодитель=0; //перем в оле-базе с признаком внешняя
               ф2=ТЗОле.НайтиЗначение(ТовОле.Наименование,БазаОле.глННРодитель,"Наименование");
Если ф2=1 Тогда  // значение найдено
сообщить(БазаОле.глННРодитель);
конецесли;

Значения находятся---> ф2=1. но переменная БазаОле.глННРодитель, куда должен заноситься номер строки таблицы равна 0. По этой причине не могу спозиционироваться на нужной строке таблицы.

Подскажите где искать причину.
4 Ork
 
25.06.12
17:27
(3) Тип БазаОле.глННРодитель не число.
5 sergsol
 
25.06.12
18:13
А команда

БазаОле.глННРодитель=0; //перем в оле-базе с признаком внешняя

разве не определяет ее как число?
6 Ork
 
25.06.12
18:17
И все-таки результат ТипЗначенияСтр(БазаОле.глННРодитель) из отладчика - в студию.

"0" в семерке - аналог пустого значения любого типа. Например есть переменная ВыбКонтрагент с типом "Справочник.Контрагенты". Применение ВыбКонтрагент=0 выполнится в полный рост. При этом тип ВыбКонтрагент не изменится. Только станет Выбран() = 0.
7 welwel
 
25.06.12
18:19
(3) если в подключаемой базе определен глННРодитель,
то может и определить всю процедуру с нужными действиями целиком,
а не делать такие манипуляции через OLE?
8 sergsol
 
25.06.12
18:28
(6) Тип- Число
(7) Перем глННРодитель экспорт;
Я взял эту перем. , т.к. она нигде не используется в конфе. А менять эту конфу я не имею права!!!
9 Ork
 
25.06.12
18:34
(8) Забей на переменную из ОЛЕ базы. Пользуй свою. Числа по оле ходят без проблем.
10 sergsol
 
25.06.12
18:44
метод

глННРодитель=0;
ф2=ТЗОле.НайтиЗначение(ТовОле.Наименование,глННРодитель,"Наименование");

тоже не катит.
ф2=1;
глННРодитель тип число =0;
11 sergsol
 
27.06.12
11:38
Значит что написано в: http://mista.ru/articles1c/hare/article.15.html
чушь?
Цитирую:"...И еще раз обращу внимание: ОБЪЕКТЫ ОДНОЙ БАЗЫ ПРЕКРАСНО ПОНИМАЮТ ДРУГ ДРУГА...".
Выходит на самом деле не так!
12 1dvd
 
27.06.12
11:47
(11) простые объекты (строка, число, дата) понимаются базой ОЛЕ
13 sergsol
 
27.06.12
11:50
(12) Посмотри пожалуйста, что написано выше в (3).
14 1dvd
 
27.06.12
11:52
(13) Что за измерение "Наименование" в регистре БазыОЛЕ? Тип? Вид?
15 akaBrr
 
27.06.12
11:55
(11) на самом деле прекрасно понимают, что используется постоянно
16 1dvd
 
27.06.12
11:57
Если справочник, то

ф2=ТЗОле.НайтиЗначение(ТовОле.Наименование.ТекущийЭлемент(),глННРодитель,"Наименование");
17 1dvd
 
27.06.12
11:58
Если строка, то руки оторвать по самые гланды тому, кто такой регистр придумал
18 akaBrr
 
27.06.12
12:00
похоже что метод НайтиЗначение через ОЛЕ не работает, выгружай данные в локальную тз и работай с ней локально
19 sergsol
 
27.06.12
12:06
(14)-(17) Привожу последний код

   РегОле.УстановитьЗначениеФильтра("Подразделение",ФрмОле.ТекущийЭлемент(),2);
   РегОле.ВременныйРасчет();
   ф1=БазаОле.ExecuteBatch("РассчитатьРегистрыПо('"+Дата2+"')");
   ТЗОле=БазаОле.CreateObject("ТаблицаЗначений");
   РегОле.ВыгрузитьИтоги(ТЗОле);
   ТЗОле.НоваяКолонка("Наименование");
   ТЗОле.выбратьстроки();
   Пока ТЗОле.получитьстроку()=1 Цикл
       ТЗОле.Наименование=ТЗОле.Номенклатура.Наименование;
   конеццикла;


НайтиЗначение работает (ф2=1) Но номерстроки=0

(18) Попробую.
   ТЗОле.Свернуть("Номенклатура,Наименование","Количество,СтоимостьРуб");
   ТЗОле.сортировать("Наименование");
20 1dvd
 
27.06.12
12:08
(19) а ТовОЛЕ?
21 sergsol
 
27.06.12
12:13
(20) Справочник.Номенклаткра
22 1dvd
 
27.06.12
12:14
(21) т.е. по Самой номенклатуре у тебя не получилось найти тоже?
23 sergsol
 
27.06.12
12:15
(22) Верно
24 1dvd
 
27.06.12
12:16
так пробовал?

ф2=ТЗОле.НайтиЗначение(ТовОле.ТекущийЭлемент(),глННРодитель,"Номенклатура");
25 sergsol
 
27.06.12
12:17
(24) Спасибо. После обеда попробую.
26 akaBrr
 
27.06.12
12:26
ТекущийЭлемент() в ОЛЕ не работает
27 1dvd
 
27.06.12
12:26
(26) о_О ч дуба рухнул?
28 akaBrr
 
27.06.12
12:28
(27) а ты дебил?
29 akaBrr
 
27.06.12
12:30
исправляюсь, ТекущийЭлемент() в ОЛЕ работает, но грубить не надо было
30 1dvd
 
27.06.12
12:32
я не грубил.

Как раз в ОЛЕ без .ТекущийЭлемент() не работает
31 sergsol
 
27.06.12
14:51
код

ф2=ТЗОле.НайтиЗначение(ТовОле.ТекущийЭлемент(),БазаОле.глННРодитель,"Номенклатура");

и

ф2=ТЗОле.НайтиЗначение(ТовОле.ТекущийЭлемент().Наименование,БазаОле.глННРодитель,"Наименование");

не РАБОТАЮТ. В обоих случаях ф2=1, а параметр номерстроки=0, тип-число.
32 akaBrr
 
27.06.12
14:55
(31) см. (18) или грызи дальше кактус
33 sergsol
 
27.06.12
15:01
Да. Согласен. Спасибо.