Имя: Пароль:
1C
1C 7.7
v7: Бух.итоги По Ole-соединению
0 MaxiMina
 
13.02.13
10:27
Здравствуйте. Помогите пожалуйста разобраться в использовании бух.итогов посредством OLE-соединения.
У меня есть две базы неидентичные. Из одной базы в другую подключаюсь и пытаюсь использовать бух.итоги. В базе, к которой подключаюсь, использую следующий код, который работает верно:

ВСчет = ВыбСчет79;
БИ=СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьСубконто(ВидыСубконто.Подразделения,Подразделение);
БИ.ВыполнитьЗапрос(НачДата,КонДата,ВыбСчет79,,,,"Проводка");
БИ.ВыбратьПериоды();
Пока БИ.ПолучитьПериод()=1 Цикл
флД=0;
флК=0;
//ДебИт - дабы не зацензурено было
Если (БИ.Операция.Дебит.Счет=Всчет) и (БИ.Операция.Кредит.Счет=Всчет) Тогда
Если БИ.Операция.Дебит.Субконто(1)<>Подразделение Тогда
флД=1;
КонецЕсли;
Если БИ.Операция.Кредит.Субконто(1)<>Подразделение Тогда
флК=1;
КонецЕсли;
КонецЕсли;
КонецЦикла;

При подключении использую следующий код:

БазаОле = СоздатьОбъект("V77.Application");
.......
ВыбСчет79 = БазаОле.CreateObject("Счет");
Если ВыбСчет79.НайтиПоКоду("79.2.1") = 1 Тогда
ВСчет = ВыбСчет79.ТекущийСчет();
КонецЕсли;
справПодр = БазаОле.CreateObject("Справочник.Подразделения");
справПодр.ВыбратьЭлементы();
Пока справПодр.ПолучитьЭлемент() = 1 Цикл
Вхожд = найти(справПодр.Наименование, "МоеПодразделение");
Если Вхожд > 0 Тогда
Подразделение = справПодр.ТекущийЭлемент();
Прервать;
КонецЕсли;
КонецЦикла;
БИ = БазаОле.CreateObject("БухгалтерскиеИтоги");
ВидСубкПодрОле = БазаОле.ВидыСубконто.Подразделения;
БИ.ИспользоватьСубконто(ВидСубкПодрОле, Подразделение);
БИ.ВыполнитьЗапрос(НачДата,КонДата,ВСчет,,,1,"Проводка",);
БИ.ВыбратьПериоды(0,0,0,0);
Пока БИ.ПолучитьПериод()=1 Цикл
флД=0;
флК=0;
Если (БИ.Операция.Дебит.Счет=Всчет) и (БИ.Операция.Кредит.Счет=Всчет) Тогда
Если БИ.Операция.Дебит.Субконто(1)<>Подразделение Тогда
флД=1;
КонецЕсли;
Если БИ.Операция.Кредит.Субконто(1)<>Подразделение Тогда
флК=1;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Дальше в код не вдаюсь. В базе, к которой подключаюсь, код отрабатывает по определенному подразделению. Во втором случае подразделение не проходит и перебирает все бух.итоги. Подскажите пожалуйста, где ошибка?
Заранее спасибо.
1 Тьма
 
13.02.13
10:31
Есть ли значение в переменной Подразделение - проверьте отладчиком или через Сообщить.
2 KishMish
 
13.02.13
10:37
(0) возможно спр подразделения подчиненный, и поэтому не находит без указания владельца
3 1Сергей
 
13.02.13
10:38
БИ.ИспользоватьСубконто(ВидыСубконто.Подразделения,Подразделение,1,0);
4 1Сергей
 
13.02.13
10:39
При работе по ОЛЕ всегда указываете все параметры функций, даже те, которые устанавливаются "по-умолчанию"
5 пипец
 
13.02.13
10:40
Пока справПодр.ПолучитьЭлемент() = 1 Цикл
Вхожд = найти(справПодр.Наименование, "МоеПодразделение");
Если Вхожд > 0 Тогда
Подразделение = справПодр.ТекущийЭлемент();
Прервать;
КонецЕсли;
КонецЦикла;

жесть
6 ЧеловекДуши
 
13.02.13
10:42
Оле зло, делай через файлик, продуктивней :)
7 ЧеловекДуши
 
13.02.13
10:45
+ Отбор в ОЛЕ это не отбор в БД из которой ты вызвал ОЛЕ.
т.е. самое трудное, это организовать отбор.
Ибо Агрегатный тип в текущей БД не равен Агрегатному типу.
Ну есть и хорошое. Число и Строка, эна и в ОЛЕ число и строка.
С датой почти так же, но есть некоторые проблемы.
8 MaxiMina
 
13.02.13
11:23
(1) В Подразделение есть значение Ole-базы
(2) справочник не подчиненный
(3) с указанием всех параметров результат остается тем же
(5) грубовато, но для наглядности сойдет
(6) избавляемся от файликов
9 пипец
 
13.02.13
12:07
(8) найти по наименованию не ?

Вхожд = найти(справПодр.Наименование, "МоеПодразделение");
Если Вхожд > 0 Тогда
Подразделение = справПодр.ТекущийЭлемент();
Прервать;
КонецЕсли;

ЗЫ а если не нашел - чо у тя выполнится ? а ?
10 пипец
 
13.02.13
12:09
+

БИ.Операция.Кредит.Субконто(1)<>Подразделение
ты ваще чо сравниваешь ? оле объект и оле ?
лучше все таки по строкам приведение делать или уж проверки на объектность
11 1Сергей
 
13.02.13
12:20
(8) >> с указанием всех параметров результат остается тем же

это касается всех функций
12 пипец
 
13.02.13
12:23
+ как минимум оле тормознутая шопипец
13 MaxiMina
 
13.02.13
12:40
(9) НайтиПоНаименованию действует так же, как и эта кракозябра с поиском вхождений
(10) БИ.Операция.Кредит.Субконто(1)<>Подразделение пока опустим, раз подразделение не проходит, то пока в этом смысла нет
(11) все добавлялось во все функции - 0 результата
(12) не могу не согласиться
14 1Сергей
 
13.02.13
13:01
Зато по ОЛЕ всё можно сделать по одному клику.
15 80ksa
 
13.02.13
13:20
(7) +100. да, надо думать как построить взаимосвязи с соответствующими друг другу по смыслу объектами из обеих баз.
16 KishMish
 
13.02.13
13:28
для позиционирования в оле базе, при идентичности кодов элементов справочника, можно использовать вот это
ПодразделениеОЛЕ=ОЛЕГ.ЗначениеИзСтроки(ЗначениеВСтроку(ПодразделениеТУТ));
17 пипец
 
13.02.13
13:58
(13) не так же - найти по наименованию ищет либо по вхождению либо по точному соответствию - а вхождение только на вхождение
ЗЫ опять же повторюсь - если НЕ НАШЛО ? как будет выполняться процедура ? проверки то нету
18 MaxiMina
 
13.02.13
14:09
(16) Справочники разные в двух базах
19 MaxiMina
 
13.02.13
14:14
(17) находит, потому что вбиваю точное наименование (в доп.проверке пока нет смысла, если ищу только по одному подразделению, которое четко соответствует)
пробую по вхождению - находит, пробую НайтиПоНаименованию - находит, поэтому пока мне тоже неважно, каким методом будет искать, считай, что ищу НайтиПоНаименованию
20 пипец
 
13.02.13
14:43
ВидСубкПодрОле = БазаОле.ВидыСубконто.Подразделения;
БИ.ИспользоватьСубконто(ВидСубкПодрОле
Идентификатор()
Синтаксис:
Идентификатор()
Назначение:
Возвращает строку - идентификатор вида субконто как он задан в метаданных.
Ole Бух итоги
http://forum.sources.ru/index.php?showtopic=127087
21 пипец
 
13.02.13
14:45
http://www.1c-galaxy.ru/forum5/topic46593/Зы ссылки читать вниматочно
22 MaxiMina
 
13.02.13
14:49
спасибо, почитаю
23 пипец
 
13.02.13
14:52
БИ.Операция.ДебИт
бррррр
24 MaxiMina
 
13.02.13
15:01
(23) там поправочка есть в виде коммента)
25 MaxiMina
 
13.02.13
19:32
кому интересно: дело было в строчке
БИ.ВыбратьПериоды(0,0,0,0);
заменой последнего параметра решилась проблема
БИ.ВыбратьПериоды(0,0,0,1);
Спасибо всем, кто откликнулся