tormozit / RDT1C

Подсистема "Инструменты разработчика" для платформы 1С 8
http://devtool1c.ucoz.ru
91 stars 9 forks source link

Отладить отложенный объект. Индексируемое поле не может иметь составной тип и тип неограниченной длины #404

Closed PerlAmutor closed 1 year ago

PerlAmutor commented 1 year ago

https://user-images.githubusercontent.com/87958986/230730843-e9e84697-2f07-4f49-a8b3-c4a708752457.mp4

Информация для технической поддержки Платформа: 8.3.20.1996 Режим БД: файловый Конфигурация. Название: 1С:ERP Управление предприятием 2 (2.5.12.28) Конфигурация. Основной режим запуска: Управляемое приложение Конфигурация. Вариант встроенного языка: Русский Конфигурация. Режим управления блокировкой данных: Управляемый Конфигурация. Режим совместимости: Версия8_3_17 Конфигурация. Режим использования синхронных вызовов: Использовать Конфигурация. Версия БСП: 301 Инструменты разработчика. Версия: Портативный 6.70.1p Инструменты разработчика. Инструмент: Редактор остатков Инструменты разработчика. Перехват клавиатурного ввода: Да Инструменты разработчика. Объекты на сервере: Да Инструменты разработчика. Серверный модуль: Да Клиент. Приложение: Обычное приложение 64б Клиент. Проверка модальных вызовов: Нет Клиент. Язык интерфейса конфигурации: ru Клиент. Язык интерфейса системы: ru Клиент. Отладка разрешена: Нет Клиент. Постоянный кэш метаданных: Да Клиент. ОС: Майкрософт Windows 10 Pro 64-разрядная Русский Клиент. ОС от имени администратора: Нет Клиент. ОС выполнение BAT: Да Клиент. ОС Текущая кодовая страница: 866

Воспроизведение проблемы

  1. При отладке запроса формирования проводок для документа ВозвратТоваровОтКлиента на этой строке в ERP:

image

  1. При последующей передачи .deb файла в ИР
  2. Возникает ошибка:
{ВнешняяОбработка.ирКонсольЗапросов.МодульОбъекта(65)}: Ошибка при вызове метода контекста (НайтиПараметры): {(8432, 2)}: Индексируемое поле не может иметь составной тип и тип неограниченной длины
<<?>>Т.ОбъектУчета                          КАК ОбъектУчета,
Текст запроса: Строка кода 8 432: {(8 432,2)}: Индексируемое поле не может иметь составной тип и тип неограниченной длины
<<?>>Т.ОбъектУчета                          КАК ОбъектУчета,

Сам запрос ошибок не содержит и в типовой демо-конфигурации работает.

Файл отладки прилагаю:

_08_04_202318_51_05ОтладитьСтруктура.zip

tormozit commented 1 year ago

Скорее всего это ошибка платформы. Возникает при вызове метода Запрос.НайтиПараметры() с таким текстом при наличии в менеджере временных таблиц запроса каких то особых временных таблиц. Поковырялся немного, чтобы понять что в моем коде нет ошибки. Но сделать пример для отправки в тех. поддержку 1С там довольно сложно. Поэтому предоставляю эту возможность тебе =)

PerlAmutor commented 1 year ago

Боюсь что все-таки это не ошибка платформы. Я воспроизвел в обработке. ИР зачем-то добавляет лишние типы "Булево" и "Число" там где их не будет при обычном выполнении запроса.

ДолгосрочнаяЗадолженность.zip

https://user-images.githubusercontent.com/87958986/230772264-4ef99be9-513d-4f79-ae73-214103b52aed.mp4

tormozit commented 1 year ago

Попробуй в модуле ирОбщий найти строку целиком Типы.Добавить(Тип("Строка")); и замени ее на Типы.Добавить(Тип("Null"))

tormozit commented 1 year ago

Ошибку воспроизвел https://www.hostedredmine.com/issues/961925

PerlAmutor commented 1 year ago

Типы.Добавить(Тип("Строка"));

Нашел только такое, но там уже есть Null

image

tormozit commented 1 year ago

Ошибся. Там Типы.Добавить(Тип("Число"));

PerlAmutor commented 1 year ago

Ошибся. Там Типы.Добавить(Тип("Число"));

Там видимо надо две строки заменять на одну с Null

image

PerlAmutor commented 1 year ago

Ничего не получилось:

image

image

PerlAmutor commented 1 year ago

Когда смотрю состав типа колонки временной таблицы, то вижу "НеизвестныйОбъект":

image

Попробовал добавить его таким образом:

image

Он добавляется, но ошибка все та же, с таким типом выбрать невозможно из ТЗ. Вероятно требуется дополнительная доработка на этом участке, чтобы такой Неудобный тип переварить:

image

//////// Дополнение При выгрузке данных из временной таблицы этот тип теряется. Он виден получается только когда в менеджере временных таблиц состав типов просматриваешь.

image

image

image

tormozit commented 1 year ago

Исправлено в 6.71

PerlAmutor commented 1 year ago

Проверил. Проблема осталась:

image

Скорее всего тут надо иначе исправлять. Как вариант сначала выбрать во временную таблицу данные с теми полями у которых есть типы, вторым запросом выбирать недостающие поля через объединение из первой временной таблицы со вторым запросом где будет в секции ГДЕ ЛОЖЬ, но только если в исходной ТЗ нет строк.

tormozit commented 1 year ago

В моем тесте (указан в задаче) заработало. Сделай подобный тест для твоего случая.

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = 
"выбрать НЕОПРЕДЕЛЕНО как ф1
|ПОМЕСТИТЬ вт
|ГДЕ ЛОЖЬ";
Запрос.Выполнить();
Запрос.Текст = "выбрать * ПОМЕСТИТЬ ВТ2 ИЗ ВТ ИНДЕКСИРОВАТЬ ПО Ф1";
ф = иробщий.ОтЛкс(Запрос,,, Истина);
PerlAmutor commented 1 year ago

В моем тесте (указан в задаче) заработало. Сделай подобный тест для твоего случая.

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = 
"выбрать НЕОПРЕДЕЛЕНО как ф1
|ПОМЕСТИТЬ вт
|ГДЕ ЛОЖЬ";
Запрос.Выполнить();
Запрос.Текст = "выбрать * ПОМЕСТИТЬ ВТ2 ИЗ ВТ ИНДЕКСИРОВАТЬ ПО Ф1";
ф = иробщий.ОтЛкс(Запрос,,, Истина);

Так у тебя тест некорректно сделан, попробуй такое:

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = 
"выбрать НЕОПРЕДЕЛЕНО как ф1
|ПОМЕСТИТЬ вт
|ГДЕ ЛОЖЬ";
Запрос.Выполнить();
Запрос.Текст = 
"ВЫБРАТЬ
|   Т.ф1 КАК ф1
|ПОМЕСТИТЬ ВТ2
|ИЗ
|   (ВЫБРАТЬ
|       Т1.ф1 КАК ф1
|   ИЗ
|       ВТ КАК Т1
|   ОБЪЕДИНИТЬ
|   ВЫБРАТЬ
|       ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК ф1) КАК Т
|ИНДЕКСИРОВАТЬ ПО
|   Ф1
|";

ф = иробщий.ОтЛкс(Запрос,,, Истина);
tormozit commented 1 year ago

Да. Наконец то ты сделал правильный тест. Исправлено в 6.72.2

PerlAmutor commented 1 year ago

Спасибо, работает.