Запросник на управляемых формах

За основу взята оригинальная консоль запросов «Запросник» из публикации http://forum.infostart.ru/forum24/topic34484/

Так получилось, что лично я всегда с огромным удовольствием пользовался вышеупомянутым творением, таскал везде и всюду, ибо давала невероятные возможности.
Вошел в какой-нибудь РАУЗ в УПП, или модуль расчета ЗУП с простынями запросов, отбирающихся из менеджера временных таблиц, запустил мега-обработку и сразу всё как на ладони.
Сказать, что ощущал себя как Нео — это мало сказать, с таким инструментом чувствовал себя почти богом.
Но вскоре случилось ужасное — начали выходить всякие УТ на УФ и возможности применения инструмента резко сузились.
Да, можно было включать режим ОФ и что-то делать, но удобство летело к черту, жизнь становилась не такой прекрасной.
Время шло, версии для УФ не появлялось. И тут автор обработки, глубоко уважаемый лично мною tezin, заявляет: я от дел отошел, если что исходники открыты, если энтузиаст найдётся для перевода на УФ — я не против.
Ну и собственно — почему бы и нет? Вооружился энтузиазмом и забацал консольку.

Итак, что сделано:

— Дерево запросов

— Вывод результата в таблицу и дерево

— Параметры с установкой момента времени, границы, списков, таблицы значений

— Просмотр и отладка временных таблиц

— Версионирование запросов — при каждом выполнении оно запоминается, что там было

— Сохранение в файлы и всё такое

— Обход запроса с помощью настраиваемой выборки

— Конструктор в тонком клиенте при использовании 8.3.5

— Выполнение алгоритмов над результатом запроса

— Возможность отлаживать запрос, формируемый в консоли системы компоновки данных с диска ИТС

— Получение плана запроса, сформированного СУБД

— Получение текста запроса СУБД

— Отладка запроса в модуле

На последнем пункте остановлюсь подробнее, так как суть работы его поменялась.

В далёкие и прекрасные времена, когда использовались ОФ, мы могли с чистой совестью открывать любые формы из отладчика, вызывать всё это модально и вообще играться как дети.

Эта прекрасная возможность и использовалась Запросником — пишем в модуле объекта функцию с открытием формы и установкой запроса и всё работает.

Суровая реальность УФ заставила поменять подход.

Мы теперь не открываем форму обработки с передачей запроса, но мы точно также специальной строкой в отладчике делаем "дамп" запроса со всеми параметрами и временными таблицами. "дамп" сохраняется в недрах сервера и ждёт, пока его кто-нибудь подберёт.

Подбирается он нажатием одной кнопки "Загрузить дамп" — всё, что завалялось из сохранённого для текущей конфигурации тут же подгружается в деревья запросов со всеми потрохами.

Таким образом, отладка происходитв 2 этапа — вычислить выражение в отладчике вида ВнешниеОбработки.Создать(путь,Ложь).Дамп(Запрос), после чего, можно отпустить исполнение кода дальше и нажать кнопку в обработке (обычный режим), или исполнение кода не отпускать и запустить обработку во втором сеансе (модальный режим).
Строка для вычисления выражения в отладчике доступна в обработке в окне "Отладка запроса в модуле", она генерируется с учетом серверного-файлового режима, в случае серверного файл передаётся на сервер во временную папку.
Проверено на клиент-серверном и файловом вариантах, платформа 8.2, 8.3

// update 2.0.3 08.08.2014
— Добавлена отладка запросов, генерируемых стандартной консолью СКД с ИТС

Решил не присобачивать сюда еще и консоль СКД, т.к. это всё-таки другой инструмент, но я сделал интеграцию между ними.
Как это работает: в Запроснике справа сверху есть подменю с командой "Получить запрос из схемы компоновки", после нажатия вам будет предложено указать, какое из открытых сейчас окон — консоль СКД. При выборе окна запросник выбирает из него схему, настройки, генерирует макет и добавляет получившийся запрос в дерево запросов со всеми параметрами.

// update 2.0.4 08.08.2014
— Добавлена совместимость с платформой 8.2

// update 2.0.5 08.08.2014
— Исправлена ошибка открытия списка версий запросов на платформе 8.3 и ошибка открытия конструктора запросов на 8.3.5
— Добавлена возможность перетаскивать мышкой структуру запроса и параметры в текст запроса при выполении алгоритма
— Добавлено отображение версии запросника в главном окне
// update 2.0.6 16.08.2014
— Исправлена ошибка при выполнении запроса второй раз с установленным флажком "Показывать служебные колонки результата"
— Исправлена ошибка при выполнении запросов, содержащих временные таблицы, когда первая попытка выполнения закончилась ошибкой из-за
неверного синтаксиса запроса
— Произведен рефакторинг участка работы с временными таблицами. Улучшена производительность в операциях сохранения значений ВТ
для последующего отображения.
— Исправлена ошибка сохранения дампа запроса, когда сразу за именем ВТ следовал символ ";"
// update 2.0.7 19.08.2014
Улучшения производительности:
— Несколько улучшена производительность вывода результатов запроса, содержащих большое количество строк
— Уменьшены задержки при навигации по дереву запросов, когда на форме содержиться очень большая таблица результатов запроса
— Произведен рефакторинг процесса работы с алгоритмами запроса. Результат теперь не переходит в другую форму, что
  значительно уменьшает время открытия формы работы с алгоритмами
