|
Запрос в другую базу | ☑ | ||
---|---|---|---|---|
0
Borteg
28.09.12
✎
01:19
|
Доброй ночи. Появилась необходимость из одной базы сделать запрос в другую для отчета. Как можно это сделать?
Тоесть у меня есть внешняя обработка которая считает необходимые мне данные в первой базе, во второй базе есть тоже необходимые мне данные. как можно сделать запрос во вторую базу из первой чтобы получить данные и загрузить их в табличную часть например. |
|||
1
zladenuw
28.09.12
✎
02:48
|
создаешь СОМ, в нем запрос к бд источник. возврат тз. где поля строки. и выводишь. или же внешний источник данных и сразу в отчет в скд
|
|||
2
Borteg
28.09.12
✎
03:43
|
Спасибо за ответ, у меня все получилось, данные получил, но столкнулся с такой проблемой. Делаю запрос в регистр бухгалтерии 2 базы, запрос имеет параметр Датаконцапериода. он равен
Дата=Дата(2012,6,30); КонДня= КонецДня(Дата); дата3 =Новый Граница (кондня,ВидГраницы.Включая) ; в первой базе все срабатывает я получаю обороты мне необходимые на 2012.06.30 включая конец, во вторую базу я могу передать токо дата(2012,06,30) но тогда не попадают туда все нужные мне значения. как передать границу? Ошибка при вызове метода контекста (выполнить) выборка = запрос.выполнить().выбрать(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.16.352): {(8, 2)}: Ошибка обработки представления "РегистрБухгалтерии.Хозрасчетный.Обороты:Несоответствие типов (Параметр номер ""2"")" <<?>>РегистрБухгалтерии.Хозрасчетный.Обороты(,&Конпериода,,Счет=&Счет,,,,) КАК ХозрасчетныйОбороты |
|||
3
zladenuw
28.09.12
✎
03:44
|
а создать там
|
|||
4
Borteg
28.09.12
✎
03:46
|
а как это можно сделать? я просто только связался с этим.
|
|||
5
zladenuw
28.09.12
✎
03:48
|
а чего ты только можешь передать дату ? что при передачи границы ?
|
|||
6
Borteg
28.09.12
✎
03:48
|
выборка = запрос.выполнить().выбрать();
по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.16.352): {(8, 2)}: Ошибка обработки представления "РегистрБухгалтерии.Хозрасчетный.Обороты:Несоответствие типов (Параметр номер ""2"")" <<?>>РегистрБухгалтерии.Хозрасчетный.Обороты(,&Конпериода,,Счет=&Счет,,,,) КАК ХозрасчетныйОбороты вот такая ошибка |
|||
7
zladenuw
28.09.12
✎
03:51
|
весь текст
|
|||
8
zladenuw
28.09.12
✎
03:51
|
запроса
|
|||
9
Borteg
28.09.12
✎
03:52
|
олезапрос = "ВЫБРАТЬ
| ХозрасчетныйОбороты.Субконто1 как контрагент, | ХозрасчетныйОбороты.Субконто2 как договор, | ХозрасчетныйОбороты.Субконто3 как документрасчетов, | ХозрасчетныйОбороты.СуммаОборотДт как оборотДТ, | ХозрасчетныйОбороты.СуммаОборотКт как оборотКТ |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(,&Конпериода,,Счет=&Счет,,,,) КАК ХозрасчетныйОбороты" ; Запрос = УПП.NewObject("Запрос"); Запрос.Текст = олезапрос; Дата=Дата(2012,6,30); дата2= КонецДня(Дата); дата3 =Новый Граница (Дата2,ВидГраницы.Включая) ; Запрос.УстановитьПараметр("Конпериода",дата2); Счет5 = УПП.Планысчетов.Хозрасчетный.РасчетыСПоставщиками; Запрос.УстановитьПараметр("Счет", Счет5); //Планысчетов.Хозрасчетный.РасчетыСПоставщиками; выборка = запрос.выполнить().выбрать(); Пока выборка.следующий() цикл СтрокаТЧ = ОбороткаПравильная.Добавить(); Контр = Справочники.Контрагенты.НайтиПоНаименованию(выборка.контрагент.наименование); СтрокаТч.Контрагент=контр; дог=Справочники.ДоговорыКонтрагентов.НайтиПоКоду(выборка.договор.код); СтрокаТч.Договор =дог; СтрокаТч.ДокументРасчетов = Выборка.документрасчетов; СтрокаТЧ.ОборотДТ =Выборка.оборотДТ; СтрокаТч.ОборотКт=Выборка.ОборотКт; конеццикла; |
|||
10
Borteg
28.09.12
✎
03:53
|
только там дата3
в запросе |
|||
11
zladenuw
28.09.12
✎
03:54
|
Надо Соединение.NewObject("Граница")
|
|||
12
Borteg
28.09.12
✎
04:03
|
воо отлично получилось! спасибо большое) и последний вопрос) Я получаю в запросе ссылку на документ расчетов во второй базе, как мне в первой базе эту ссылку в табличную часть вставить. она имеет же составной тип данных
|
|||
13
Borteg
28.09.12
✎
04:04
|
я просто вот получал контрагента, и в справочники контрагента искал его по наименованию, а тут я не знаю к какому документу обратиться
|
|||
14
zladenuw
28.09.12
✎
04:07
|
вообще. какая задача
|
|||
15
Borteg
28.09.12
✎
04:09
|
ну я сделал запрос в 60.01 счет и должен вывести его в табл часть. субконто документ расчетов имеет составной тип данных.
у меня есть таблч часть со столбцом=составной тип данных. я получил запрос из второй базы данные и теперь ими заполняю табл часть другой базы |
|||
16
Borteg
28.09.12
✎
04:10
|
тоесть я имею ссылку со второй базы, этот документ есть в первой базе. мне надо в табл часть первой базы вывести ссылку на этот док.
|
|||
17
zladenuw
28.09.12
✎
04:11
|
не. ссылка только так
v8: Как узнать гуид элемента спр., если тип значения comОбъект где я писал. вообще какая задача |
|||
18
zladenuw
28.09.12
✎
04:12
|
если отчет. то получаешь все оттуда. проще сделай там запрос. а потом через ком. и все
|
|||
19
zladenuw
28.09.12
✎
04:12
|
только строки. в коме нету ссылок
|
|||
20
zladenuw
28.09.12
✎
04:13
|
понял ?
|
|||
21
Borteg
28.09.12
✎
04:14
|
пока неочень) ну вот в запросе я получил ссылку со второй базе. теперь мне надо в первой базе найти этот док. я понял что ссылок нету. надо через чтото другое искать. базы идентичны. тоесть guid итд итп одинаковые. тоесть мне надо получить guid этого документа и найти в первой базе этот док по guidу?)
|
|||
22
zladenuw
28.09.12
✎
04:15
|
а номера ?. вообще да. если они иднтч то можно через гуи. но тогда можно пробывать скд и вызывать внешнию функцию и по гуиду соединение
|
|||
23
Borteg
28.09.12
✎
04:17
|
мля как сложно все . осталось последняя фишка и так и думал что заткнусь на ней)
номера тоже совпадают, но тип данных то составной. в каком документ искать этот номер?( |
|||
24
zladenuw
28.09.12
✎
04:18
|
давай по порядку. где вообще искать. тип можно получить документа
|
|||
25
zladenuw
28.09.12
✎
04:23
|
(23) сложного нету. есть недопонимание
|
|||
26
Borteg
28.09.12
✎
04:24
|
База 1 = 2 по документам. Тоесть даты,guidы все одинаковое. На 60 счете по одним и тем же документам в базах разные обороты.
Мне надо сейчас вывести в первой базе обороты второй базы наложенные документы расчетов первой базы. Тоесть я получил запросом обороты. Мне теперь надо проставить субконто документ расчетов. Когда вя в табличную часть первой базы пишу СтрокаТч.ДокументРасчетов = Остатки.документрасчетов; где остатки запрос во вторую базу у меня просто там comobject стоит, а мне надо чтобы ссылка |
|||
27
zladenuw
28.09.12
✎
04:29
|
номер и тип документа .не ссылку надо
|
|||
28
Borteg
28.09.12
✎
04:30
|
тоесть вопрос сводится к минимуму я нашел документ во второй базе как мне теперь его найти в первой
|
|||
29
zladenuw
28.09.12
✎
04:34
|
попробуй внешний источник данных и соединить твоя поля по типу и по номеру. должно проканать. если же не. то получаешь тз документов с источника в приемнике делаешь соединение. потом вывод в отчет. но это долго
|
|||
30
Borteg
28.09.12
✎
04:36
|
Тоесть если по порядка
получил запросом ссылку во второй базе. выборка.номер - это мой номер как определить тип? в 1 базе. исходя их типа задаю запрос в нужные документы документы... найти по коду код суть понял только |
|||
31
zladenuw
28.09.12
✎
04:38
|
если есть гуид документа то лучше выборкой. тогда получишь приемник=источник. запрос походу не получится.
формируешь перебор, в тз. а потом тз в запрос. |
|||
32
zladenuw
28.09.12
✎
04:39
|
(31) но могу и ошибатся
|
|||
33
Web00001
28.09.12
✎
04:39
|
Зачем городить огород, если гуиды совпадают? Ну и получай ссылку напрямую через гуид он ведь для этого и нужен?
|
|||
34
zladenuw
28.09.12
✎
04:40
|
(33) в запросе ? как сразу ?
|
|||
35
Web00001
28.09.12
✎
04:43
|
(34) СтрокаТч.ДокументРасчетов = Остатки.документрасчетов; где остатки запрос во вторую базу у меня просто там comobject стоит, а мне надо чтобы ссылка
Надо ссылку? переделай сом объект в ссылку через гуид да и все. Или чота не так? |
|||
36
Borteg
28.09.12
✎
04:45
|
я бы с радостью передал но я с этим не встрречался и не сильно понимаю как. у меня есть ссылка на объект во второй базе.
1) как получить guid по этой ссылке 2) как найти по гуиду ссылку на документа в первой базе это то что я не понимаю |
|||
37
zladenuw
28.09.12
✎
04:49
|
(35) и как в запросе.
вот пример. но тут не ком. хотя это уже не запрос :) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.НаименованиеПолное, | Номенклатура.ЕдиницаИзмерения, | Номенклатура.СтавкаНДС, | Номенклатура.НоменклатурнаяГруппа, | Номенклатура.СчетУчетаЗапасов, | Номенклатура.СчетУчетаЗатрат, | Номенклатура.Ссылка, | Номенклатура.ЭтоГруппа | ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить(); СпрОбъект = РезультатЗапроса.Выбрать(); Пока СпрОбъект.Следующий() Цикл СтрокаУИ = Объект.XMLСтрока(СпрОбъект.Ссылка); GUID = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(СтрокаУИ))); КонецЦикла; |
|||
38
zladenuw
28.09.12
✎
04:50
|
||||
39
Borteg
28.09.12
✎
04:55
|
щас с гуидом попробую вроде разобрался
|
|||
40
zladenuw
28.09.12
✎
04:57
|
(39) это уже не запросом все. хотя пробуй. на 100 не подскажу
|
|||
41
Web00001
28.09.12
✎
04:58
|
из (26) я понял что у него там в параметре запроса стоит ком а не ссылка, то есть надо что бы срабатывало условие
СтрокаТч.ДокументРасчетов = Остатки.документрасчетов; то есть вместо Остатки.документрасчетов просто ДокументРасчетов который и будет тем самым документом восстановленным из гуида |
|||
42
zladenuw
28.09.12
✎
05:00
|
(41) по кому и равно....если гуи то тогда катит. а если не гуи. то только по дате и по номеру ?
|
|||
43
Borteg
28.09.12
✎
05:00
|
с гуидом както все понятно единственное как узнать гуид в подключенной базе
ссылка1 = выборка.документрасчетов; -выборка во второй базе гуид = Ссылка1.УникальныйИдентификатор();-это правильно будет? |
|||
44
Borteg
28.09.12
✎
05:02
|
comobject в табл части, чето опять не так делаю, как по гуиду найти обьект вроде понятно.
Вопрос как этот guid из второй базы передать в табличную часть первой базы например |
|||
45
zladenuw
28.09.12
✎
05:02
|
смотри в (17) если ссылка создана как там. то получишь
|
|||
46
Borteg
28.09.12
✎
05:02
|
как его вообще найти и передать в первую базу, если это обьясните вроде все остальное я понял
|
|||
47
zladenuw
28.09.12
✎
05:03
|
ну ты блин
|
|||
48
zladenuw
28.09.12
✎
05:03
|
а по ссылке посмотреть
ОбъектПолучателяСпр = ТекCOMОбъект.Справочники["Номенклатура"].ПолучитьСсылку(ВернутьУИД(ОбъектОтправителя)); |
|||
49
zladenuw
28.09.12
✎
05:04
|
ВернутьУИД(ОбъектОтправителя)
Возврат ТекCOMОбъект.Newobject("УникальныйИдентификатор",СокрЛП(ОбъектОтправителя.UUID())); // ВернутьУИД |
|||
50
zladenuw
28.09.12
✎
05:05
|
||||
51
zladenuw
28.09.12
✎
05:06
|
надо стрелять. кто не гугл или яндя
|
|||
52
Borteg
28.09.12
✎
05:07
|
Ошибка при вызове метода контекста (NewObject)
гуид=УПП.Newobject("УникальныйИдентификатор",СокрЛП(ссылка1.UUID())); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.16.352): Недопустимое значение параметра (параметр номер '1') |
|||
53
zladenuw
28.09.12
✎
05:11
|
обжект
|
|||
54
zladenuw
28.09.12
✎
05:12
|
Например:
МенДокументов = БазаПолучатель.Документы[ЦелевойТипДокумента]; UIDПолучатель = БазаПолучатель.NewObject("УникальныйИдентификатор", СокрЛП(UIDИсточник)); ДругойДокумент = МенДокументов.ПолучитьСсылку(UIDПолучатель); // проверим - удалось ли найти.. Если ДругойДокумент.ПолучитьОбъект() = НЕОПРЕДЕЛЕНО Тогда // не нашли ... КонецЕсли; |
|||
55
zladenuw
28.09.12
✎
05:13
|
||||
56
Borteg
28.09.12
✎
05:34
|
ох вроде получилось, только у меня там около 50000 записей, а гуид я так понял надо искать перебором по метаданным документы. тоесть это ему на день работы?)
|
|||
57
zladenuw
28.09.12
✎
05:35
|
че? значит плохо написал. то 5 минут. и то это много
|
|||
58
Borteg
28.09.12
✎
05:39
|
ну как плохо написал чтобы найти по guidy ссылку надо перебрать все документы
Для каждого л_Менеджер из Метаданные.Документы Цикл л_Ссылка = Документы[л_Менеджер.Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(рф_ЖУИД)); //Состояние(""+ТипЗнч(л_Ссылка)); ЭлементыФормы.НадписьТипЗначения.Заголовок = ТипЗнч(л_Ссылка); Если л_Ссылка.ПолучитьОбъект() <> Неопределено Тогда рф_Ссылка = л_Ссылка; КонецЕсли;; написанно перебором надо делать. вот у меня там куча записей и он щас я так понимаю для каждой записи сидит перебирает... |
|||
59
Borteg
28.09.12
✎
05:41
|
оу е перебрало)
|
|||
60
Borteg
28.09.12
✎
05:42
|
боже мой вроде даже правильно!)
|
|||
61
Borteg
28.09.12
✎
05:46
|
Блин мужики огромное Вам спасибо что провозились со мной столько времени. Все сработало как надо. Спасибо что объяснили как собладать с этой задачей, а то сам бы я надолго застрял.
|
|||
62
zladenuw
28.09.12
✎
05:51
|
надо веб кошелек создать. да взамен спасибо 50 копечек. так бы и миллиардером стал бы.
|
|||
63
Ranger_83
28.09.12
✎
06:13
|
"Ну, вы блин даете"(С)
|
|||
64
zladenuw
28.09.12
✎
06:20
|
а чЁ
|
|||
65
Web00001
28.09.12
✎
07:55
|
(64) Тебе за полчаса отвлеченной болтовни в стиле " хотя пробуй. на 100 не подскажу" еще и денег надо???
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |