gifts2017

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

Опубликовал direktorSan (direktorSan) в раздел Администрирование - Сервисные утилиты

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

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

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

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

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

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

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

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

Скачать файлы

Наименование Файл Версия Размер
КонсольКода1С 1733
.epf 171,80Kb
10.05.12
1733
.epf 171,80Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Евгений Люлюк (Evg-Lylyk) 08.11.09 17:48
Класс. Еще года два назад хотел сделать чтоб отдельно для каждого вложенного запроса время выполнения вычислялось ну и горячие точки выделялись. Вообщем спасибо интересный проект.
aleks_cons; +1 Ответить
2. RomDron (RomDron) 09.11.09 11:08
А для 8.2 не будете делать аналог? :)
aleks_cons; +1 Ответить 1
3. direktorSan (direktorSan) 09.11.09 12:01
Обработка обновлена - был найден небольшой баг при отказе от выбора файла для импорта.

(2)
Собственно сконвертить обработку под 8.2. труда не составит.
Планирую это сделать через недельки три-четыре.
А то если до того момента еще баги найдутся, то надо будет постоянно выкладывать две версии... Тут и ошибиться недолго ;)
aleks_cons; +1 Ответить 2
4. Сергей Ожерельев (Поручик) 09.11.09 12:24
Рекомендую функции ЗначениеНеЗаполнено() присвоить какой-нибудь префикс. Сейчас открыл в одной не совсем типовой конфе, естественно вылезла ошибка.
aleks_cons; +1 Ответить 1
5. direktorSan (direktorSan) 09.11.09 12:29
(4) :o
Можете переслать текст ошибки?
Дело в том, что обработка разрабатывалась в совсем нетиповой конфигурации...
И проблем не было...
6. Сергей Ожерельев (Поручик) 09.11.09 12:32
У меня в этой конфе ЗначениеНеЗаполнено() находится в глобальном общем модуле. А ошибка известно какая, такая функция уже определена.
7. Сергей Ожерельев (Поручик) 09.11.09 12:37
(5)
ЗЫ. Поправьте офографию
//Инициализация переменной может быть опущена в случае, если обработчик НЕ возварщает никакого значения

Глаза режет
8. direktorSan (direktorSan) 09.11.09 12:46
(4, 7)
Текст подправлен. Очепятки бывают иногда... ;) Я и сам их не люблю...

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

Обработка заменена.
9. Mykhailo O (din-din) 09.11.09 12:48
(3) Баги нашлись ;-).
Суть в следующем: надо было учесть тот момент, что в конфе может быть функция "ЗначениеНеЗаполнено", потому наверное не стоит ее использовать, а заменить на "НЕ ЗначениеЗаполнено" так будет более корректно и не будет конфликтов.

а вообще "+"
aleks_cons; +1 Ответить 1
10. Сергей Ожерельев (Поручик) 09.11.09 13:04
(9)
А вообще согласен, какой великий смысл плодить сущности?
11. direktorSan (direktorSan) 09.11.09 13:09
(10)
Не во всякой конфигурации обработчик с таким функционалом назван именно так.
У нас на работе - это обЗначениеНеЗаполнено().

И, к тому же, чтобы обеспечить полную универсальность (и независимость от конфигураций) в обработке требуется наличие всех самописных обработчиков.
12. Gamm (Gamm) 09.11.09 17:02
(11) ЗначениеЗаполнено - это метод платформы. Поэтому дополнительных функций обЗначениеНеЗаполнено,ЭтоЗначениеНеЗаполнено не требуется.
13. direktorSan (direktorSan) 09.11.09 17:23
(12)
Обертка для ЗначениеЗаполнено создана на случай использования на сервере - там при передаче в ЗначениеЗаполнено мутабельных значений происходит завал.
14. Андрей Янакаев (YAN) 09.11.09 18:57
(0) Автор меня опередил :D давно хотел выложить свою обработку, но теперь уже не буду :(

Автору "+" за хорошую реализацию!
15. RomDron (RomDron) 09.11.09 20:52
(3) сконвертировать конечно тоже можно, но я имел ввиду переработку под управляемые формы. :) просто очень мало админ. Обработок с формами под 8.2
16. direktorSan (direktorSan) 10.11.09 08:01
(15) Переработку не планирую, т.к., честно говоря, еще не разбирался с управляемыми формами и работаю в 8.2 под толстым клиентом.
17. direktorSan (direktorSan) 10.11.09 09:47
(0)
Найдены еще пара багов.
Слегка изменен расчет времени выполнения запросов.

Обработка обновлена.
18. Александр (dobraleks) 10.11.09 11:30
держи и мой "+"
8 версию только начинаю изучать, плюсанул за доступность для "ВСЕХ".
Далее попробую разобрать и понять принцып написания ее.
19. Евгений Люлюк (Evg-Lylyk) 10.11.09 15:47
(14) выкладывай не может же быть что там все также. Может что есть интересного
20. Андрей Янакаев (YAN) 10.11.09 16:40
(19) Хорошо, там чуть-чуть по другому, но загружу после выходных. Надо некоторые вещи отшлифовать в ней :D
Evg-Lylyk; +1 Ответить
21. RomDron (RomDron) 11.11.09 08:21
(16) Жаль. Если будет время - может я займусь. Дело полезное.
22. Илья Ануфриев (aipnnov) 11.11.09 08:36
23. Сергей Еремин (samum) 12.11.09 13:18
Спасибо за то что развиваете проект
24. Сергей Еремин (samum) 12.11.09 13:36
25. Яков Коган (Yashazz) 12.11.09 18:53
Хм. По-моему, проще было бы слегка доработать напильником ту же "подбор и обработку", чем такое городить...
26. direktorSan (direktorSan) 12.11.09 19:42
(25) Не уверен.
Времени на разбор и доделку "подбора и обработки" ушло бы столько же, сколько на разработку своего. (Ну не люблю я разбирать код 1С-овцев!..)
А последующее развитие и сопровождение мне, как автору, - несравненно проще.

Встречный вопрос. :?:
А как Вы думаете, что бы получилось после "доработки напильником" "подбора и обработки"?

Лично я думаю - что то же самое! :D
27. Яков Коган (Yashazz) 13.11.09 13:25
(26) Я особо и не разбирал, снёс 2-3 процедуры и свои сделал. Но вот чтоб с нуля - да, хотелось, но у меня столько времени нету, увы.
Как всегда, вопрос цели и средств, короче. :)
28. direktorSan (direktorSan) 20.11.09 08:12
Обновлена обработка:
- исправлены некоторые баги;
- добавлена возможность запускать отдельный элемент по Ctrl+F7 (не снимая крыжики с остальных);
- добавлен функционал работы с отбором (а'ля универсальный подбор и обработка...).
29. direktorSan (direktorSan) 22.11.09 23:48
Обработка в очередной раз обновлена:
- исправлены логические неточности;
- добавлен анализ текста запроса для определения имени временной таблицы: ранее требовалось, чтобы имя временной таблицы совпадало с именем элемента пакета. Теперь такое НЕ требуется!
30. Serg Serg (popkovsf65) 26.11.09 06:20
А можно выложить инструкцию по использованию этой обработки.
А то я с такими вещами встречаюсь в первые, к своему стыду!
31. Vlad П (JIGIT) 16.12.09 12:05
+ за труд...
на первый взгляд - солидно, мне нравится подход!
32. direktorSan (direktorSan) 28.12.09 19:19
Обработка обновлена.
Нововведения:
- слегка изменился интерфейс;
- теперь обработка имеет (пока) небольшой набор параметров;
- доступно создание списка ассоциированных с конкретной базой файлов;
- ведется список последних использованных файлов;
- реализован механизм разбиения пакетного запроса на элементы пакета;
- реализована возможность выполнения отбора или запроса или обработки какого-либо конкретного элемента.
33. direktorSan (direktorSan) 28.12.09 19:20
(31) Я бы с великим удовольствием это сделал бы...
Только не написал пока я эту инструкцию...
(Из-за чего сам и страдаю на работе - приходится часто консультировать соратников... :D )
34. Сергей (Che) Коцюра (CheBurator) 28.12.09 23:23
сделал бы кто обзор консолей что ли.. а тоих уже где-то с десяток.. не меньше... что использовать неофиту...?
35. Евгений Украинский (patronize) 29.09.11 16:54
Спасибо за консольку , удобно и простенько. Ждёмс развития событий
36. ugroblin (ugroblin) 14.10.11 22:37
Удобно, но по функционалу особых преимуществ перед другими консолями не заметил.
37. direktorSan (direktorSan) 17.10.11 21:35
(36) Когда я писал эту консоль, я не старался превзойти какие-то другие консоли по функциональности.
Я писал эту консоль для решения своих задач:
- изучение способов работы с новыми для меня объектами 1С
- создание альтернативы мелким служебным обработкам
- консолидация этих обработок в одном хранилище
- повторное использование этих мелких обработок без лихорадочного поиска обработок на диске
- визуальная отладка запросов
- визуальная оптимизация запросов и кода

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

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

На текущий момент ведется работа по устранению ошибок.
В планах (к сожалению, далеких):
- создание тех. описания
- переработка обработки для обеспечения возможности легкого встраивания в произвольную конфигурацию с целью обеспечения выполнения консоли в разных режимах (на сервере, при внешнем соединении)
- добавление функционала по работе с общими обработчиками групп пакетов.
38. Александр Дуганов (sashs1980) 19.10.11 09:30
при открытии выдал следующую ошибку
{ВнешняяОбработка.КонсольКода1С(26)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
ЯваСкрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
39. Денис Яковлев (iceflash) 19.10.11 09:35
(38) sashs1980, установите данный компонент, нет у вас его=)
40. Александр Дуганов (sashs1980) 19.10.11 09:42
(39) Спасибо. Где его можно взять?
41. Денис Яковлев (iceflash) 19.10.11 09:52
(40) sashs1980,
1. гугл/яндекс про имени класса как бы помогает обычно.
2. на сайте мелкомягких http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=1949
42. h00m (h00m) 03.11.11 16:30
много раз выручала, хорошая и удобная консолька.
43. samir omarov (balabani) 24.11.11 19:04
44. Алексей Марченко (Alexez) 02.12.11 15:29
Замечательная альтернатива универсальным обработкам для платформы 8.2. Даже без перезагрузки конфигурация можно отработать кусок когда. Спасибо будем качать.
46. Артур Трушкин (yavedmin) 07.12.11 15:25
Огромное спасибо! Инструментарий очень понравился.
47. Андрей К. (andrei.k) 27.12.11 16:02
(37) direktorSan, спасибо большое. Очень нужный инструмент.
48. Владимир ЗАЙЦЕВ (Владимир Зайцев) 29.01.12 23:54
Вполне всё стало приемлимо!
49. Юлия Петрова (petrovaUL) 21.02.12 13:02
Плюс. Спасибо. Можно отработать кусок когда.
50. Петр Лунегов (pvlunegov) 20.04.12 11:41
под 1С 8.2 не работает что-ли? запустил, куча ошибок при работе вываливается, дальше не стал разбираться, времени нет
52. Сергей Борзенков (flashorl) 20.04.12 14:41
54. Michael Smith (opiumdx) 25.04.12 11:58
55. direktorSan (direktorSan) 25.04.12 21:45
(50) pvlunegov, под 8.2 работает. В толстом клиенте. (Сам эксплуатирую консоль в 8.2)

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

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

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

Может быть есть еще какие-то причины, но я их пока не вижу.
56. Сергей Старых (tormozit) 25.04.12 21:59
(50) pvlunegov,
И здесь у тебя куча ошибок...
57. al petrov (petrov_al) 26.04.12 15:37
Добрый день, скажу что работа была проделана большая, за это плюс автору. Но для меня это "мусор" так как предпочитаю писать код в конфигураторе и непонимаю стремление других разработчиков переносить функционал конфигуратора в пользовательский режим. Видимо у автора куча свободного времени что бы заниматься подобной ерундой.
58. Петр Лунегов (pvlunegov) 27.04.12 18:45
(56) tormozit, вы мне уже давали понять, что меня не любите.
Зачем вы делаете свои необоснованные нападки прилюдно?
Если что-то не нравится,напишите мне сообщение.
Чем обусловлен ваш комментарий?
Я за свои слова отвечаю, а вы похоже нет.
Свой комментарий вы не обосновали, значит это просто тявканье маленькой жучки из-за угла, которая выражает так свою ненависть, потому что укусить боится.

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

Хочу сказать следующее: главное требование к любой консоли - ЗАПУСК В ЛЮБОЙ КОНФИГУРАЦИИ. Это требование не выполняется. Значит нужно вашу обработку ДОРАБАТЫВАТЬ.
59. Сергей Старых (tormozit) 27.04.12 19:26
(58) Дело не в любви, а в попытке понять смысл твоих постов в стиле "куча ошибок". Это не конструктивная критика. Обычно пользователи пытаются помочь устранить проблему, а сочинение в стиле "плохая погода тут у вас" на много абзацев мало кому поможет.
60. direktorSan (direktorSan) 29.04.12 22:23
(58) pvlunegov, скрины в студию!

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

И, кроме того, прошу выложить скрины публично.
Borisych; +1 Ответить
61. Андрей Григорьев (Borisych) 02.05.12 11:01
62. direktorSan (direktorSan) 03.05.12 21:29
(50) pvlunegov, еще один вариант возможной ошибки: он описан в посте (38).
Решение ошибки - пост (41).
Но не всегда это решение прокатывает - например, на 64-хразрядной Windows: библиотеки msscript.ocx 64-битной нету (по крайней мере - у меня такая информация).
В данном случае рекомендуется использовать .NET или PShell.
Но пока - это не реализовано.
63. Сергей Старых (tormozit) 03.05.12 21:31
(62) Бесполезно. Человек видимо слишком занят. В моем случае было также.
64. direktorSan (direktorSan) 03.05.12 21:53
(63) tormozit

Подождем.

Как говорил Пятачок - "До пятницы я совершенно свободен!" :)
65. Александр Капустин (kapustinag) 10.05.12 16:17
Запустил обработку в УПП 1.3.24.2 (8.2.14.540).
Слева в дереве удалось создать Новую группу, Новый Пакет, Новый элемент,
но почему-то вкладки Отбор, Запрос, Параметры элемента, Кэш значений справа недоступны.
Текст запроса ввести не получается в результате.
Что-то не так делаю?

Глуповато выгляжу после такого количества восторженных отзывов (см.выше), но...
66. Александр Капустин (kapustinag) 10.05.12 17:08
Да, совсем забыл:
При создании группы выдается сообщение об ошибке:
{Форма.Форма.Форма(2452)}: Поле объекта не обнаружено (ДатаМодификации)
СтрокаСвойства.Значение = ТекущаяСтрока[СтрокаПеречня];

Новая группа все-таки создается, после закрытия окна ошибки.
Эта ошибка - только при первом создании группы (первом после запуска обработки).
При последующих созданиях групп - не проявляется.
67. Алекс Ю (AlexO) 11.05.12 12:44
(55) direktorSan,
здешняя обработка написана под 8.1. И при открытии ее под 8.2 без предварительной конвертации тоже возникает ошибка.

она вообще не откроется в новой версии. И никаких ошибок вы не увидете )
Так где инструкция?
Описание какое-никакое есть, а вот инструкция по возможностям - нет.
Пока кроме как "это учебный материал" плюсов не нашел.
68. direktorSan (direktorSan) 12.05.12 00:42
(65)(66) kapustinag, обнобновил обработку:
1. исправил найденный Вами баг,
2. исправил баги в форме импорта.

Теперь о доступности закладок Отбор, Запрос, etc.
Доступность закладок зависит от типа активной строки в дереве обработок:
- при активной группе - доступны закладки "Описание", "Общие обработчики группы"
- при активном пакете - доступны "Описание", "Параметры пакета", "Кэш значений"
- при активном элементе - доступны "Описание", "Отбор", "Запрос", "Обработка", "Параметры элемента".

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

Ни сколько! (На мой взгляд - каждый найденный синтаксический баг это, как минимум, минус автору обработки (а то и минус самой обработке) и плюс нашедшему.)
Дело в том, что многие, скорее всего, используют данную обработку на уже сформированных ранее файлах. (Кстати - в этом состоит причина появления бага, описанного Вами.) А в этих случаях, как Вы понимаете, многие баги не проявляются.
69. direktorSan (direktorSan) 12.05.12 00:53
(67) AlexO,
она вообще не откроется в новой версии. И никаких ошибок вы не увидете )

Согласен - не откроется. Но будет выдано сообщение:
"Ошибка загрузки документа. Внешняя обработка не может быть прочитана текущей версией программы."

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

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

Вот тут ничего конкретного ответить не могу - на написание инструкции банально не хватает времени. В основном по этой же причине обработка практически не развивается уже около года. Только производятся мелкие доработки и исправление багов.
70. Виктор (vvirus) 29.10.13 07:38
Обработка в режиме управляемого приложения работоспособна ?
как эта http://infostart.ru/public/198581?
71. Виктор (vvirus) 30.10.13 12:06
//"Свалил" 1с кодом
Запрос = новый запрос ("Выбрать * из справочник.Файлы");
ВТД(Запрос.Выполнить().Выгрузить());