Редактор и исполнитель программного кода в режиме Предприятие (1С 7.7)

25.11.11

Разработка - Инструментарий разработчика

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

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

Наименование Файл Версия Размер
ВесьКомплект
.rar 9,97Kb
135
.rar 9,97Kb 135 Скачать

 

Иногда бывает лень ради трех-пяти строчек кода создавать обработку. Да и хранить такой программный мусор тяжело (у меня отдельная папка, но как показывает практика, когда таких штук  с полсотни, то быстрее написать новую обработку, чем отыскивать, то, что может подойти). А вообще еще позавчера я и не думал, что 7-ка такое умеет. Вот думал 8-ка молодец, она может, а на семерке, таже если строчку кода хочешь куда-то встроить или изменить программно  - фиг тебе!

Но не все так оказалось плохо как казалось. Столкнувшись с необходимостью динамически менять именно код а не переменные походил по Инфостарту (и не только) изрядно, но все редакторы и технологии редактирования кода  сделаны для восьмерки. Например //infostart.ru/public/62374/ и еще какие-то. Но для семерки не нашел НИЧЕГО.

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

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

 Пдробности:

 1. Код исполняется либо непосредственно как одна процедура без названия (процедура в этом случае создается  по умолчанию) либо делим его на процедуры / функции как обычно. В последнем случае не забываем ставить соответствующую галочку на форме и помним, что первой запустится последняя по счету процедура.

 2. Если хотим большего подключаем текстовую библиотеку. Это обычный текстовый файл с кодом процедур / функций.

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

 3.  Так как не 8-ка все таки, то я не смог уйти от связки двух файлов для работы данного редактора.
Как говорится один бьет, а другой - держит. Поэтому избрал более простой и логичной пару двух ert, а не ert с текстовым.

Файл TextCode.ert и есть собственно редактор. Открываем его как внешний отчет в режиме Предприятие пишем код и запускаем.

Файл RunCode.ert должен просто находиться рядом с TextCode.ert (в одной папке).
Так как все это рассчитано на программистов, думаю Вы легко, в случае необходимости, разберетесь как эту пару встроить в конфигурацию.
Сейчас путь к RunCode.ert берется именно в каталоге внешней обработки TextCode. Если она перестанет быть внешней,
то и путь к RunCode.ert нужно указать по другому.

Текстовый файл в комплекте поставки просто библиотека на которой я тестировал как загружаются и работают библиотеки.

Там две функции не подавляющие своей сложностью. 

 P.S. Для людей которым просто захочется поиграться в программистов БОЛЬШОЙ совет и предупреждение "Если Вы своим кодом, а точнее бездумным его написанием и исполнением, запортите свою базу я никакой ответственности за последствия ВАШИХ действий НЕ НЕСУ!!!" Исполняется только то что пишется, а написать теперь выходит может кто угодно...

 Версия 2. 

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

http://forum.infostart.ru/user/46936/ и Warenic http://forum.infostart.ru/user/36483/.

 Вторая версия состоит всего из одного файла ert (победил таки неспособность семерки работать с двоичными файлами) и отличается от предыдущей наличием таблицы подстановок куда можно вводить как базовые типы данных, так и объекты метаданных (справочники, документы, перечисления и константы) и назначать для них переменные. Таблица подстановок редактируется как кнопками Добавить/Удалить так и непосредственно двойным кликом по ячейке.

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

Особое замечание. Если при определении значения переменной а необходимо знать значение переменной b то в таблице определение b должно находиться раньше.
То есть если а = b+c, b=с-3, с=8 то в таблице значений мы сначала определяем с, затем b и в последнюю очередь a, так как построитель кода набивает их в порядке следования в таблице подстановк. Вроде бы очевидно, но я сам с этим однажды тупанул:)

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

 

См. также

Консоль запросов

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    21559    54    Gvozdod    8    

14

StartManager 1.4 - Развитие альтернативного стартера

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    165701    1864    Alexoniq    1596    

496

Tray Informer

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    32877    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21197    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18029    35    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36103    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    34958    248    adhocprog    51    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. dusha0020 1103 19.11.11 14:25 Сейчас в теме
Внешняя обработка которая позволяет написать и исполнить код языка 1С в режиме Предприятия. Есть возможность подключения текстовых библиотек кода, а также подстановки переменных базового и агрегатного типов из таблицы значений на форме в код редактора.

Перейти к публикации

1. Boroda 90 19.11.11 14:25 Сейчас в теме
Очень неплохо! Беру на вооружение. Спасибо! Чувствую, 7-ка ещё долго будет жить....
2. vkr 19.11.11 21:20 Сейчас в теме
Круть!!! Интерпретёр внутри интерпретёра... Вот так и вбиваются гвозди в крышку гроба монстров... :D
А если серьезно - то ОЧЕНЬ полезная штука для программера!!! ПЛЮС!!!
3. zk96 20.11.11 01:08 Сейчас в теме
Не стал скачивать. Но думаю что Вы действительно сделали большую и сложную работу, поэтому плюс. Но мне кажеться, что если бы Вы использовали 1С++ и его объект ВыполняемыйМодуль, то добились того же результата с небольшими затратами времени и сил.
29. victuan 4232 30.11.11 08:01 Сейчас в теме
А всё-таки почему автором пост (3) оставлен без внимания?
30. Арчибальд 2706 30.11.11 08:23 Сейчас в теме
(29) Могу я ответить. 1С++ годится в "домашних" условиях, когда он уже загружен. Данную же обработку можно носить в кармане - скажем, с целью потестить совершенно чужую базу.
31. victuan 4232 30.11.11 08:26 Сейчас в теме
(30)А 1срр.dll в карман уже не лезет? ;)
33. Арчибальд 2706 30.11.11 09:11 Сейчас в теме
(31) Регить свою dll-ку на чужом компе неприлично.
32. dusha0020 1103 30.11.11 09:05 Сейчас в теме
(29) victuan, Идея была навеяна именно штатными возможностями 8-ки и аналогичными консолями под нее. И с самого начала, я решил использовать только базовые возможности семерки. В итоге их не хватило (пришлось прибегнуть к vbs и стандартному объекту WSH), но это штатный функционал любой (с 2000 кажется) винды. В итоге мы имеем 1 ert, а не ert+ 1cpp.dll. Не скажу что мой подход лучший с точки зрения затрат времении программиста, но думаю, что те кто скачал и разобрал код, смогут найти интересные идеи и чуть-чуть расширить представление о возможностях семерки.
34. victuan 4232 30.11.11 12:34 Сейчас в теме
(32)Т.е. ert + WSH это лучше, чем ert + 1cpp.dll? Может быть, может быть...
(33)1c++ регить в реестре нет необходимости, она подключается из встроенного языка 1С (ЗагрузитьВнешнююКомпоненту) без всяких дополнительных действий в системе.
4. TrinitronOTV 14 20.11.11 09:24 Сейчас в теме
присоединюсь к вышесказанному, тоже плюс поставлю
5. Serj1C 483 20.11.11 21:13 Сейчас в теме
Скачивать не стал, все-равно семерки уже нет установленной. Сам задумался как такое сделать, пришло в голову только сохранять исполняемый код в текстовый файл, а в обработке использовать конструкцию "загрузить текст модуля", и хитро ее вызывать. Поставлю плюс, но мой вывод:

Столетием ошибся ))
7. dusha0020 1103 20.11.11 21:40 Сейчас в теме
(5) Serj1C, Да. Принцип именно такой:), А насчет столетия... В восьмерке нет достаточной практики - только книжка и задания по ней. А мои публикации это побочные продукты ежедневного и упорного писания под 7-ку. Ну так мне и платят за нее...
6. ksv74 90 20.11.11 21:35 Сейчас в теме
Плюсану. Все просто,идея лежит на поверхности, но сам не додумался.
8. DDos76 206 21.11.11 07:38 Сейчас в теме
Идея хорошая. Сам собирался много раз но лень победить не смог. А еще никак не мог придумать, каким же образом "Покрасить" текст модуля в окне редактирования. А именно окраски очень не хватает. Что сделать - привычка. Но все равно спасибо и мой +!
9. Арчибальд 2706 21.11.11 08:17 Сейчас в теме
Мне лень посмотреть. Это примерно как в http://infostart.ru/public/59433/ ?
Прикрепленные файлы:
11. dusha0020 1103 21.11.11 10:52 Сейчас в теме
(9) Арчибальд, Да это примерно так. И не тешил себя мыслью, что идея моя на 100% оригинальна, но вот отыскать Вашу разработку не смог...
10. Famza 84 21.11.11 09:00 Сейчас в теме
Плюс, конечно, но надо бы добавить реквизит какой на форму неопределенного типа, а то как подставить че-нить из данных?
12. warenic 109 21.11.11 11:48 Сейчас в теме
В качестве идеи для развития проекта: неплохо бы иметь возможность вводить какие-либо данные. Их можно использовать как критерии отбора при групповой обработке или значения для реквизитов. Как, например, в редакторе таблиц, списков значений или универсальных редакторах моей разработки (там использована компонента Rainbow addon 2000, переродившаяся в 1С++).
13. Арчибальд 2706 21.11.11 14:23 Сейчас в теме
(12) См. пост 9. Там как раз подстановка есть... А вычисление формул в контексте (Документа) - вот здесь http://infostart.ru/public/58541/
16. warenic 109 21.11.11 16:54 Сейчас в теме
(13) Арчибальд,
Ты меня не понял.
Допустим, нам нужно из справочника "Номенклатура" обработать все элементы, у которых есть определенное свойство. Ссылку на элемент свойства как в тексте указать?
Спр=СоздатьОбъект("Справочник.ВидыСвойств");
Спр.НайтиПоКоду(123);
ВидСвойства=Спр.ТекущийЭлемент();
Спр=СоздатьОбъект("Справочник.ЗначенияСвойств");
Спр.НайтиПоНаименованию("трам-пам-пам");
ЗначениеСвойство=Спр.ТекущийЭлемент();
Спр=СоздатьОбъект("Справочник.СвойстваНоменклатуры");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 цикл
	Если 9Спр.ВидСвойство=ВидСвойства) и (Спр.ЗначениеСвойства=ЗначениеСвойства) тогда
		НужноеСвойство=Спр.ТекущийЭлемент();
		Прервать;
	КонецЕсли;
КонецЦикла;
Показать

Можно еще вот так, если заранее узнать внутренний код.
НужноеСвойство=ЗначениеИзСтрокиВнутр("{""B"",""0"",""0"",""562"",""0"",""0"",""         5   ""}");

Но лучше иметь на форме реквизит (или лучше список значений), в котором это значение просто выбрать. А потом передать в открываемую форму через параметр. Тогда в тексте на него ссылаться просто
НужноеСвойство=Форма.Параметр.Получить("НужноеСвойство");
18. Арчибальд 2706 21.11.11 17:16 Сейчас в теме
14. CheBurator 3119 21.11.11 16:43 Сейчас в теме
Сделай возможность "тестового исполнения кода" - оберни код в транзакцию.. по окончанию кода - отментьТранзакцию()
15. CheBurator 3119 21.11.11 16:43 Сейчас в теме
Сделай возможность "тестового исполнения кода" - оберни код в транзакцию.. по окончанию кода - отментьТранзакцию()
17. dusha0020 1103 21.11.11 17:08 Сейчас в теме
Спасибо всем за замечания и предложения. Попробую все учесть, а также обойтись всего одним ert-шником. Это было написано за 3 часа и ночью, после бурной трудовой недели, я сам удивился, что так быстро заработало:) Сегодня посижу после работы - чего нибудь допишу.
19. Арчибальд 2706 21.11.11 17:18 Сейчас в теме
(17) Одним - не так-то просто. Если только формекс применить...
22. warenic 109 22.11.11 11:09 Сейчас в теме
(19)
Одним - не так-то просто. Если только формекс применить...

Как вариант: можно модуль основной обработки вынести в текст. К кнопке "Выполнить" цепляем процедуру, текст которой собственно и будем писать в диалоге. Сохраняем текст модуля (с написанной процедурой), а потом открываем обработку, чтобы модуль заново скомпилировался. Теперь с новой процедурой на кнопке.
Минус - если модуль не скомпилится из-за ошибки, то форма обработки не откроется, совсем...
(17) dusha0020. не загоняйся, 2 ert-шки и набор текстовиков - самое то :)
Арчибальд; +1 Ответить
20. ГСГ 22.11.11 09:50 Сейчас в теме
Скачаю и посмотрю, идея очень понравилась, такое действительно бывает нужно и полезно.
21. ГСГ 22.11.11 09:55 Сейчас в теме
Скачал, совсем даже недурно. Действительно семерка еще долго будет на службе у пользователей, еще много интересного увидим.
23. Lyuba-Lyuba 23.11.11 10:22 Сейчас в теме
24. nurislam 23.11.11 13:29 Сейчас в теме
25. Maximus1982 23.11.11 18:04 Сейчас в теме
26. Altair777 644 24.11.11 12:19 Сейчас в теме
(0) Позабавили названия скриншотов "Scrin1.jpg" и т.д.
Автор, Вам должно быть стыдно :)
27. Арчибальд 2706 25.11.11 10:35 Сейчас в теме
Вариант с всего одной ert-шкой (исполнитель кода генерируется скриптом) - вообще шедеврален. Жаль что дополнительный плюс не предусмотрен.
28. dusha0020 1103 25.11.11 21:12 Сейчас в теме
(27) Арчибальд, Такие рецензии нужно в рамочку и на стену вместе с дипломами и серификатами вешать. Но рамка - золотая и на пол метра выше:)!
35. пользователь 30.11.11 17:03
Сообщение было скрыто модератором.
...
36. dumal 30.11.11 17:14 Сейчас в теме
Спасибо. Честно говоря, читая, как называется данная разработка, был уверен, что увижу что-то вроде совета создавать текстовый файл, подключать его с помощью #ЗагрузитьИзФайла и потом менять его в процессе работы. Возьму на вооружение
37. Арчибальд 2706 30.11.11 17:34 Сейчас в теме
(36) В 9 посте я задал вопрос, так ли это - так и было. А потом автор ушел вперед...
38. dumal 30.11.11 18:15 Сейчас в теме
Арчибальд пишет:

(36) В 9 посте я задал вопрос, так ли это - так и было. А потом автор ушел вперед...


Что ж, честь ему и хвала. А нам - отличный инструмент для работы
Арчибальд; +1 Ответить
39. lcd-boost 04.12.11 05:29 Сейчас в теме
Крутая вещь. Добавил пару функций :) и она мне очень помогает экономить время на кодинге :))))
40. Гость 13.12.11 15:43
41. dicwork 30.12.11 00:08 Сейчас в теме
Интересная вещь. Только почему прискачивании скачивается файл с расширением HTM, который является файлом RAR. Могу конечно переименовать, но все же нехорошо это.
42. alexqc 150 17.02.12 13:58 Сейчас в теме
Обработку посмотреть не могу (счас занимаюсь 8кой), по контексту обсуждения понял, что вы наверно создаете временный файл-ERTшник через что-то типа ADODB.Stream с #ЗагрузитьИзФайла и файл который это самое #Загрузить и загружает. Скажите, я угадал?

А к самой обработке по опыту написания-использования аналогичного могу предложить такую "сервисную" фичу:

В текстовом поле неограниченной длины код писать все же не совсем удобно (таб не нажмешь, форматирования-раскраски никакой...), удобно скопировать в текстовый документ (который через файл-новый-текст открывается), ему в свойсвах текста указать что это "текст модуля" (как вариант, установить "открывать текст как модуль" в сервис-параметры), там отредактировать как удобно, и скопировать обратно.
А вот для автоматизации этого процесса сделать такой хитрый ход: создать объект Текст, открыть его, а после редактирования прочитать его содержимое обратно - это все можно сделать программно, по нажатию соотв кнопок на форме. А используя недокументированную функцию формы Форма.ОбработкаОжидания - даже оперативно получать данные оттуда.

Вот примерный код (не проверял, может сразу не заработать)
Перем ТекстМод;
Процедура ВТекст()
	ТекстМод=СоздатьОбъект("текст");
	ТекстМод.ДобавитьСтроку(ПолеФормы);
	ТекстМод.Показать();
	Форма.ОбработкаОжидания("обработкаТекста",1);
КонецПроцедуры

//-------------------------------
Процедура обработкаТекста()
    Если ТипЗначения(ТекстМод)=100 Тогда
        Если ТекстМод.КоличествоСтрок()>0 Тогда
        	Стр="";
			Для ш=1 по ТекстМод.КоличествоСтрок() Цикл
				Стр=Стр+ТекстМод.ПолучитьСтроку(ш)+РазделительСтрок;
			КонецЦикла;
			Если ПолеФормы<>Стр Тогда
				ПолеФормы=Стр;
				Форма.обновить();
			КонецЕсли;
			Возврат;
		ИначеЕсли ПолеФормы="" Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	Форма.ОбработкаОжидания("обработкаТекста",0);
КонецПроцедуры

Показать

где ПолеФормы - поле для редактирования, ВТекст() - проц. на кнопке. Процедура создает и открывает текстовый док с ред. содержимым, и запускает обработку ожидания ОбработкаТекста. В ОбработкеТекста по мере изменения содержимое текст. дока копируется обратно в поле редактирования, а также проверяется факт существования объекта и то что он открыт (если текст док закрыть, у него очистится содержимое) - при закрытии текст.дока обработка отключается.
43. dusha0020 1103 17.02.12 14:15 Сейчас в теме
(42) alexqc, Да. Вы догадались правильно. Хекс содержимое временного ert-шника записано в код основной обработки и восстанавливается скриптом, таким образом нужен всего один файл с обработкой.
А Ваша фитча очень интересная. Обязательно попробую прикрутить к данной обработке, тем более, что писать в бесконечном текстовом поле действительно неудобно, да и не эффектно:) Спасибо большое.
Оставьте свое сообщение