Обмен ›
Разные результаты запроса из внешнего источника данных при работе через сервер и клиент ›
#1
03.08.23 7:20
Дамы и господа! Кто сталкивался с работой внешних источников данных, точнее с их не очень адекватным поведением?
Имеем базу на Firebird, которую через драйвера прокинули в конфигурацию как ВИД.
Имеем запрос в эту базу, который при программном формировании выдаёт пустую таблицу.
И имеем тот же самый запрос, который на клиенте, через консоль выдаёт необходимый результат.
Собственно вопрос: Что я делаю не так и куда копать?
Пример кода (программное формирование:
Код формирования СКД |
---|
Код |
---|
// Инициализация макета СКД
ОтчётСКД = Отчеты.СМаркетЗагрузкаДанныхИзВнешнегоИсточника.Создать();
СхемаКомпоновкиДанных = ОтчётСКД.СхемаКомпоновкиДанных;
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
// Настройки отчёта
ПараметрДатаНачала = СхемаКомпоновкиДанных.Параметры.Найти("ДатаНачала");
ПараметрДатаОкончания = СхемаКомпоновкиДанных.Параметры.Найти("ДатаОкончания");
ПараметрДатаНачала.Значение = ДатаНачала;
ПараметрДатаОкончания.Значение = ДатаОкончания;
// Разбираем предопределённые отборы
Для Каждого ВариантОтбора Из Настройки.Отбор.Элементы Цикл
Если Строка(ВариантОтбора.ЛевоеЗначение) = "DOCHEAD_FILIALINDEX" Тогда // Филиалы
Если СписокФилиалов.Количество() Тогда
ВариантОтбора.Использование = Истина;
ВариантОтбора.ПравоеЗначение = СписокФилиалов;
КонецЕсли;
ИначеЕсли Строка(ВариантОтбора.ЛевоеЗначение) = "DOCTYPE" Тогда // Типы документов
Если МассивТиповДокументов.Количество() Тогда
ВариантОтбора.Использование = Истина;
ВариантОтбора.ПравоеЗначение = МассивТиповДокументов;
КонецЕсли;
ИначеЕсли Строка(ВариантОтбора.ЛевоеЗначение) = "OPERATIONID_OPERATION" Тогда // Виды операций
Если МассивВидовОпераций.Количество() Тогда
ВариантОтбора.Использование = Истина;
ВариантОтбора.ПравоеЗначение = МассивВидовОпераций;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
// Формируем результат
ТаблицаВывода = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаВывода);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Возврат ТаблицаВывода; |
|
Результатом тут является пустая таблица (см аттач)
Вот запрос из СКД:
Запрос из СКД |
---|
Код |
---|
ВЫБРАТЬ
DOCHEAD.ID_DOCHEAD КАК ID_DOCHEAD,
DOCHEAD.SHOPINDEX КАК SHOPINDEX,
DOCHEAD.DOCHEAD_FILIALINDEX КАК DOCHEAD_FILIALINDEX,
DOCHEAD.OPERATION КАК OPERATION,
DOCHEAD.DOCINDEX КАК DOCINDEX,
DOCHEAD.DOC_DATE КАК DOC_DATE,
DOCHEAD.CLIENT_INDEX КАК CLIENT_INDEX,
DOCHEAD.CLIENT2_INDEX КАК CLIENT2_INDEX,
DOCHEAD.DOC_STATE КАК DOC_STATE,
DOCHEAD.COMMENT КАК COMMENT,
DOCHEAD.LEGAL_PERSON КАК LEGAL_PERSON,
DOCSPEC.ARTICUL КАК ARTICUL,
DOCSPEC.QUANTITY КАК QUANTITY,
DOCSPEC.PRICERUB КАК PRICERUB,
DOCSPEC.TAXHEAD КАК TAXHEAD,
DOCSPEC.NDS КАК NDS,
DOCKINDTable.NAME_DOCKIND КАК NAME_DOCKIND,
DOCTYPETable.NAME_DOCTYPE КАК NAME_DOCTYPE,
FirstCLIENTSTable.INN_CLIENTS КАК First_INN_CLIENTS,
FirstCLIENTSTable.NAME_CLIENTS КАК First_NAME_CLIENTS,
SecondCLIENTSTable.INN_CLIENTS КАК Second_INN_CLIENTS,
SecondCLIENTSTable.NAME_CLIENTS КАК Second_NAME_CLIENTS,
DOCHEAD.DOCTYPE КАК DOCTYPE,
DOCHEAD.OPERATION.ID_OPERATION КАК OPERATIONID_OPERATION
ИЗ
ВнешнийИсточникДанных.SMarket.Таблица.DOCHEAD КАК DOCHEAD
ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SMarket.Таблица.DOCSPEC КАК DOCSPEC
ПО DOCHEAD.ID_DOCHEAD = DOCSPEC.ID_DOCHEAD
ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SMarket.Таблица.DOCKIND КАК DOCKINDTable
ПО DOCHEAD.DOCKIND = DOCKINDTable.ID_DOCKIND
ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SMarket.Таблица.DOCTYPE КАК DOCTYPETable
ПО DOCHEAD.DOCTYPE = DOCTYPETable.ID_DOCTYPE
ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SMarket.Таблица.CLIENTS КАК FirstCLIENTSTable
ПО DOCHEAD.CLIENT_INDEX = FirstCLIENTSTable.ID_CLIENTS
ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.SMarket.Таблица.CLIENTS КАК SecondCLIENTSTable
ПО DOCHEAD.CLIENT2_INDEX = SecondCLIENTSTable.ID_CLIENTS
ГДЕ
DOCHEAD.DOC_DATE МЕЖДУ &ДатаНачала И &ДатаОкончания |
|
И во втором аттаче результат выполнения того же запроса, но через консольку или через встроенный отчёт...
Прикрепленные файлы:
Пустой результат.png
Результат клиент.png