Универсальная обработка — КонсольКода1С




Универсальная обработка — консоль кода для визуальной отладки пакетных (и не только) запросов и замена обработки УниверсальныйПодборИОбработкаОбъектов.

Основное назначение данной консоли:
 1. визуальная отладка запросов;
 2. замена обработки УниверсальныйПодборИОбработкаОбъектов.

1. Визуальная отладка запросов
 При разработке запроса немаловажно, особенно при освоении языка запросов,
видеть результат запроса. А именно — важно видеть результат действия различных
видов соединений, условий соединений, результат действия и взаимодействия
подзапросов, скорость выполнения запроса (в файловой базе и в серверной,
с пустым кэшем и с кэшированными данными) и проч.
 Эта важность усиливается при создании «многоэтажных» и многоуровневых
запросов (с глубиной вложенности подзапросов большей или равной 3)!

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

2. Замена обработки УниверсальныйПодборИОбработкаОбъектов.
 На мой (сугубо субъективный) взгляд, обработка
УниверсальныйПодборИОбработкаОбъектов хотя и называется универсальной,
таковой универсальностью обладает не в полной мере.
 Поясню:
  1. можно произвести обработку только документов или справочников или
   бизнес-процессов (причем именно ИЛИ);
  2. выбор необходимых объектов производится только по значению
   реквизитов этих объектов по условию И; т.е. отобрать объекты по
   более сложным условиям (хотя бы по условию ИЛИ) можно только
   программно, что достаточно сильно увеличивает время обработки
   выбранных объектов;
  3. при программном определении различных дополнительных значений
   приходится пользоваться не всегда надежными методами,
   такими как НайтиПоНомеру() или НайтиПоКоду();
  4. при обработке каждого объекта выборки производится получение
   объекта (методом ПолучитьОбъект()). Получение объекта производится
   даже в том случае, когда обработка объекта не требуется!
   А это в значительной степени увеличивает время обработки объектов.
 
 Данная разработка позволяет обойти все указанные (и многие другие) недостатки:
для отбора объектов можно использовать самый универсальный инструмент — запрос!
 Поясню:
  1. с помощью запроса можно получить весьма неординарную выборку из
   объектов различного типа;
  2. выбор объектов можно производить по условиям различной степени
   сложности; но даже если условия отбора объектов не могут быть
   описаны на языке запросов — есть возможность вывести необходимые
   реквизиты в результат запроса и обработать выборку программно!
   Время обработки выборки без вызова метода ПолучитьОбъект() будет
   зависеть только от оптимальности алгоритма программной обработки;
  3. различные дополнительные значения можно определить как параметры
   пакета или элемента и использовать их без вызова таких методов,
   как НайтиПоНомеру() или НайтиПоКоду();
  4. получение объекта обработки производится (явно) только при
   необходимости, что сокращает время обработки объектов.

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

 Уточнение: примеры не полные и показывают только часть возможностей консоли.

По мере готовности примеров они будут выложены для всеобщего скачивания.

68 Comments

  1. Evg-Lylyk

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

    Reply
  2. RomDron

    А для 8.2 не будете делать аналог? 🙂

    Reply
  3. direktorSan

    Обработка обновлена — был найден небольшой баг при отказе от выбора файла для импорта.

    (2)

    Собственно сконвертить обработку под 8.2. труда не составит.

    Планирую это сделать через недельки три-четыре.

    А то если до того момента еще баги найдутся, то надо будет постоянно выкладывать две версии… Тут и ошибиться недолго 😉

    Reply
  4. Поручик

    Рекомендую функции ЗначениеНеЗаполнено() присвоить какой-нибудь префикс. Сейчас открыл в одной не совсем типовой конфе, естественно вылезла ошибка.

    Reply
  5. direktorSan

    (4) 😮

    Можете переслать текст ошибки?

    Дело в том, что обработка разрабатывалась в совсем нетиповой конфигурации…

    И проблем не было…

    Reply
  6. Поручик

    У меня в этой конфе ЗначениеНеЗаполнено() находится в глобальном общем модуле. А ошибка известно какая, такая функция уже определена.

    Reply
  7. Поручик

    (5)

    ЗЫ. Поправьте офографию

    //Инициализация переменной может быть опущена в случае, если обработчик НЕ возварщает никакого значения

    Глаза режет

    Reply
  8. direktorSan

    (4, 7)

    Текст подправлен. Очепятки бывают иногда… 😉 Я и сам их не люблю…

    Обработчик переименован. Было ЗначениеНеЗаполнено() стало ЭтоЗначениеНеЗаполнено(). 🙂

    Обработка заменена.

    Reply
  9. din-din

    (3) Баги нашлись ;-).

    Суть в следующем: надо было учесть тот момент, что в конфе может быть функция «ЗначениеНеЗаполнено», потому наверное не стоит ее использовать, а заменить на «НЕ ЗначениеЗаполнено» так будет более корректно и не будет конфликтов.

    а вообще «+»

    Reply
  10. Поручик

    (9)

    А вообще согласен, какой великий смысл плодить сущности?

    Reply
  11. direktorSan

    (10)

    Не во всякой конфигурации обработчик с таким функционалом назван именно так.

    У нас на работе — это обЗначениеНеЗаполнено().

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

    Reply
  12. Gamm

    (11) ЗначениеЗаполнено — это метод платформы. Поэтому дополнительных функций обЗначениеНеЗаполнено,ЭтоЗначениеНеЗаполнено не требуется.

    Reply
  13. direktorSan

    (12)

    Обертка для ЗначениеЗаполнено создана на случай использования на сервере — там при передаче в ЗначениеЗаполнено мутабельных значений происходит завал.

    Reply
  14. YAN

    (0) Автор меня опередил 😀 давно хотел выложить свою обработку, но теперь уже не буду 🙁

    Автору «+» за хорошую реализацию!

    Reply
  15. RomDron

    (3) сконвертировать конечно тоже можно, но я имел ввиду переработку под управляемые формы. 🙂 просто очень мало админ. Обработок с формами под 8.2

    Reply
  16. direktorSan

    (15) Переработку не планирую, т.к., честно говоря, еще не разбирался с управляемыми формами и работаю в 8.2 под толстым клиентом.

    Reply
  17. direktorSan

    (0)

    Найдены еще пара багов.

    Слегка изменен расчет времени выполнения запросов.

    Обработка обновлена.

    Reply
  18. dobraleks

    держи и мой «+»

    8 версию только начинаю изучать, плюсанул за доступность для «ВСЕХ».

    Далее попробую разобрать и понять принцып написания ее.

    Reply
  19. Evg-Lylyk

    (14) выкладывай не может же быть что там все также. Может что есть интересного

    Reply
  20. YAN

    (19) Хорошо, там чуть-чуть по другому, но загружу после выходных. Надо некоторые вещи отшлифовать в ней 😀

    Reply
  21. RomDron

    (16) Жаль. Если будет время — может я займусь. Дело полезное.

    Reply
  22. aipnnov

    За труд +

    Reply
  23. samum

    Спасибо за то что развиваете проект

    Reply
  24. samum

    Санче так держать!

    Reply
  25. Yashazz

    Хм. По-моему, проще было бы слегка доработать напильником ту же «подбор и обработку», чем такое городить…

    Reply
  26. direktorSan

    (25) Не уверен.

    Времени на разбор и доделку «подбора и обработки» ушло бы столько же, сколько на разработку своего. (Ну не люблю я разбирать код 1С-овцев!..)

    А последующее развитие и сопровождение мне, как автору, — несравненно проще.

    Встречный вопрос. ❓

    А как Вы думаете, что бы получилось после «доработки напильником» «подбора и обработки»?

    Лично я думаю — что то же самое! 😀

    Reply
  27. Yashazz

    (26) Я особо и не разбирал, снёс 2-3 процедуры и свои сделал. Но вот чтоб с нуля — да, хотелось, но у меня столько времени нету, увы.

    Как всегда, вопрос цели и средств, короче. 🙂

    Reply
  28. direktorSan

    Обновлена обработка:

    — исправлены некоторые баги;

    — добавлена возможность запускать отдельный элемент по Ctrl+F7 (не снимая крыжики с остальных);

    — добавлен функционал работы с отбором (а’ля универсальный подбор и обработка…).

    Reply
  29. direktorSan

    Обработка в очередной раз обновлена:

    — исправлены логические неточности;

    — добавлен анализ текста запроса для определения имени временной таблицы: ранее требовалось, чтобы имя временной таблицы совпадало с именем элемента пакета. Теперь такое НЕ требуется!

    Reply
  30. popkovsf65

    А можно выложить инструкцию по использованию этой обработки.

    А то я с такими вещами встречаюсь в первые, к своему стыду!

    Reply
  31. JIGIT

    + за труд…

    на первый взгляд — солидно, мне нравится подход!

    Reply
  32. direktorSan

    Обработка обновлена.

    Нововведения:

    — слегка изменился интерфейс;

    — теперь обработка имеет (пока) небольшой набор параметров;

    — доступно создание списка ассоциированных с конкретной базой файлов;

    — ведется список последних использованных файлов;

    — реализован механизм разбиения пакетного запроса на элементы пакета;

    — реализована возможность выполнения отбора или запроса или обработки какого-либо конкретного элемента.

    Reply
  33. direktorSan

    (31) Я бы с великим удовольствием это сделал бы…

    Только не написал пока я эту инструкцию…

    (Из-за чего сам и страдаю на работе — приходится часто консультировать соратников… 😀 )

    Reply
  34. CheBurator

    сделал бы кто обзор консолей что ли.. а тоих уже где-то с десяток.. не меньше… что использовать неофиту…?

    Reply
  35. patronize

    Спасибо за консольку , удобно и простенько. Ждёмс развития событий

    Reply
  36. ugroblin

    Удобно, но по функционалу особых преимуществ перед другими консолями не заметил.

    Reply
  37. direktorSan

    (36) Когда я писал эту консоль, я не старался превзойти какие-то другие консоли по функциональности.

    Я писал эту консоль для решения своих задач:

    — изучение способов работы с новыми для меня объектами 1С

    — создание альтернативы мелким служебным обработкам

    — консолидация этих обработок в одном хранилище

    — повторное использование этих мелких обработок без лихорадочного поиска обработок на диске

    — визуальная отладка запросов

    — визуальная оптимизация запросов и кода

    И то, что в итоге получилось — выложил для всеобщего использования.

    Позже консоль пригодилась так же для создания учебных запросов для демонстрации различных способов соединений таблиц (потребовалось для начинающих программистов, принятых к нам на работу).

    На текущий момент ведется работа по устранению ошибок.

    В планах (к сожалению, далеких):

    — создание тех. описания

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

    — добавление функционала по работе с общими обработчиками групп пакетов.

    Reply
  38. sashs1980

    при открытии выдал следующую ошибку

    {ВнешняяОбработка.КонсольКода1С(26)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса

    ЯваСкрипт = Новый COMОбъект(«MSScriptControl.ScriptControl»);

    Reply
  39. iceflash

    (38) sashs1980, установите данный компонент, нет у вас его=)

    Reply
  40. sashs1980

    (39) Спасибо. Где его можно взять?

    Reply
  41. iceflash

    (40) sashs1980,

    1. гугл/яндекс про имени класса как бы помогает обычно.

    2. на сайте мелкомягких http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=1949

    Reply
  42. h00m

    много раз выручала, хорошая и удобная консолька.

    Reply
  43. balabani

    хорошую реализацию!

    Reply
  44. Alexez

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

    Reply
  45. yavedmin

    Огромное спасибо! Инструментарий очень понравился.

    Reply
  46. andrei.k

    (37) спасибо большое. Очень нужный инструмент.

    Reply
  47. Владимир Зайцев

    Вполне всё стало приемлимо!

    Reply
  48. petrovaUL

    Плюс. Спасибо. Можно отработать кусок когда.

    Reply
  49. pvlunegov

    под 1С 8.2 не работает что-ли? запустил, куча ошибок при работе вываливается, дальше не стал разбираться, времени нет

    Reply
  50. flashorl

    спасибо большое

    Reply
  51. opiumdx

    Спасибо, нужная вещь!

    Reply
  52. direktorSan

    (50) pvlunegov, под 8.2 работает. В толстом клиенте. (Сам эксплуатирую консоль в 8.2)

    Обработка разрабатывалась в совсем нетиповой конфигурации.

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

    Еще одной причиной может быть следующая: обработка при каждом открытии проверяет наличие XML-файла настроек «КонсольКода1С.xml». И при отсутствии этого файла создает его рядом с обработкой и заполняет настройками по умолчанию. Однако файлы данных тоже имеют формат XML. И это может ввести в заблуждение. И тогда при случайной попытке открыть файл настроек как файл данных возникнет некоторое количество ошибок.

    Еще одна возможная причина — здешняя обработка написана под 8.1. И при открытии ее под 8.2 без предварительной конвертации тоже возникает ошибка. (Данный вариант привел как чисто теоретический.)

    Может быть есть еще какие-то причины, но я их пока не вижу.

    Reply
  53. tormozit

    (50) pvlunegov,

    И здесь у тебя куча ошибок…

    Reply
  54. petrov_al

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

    Reply
  55. pvlunegov

    (56) tormozit, вы мне уже давали понять, что меня не любите.

    Зачем вы делаете свои необоснованные нападки прилюдно?

    Если что-то не нравится,напишите мне сообщение.

    Чем обусловлен ваш комментарий?

    Я за свои слова отвечаю, а вы похоже нет.

    Свой комментарий вы не обосновали, значит это просто тявканье маленькой жучки из-за угла, которая выражает так свою ненависть, потому что укусить боится.

    По поводу кучи ошибок. Они БЫЛИ. Если вам нужно подтверждение, я могу выслать скрины экрана. Запускал в различных базах. Базы нетиповые. Какие они не могу сказать из-за службы безопасности.

    Хочу сказать следующее: главное требование к любой консоли — ЗАПУСК В ЛЮБОЙ КОНФИГУРАЦИИ. Это требование не выполняется. Значит нужно вашу обработку ДОРАБАТЫВАТЬ.

    Reply
  56. tormozit

    (58) Дело не в любви, а в попытке понять смысл твоих постов в стиле «куча ошибок». Это не конструктивная критика. Обычно пользователи пытаются помочь устранить проблему, а сочинение в стиле «плохая погода тут у вас» на много абзацев мало кому поможет.

    Reply
  57. direktorSan

    (58) pvlunegov, скрины в студию!

    После таких заявлений Ваш отказ от предоставления скринов будет равносилен отказу от дуэли! (Уверен, что Вы понимаете всю ответственость и все последствия отказа от дуэли. :))

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

    И, кроме того, прошу выложить скрины публично.

    Reply
  58. Borisych

    Поддерживаю п.60

    Reply
  59. direktorSan

    (50) pvlunegov, еще один вариант возможной ошибки: он описан в посте (38).

    Решение ошибки — пост (41).

    Но не всегда это решение прокатывает — например, на 64-хразрядной Windows: библиотеки msscript.ocx 64-битной нету (по крайней мере — у меня такая информация).

    В данном случае рекомендуется использовать .NET или PShell.

    Но пока — это не реализовано.

    Reply
  60. tormozit

    (62) Бесполезно. Человек видимо слишком занят. В моем случае было также.

    Reply
  61. direktorSan

    (63) tormozit

    Подождем.

    Как говорил Пятачок — «До пятницы я совершенно свободен!» 🙂

    Reply
  62. kapustinag

    Запустил обработку в УПП 1.3.24.2 (8.2.14.540).

    Слева в дереве удалось создать Новую группу, Новый Пакет, Новый элемент,

    но почему-то вкладки Отбор, Запрос, Параметры элемента, Кэш значений справа недоступны.

    Текст запроса ввести не получается в результате.

    Что-то не так делаю?

    Глуповато выгляжу после такого количества восторженных отзывов (см.выше), но…

    Reply
  63. kapustinag

    Да, совсем забыл:

    При создании группы выдается сообщение об ошибке:

    {Форма.Форма.Форма(2452)}: Поле объекта не обнаружено (ДатаМодификации)

    СтрокаСвойства.Значение = ТекущаяСтрока[СтрокаПеречня];

    Новая группа все-таки создается, после закрытия окна ошибки.

    Эта ошибка — только при первом создании группы (первом после запуска обработки).

    При последующих созданиях групп — не проявляется.

    Reply
  64. AlexO

    (55)

    здешняя обработка написана под 8.1. И при открытии ее под 8.2 без предварительной конвертации тоже возникает ошибка.

    она вообще не откроется в новой версии. И никаких ошибок вы не увидете )

    Так где инструкция?

    Описание какое-никакое есть, а вот инструкция по возможностям — нет.

    Пока кроме как «это учебный материал» плюсов не нашел.

    Reply
  65. direktorSan

    (65)(66) kapustinag, обнобновил обработку:

    1. исправил найденный Вами баг,

    2. исправил баги в форме импорта.

    Теперь о доступности закладок Отбор, Запрос, etc.

    Доступность закладок зависит от типа активной строки в дереве обработок:

    — при активной группе — доступны закладки «Описание», «Общие обработчики группы»

    — при активном пакете — доступны «Описание», «Параметры пакета», «Кэш значений»

    — при активном элементе — доступны «Описание», «Отбор», «Запрос», «Обработка», «Параметры элемента».

    Глуповато выгляжу после такого количества восторженных отзывов (см.выше), но…

    Ни сколько! (На мой взгляд — каждый найденный синтаксический баг это, как минимум, минус автору обработки (а то и минус самой обработке) и плюс нашедшему.)

    Дело в том, что многие, скорее всего, используют данную обработку на уже сформированных ранее файлах. (Кстати — в этом состоит причина появления бага, описанного Вами.) А в этих случаях, как Вы понимаете, многие баги не проявляются.

    Reply
  66. direktorSan

    (67) AlexO,

    она вообще не откроется в новой версии. И никаких ошибок вы не увидете )

    Согласен — не откроется. Но будет выдано сообщение:

    «Ошибка загрузки документа. Внешняя обработка не может быть прочитана текущей версией программы.»

    Я не считаю, что здесь необходимо выкладывать более одной версии обработки.

    Причины:

    1. Обработка написана для программистов и потому любой программист сможет, при необходимости, произвести ее конвертацию.

    2. В общем случае потребовалось бы выкладывать более двух версий обработки — на каждую версию платформы, на которой обработки предыдущих версий без конвертации не работают. А так все достаточно просто — версия 8.1 стабильна (потому что не развивается) и далее см. п.1

    Так где инструкция?

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

    Reply
  67. vvirus

    Обработка в режиме управляемого приложения работоспособна ?

    как эта http://infostart.ru/public/198581?

    Reply
  68. vvirus

    //»Свалил» 1с кодом

    Запрос = новый запрос («Выбрать * из справочник.Файлы»);

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

    Reply

Leave a Comment

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