infostart-hub / toolkit

Infostart Toolkit
https://infostart.ru/marketplace/toolkit/
74 stars 7 forks source link

Невозможно использовать в консоли запросов внешние источники, содержащие колонку типа "Тип" #242

Closed d-hurricane closed 3 years ago

d-hurricane commented 3 years ago

Описание ошибки Нет возможности использовать в консоли запросов внешние источники (временные таблицы), содержащие колонку типа "Тип". В частности, такие источники можно получить с помощью инструмента сохранения запроса при отладке кода.

Дополнительная информация Данная проблема очень мешает анализу и отладке отражения документов в регл. учете в конфигурациях ERP (КА). Синтетический запрос, приведенный далее в сценарии воспроизведения, не является надуманным, а используется в типовом механизме для правильного позиционирования субконто в проводках. Собирается он по плану видов характеристик "ВидыСубконтоХозрасчетные".

Сценарий воспроизведения На любой базе создать внешнюю обработку, содержащую следующий код:

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Запрос.Текст = 
"ВЫБРАТЬ
|   1 КАК Ссылка, ТИП(СТРОКА) КАК ТипЗначения
|ПОМЕСТИТЬ ВидыСубконто
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
|   2, ТИП(ЧИСЛО)
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
|   3, ТИП(ДАТА)";

Запрос.Выполнить();

Запрос.Текст = 
"ВЫБРАТЬ
|   ВидыСубконто.Ссылка,
|   ВидыСубконто.ТипЗначения
|ИЗ
|   ВидыСубконто КАК ВидыСубконто";

Результат = Запрос.Выполнить().Выгрузить();

Установить точку останова на последней строке и запустить базу на отладку в режиме предприятия. Открыть внешнюю обработку и запустить приведенный выше код. Когда отладчик остановится на последней строке вычислить выражение (Shift+F9) для сохранения запроса в настройках пользователя: ИТК.Отл(Запрос) Продолжить выполнение программы. Убедиться, что приведенный код выполняется без ошибок.

В режиме предприятия открыть консоль разработчика и с помощью меню "Данные / Запрос (из отладки)" открыть сохраненный запрос. Выполнить его. В результате появится окно с ошибкой:

{(3, 1)}: Тип не может быть выбран в запросе <<?>>ТипЗначения {InfostartToolkit ОбщийМодуль.ИТК_Запрос.Модуль(1329)}: Запрос.Выполнить(); {InfostartToolkit ОбщийМодуль.ИТК_Запрос.Модуль(1547)}: ЗагрузкаДанныхВременныхТаблиц(Данные, МенеджерВременныхТаблиц); {InfostartToolkit ОбщийМодуль.ИТК_Запрос.Модуль(850)}: Запрос = Инициализировать(Данные); {InfostartToolkit ОбщийМодуль.ИТК_Запрос.Модуль(38)}: РезультатыВыполнения = ВыполнитьЗапрос(Данные, Режим, АнализируетсяПланЗапроса, Настройки["ОбратныйПорядокЗапросовПакета"]); {(1)}:ИТК_Запрос.ПолучитьРезультат(Параметры[0],Параметры[1]) {ОбщийМодуль.ОбщегоНазначения.Модуль(5173)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")"; {ОбщийМодуль.ДлительныеОперации.Модуль(1058)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова); {ОбщийМодуль.ДлительныеОперации.Модуль(416)}: ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры); {InfostartToolkit ОбщийМодуль.ИТК_ДлительныеОперации.Модуль(82)}: Возврат Модуль.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения); {InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(3492)}: Возврат ИТК_ДлительныеОперации.ВыполнитьВФоне(ПолноеИмяМетода, ПараметрыПроцедуры, ПараметрыВыполнения);

по причине: {(3, 1)}: Тип не может быть выбран в запросе <<?>>ТипЗначения

Далее можно перейти к закладке "Внешние источники (1)" и кликнув по гиперссылке в колонке "Значение" для единственной строки списка получить следующее сообщение об ошибке (связано с #64):

Недопустимый тип реквизита. Имя: "ТипЗначения" {InfostartToolkit ОбщийМодуль.ИТК_Форма.Модуль(28)}: Приемник.ИзменитьРеквизиты(ДобавляемыеРеквизиты); {InfostartToolkit ОбщийМодуль.ИТК_Форма.Модуль(13)}: ДобавитьРеквизитВТаблицуЗначений(Приемник, Имя, ТипЗначения, ИмяРодителя); {InfostartToolkit ОбщаяФорма.ИТК_РедактированиеТаблицыЗначений.Форма(568)}: ИТК_Форма.ДобавитьКолонкуВТаблицуЗначений(ЭтотОбъект, Колонка.Имя, ТипЗначенияКолонки, "ТаблицаЗначений"); {InfostartToolkit ОбщаяФорма.ИТК_РедактированиеТаблицыЗначений.Форма(49)}: ОбновитьДанныеТаблицыЗначений(ВходнаяТаблицаЗначений); {InfostartToolkit ОбщийМодуль.ИТК_ФормаКлиент.Модуль(481)}: ОткрытьФорму("ОбщаяФорма.ИТК_РедактированиеТаблицыЗначений", ПараметрыФормы, ФормаВладелец, , , , ОписаниеОповещенияОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); {InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(1074)}: ИТК_ФормаКлиент.ОткрытьТаблицуЗначений(ЗначениеВнешнегоИсточника, ЭтотОбъект, , ДополнительныеПараметрыОткрытия);

по причине: Недопустимый тип реквизита. Имя: "ТипЗначения"

Ожидаемое поведение, если бы ошибки не было Ожидается, что запрос выполнится без ошибок, результат будет содержать 3 строки. Также хотелось бы просмотреть содержимое внешнего источника, пусть даже без возможности редактирования колонки "ТипЗначения".

Окружение: Infostart Toolkit 1.7.3

Платформа: 8.3.16.1876 (Linux x86-64) Режим БД: клиент-серверный

Конфигурация: 1С:ERP. Управление холдингом (3.0.4.4) Основной режим запуска: Управляемое приложение Режим совместимости: Версия8_3_14 Версия БСП: 3.1.3.264

Клиент: ОС: Windows x86-64 (Microsoft Windows 10 version 10.0 (Build 17763)) Язык: ru Режим запуска: Управляемое приложение

d-hurricane commented 3 years ago

Заявлено, что описанная проблема решена в Консоли запросов 9000

Evg-lylyk commented 3 years ago

Связано с #64

Evg-lylyk commented 3 years ago

Решено в 1.8 Выборка в запросе решено и теперь можно открывать таблицы с типами МоментВремени, Тип и редактировать эти поля