// update 2.0.8 28.08.2014
— Исправлена ошибка в формируемой в файловой версии строки сохранения дампа — там не было кавычек к пути файла
— Добавлена возможность просматривать тексты запроса СУБД и план запроса СУБД

// update 2.0.9 03.09.2014
— Исправлена ошибка при формировании пакетного запроса в случае, когда включен режим получения плана запроса
— Добавлена совместимость с 8.2.16 и ниже, предположительно до 8.2.14
— Добавлена возможность формировать текст запроса для модуля
— Убрано сообщение об ошибке при открытии конструктора запросов в толстом клиенте
— Произведена некоторая оптимизация для получения плана запроса в клиент-серверном варианте

// update 2.0.10 13.09.2014
— Исправлены ошибки с параметрами дата, которые не содержали время
— Исправлена ошибка при работе с версиями запроса, после работы с которыми терялись параметр "список значений"
— Исправлена ошибка, из-за которой под платформой 8.2 не работало получение запроса из схемы СКД
— Добавлена возможность получать тексты запросов СУБД с представлениями полей 1С.
— Убраны ограничения интерактивного редактирования таблиц результата запроса
В 

//update 2.0.11 18.09.2014
— Исправлен печальный баг, который загонял отладчик в бесконечный цикл при сохранении дампа запроса с >4 таблицами
— Исправлены ошибки, из-за которых некоторые ВТ не сохранялись в дамп
— Исправлена ошибка с параметром даты в составе границы
— Интерфейс в такси переведен на компактный режим
— Исправлена ошибка, когда ВТ могли задваиваться в форме, если вызывать их несколько раз с разным синтаксисом

//update 2.0.12 03.10.2014

— Улучшен парсинг запросов при получении дампа — временная таблица теперь корректно обнаруживается внутри вложенного запроса

//update 2.0.13 19.12.2014
— Для возможности нормальной отладки запросов ЗУП добавлено замещение значений NULL на неопределено во временных таблицах
— Исправлена ошибка при выполнении запроса, в котором ВТ используется несколько раз и написана в разном регистре
— Исправлена ситуация, когда иногда могли не отображаться отрицательные числа из-за бага платформы

//update 2.0.14 24.02.2024
— Реализована поддержка отладки сохраненных дампов временных таблиц, у которых есть колонки со значением "Тип"
(используется в ERP 2.0 в запросах на отражение документов в рег. учете)
— Изменен приоритет конструкторов запроса — если доступен конструктор для толстого клиента, то вызывается он.

//update 2.0.15 02.03.2024

— Исправлена ошибка в заполнении колонок таблицы значений-параметра, когда при отмене редактирования выполнялась проверка на тип колонки
— Значения полей типа "Тип" и "Момент времени" в результате запроса теперь отображают представление данных, а не просто строки "Тип" и "Момент времени"
— Реализована интерактивная работа с полями типа "Хранилище значений", "Результат запроса", "Двоичные данные"

//update 2.0.16 12.05.2024

— Добавлено выделение места в тексте запроса, в котором конструктор видит синтаксическую ошибку
— Добавлено предупреждение при попытке выхода из обработки с несохраненными изменениями
— Переработан процесс выбора типов в параметрах запроса и в списке значений с целью повышения удобства
— Исправлена ошибка при использовании команды "Удалить неиспользуемые параметры"
— Добавлена возможность удалять сохраненные версии запроса

 

//update 2.0.17 14.05.2024
— Добавлен новый выбор типа при настройке колонок таблицы значений
— Добавлен новый выбор типа при работе стандартной команды "Подбор" списка значений
— Исправлены некоторые ошибки с отсутствием модифицированности формы

//update 2.0.18 21.06.2024

— Доработки алгоритма формирования текста запроса (автоподстановка параметров)
— Исправлена ошибка в хоткее Ctrl+S

//update 2.0.19 07.07.2024
— Убраны хвосты раскраски кода из формы выполнения алгоритмов

//update 2.0.20 26.12.2024

— Реализована отладка промежуточных запросов в пакете, не являющихся временными таблицами (через закладку работы с ВТ)
— Убрана ошибка, когда при создании нового файла не очищалось старое имя файла запросов
В 

//update 2.0.21 05.10.2024
— Устранена ошибка, связанная с уничтожением ВТ
— Исправлена ошибка, связанная с влиянием закомментированных участков запроса на логику исполнения запроса

99 Comments

  1. BigClock

    В Вашем Запроснике есть отладка СКД?

    (как в проектах http://infostart.ru/public/179939/, http://infostart.ru/public/97962/)

    Reply
  2. Nuuq

    Без Запросника82 в УП как без рук.

    Посещал сайт автора с надеждой — а вдруг уже появилось на 1с83 😉 … но нет… печаль

    И о чудо! Вот оно! Спасибо автор!

    Желаю не сбавлять энтузиазма

    Reply
  3. BigClock

    (2) Nuuq,

    Согласен. В обычных формах только запросником и пользуюсь, очень удобно.

    Reply
  4. mrstomak

    (1) BigClock, Добавил интеграцию со стандартной консолью СКД с диска ИТС. Отдельной кнопкой выбираете из запросника окно консоли СКД и её запрос перекочёвывает со всеми потрохами в дерево запросов. Мне кажется это лучше, чем городить рядом ещё одну консоль СКД :).

    Reply
  5. mrstomak

    (2) Nuuq, Спасибо за пожелание, надеюсь вещь будет полезная 🙂

    Reply
  6. Synoecium

    А будет версия обработки под 8.2? Судя по коду используется не так много возможностей из 8.3, поэтому при небольших усилиях можно расширить аудиторию пользователей Запросника.

    Обработка понравилась) минималистично и функционально.

    Reply
  7. mrstomak

    (6) из 8.3 там немодальные вызовы форм и работа с форматированным документом в одном месте… Ну вообще да, можно под 8.2 переточить, постараюсь этим заняться.

    Reply
  8. BigClock

    Присоединяюсь к пожеланию добавить поддержку 8.2.

    Reply
  9. mrstomak

    Поддержка платформы 8.2 добавлена.

    Reply
  10. Synoecium

    Спасибо за добавление поддержки. Есть еще предложение по доработке, в окне выполнения произвольного алгоритма чтобы вставить в код обработки имя поля приходится жать кнопку «в буфер», затем вставлять в текст. это действие можно очень упростить если дать возможность таскать поля из таблицы «Структура результата запроса» прямо в текст обработчика.

    Reply
  11. mrstomak

    (10) Synoecium, согласен, в следующей версии добавлю, спасибо за идею!

    Reply
  12. dour-dead

    Спасибо!

    Reply
  13. dour-dead

    Как пожелание, добавить возможность комментить код запроса

    Reply
  14. mrstomak

    (13) dour-dead, эта возможность сейчас есть в контекстном меню.

    Reply
  15. Gureev

    о, отлично! ) а я уж было хотел сам переписывать Тезинский запросник)

    Reply
  16. max082

    Спасибо! 🙂

    Написал небольшую обработку, демонстрирующую удобство работы через дамп.

    Reply
  17. Hitcher

    1С:Предприятие 8.3 (8.3.5.1098)

    На странице «Временные таблицы» при попытке нажать на кнопку «Отладить» возникает ошибка

    {Форма.ФормаУпр.Форма(1811)}: Значение не является значением объектного типа (ПолучитьЭлементы)

    Для Каждого Поддерево Из ТекСтрока.ПолучитьЭлементы() Цикл

    Reply
  18. Hitcher

    При нажатии на кнопку «Выполнить запрос»

    {Форма.ФормаУпр.Форма(612)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)

    ИзменитьРеквизиты(,МассивУдаляемыхКолонок);

    по причине:

    Недопустимый путь к реквизиту. Путь: «РезультатТаблицаИтогУровень»

    Reply
  19. Yimaida

    Автор взялся за хорошее дело, запросник очень нужный и полезный инструмент.

    Обработку пока не качал, немного подожду. Но хотел бы озвучить баг, который только сегодня случайно обнаружил в запроснике на ОФ. При отладке запроса, в запрос был передан параметр с 4 знаками после запятой, а запросник его принял только с 3. Все дело было в ТипЗначения для колонки параметры. Предусмотрите, пожалуйста, такие случаи.

    Reply
  20. rasswet

    видимо пока в процессе отлова багов находится, надо немного подождать.

    Reply
  21. sanja

    Я тоже всегда этим запросником пользовался, очень удобно временные таблицы раскладывает. Теперь можно и на управляемых. В старом была проблема в том, что не освобождал память, и после выполнения нескольких объемных запросов в консоли сервера отсвечиваешь первым по количеству захваченных данных.

    Reply
  22. dusha0020

    Спасибо автору — довольно удобная консоль. Есть предложение по усовершенствованию. Мне часто приходится оперировать довольно большими ТЗ в запросах. Получить их из стандартных объектов запросом невозможно — это результат работы над выборкой довольно сложных алгоритмов, которые в консоли запросов воспроизвести нельзя.

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

    Не хочу заморачивать своим решением — оно написано было на коленке и далеко не идеальное, но предлагаю автору подумать над повышением функциональности разработки в этом направлении.

    Чтобы был понятен принцип вешаю скрин со своей консоли.

    Reply
  23. Патриот

    Может быть наивный вопрос, но всё же — «Почему разработчики конфигураций или даже платформы не пишут такие инструменты?». Или им, в отличие от нас, не приходится заниматься отладкой? Или они настолько круто знают 1С изнутри, что отладка происходит непосредственно в их мозгу? Или может они просто экономят человекочасы, выжидают, пока энтузиасты с Инфостарта выложат свой титанический труд, чтобы потом скачать за один стартмани =)))? Или наоборот у них есть более крутые наработки, но они не делятся ими с простыми смертными?

    Reply
  24. bulas

    Пользуюсь консолью: КонсольЗапросов_8.3.5.epf, в которой есть вызов «Конструктора запросов» из контекстного меню, но когда на закладке «Условия» использую вложенный запрос, то в контекстном меню отсутствует пункт «Конструктор запросов». В вашей КонсолиОбработке есть такая возможность?

    Reply
  25. EvgeniuXP

    (23) они ждут, когда кто-нибудь подкинет новых идей 🙂

    Reply
  26. mrstomak

    (24) bulas, конструктор запросов разработан силами 1С и используется один и тот же что в той консоли, что в этой, так что не думаю что будет разница.

    Reply
  27. mrstomak

    (22) dusha0020, в запроснике есть возможность использовать произвольные выражения для установки параметров запроса. В окне параметров флажок «Это выражение» и в значении параметра набираете код. Это случайно не то, что вам надо?

    Reply
  28. mrstomak

    (17)(18) Hitcher, спасибо за багрепорты, завтра поднакачу исправление.

    Reply
  29. mrstomak

    (23) Патриот, я тоже задумывался над этим и считаю, что никаких вундервафельных обработок у них нет. Мне кажется, нет никакого смысла для 1С скрывать продвинутые инструменты отладки и не выкладывать их на ИТС. Другое дело, что отладка типовых у них проще происходит, так как есть база проектной документации и описание как и чего должно работать.

    Reply
  30. mrstomak

    (21) sanja, причина в том, что там захватывалось соединение с СУБД всегда из-за неосвобождаемого менеджера временных таблиц. Тут такого нет, ввиду концепции УФ.

    Reply
  31. ololoanonim

    (29) Знакомые работают во френче 1С, и пользуются простой консолькой скачанной из просторов интернета 🙂

    Reply
  32. dusha0020

    (27) А ведь пробовал — получил ошибку:) Скорее всего буква попала не русская. Действительно работает! Теперь пользуюсь только Вашей консолью. Спасибо.

    Reply
  33. tezin

    красавчик 🙂

    молодец!

    Reply
  34. dusha0020

    Все-таки есть проблема. В модуле формы ФормаУпр есть процедура ЗагрузитьФайлИзЗапросаНаСервере.

    Все работало нормально до сегодняшнего дня, а а теперь ругается на последнюю строку процедуры

    {Форма.ФормаУпр.Форма(1076)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)

    ЗначениеВРеквизитФормы(Дерево,»ДеревоЗапросов»);

    по причине:

    Недопустимое значение параметра (параметр номер ‘2’)

    Строку я закомментировал и работаю дальше, но как-то не комильфо.

    Reply
  35. mrstomak

    (34) dusha0020, на 95% причина в том, что файл *.sel другого формата, например, из обычной формы запросника. Но вообще да, оберну это в попытку.

    Reply
  36. Kserken

    Вещь! Спасибо.

    Reply
  37. DoctorRoza

    До ИР, пользовался только запросником, сейчас только консолькой из Инструментов .. Но за разработку мегареспект! 🙂

    Reply
  38. mrstomak

    (37) DoctorRoza, спасибо! А ИР уже есть на УФ?

    Reply
  39. mrstomak

    Добавлена возможность получения текста запроса СУБД и плана запросов СУБД!

    Reply
  40. the1

    (38) давно. Но только на толстом клиенте

    Reply
  41. mrstomak

    (40) the1, так там же обычные формы используются при этом, разве нет? И в типовых это не заработает.

    Я просто с этой подсистемой знаком только по презентации на инфостарте.

    Reply
  42. soft-servis

    1. В толстом клиенте(8.3.4.465) при нажатии кнопки «Конструктор» появляется ошибка «Метод объекта не обнаружен(Показать)»;

    2. Если в запросе есть временная таблица, то план запроса не формируется, возникает ошибка;

    3. Нет кнопки «Скопировать текст для модуля…».

    Можно узнать когда будут исправлены эти ошибки? И будет ли у нас возможность получить исправленную обработку бесплатно?

    Reply
  43. mrstomak

    (42) soft-servis,

    п. 1 не мешает открытию конструктора, просто сообщение о том, что немодально открыть не получилось, уберу если напрягает так.

    п. 2 ошибка с планом запроса уже исправлена в грядущей версии 2.0.9

    п. 3 думал делать или нет, раз кому-то надо то сделаю, тоже будет в следующей версии.

    Повторное скачивание, если не ошибаюсь, бесплатно в течение суток. Могу на мыло выслать.

    Reply
  44. soft-servis

    Спасибо, ждем следующую версию. Пришлите, пожалуйста, обработку с исправленным п. 3 на наш e-mail.

    Reply
  45. mrstomak

    (44) soft-servis, мне не виден ваш e-mail

    Reply
  46. soft-servis

    Спасибо!

    но мы обнаружили еще пару ошибок(((:

    1. В параметрах запроса если указать значение параметра список значений, то при добавлении в этот список значений, он не определяет тип значения;

    2. Не критичное, так для справки)), при выполнении «удалить символы модуля» в тексте запроса, если имеются строчные значения, т.е. имеются кавычки, то он их не отрабатывает, а если строчное значение указано у последнего условия, то он удаляет все кавычки с последней.

    Reply
  47. mrstomak

    (46) soft-servis,

    1. В списках значений учитывается тип. При открытии окна выбора типа в списке, он позиционируется на типе, который используется в запросе.

    2. Спасибо, посмотрю-поправлю!

    Reply
  48. juntatalor

    Скажите, а это нормально, что при встраивании в конфигурацию появляется ошибка (при простом открытии все работает):

    {Обработка.Запросник2_0.МодульОбъекта(197,64)}: Переменная не определена (ИспользуемоеИмяФайла)

    ОбработкаВОЛЕ = мТекущееПодключение.ВнешниеОбработки.Создать(<<?>>ИспользуемоеИмяФайла); (Проверка: Сервер)

    Reply
  49. mrstomak

    (48) juntatalor, О, ничего себе. Это хвосты от того, что я дописывал для обычного запросника — открытие запроса из модуля в другом сеансе. Можете комментировать эту строку смело, она нигде не используется. Ошибка возникает, т.к. у встроенной обработки нет свойства ИспользуемоеИмяФайла. Кстати, в режиме встроенной обработки не будет работать получение планов запросов в клиент-серверном варианте, там фильтр в ЖР мешает. В следующих релизах поправлю.

    Reply
  50. sanja

    Не создается новый файл списка запросов по кнопке «Новый файл».

    Reply
  51. mrstomak

    (50) sanja, исправлено, будет в следующей версии.

    Reply
  52. DoctorRoza

    (41) рекомендую попробовать ИР! Час на разбор, ну хотя бы команды От() (на нее уйдет 15-20 мин, не более) и Вы сразу же будете использовать только Инструменты. 🙂

    Reply
  53. mrstomak

    (52) DoctorRoza, не очень понял про разбор команды От, но ИР написаны на ОФ, а это не то, что мне нужно.

    Reply
  54. Sirruf

    Обработка хорошая, но интерфейс глючит(

    Reply
  55. mrstomak

    (54) Sirruf, подробнее расскажи?

    Reply
  56. Sirruf

    (55) не все элементы помещаются на экран, появляется полоса прокрутки http://joxi.ru/liEZVP3JTJBta2UKwHY

    Reply
  57. mrstomak

    (56) Sirruf, я это уже исправил путем выставления компактного режима для такси, когда выложу следующий релиз будет нормально. А так может просто сам для ФормаУпр выставить компактность.

    Reply
  58. Sirruf

    (57) Спасибо, да, так лучше 🙂

    Reply
  59. tormozit

    (41) По поводу «в типовых это не работает» можешь пояснить? Ну и заодно зачем тебе консоль запросов именно на управляемых формах?

    Reply
  60. mrstomak

    (59) tormozit, без проблем.

    «В итиповых не работает»:

    1. Типовые конфы не имеют включенного флага по отображению обычных форм.

    «Зачем мне консоль на управляемых формах»:

    2. Мобильные инструменты не позволяют вызывать выполнение кода на сервере. Это значит, что выполнение алгоритмов над результатом запросов ограничено, т.к. при записи могут быть обращения к общим модулям и подписки, вызывающие передачу мутабельных значений — это просто заколебавшее меня явление, которое постоянно возникает в клиент-серверных базах на УФ при попытке что-то серьёзное делать алгоритмами из клиента. Алгоритм же, выполняющийся в консоли для управляемых форм будет работать без всех этих проблем.

    3. Насколько я понимаю, «Отложенная отладка» там тоже недоступна при мобильном варианте. Мне принципиально важно иметь возможность в любой конфигурации, которая мне в работе встретится, моментально вызвать отладку запроса, вызовом одной строки из отладчика и без вмешательств в конфигурацию. Т.к. уф позволяют внешним обработкам как угодно лазить на сервер, у меня есть возможность использовать такую отладку в любых условиях — и в файловом, и в серверном на разных машинах, и проблемы начинаются только тогда, когда несколько серверов в кластере или когда ограничен доступ к файловой системе.

    Почему не подходят немобильные ИР:

    Мне часто приходится анализировать базы, которые я не могу менять. Я подключаюсь, в базе есть проблема, мне нужно найти и исправить. Необходим именно мобильный инструмент.

    Для тех, кто работает с известным списком баз, вероятно, ИР просто незаменимая вещь.

    Reply
  61. mrstomak

    (59) tormozit, ну и эта, ERP 2.0 уже марширует, инструменты для УФ нужно развивать.

    Reply
  62. tormozit

    (60)

    «Типовые конфы не имеют включенного флага по отображению обычных форм»

    Ну тут вроде бы давно уже описано, как запустить обычное приложение для любой конфигурации.

    Действительно типовые конфигурации (особенно с БСП) содержат ошибки (передачи мутабельных значений и подключения подписок), обычно мешающие записи объектов на клиенте. Я пытался доказать разработчикам БСП, что их следует исправлять, но пока все ограничилось публикацией рекомендаций в ИТС о поддержке толстого клиента. Для обхода проблемы с записью на клиенте во всех обработках я сделал опцию «Запись на сервере», доступную пока только в варианте подсистемы.

    Интерактивная отладка (вызов инструмента из отладчика) же на сервере в принципе невозможна прикладными средствами. Тут встройка подсистемы дает огромное удобство в виде отложенной отладки. Отложенную отладку (сохранение объекта на сервере) в принципе конечно можно делать и в файл, но достаточно удобного и универсального способа с файлом я пока не придумал. Возможно у тебя есть идеи на этот счет? Выполнение записи объекта в коде алгоритма действительно сейчас не обустроено для поддержки опции «Запись на сервере». Это я попробую исправить. Но если придется вызывать какой то прикладной метод, внутри которого будет такая ошибка, то тут конечно только перенос выполнения на сервер поможет.

    В итоге записал задачи, конечно лишь частично решающие обозначенные проблемы

    1. В подсистеме в произвольном алгоритме добавить поддержку перенаправления записи на сервер.

    2. В мобильных инструментах реализовать отложенную отладку.

    Reply
  63. mrstomak

    (62) tormozit,

    Собственно, моя идея на счет отложенной отладки на сервере через файл как раз и воплощена в текущей обработке. Причем её можно и не отложенно вызывать — без проблем получается держать на брекпоинте строку с запросом и отлаживать его в другом сеансе.

    Принцип работы — в каталоге временных файлов сервера создаются файлы, содержащие в себе структуру запроса и сохранённые значения ВТ, которые создаются не в самом запросе, а значит, потребуются для его выполнения.

    Для отделения предметов отладки разных конфигураций в файл также пишется строка соединения ИБ.

    Так как внешняя обработка может залезть на сервер только в УФ, этот способ невозможен для обычного приложения.

    Работает и под Linux, и под Windows, проблемы есть только при запрете в кластере работы с файловой подсистемой и при разнесенных физических серверах в рамках 1 кластера (не факт, что файл найдётся при следующем вызове, поэтому не всегда будет работать).

    Но у файла есть и преимущество перед объектом базы — он пишется вне транзакций. Это значит, что откат транзакции в запросе не убьёт сохранённые данные для отладки. Допускаю, что у вас для этого запись объекта отладки производится в фоновом задании на сервере?…

    Reply
  64. tormozit

    (63)

    Допускаю, что у вас для этого запись объекта отладки производится в фоновом задании на сервере?

    Конечно. Поэтому с транзакциями проблем нет. Считаю, что у объектов в базе бесспорно больше преимуществ (при условии что подсистема уже встроена =).

    Я все же попробую сделать отложенную отладку в мобильных ИР.

    Reply
  65. tormozit

    Реализовал в мобильных ИР 3.14.2 отложенную отладку для всех не тонких контекстов и всех режимов запуска http://www.youtube.com/watch?v=hiw_aYVOvFc&feature=youtu.be

    Reply
  66. mrstomak

    (65) tormozit, желательно еще передавать как-либо файл обработки на сервер, не всегда есть общий доступный ресурс. Например, разработать УФ у ИР, которая будет формировать строку отладки и перемещать файл, а саму отладку уже в ОФ.

    Reply
  67. VasMart

    Спасибо за инструмент.

    Для команды ОткрытьФайл определено сочетание ctrl+s — дублируется с СохранитьФайл.

    PS update 2.0.12 03.10.2014 и ранее

    Reply
  68. mrstomak

    (67) VasMart, спасибо за ошибку, поправлю

    Reply
  69. dj_serega

    1.

    Ошибка вот такая при получении плана запроса:

    {Форма.ФормаУпр.Форма(2480)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)

    СтруктураБД = ПолучитьИзВременногоХранилища(АдресХранилища);

    по причине:

    Недопустимое значение параметра (параметр номер ‘1’)

    Вот что там находится:

    АдресХранилища «» Строка

    Может стоит добавить проверку на «ЭтоВременноеХранилище»?

    Reply
  70. dj_serega

    2. Сделать бы перед закрытием вопрос о закрытии.

    Reply
  71. dj_serega

    3. Еще одна ошибка:

    {Форма.ФормаУпр.Форма(2026,11)}: Процедура или функция с указанным именем уже определена (Отладить)

    Процедура <<?>>Отладить(Команда) (Проверка: Толстый клиент (обычное приложение))

    Reply
  72. dj_serega

    4. Еще бы кнопочки для отображения/скрытия панелей (Текста запроса и результата).

    Если что могу доработанный под себя запросник скинуть в ЛС. Обновишь потом (если захочешь).

    Reply
  73. mrstomak

    (69) dj_serega, ошибка при получении плана связана с тем, что в хранилище не помещалась структура базы. Она помещается при первом нажатии галочки «включить получение плана запроса». В стандартном запроснике нельзя включить режим получения плана запроса каким-то другим способом, поэтому никаких проверок не делается. Кеширование структуры бд необходимо для ускорения парсинга запроса СУБД. Скорее всего, ты вывел реквизит «включеноПолучениеПлановЗапроса» на форму или используешь возможность сохранения его значения.

    Проверка синтаксиса у меня проходит нормально в режиме обычного приложения, не понимаю, откуда у тебя эта ошибка.

    Кнопочки открытия/скрытия и вопрос о закрытии добавлю в будущих версиях, спасибо за комментарий

    Reply
  74. dj_serega

    (73)

    Проверка синтаксиса у меня проходит нормально в режиме обычного приложения, не понимаю, откуда у тебя эта ошибка.

    Ну конфигурации то разные. У моей уже ставшей самопиской вот такая беда.

    Я себе то поправил. Но поделиться бы хотелось.

    Кнопочки открытия/скрытия и вопрос о закрытии добавлю в будущих версиях, спасибо за комментарий

    Я уже себе добавил 🙂

    И еще:

    Я там еще поправил «СЗ» в параметрах и еще что-то. Так что кидаю ЛС.

    Код комментировал. Но изменения в элементах формы. Надеюсь как-то увидишь где менял 🙂

    з.ы.: жди ЛС 🙂

    Reply
  75. Gmix

    Спасибо. Отличная разработка как на обычных формах так и на УФ.

    Reply
  76. i.c.h

    А как скачать версию 2.0.12 03.10.2014? При скачивании файла в комментарии написано версия от 08.08.2014 и основная форма отличается от картинки к публикации. Интересует дамп запросов

    Reply
  77. mrstomak

    (76) i.c.h, версия написана в заголовке окна, по ссылке последняя качается.

    Reply
  78. i.c.h

    (77) ни знаю-ни знаю, скачайте сами. проверьте

    Reply
  79. mrstomak

    (78) i.c.h, в комментарии не написана актуальная версия, она есть в заголовке и в истории изменений

    Reply
  80. rasswet

    при попытке нажать на кнопку «конструктор» валится в ошибку «Неизвестное имя формы. Имя «ExternalDataProccessor.QueryWizard.Form»

    на платформе 8.3.5.1186

    на 8.3.5.1231 такой проблемы нет. Это к сведению.

    Reply
  81. MGraf

    (80) rasswet, Перешли с 8.3.4 сразу на 8.3.5.1231, вылазит такая же ошибка:

    «Неизвестное имя формы. Имя «ExternalDataProccessor.QueryWizard.Form»

    Reply
  82. mrstomak

    Коллеги. У кого такая ошибка, пробуйте чистить кеш — судя по тексту, она явно связана не с обработкой, а с методом Показать() конструктора в платформе.

    Возможно, добавление параметра /ClearCache в параметры запуска сможет помочь.

    Я не могу воспроизвести данную ошибку ни на одной платформе.

    Reply
  83. rom-x

    (81) MGraf, (82) тоже самое на платформе 8.3.5.1248. Конфигурация Бухгалтерия 3.0 (3.0.36.21)

    Reply
  84. izidakg

    очень пригодилась. удобно и быстро все

    пока из неудобств наткнулся только на 1 момент

    если условие длинное, например:

    НЕ ПриходныйКассовыйОрдер.Ссылка В
    (ВЫБРАТЬ
    ПриходныйКассовыйОрдерДополнительныеРеквизиты.Ссылка
    ИЗ
    Документ.ПриходныйКассовыйОрдер.ДополнительныеРеквизиты КАК ПриходныйКассовыйОрдерДополнительныеРеквизиты
    ГДЕ
    ПриходныйКассовыйОрдерДополнительныеРеквизиты.Ссылка.Дата >= &ДатаНач
    И ПриходныйКассовыйОрдерДополнительныеРеквизиты.Ссылка.Дата <= &ДатаКон
    И ПриходныйКассовыйОрдерДополнительныеРеквизиты.Свойство = &ОтборСвойство)

    Показать

    при первом заполнении все хорошо, но если потом требуется изменить что угодно в этом условии, все отображается в одну строку с символом перевода строки и изменить условие можно убрав его и кучу пробелов

    Reply
  85. dj_serega

    Нашел неприятную фичу в форме ФормаТаблицыЗначенийУпр.

    Если на заполнено имя колонки и перешел на тип то ругается что не заполнено и не дает отменить ввод строки.

    Добавил проверку на отмену редактирования.

    Если Не ОтменаРедактирования И (ПустаяСтрока(ТекДанные.ИмяКолонки) ИЛИ ТекДанные.ТипЗначения = Новый ОписаниеТипов) Тогда
    Reply
  86. Alien_job

    Если конфа своя можно еще такой бантик прикрутить чтобы отлаживать не сохраняя модуль:

    //В общем модуле «отладка»
    Функция СоздатьДампЗапроса(Запрос) Экспорт
    
    Попытка
    ВнешниеОбработки.Создать(«E:ITSisЗапросник2_0.epf»,Ложь).Дамп(Запрос);
    Возврат Истина;
    Исключение
    Возврат ОписаниеОшибки();
    КонецПопытки;
    
    КонецФункции
    
    //В табло на точке останова
    отладка.СоздатьДампЗапроса(Запрос)

    Показать

    Reply
  87. mrstomak

    Не понимаю, что сейчас мешает отлаживать не сохраняя модуль?

    Reply
  88. Alien_job

    (87) вот влез я в дебри какого-нибудь ПФР, а там запрос и хочу его дамп. Можно написать в модуле строчку «ВнешниеОбработки.создать().Дамп(Запрос)», сохранить обработку/конфигурацию, перепустить обработку/предприятие, вновь пройти отладкой проблемный участок и получить дамп (потом не забыть почистить и пересохранить). А можно сразу написать в табло «отладка.СоздатьДампЗапроса(Запрос)» и в отдельном сеансе сразу смотреть запрос.

    Reply
  89. mrstomak

    (88)

    Странный ты.

    Сразу пишешь ВнешниеОбработки.создать().Дамп(Запрос) в табло и смотришь.

    Все написано как раз так, чтобы вставлять текст в код не нужно было.

    Reply
  90. Alien_job

    (89) ок. Мне не пришло в голову что это может сработать.

    Reply
  91. FractonKireyev

    ВНИМАНИЕ!!! ОШИБКА!!!

    Ядро 8.3.5.1482.

    Интерфейс Такси.

    В разделе «Совместимость» для «Режим использования синхронных вызовов расширений и внешних компонент» установлено «Не использовать».

    При выполнении запроса получаю ошибку:

    {Форма.ФормаУпр.Форма(280)}: Ошибка при вызове метода контекста (КаталогВременныхФайлов)

    Файл = Новый Файл(КаталогВременныхФайлов()+»ZaprTemp.Sel»);

    по причине:

    Использование синхронных методов на клиенте запрещено!

    Дело в том, что в этом режиме совместимости вместо КаталогВременныхФайлов() надо использовать НачатьПолучениеКаталогаВременныхФайлов(<ОписаниеОповещения>) — это написано в справке.

    Только в этой форме функция КаталогВременныхФайлов() вызывается 7 раз.

    Reply
  92. mrstomak

    (91) Катастрофа, как теперь жить!!!

    Reply
  93. FractonKireyev

    (92)

    Ну зачем-же так нервничать…

    Достаточно просто исправить не сложную (в общем-то) ошибку…

    Reply
  94. mrstomak

    (93) Не могу с собой ничего поделать — днями и ночами думаю о написанной капслоком проблеме.

    Ну вообще по теме:

    1. Переписывание вызовов компоненты работы с файлами на асинхронные затронет не только «ПолучитьВременныйКаталог..», а вообще всё, что связано с файлами.

    2. Переписывание вызовов на асинхронные «в общем-то несложно» при нулевом стеке вызовов. Когда у тебя функция на глубине 3 стеков лежит, то добавление там асинхронности подразумевает переписывание вообще нафиг всего и добавление 100500 дополнительных параметров для формирование правильного контекста продолжения работы.

    3. Асинхронные вызовы компонент добавились только в релизе платформы 8.3.5.13хх, т.е. совместимость с 8.2 или 8.3.4 или старыми 8.3.5 летит к чёрту — это уже невозможно реализовать в рамках одной формы, нужно либо разные формы для разных релизов, либо разные обработки.

    4. Включение упомянутого режима в конфигурации имеет смысл при её ориентированности на Chrome. Да и даже там запрещать синхронные компонентные вызовы имеет смысл только для контроля и симуляции «режима веб-клиента» в тонком клиенте 1С, который сам по себе работает в окружении операционной системы, а не ограничен средой javascript в браузере, и его никто никогда не будет вынуждать использовать асинхронные вызовы.

    Вывод: доработка поддержки подобного режима на данный момент нецелесообразна.

    Reply
  95. FractonKireyev

    Несколько ошибок и проблем в запроснике:

    1. Если запрос в области редактирования запроса написан с ошибками, то при нажатии на кнопку «Конструктор» ничего не происходит (а очень хочется увидеть описание ошибки), а при нажатии на кнопку «Выполнить» выползает стандартное окошко о программной ошибке с предложением закрыть программу (такого тоже нельзя допускать — ошибка-то не в программе, а в запросе, и случайное закрытие программы может привести к большим потерям времени работы). А запросы бывают очень большие, и искать проблему глазами зачастую достаточно накладно.

    Пример запроса с ошибкой:

    Выбрать Номенклатура1.Ссылка
    Из Справочник.Номенклатура КАК Номенклатура

    2. Работаю в запроснике, что-то делаю, потом нажимаю на кнопку «Закрыть». При этом обработка просто закрывается, не выдавая никаких предупреждений и вопросов. А очень хочется увидеть вопрос типа «Сохранить изменения?». При чём независимо от того, сохранял я раньше результаты своей работы в файл или нет. Иначе можно случайно потерять достаточно большой объём работы.

    3. В запросе есть условие:

    Справочник1.СтатусВерсии В(&СтатусВерсии)

    . При этом тип этого реквизита — перечисление. При попытке выбрать список значений с нужными значениями перечисления (в окне редактирования параметров кнопка «СЗ») ничего не получается — в этом списке нет перечислений.

    4. При выборе типа параметра (в окне редактирования параметров при нажатии на кнопку «СЗ» или при определении типа колонки при нажатии на кнопку «ТЗ») идет список возможных типов без указания принадлежности типа к ветке конфигурации (справочник, документ, перечисление, ПВХ, и т.д.). Это очень не удобно, и чем больше конфигурация, тем неудобство больше. Во-первых, не всегда понятно где я сейчас нахожусь (в больших конфигурациях длина списка справочников занимает несколько экранов, то-же самое относится и к спискам документов, спискам регистров и т.д.); а во-вторых, не редкость одинаковые названия для справочников, документов, регистров, перечислений (когда одно имя элемента метаданных встречается в разных ветках). Поэтому ветку конфигурации надо как-то обозначать (или выводить пиктограмку, или писать «Справочник.Номенклатура», «Перечисление.ВидПрихода», или то и другое вместе).

    5. В списке редактирования параметров кнопка «Удалить неиспользуемые» ведёт себя непредсказуемым образом — удаляет параметры каким-то случайным образом.

    6. У меня идёт длительная работа по разработке запроса. Запрос пишется не весь сразу, а пишется и отлаживается по частям (меняется текст запроса, меняется список и значения параметров). При этом каждое действие накапливается в истории. При этом собственно история становится совершенно бесполезной из-за её большого размера. Очень хочется её почистить (или всю целиком, или оставить из всей истории несколько пунктов, при чём не обязательно последних). Но такой возможности нет. А для удобства работы очень хочется.

    Reply
  96. tormozit

    (60)

    Мобильные инструменты не позволяют вызывать выполнение кода на сервере. Это значит, что выполнение алгоритмов над результатом запросов ограничено, т.к. при записи могут быть обращения к общим модулям и подписки, вызывающие передачу мутабельных значений — это просто заколебавшее меня явление, которое постоянно возникает в клиент-серверных базах на УФ при попытке что-то серьёзное делать алгоритмами из клиента.

    В версии 3.33.1 портативных инструментов разработчика реализован серверный модуль для конфигураций с БСП и соответственно поддержка опции «Запись на сервере» для всех модифицирующих данные инструментов.

    Reply
  97. mrstomak

    (102) tormozit,

    Да, я видел на мисте уже, молодец.

    Выжимаешь последние капли из ОФ

    Reply
  98. hotey

    (89)

    Как сейчас в 8.3.10 можно из отладки записать дамп?

    Я по-разному пытаюсь создать внешнюю обработку — не выходит.

    Защиту для конкретного пользователя пробовал отключать…

    Reply
  99. mrstomak

    (135)

    отладки записать дамп?

    Я по-разному пытаюсь создать внешнюю обработку — не вых

    Недостаточно данных для анализа проблемы.

    На 8.3.10 всё работает, строку для создания можно посмотреть из формы запросника.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *