Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

СКД. Проблема с получением данных из другой базы.

СКД. Проблема с получением данных из другой базы.
Я
   Bodrug
 
05.07.19 - 14:38
Всем привет!
Пишу отчет, который сопоставляет данные по расчетам с контрагентами в одной базе с данными в другой. Подключение идет через COM. Все вроде хорошо. Но! Возникла проблема с выводом сумм взаиморасчетов. Вместо них СКД выводит количество строк с текущим контрагентом. Данные из базы источника передаются в базу приемник через ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр().

Вот листинг:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Если Соединение = Неопределено Тогда
        ТекстСообщения = "";
        Соединение = ПолучитьСоединениеКБДРегл(ТекстСообщения);
        Если Соединение = Неопределено Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    ДокументРезультат.Очистить();

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    СегментыСервер.ВключитьОтборПоСегментуПартнеровВСКД(КомпоновщикНастроек);
    
    ПараметрВыборПериода = Новый ПараметрКомпоновкиДанных("ВыборПериода");
    ВыборПериода= КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.НайтиЗначениеПараметра(ПараметрВыборПериода).Значение;
    ПериодНачало = НачалоДня(ВыборПериода.ДатаНачала);
    Период = КонецДня(ВыборПериода.ДатаОкончания);
    НаДату = Период;
    стКурсUSD = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(НаДату,Новый Структура("Валюта",Константы.ВалютаУправленческогоУчета.Получить() ) );
    ПараметрКоэффПересчетаУпрРегл = Новый ПараметрКомпоновкиДанных("КоэффПересчетаУпрРегл");
    КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрКоэффПересчетаУпрРегл,стКурсUSD.Курс);

    МакетКомпоновки = КомпоновщикМакета.Выполнить(
        СхемаКомпоновкиДанных,
        КомпоновщикНастроек.ПолучитьНастройки(),
        ДанныеРасшифровки
    );
        
    Попытка
        ПараметрыЗапроса = Новый Структура;
        ПараметрыЗапроса.Вставить("ПериодНачало", ПериодНачало );
        ПараметрыЗапроса.Вставить("Период", Период );        
        ТаблицаРасчетыСКлиентамиРегл = ПолучитьРасчетыСКлиентамиРегл(Соединение, ПараметрыЗапроса);
    Исключение
        Соединение = Неопределено;
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при выборе данных регл.: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТаблицаРасчетыСКлиентамиРегл", ТаблицаРасчетыСКлиентамиРегл);
        
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(
        МакетКомпоновки,
        ВнешниеНаборыДанных,
        ДанныеРасшифровки,
        Истина
    );

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.НачатьВывод();
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры

Функция ПолучитьРасчетыСКлиентамиРегл(Соединение, ПараметрыЗапроса)
    
    МенеджерВрТаблиц = Соединение.NewObject("МенеджерВременныхТаблиц");
    
    ЗапросРасчетыСКлиентами = Соединение.NewObject("Запрос");
    ЗапросРасчетыСКлиентами.МенеджерВременныхТаблиц = МенеджерВрТаблиц;
    ЗапросРасчетыСКлиентами.Текст = "ВЫБРАТЬ
    |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ХозрасчетныйОстаткиИОбороты.Счет) КАК Счет,
    |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ХозрасчетныйОстаткиИОбороты.Организация) КАК Организация,
    |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ХозрасчетныйОстаткиИОбороты.Субконто1) КАК Контрагент,
    |    ХозрасчетныйОстаткиИОбороты.Субконто1.ИНН КАК ИНН,
    |    ХозрасчетныйОстаткиИОбороты.Субконто1.КодПоЕДРПОУ КАК КодПоЕДРПОУ,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток) КАК СуммаНачальныйОстаток,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт) КАК СуммаНачальныйОстатокДт,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт) КАК СуммаНачальныйОстатокКт,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборот) КАК СуммаОборот,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотДт) КАК СуммаОборотДт,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаОборотКт,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток) КАК СуммаКонечныйОстаток,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт) КАК СуммаКонечныйОстатокДт,
    |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт) КАК СуммаКонечныйОстатокКт
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , Счет.Код =""361"", , ) КАК ХозрасчетныйОстаткиИОбороты
    
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОстаткиИОбороты.Счет,
    |    ХозрасчетныйОстаткиИОбороты.Организация,
    |    ХозрасчетныйОстаткиИОбороты.Валюта,
    |    ХозрасчетныйОстаткиИОбороты.НалоговоеНазначение,
    |    ХозрасчетныйОстаткиИОбороты.Субконто1,
    |    ХозрасчетныйОстаткиИОбороты.Субконто1.ИНН,
    |    ХозрасчетныйОстаткиИОбороты.Субконто1.КодПоЕДРПОУ";
    
    ЗапросРасчетыСКлиентами.УстановитьПараметр("НачалоПериода", ПараметрыЗапроса.ПериодНачало);
    ЗапросРасчетыСКлиентами.УстановитьПараметр("КонецПериода", ПараметрыЗапроса.Период);
    comТЗРасчетыСПартнерамиРегл = ЗапросРасчетыСКлиентами.Выполнить().Выгрузить();
    стрТЗРасчетыСКлиентамиРегл = Соединение.ЗначениеВСтрокуВнутр(comТЗРасчетыСПартнерамиРегл);
    ТЗРасчетыСКлиентамиРегл = ЗначениеИзСтрокиВнутр(стрТЗРасчетыСКлиентамиРегл);
    
    Возврат ТЗРасчетыСКлиентамиРегл;
    
КонецФункции
 
 
   Bodrug
 
1 - 05.07.19 - 14:39
Пишу подобного рода отчет впервые, поэтому не пинайте сильно =)
   craxx
 
2 - 05.07.19 - 14:42
(0) неверный посыл изначально. ЗначениеВСТрокуВнутр() в одной базе не даст обратно ЗначениеИзСтрокиВнутр() в другой базе.
   sitex
 
3 - 05.07.19 - 14:45
comТЗРасчетыСПартнерамиРегл = ЗапросРасчетыСКлиентами.Выполнить();
стрТЗРасчетыСКлиентамиРегл = Соединение.ЗначениеВСтрокуВнутр(comТЗРасчетыСПартнерамиРегл.Выгрузить());
   sitex
 
4 - 05.07.19 - 14:46
А а потом только ЗначениеИзСтрокиВнутр
   toypaul
 
5 - 05.07.19 - 14:47
если верить запросу, то тут никаких ссылок нет. соот-но не понятно зачем вся эта бодяга с ЗначениеВСТрокуВнутр

и вообще к чему весь этот лишний код. он никак не поможет найти проблему
   sitex
 
6 - 05.07.19 - 14:49
У меня в какой базе обмен через COM , выдает ошибку ЗначениеВСтрокуВнутр не найден метод , использовал ValueToStringInternal. на платформе 8.3.14. Кто знает в чем дело ?
   Bodrug
 
7 - 05.07.19 - 14:49
(4) Не помогло
   Bodrug
 
8 - 05.07.19 - 14:53
(5) В данном случае не могу отладить, т.к. база на сервере и отладка не включена. Изменить это не получится. Но, судя по всему, если делать ерез Запрос.Выполнить().Выгрузить() ,то получим COM-объект. Для получения таблицы значений и используем ЗначениеВСТрокуВнутр и ЗначениеИзСТрокуВнутр.
   Bodrug
 
9 - 05.07.19 - 14:53
(8) через*
   sitex
 
10 - 05.07.19 - 14:55
(9) Конфигурации одинаковые что ли ? в (5) намекает тебе на то что нафига ссылки то выгружаешь ?
   sqr4
 
11 - 05.07.19 - 14:58
Я бы еще типы проверил, точно числовые.
{В данном случае не могу отладить, т.к. база на сервере и отладка не включена.}
Сообщить то работает)
   sitex
 
12 - 05.07.19 - 14:59
(8) Открой справку , прочти что ЗначениеВСТрокуВнутр возвращает.
   sqr4
 
13 - 05.07.19 - 15:00
(12) да походу там уиды одинаковые
   Bodrug
 
14 - 05.07.19 - 15:03
(11) "Сообщить то работает" - да, что-то тупанул)) Пятница) Шайтан-машин сообщает, что это СОМ-объект.
   Bodrug
 
15 - 05.07.19 - 15:04
(12) Возвращаемое значение:

Тип: Строка.
Системное представление значения в информационной базе.
   sqr4
 
16 - 05.07.19 - 15:05
(15) дак ты результат из строкивнутр смотри
   Bodrug
 
17 - 05.07.19 - 15:21
(16) ИзСтрокиВнутр - таблица значений. При чем там суммы нормальные... А в отчете выводятся уже не они.
   sqr4
 
18 - 05.07.19 - 15:22
(17) Тип колонки? Как в СКД прописано? Какие функции стоят в ресурсах?
   sitex
 
19 - 05.07.19 - 15:23
(17) А я то думаю где @ зарыта! :)
   Bodrug
 
20 - 05.07.19 - 15:34
Разобрался. В наборе данных-объект не хватало нескольких полей. Спасибо, парни!
   sqr4
 
21 - 05.07.19 - 15:36
(20) Но ты все же задумайся над словами ребят, твоя хрупкая конструкция работает до тех пор пока не будет разницы в УИДах
   Bodrug
 
22 - 05.07.19 - 15:37
(21) Можешь, пожалуйста, подробнее объяснить? Разница в УИДах чего?
   sqr4
 
23 - 05.07.19 - 15:40
(22) а нет тут уидов же))) Ты контрагентов соединяешься по наименованию?
   olegves
 
24 - 05.07.19 - 15:42
(20) я бы лучше не выгружал в ТЗ результат запроса, а создавал ТЗ в основной базе и заполнял ее через выборку результата запроса. Так даже и быстрее по времени.
   Bodrug
 
25 - 05.07.19 - 15:53
(23) По КодуЕДРПОУ
   Bodrug
 
26 - 05.07.19 - 15:54
(21) Ты имеешь ввиду УИДы объектов?
   sqr4
 
27 - 05.07.19 - 16:06
+
   Bodrug
 
28 - 05.07.19 - 16:13
(27) Ок, спасибо, учту)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.