|
СКД. Проблема с получением данных из другой базы. | ☑ | ||
---|---|---|---|---|
0
Bodrug
05.07.19
✎
14:38
|
Всем привет!
Пишу отчет, который сопоставляет данные по расчетам с контрагентами в одной базе с данными в другой. Подключение идет через COM. Все вроде хорошо. Но! Возникла проблема с выводом сумм взаиморасчетов. Вместо них СКД выводит количество строк с текущим контрагентом. Данные из базы источника передаются в базу приемник через ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр(). Вот листинг: Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если Соединение = Неопределено Тогда ТекстСообщения = ""; Соединение = ПолучитьСоединениеКБДРегл(ТекстСообщения); Если Соединение = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); Возврат; КонецЕсли; КонецЕсли; ДокументРезультат.Очистить(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; СегментыСервер.ВключитьОтборПоСегментуПартнеровВСКД(КомпоновщикНастроек); ПараметрВыборПериода = Новый ПараметрКомпоновкиДанных("ВыборПериода"); ВыборПериода= КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.НайтиЗначениеПараметра(ПараметрВыборПериода).Значение; ПериодНачало = НачалоДня(ВыборПериода.ДатаНачала); Период = КонецДня(ВыборПериода.ДатаОкончания); НаДату = Период; стКурсUSD = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(НаДату,Новый Структура("Валюта",Константы.ВалютаУправленческогоУчета.Получить() ) ); ПараметрКоэффПересчетаУпрРегл = Новый ПараметрКомпоновкиДанных("КоэффПересчетаУпрРегл"); КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрКоэффПересчетаУпрРегл,стКурсUSD.Курс); МакетКомпоновки = КомпоновщикМакета.Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки ); Попытка ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса.Вставить("ПериодНачало", ПериодНачало ); ПараметрыЗапроса.Вставить("Период", Период ); ТаблицаРасчетыСКлиентамиРегл = ПолучитьРасчетыСКлиентамиРегл(Соединение, ПараметрыЗапроса); Исключение Соединение = Неопределено; ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при выборе данных регл.: " + ОписаниеОшибки()); Возврат; КонецПопытки; ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ТаблицаРасчетыСКлиентамиРегл", ТаблицаРасчетыСКлиентамиРегл); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать( МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина ); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры Функция ПолучитьРасчетыСКлиентамиРегл(Соединение, ПараметрыЗапроса) МенеджерВрТаблиц = Соединение.NewObject("МенеджерВременныхТаблиц"); ЗапросРасчетыСКлиентами = Соединение.NewObject("Запрос"); ЗапросРасчетыСКлиентами.МенеджерВременныхТаблиц = МенеджерВрТаблиц; ЗапросРасчетыСКлиентами.Текст = "ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕССЫЛКИ(ХозрасчетныйОстаткиИОбороты.Счет) КАК Счет, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ХозрасчетныйОстаткиИОбороты.Организация) КАК Организация, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ХозрасчетныйОстаткиИОбороты.Субконто1) КАК Контрагент, | ХозрасчетныйОстаткиИОбороты.Субконто1.ИНН КАК ИНН, | ХозрасчетныйОстаткиИОбороты.Субконто1.КодПоЕДРПОУ КАК КодПоЕДРПОУ, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток) КАК СуммаНачальныйОстаток, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт) КАК СуммаНачальныйОстатокДт, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт) КАК СуммаНачальныйОстатокКт, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборот) КАК СуммаОборот, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотДт) КАК СуммаОборотДт, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаОборотКт, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток) КАК СуммаКонечныйОстаток, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт) КАК СуммаКонечныйОстатокДт, | СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт) КАК СуммаКонечныйОстатокКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет.Код =""361"", , ) КАК ХозрасчетныйОстаткиИОбороты |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстаткиИОбороты.Счет, | ХозрасчетныйОстаткиИОбороты.Организация, | ХозрасчетныйОстаткиИОбороты.Валюта, | ХозрасчетныйОстаткиИОбороты.НалоговоеНазначение, | ХозрасчетныйОстаткиИОбороты.Субконто1, | ХозрасчетныйОстаткиИОбороты.Субконто1.ИНН, | ХозрасчетныйОстаткиИОбороты.Субконто1.КодПоЕДРПОУ"; ЗапросРасчетыСКлиентами.УстановитьПараметр("НачалоПериода", ПараметрыЗапроса.ПериодНачало); ЗапросРасчетыСКлиентами.УстановитьПараметр("КонецПериода", ПараметрыЗапроса.Период); comТЗРасчетыСПартнерамиРегл = ЗапросРасчетыСКлиентами.Выполнить().Выгрузить(); стрТЗРасчетыСКлиентамиРегл = Соединение.ЗначениеВСтрокуВнутр(comТЗРасчетыСПартнерамиРегл); ТЗРасчетыСКлиентамиРегл = ЗначениеИзСтрокиВнутр(стрТЗРасчетыСКлиентамиРегл); Возврат ТЗРасчетыСКлиентамиРегл; КонецФункции |
|||
1
Bodrug
05.07.19
✎
14:39
|
Пишу подобного рода отчет впервые, поэтому не пинайте сильно =)
|
|||
2
craxx
05.07.19
✎
14:42
|
(0) неверный посыл изначально. ЗначениеВСТрокуВнутр() в одной базе не даст обратно ЗначениеИзСтрокиВнутр() в другой базе.
|
|||
3
sitex
naïve
05.07.19
✎
14:45
|
comТЗРасчетыСПартнерамиРегл = ЗапросРасчетыСКлиентами.Выполнить();
стрТЗРасчетыСКлиентамиРегл = Соединение.ЗначениеВСтрокуВнутр(comТЗРасчетыСПартнерамиРегл.Выгрузить()); |
|||
4
sitex
naïve
05.07.19
✎
14:46
|
А а потом только ЗначениеИзСтрокиВнутр
|
|||
5
toypaul
гуру
05.07.19
✎
14:47
|
если верить запросу, то тут никаких ссылок нет. соот-но не понятно зачем вся эта бодяга с ЗначениеВСТрокуВнутр
и вообще к чему весь этот лишний код. он никак не поможет найти проблему |
|||
6
sitex
naïve
05.07.19
✎
14:49
|
У меня в какой базе обмен через COM , выдает ошибку ЗначениеВСтрокуВнутр не найден метод , использовал ValueToStringInternal. на платформе 8.3.14. Кто знает в чем дело ?
|
|||
7
Bodrug
05.07.19
✎
14:49
|
(4) Не помогло
|
|||
8
Bodrug
05.07.19
✎
14:53
|
(5) В данном случае не могу отладить, т.к. база на сервере и отладка не включена. Изменить это не получится. Но, судя по всему, если делать ерез Запрос.Выполнить().Выгрузить() ,то получим COM-объект. Для получения таблицы значений и используем ЗначениеВСТрокуВнутр и ЗначениеИзСТрокуВнутр.
|
|||
9
Bodrug
05.07.19
✎
14:53
|
(8) через*
|
|||
10
sitex
naïve
05.07.19
✎
14:55
|
(9) Конфигурации одинаковые что ли ? в (5) намекает тебе на то что нафига ссылки то выгружаешь ?
|
|||
11
sqr4
05.07.19
✎
14:58
|
Я бы еще типы проверил, точно числовые.
{В данном случае не могу отладить, т.к. база на сервере и отладка не включена.} Сообщить то работает) |
|||
12
sitex
naïve
05.07.19
✎
14:59
|
(8) Открой справку , прочти что ЗначениеВСТрокуВнутр возвращает.
|
|||
13
sqr4
05.07.19
✎
15:00
|
(12) да походу там уиды одинаковые
|
|||
14
Bodrug
05.07.19
✎
15:03
|
(11) "Сообщить то работает" - да, что-то тупанул)) Пятница) Шайтан-машин сообщает, что это СОМ-объект.
|
|||
15
Bodrug
05.07.19
✎
15:04
|
(12) Возвращаемое значение:
Тип: Строка. Системное представление значения в информационной базе. |
|||
16
sqr4
05.07.19
✎
15:05
|
(15) дак ты результат из строкивнутр смотри
|
|||
17
Bodrug
05.07.19
✎
15:21
|
(16) ИзСтрокиВнутр - таблица значений. При чем там суммы нормальные... А в отчете выводятся уже не они.
|
|||
18
sqr4
05.07.19
✎
15:22
|
(17) Тип колонки? Как в СКД прописано? Какие функции стоят в ресурсах?
|
|||
19
sitex
naïve
05.07.19
✎
15:23
|
(17) А я то думаю где @ зарыта! :)
|
|||
20
Bodrug
05.07.19
✎
15:34
|
Разобрался. В наборе данных-объект не хватало нескольких полей. Спасибо, парни!
|
|||
21
sqr4
05.07.19
✎
15:36
|
(20) Но ты все же задумайся над словами ребят, твоя хрупкая конструкция работает до тех пор пока не будет разницы в УИДах
|
|||
22
Bodrug
05.07.19
✎
15:37
|
(21) Можешь, пожалуйста, подробнее объяснить? Разница в УИДах чего?
|
|||
23
sqr4
05.07.19
✎
15:40
|
(22) а нет тут уидов же))) Ты контрагентов соединяешься по наименованию?
|
|||
24
olegves
05.07.19
✎
15:42
|
(20) я бы лучше не выгружал в ТЗ результат запроса, а создавал ТЗ в основной базе и заполнял ее через выборку результата запроса. Так даже и быстрее по времени.
|
|||
25
Bodrug
05.07.19
✎
15:53
|
(23) По КодуЕДРПОУ
|
|||
26
Bodrug
05.07.19
✎
15:54
|
(21) Ты имеешь ввиду УИДы объектов?
|
|||
27
sqr4
05.07.19
✎
16:06
|
+
|
|||
28
Bodrug
05.07.19
✎
16:13
|
(27) Ок, спасибо, учту)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |