|
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); Спасибо всем, кто откликнулся |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |