Универсальная обработка — КонсольКода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 не будет опубликован. Обязательные поля помечены *