Имя: Пароль:
1C
1С v8
СКД. Проблема с получением данных из другой базы.
,
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) Ок, спасибо, учту)
Независимо от того, куда вы едете — это в гору и против ветра!