Closed PerlAmutor closed 9 months ago
В твоей демо базе не хватает формы
Попробуй этот .dtшник IRDebug.zip
Проблему воспроизвел https://www.hostedredmine.com/issues/971259
Проблему воспроизвел https://www.hostedredmine.com/issues/971259
"В портативном варианте проблема осталась." Там ведь наверняка можно сделать через ДополнительныеОтчетыИОбработкиВызовСервера.ВыполнитьКоманду() когда обработка Ир зарегистрирована в справочнике.
На худой конец есть еще такой вариант, фоновое задание должно будет запуститься на сервере, клиентский общий модуль с флагом вызова "Клиент (обычное приложение)"
// Пример:
// &НаКлиенте
// Процедура ОбработчикКоманды(Команда)
// ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(Параметры.ДополнительнаяОбработкаСсылка);
// ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Выполняется команда...'");
// Обработчик = Новый ОписаниеОповещения("<ИмяЭкспортнойПроцедуры>", ЭтотОбъект);
// ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне(Команда.Имя, ПараметрыКоманды, Обработчик);
// КонецПроцедуры
Чисто для портативного режима пока не планирую делать некритичные доработки.
Исправлено в 6.97
Ты похоже не тот участок исправил. Речь шла про строку 407, вот я даже остановился в отладчике на версии 6.97
А доработка в строке 595
Там 2 ветки с выполнением запроса получения представлений. Я пока исправил действительно только в одной. Доделаю во второй.
Исправлено в 6.97.2
Сделал Proof-of-Concept решения проблемы с долгим получением представлений ссылок в Портативном варианте в клиент-серверном варианте через ДополнительныеОтчетыИОбработки. Скорость получения представлений на сервере приблизительно увеличилась в 100 раз
ирОбщий.СостояниеЛкс("Получение представлений ссылок");
// для ускорения получения представлений с серверными обработчиками https://www.hostedredmine.com/issues/971259
Если ирКэш.ПараметрыЗаписиОбъектовЛкс().ОбъектыНаСервере Тогда
ТекстДляВыполнения = "
|Запрос = Новый Запрос;
|Запрос.Текст = ""
||ВЫБРАТЬ * ПОМЕСТИТЬ Т ИЗ &Т КАК Т;
||ВЫБРАТЬ ПредставлениеСсылки(Значение) КАК ЗначениеПредставление
||ИЗ Т
||УПОРЯДОЧИТЬ ПО НомерСтроки"";
|Запрос.УстановитьПараметр(""Т"", _АлгоритмОбъект.СсылкиБД);
|_АлгоритмОбъект.Результат = Запрос.Выполнить().Выгрузить();";
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("СсылкиБД", СсылкиБД);
СтруктураПараметров.Вставить("Результат", Неопределено);
ирСервер.ВыполнитьАлгоритм(ТекстДляВыполнения, СтруктураПараметров);
СсылкиБД = СтруктураПараметров.Результат;
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ * ПОМЕСТИТЬ Т ИЗ &Т КАК Т;
|ВЫБРАТЬ ПредставлениеСсылки(Значение) КАК ЗначениеПредставление
|ИЗ Т
|УПОРЯДОЧИТЬ ПО НомерСтроки";
Запрос.УстановитьПараметр("Т", СсылкиБД);
РезультатЗапроса = Запрос.Выполнить();
СсылкиБД = РезультатЗапроса.Выгрузить();
КонецЕсли;
ОсновнойЭУ.Значение.ЗагрузитьКолонку(СсылкиБД.ВыгрузитьКолонку("ЗначениеПредставление"), "ЗначениеПредставление");
ирОбщий.СостояниеЛкс("");
Кстати в 6.97.3p получение представлений ссылок сломалось
Проблема тут, ОбработчикЗавершения не определен, а проверки на его заполненность нет
Кстати в 6.97.3p получение представлений ссылок сломалось
Нужен текст ошибки либо текстовая ссылка на строку модуля.
Кстати в 6.97.3p получение представлений ссылок сломалось
Нужен текст ошибки либо текстовая ссылка на строку модуля.
{<Неизвестный модуль>(1,10)}: Ожидается идентификатор ЭтаФорма.<<?>>(, РезультатЗадания) {<Неизвестный модуль>(1,11)}: Неопознанный оператор ЭтаФорма.(<<?>>, РезультатЗадания)
Ошибку подтверждаю https://www.hostedredmine.com/issues/971955
получением представлений ссылок в Портативном варианте
Реализуемость этого не вызывает сомнений. Но мне это не выгодно. Я должен готовить пользователей к переходу на расширение.
получением представлений ссылок в Портативном варианте
Реализуемость этого не вызывает сомнений. Но мне это не выгодно. Я должен готовить пользователей к переходу на расширение.
Мне эта доработка нужна при закрытии каждого месяца именно в портативном варианте, т.к. база 1С не моя и я не хочу лишний раз провоцировать ответственных за неё лиц на конфликт. Поэтому был бы премного благодарен за реализацию такой доработки, чтобы мне не приходилось вручную патчить исходники каждого последующего релиза...
Для особо деликатных сценариев в установщике расширения есть кнопка "Запустить в одном сеансе". Почему она не подходит?
Для особо деликатных сценариев в установщике расширения есть кнопка "Запустить в одном сеансе". Почему она не подходит?
В целом подходит, но у меня еще УПП, там уже расширения не работают, а с переходом на ERP по срокам не заладилось.
у меня еще УПП
В УПП вроде бы код написан большей частью под обычное приложение и потому там не должно быть обработчиков получения представлений с серверными вызовами, т.е. они должны быть способны делать все на клиенте. Можешь привести конкретный пример такого обработчика из УПП?
у меня еще УПП
В УПП вроде бы код написан большей частью под обычное приложение и потому там не должно быть обработчиков получения представлений с серверными вызовами, т.е. они должны быть способны делать все на клиенте. Можешь привести конкретный пример такого обработчика из УПП?
Посмотрел, там действительно нет ни одного серверного обработчика получения представлений. Там вообще обработчиков получения представлений штук 3-4 на всю конфигурацию.
Исправлено в 6.98
Исправлено в 6.98
Что-то не исправилось, видно по замеру производительности что происходят все те же самые 10к вызовов с клиента на сервер за представлениями
https://github.com/tormozit/RDT1C/assets/87958986/a1986d24-a7f8-441e-96b8-c0da091350bc
Оказалось что представления ссылок получаются внутри методов Выгрузить() и Выборка.Следующий(). Поэтому пришлось еще немного переделать код. Задачу перенес https://www.hostedredmine.com/issues/971259
Сделано в 6.99
https://github.com/tormozit/RDT1C/assets/87958986/b18b7824-8e5a-458b-983b-6ed0da156426
IRDebug.zip
Информация для технической поддержки
Платформа: 8.3.20.1996 Режим БД: клиент-серверный Конфигурация. Название: () Конфигурация. Основной режим запуска: Управляемое приложение Конфигурация. Вариант встроенного языка: Русский Конфигурация. Режим управления блокировкой данных: Управляемый Конфигурация. Режим совместимости: НеИспользовать Конфигурация. Режим использования синхронных вызовов: НеИспользовать Инструменты разработчика. Версия: Портативный 6.95.1p Инструменты разработчика. Инструмент: Прочее Инструменты разработчика. Перехват клавиатурного ввода: Да Инструменты разработчика. Объекты на сервере: Нет Инструменты разработчика. Серверный модуль БСП: Нет Клиент. Приложение: Обычное приложение 64б Клиент. Проверка модальных вызовов: Нет Клиент. Язык интерфейса конфигурации: ru Клиент. Язык интерфейса системы: ru Клиент. Отладка разрешена: Да Клиент. Постоянный кэш метаданных: Да Клиент. ОС: Майкрософт Windows 10 Pro 64-разрядная Русский Клиент. ОС от имени администратора: Нет Клиент. ОС выполнение BAT: Да Клиент. ОС Текущая кодовая страница: 866 Клиент-Сервер. Пинг: 0мсВоспроизведение проблемы Давно уже напрягает одна проблема. Инструмент "Различные значения колонки" очень долго получает представления ссылок в Толстом Клиенте. Например на рабочей базе это время занимает около 400 секунд для 10000 элементов справочника. Я сделал замеры производительности и пришел к выводу что проблема кроется в этом месте:
//ирРазличныеЗначенияКолонки.epf (строка 407)![image](https://github.com/tormozit/RDT1C/assets/87958986/3b7b6629-83bb-42c1-8c8d-63cc47c87731)
После выполнения запроса управление возвращается в Толстый Клиент, откуда потом 10000 раз идет вызов Сервера за представлением.
Причем в файловой базе это происходит быстрее чем в Клиент Серверной.
Я создал демонстрационную конфигурацию где можно увидеть разные подходы к получению представлений ссылок:
Вызов сервера и фоновое задание отрабатывают в среднем 1 секунду, в то время как на толстом клиенте это время 35 секунд. Стоит отметить, что время выполнения через фоновое задание варьируется и может достигать и нескольких секунд, в зависимости от нагрузки на сервер и т.п.
Проблема в том, что в обычном приложении через внешнюю обработку невозможно сделать вызов сервера напрямую или запустить фоновое задание без модификации конфигурации. Т.е. этой проблемой скорее всего страдает только Портативный вариант поставки.
Как возможный вариант решения проблемы можно задействовать БСП, если присутствует в конфигурации. Например в тех случаях, когда количество ссылок превышает определенный порог, например 1000.