Консоль кода с поддержкой объявления процедур и функций, с дополнительными функциями отслеживания и вывода значений

24.05.23

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

В статье представлено решение давней проблемы всех консолей кода, это невозможность объявлять в них процедуры и функции, а также использование метода Возврат для раннего выхода из исполняемого кода. Также затронута тема вывода результатов работы исполняемого кода, что зачастую ограничено функцией Сообщить. Попутно приводится моё видение того, как должно выглядеть и работать дерево объектов конфигурации в консоли запросов. Обработки подходят для всех конфигураций, работающих в управляемых формах 1С версии 8.3.15 и выше (тестировалось в ЗУП 3.1, ERP 2.5, БП 3.0, УНФ 3.0).

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

Наименование Файл Версия Размер
Консоль кода с поддержкой объявления процедур и функций
.epf 59,65Kb
88
.epf 59,65Kb 88 Скачать
Консоль запросов с деревом объектов
.epf 111,85Kb
58
.epf 111,85Kb 58 Скачать

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

1. для консоли кода:

- вывод результата только через Сообщить

2. для консоли запросов:

- неудобный ввод запроса, но это субъективно, просто я не люблю пользоваться конструктором запросов;

- слабые генераторы кода обработки, но, возможно, я не все видел.

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

Представляю вам свою версию консоли кода.

Основные фишки:

- поддержка объявления процедур и функций, в том числе поддерживается рекурсия и ранние выходы из функций, объявление клиентских и серверных функций;

- минимальная поддержка макросов (замена кода, подключение внешнего файла);

- задание параметров для выполняемого кода;

- задание выражений для отслеживания результатов;

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

 

 

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

Запускать код можно как на клиенте, так и на сервере -> кнопка-переключатель на панели.


Параметры кода

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

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


Отслеживание переменных

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

Отслеживание можно использовать даже без основного кода, например, записать в выражение текст "Новый УникальныйИдентификатор".

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


Вывод результатов

Для вывода результатов на форме созданы 2 постоянных реквизита:

- Результат_Текст -- текстовое поле, выводим в него так: Результат_Текст = "Любой текст"

- Результат_ТабДокумент -- табличный документ, в него выводим, как в обычный табличный документ, либо функцией РезультатВТабДокумент.

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

- Вывести(ЗначениеДляВывода, ИмяТЗ = 1, ВывестиНомерСтроки = Ложь)

ЗначениеДляВывода - произвольное значение.  Допустимые типы: универсальные коллекции (таблица значений, дерево, массив, структура и др.), результат запроса, выборка, менеджер временных таблиц, строка ТЧ.

ИмяТЗ - число или строка (строка должна подходить для создания имени реквизита, т.е. нет пробелов, точек и т.п.)

ВывестиНомерСтроки - вывести номер строки в отдельном столбце

Выводит значение в отдельную страницу в группе Результат.

- ВывестиТипыКолонок(ТЗ, ИмяТЗ = 1, ВывестиНомерСтроки = Ложь)

ТЗ - объект для вывода

ИмяТЗ - число или строка (строка должна подходить для создания имени реквизита, т.е. нет пробелов, точек и т.п.)

ВывестиНомерСтроки - вывести номер строки в отдельном столбце

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


Вспомогательные функции

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

- ТЗвДерево(ТЗ, КолонкиИерархии, КолонкиДляВывода = Неопределено)

ТЗ - таблица значений

КолонкиИерархии - строка, список имен колонок через запятую для группировки строк и построения иерархии.

КолонкиДляВывода - строка, список имен колонок для вывода. Неопределено - все колонки, кроме иерархии, "" - только иерархия,

"*" - все колонки, включая иерархию. Можно использовать формат "ИмяКолонки КАК НовоеИмяКолонки" для переименования колонок дерева.

Преобразует таблицу значений в дерево значений, возвращает дерево значений.

В параметры КолонкиИерархии, КолонкиДляВывода можно передавать не только названия колонок ТЗ, но и переходить от значений к их реквизитам, например, "Номенклатура.ЕдиницаИзмерения". Также можно передать условие, и данные будут сгруппированы по этому условию ("Цена > 100").

 

 

Обратная функция создает из дерева таблицу значений, была создана для эксперимента, но возможно кто-то найдет ей достойное применение.

ДеревоВТЗ(Дерево, КолонкаИерархии = Неопределено, ПоляИерархии = Неопределено)

Дерево - дерево для преобразования

КолонкаИерархии - имя колонки иерархии, по-умолчанию используется первая колонка

ПоляИерархии - строка, список имен колонок через запятую для распределения значений иерархии. Каждый уровень иерархии помещается в соответствующую колонку, если поле не задано, то создается новая колонка с имененем "Уровень_" + СтрокаДерева.Уровень().

Преобразует дерево значений в таблицу значений, возвращает таблицу значений.

Для сохранения таблиц, созданных функцией Вывести, можно использовать пункт меню Результаты >> Сохранить, либо функции ТЗвТабДокумент и РезультатВТабДокумент.

ТЗвТабДокумент(ТЗ, Заголовок = Неопределено)

ТЗ - таблица значений

Заголовок - заголовок для таблицы, если не задан, то заголовок не выводится

Создает новый табличный документ и выводит в него таблицу значений. Возвращает табличный документ.

Пример: Результат_ТабДокумент = ТЗвТабДокумент(Запрос.Выполнить().Выгрузить(), "Результат запроса");

РезультатВТабДокумент(ИмяТЗ = Неопределено)

ИмяТЗ - имя ТЗ, которое использовалось для вывода результата. Если не задано, будут выведены все результаты.

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

Пример: 

Вывести(ТЗ, "ИмяТЗ", Истина);

Результат_ТабДокумент = РезультатВТабДокумент("ИмяТЗ");


Объявление процедур и функций

Разбор кода построен на парсере bsparser (https://github.com/lead-tools/bsparser), огромная благодарность автору.

Как это работает лучше смотреть в исходном коде.

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

Параметры метода переименуются по шаблону НовоеИмяПараметра = "п" + НомерПараметра, в коде они также заменяются на новое имя.

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

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

Существующие ограничения:

- параметры в методы передаются только по ссылке;

- вспомогательные функции принимают только 10 параметров, если нужно больше можно добавить в коде формы;

- директива &НаКлиенте ожидается сразу перед объявлением метода, если до этого будут комментарии, то метод будет определен как серверный;

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

 

Пример чтения XML и вывод его в дерево значений

 

Пример использования парсера


Макросы

Все макросы начинаются с "//#Макро" и должны располагаться в начале строки.

Макросы выполняются до разбора текста на методы.

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

Макрос действует только на текст, расположенный ниже его объявления.
 

//#МакроЗамена ИсходныйТекст -> ЗамещающийТекст

Заменяет в коде исходный текст на замещающий текст.

пример: //#МакроЗамена Запрос.Выполнить(); -> ВыполнитьСТрассировкой(Запрос, Замеры);

Можно использовать для подмены функций модуля, например для внедрения замеров или склейки текста запросов.


//#МакроПодключить ИмяФайлаНаКлиенте

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

Макросы в подключаемом файле обрабатываются отдельно и действуют только на его текст.

Если подключаемый файл подключает себя снова, то будет бесконечный цикл.

пример: //#МакроПодключить C:\Temp\Имя файла на клиенте.txt


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

Ну и попутно консоль запросов, её фишки:

- дерево объектов с возможностью бесконечно проваливаться в типы реквизитов, плюс виртуальные реквизиты Движения и СсылкиНаОбъект (места использования типа);

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

Дерево объектов получилось настолько удобным, что я зачастую смотрю структуру объектов не в конфигураторе, а именно в консоли. Для дерева объектов поддерживается перетаскивание объектов в код запроса, значения перечислений вставляются со словом ЗНАЧЕНИЕ, для ссылочных типов анализируется контекст и либо вставляется путь "Справочник.Организации", либо если есть сравнение перед местом вставки вставляется ссылка "= ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)".

В контекстном меню расположены команды:

- по созданию минимального запроса для объекта конфигурации, также работает для табличных частей;

- открытия форм списка, выбора и остальных по имени;

- вставки предопределенного значения справочника.

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

Если в коде запроса поставить курсор в текст с именем объекта дерева (либо выделить нужный текст), например ТоварыНаСкладах, то через контекстное меню можно найти этот объект в дереве.

Повторный поиск будет пытаться искать одноименные объекты ниже.

 



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

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

Если выделить пару строк запроса и нажать кнопку "Добавить условие", то будет создано обрамление этих строк условием, например:

 

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	Т.Ссылка КАК Ссылка,
|" + ?(условие, "
|	Т.ПометкаУдаления КАК ПометкаУдаления,
|	Т.Код КАК Код,
|", "") + "
|	Т.Наименование КАК Наименование,
|	Т.Префикс КАК Префикс,
|	Т.ИНН КАК ИНН,
|	Т.КПП КАК КПП
|ИЗ
|	Справочник.Организации КАК Т";


 

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

консоль кода поддержка объявления процедур и функций консоль запросов дерево объектов конфигурации

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122137    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7288    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3531    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177744    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99345    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18109    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28108    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    23601    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 165 24.05.23 14:05 Сейчас в теме
Очень интересные обработки! Спасибо!
2. Serg2000mr 311 26.05.23 08:17 Сейчас в теме
Помимо всего интересного и полезного очень понравилось, как реализованы настройки ))
Прикрепленные файлы:
3. JohnyDeath 301 26.05.23 10:29 Сейчас в теме
А если прикрутить https://github.com/salexdv/bsl_console , то будет вообще красота!
4. acces969 343 26.05.23 11:22 Сейчас в теме
Сам себе такую сделал много лет назад, будучи еще джуном. По частоте использования обработка обходит консоль запросов.
Все хотел ее причесать и выложить к остальным своим инструментам на инфостарт, да не успел))
Прикрепленные файлы:
5. o.nikolaev 211 26.05.23 12:00 Сейчас в теме
6. v8_088 26.05.23 12:53 Сейчас в теме
Правильное видение дерева объектов. То, что надо для программиста, а не для конструктора метаданных.
Спасибо. В свойствах текста можно включить "встроенный язык". В цвете код поприятней смотреть.
7. tormozit 7136 26.05.23 15:14 Сейчас в теме
(6) Подскажи как это сделать
10. v8_088 26.05.23 16:42 Сейчас в теме
(7) я про эту плюшку
Прикрепленные файлы:
ixijixi; tormozit; Evg-Lylyk; +3 Ответить
12. Sashares 34 26.05.23 17:00 Сейчас в теме
(10) 8.3.21.1624. У меня таких опций нет в текстовом документе. Что я делаю не так?
Прикрепленные файлы:
15. v8_088 26.05.23 17:04 Сейчас в теме
17. RocKeR_13 1317 26.05.23 17:18 Сейчас в теме
(7) Увы, эта галка доступна только в толстом клиенте... Не посмотрел комментарии до конца, уже написали)
Прикрепленные файлы:
8. Serg2000mr 311 26.05.23 16:15 Сейчас в теме
(6)
В цвете код поприятней смотреть

Мне вот наоборот кажется, что для консоли кода цвет не особо-то и нужен. Код там не более, чем на час, и все в памяти.

Вот шаблоны использовать было бы удобно.
13. пользователь 26.05.23 17:01
Сообщение было скрыто модератором.
...
18. пользователь 26.05.23 17:24
Сообщение было скрыто модератором.
...
9. Serg2000mr 311 26.05.23 16:21 Сейчас в теме
Долгожданные процедуры и функции реализованы, остались точки останова и просмотр объектов со всеми подчиненными.
11. Evg-Lylyk 4559 26.05.23 16:50 Сейчас в теме
(10) Круто! Не знал что так можно, встроенный язык и язык запросов работает только в толстом клиенте, только непонятно как в конфигураторе заранее это назначить для поля.
14. Evg-Lylyk 4559 26.05.23 17:02 Сейчас в теме
(12) Попробуй, запустить в режиме толстого клиента
16. Sashares 34 26.05.23 17:04 Сейчас в теме
(14)Да, в толстом есть, спасибо!
19. Serg2000mr 311 26.05.23 20:19 Сейчас в теме
(0) Как идея - код функций можно было не парсить, а упаковывать в модуль внешней обработки и запускать оттуда. Это бы решило и проблему с производительностью.
21. Lars Ulrich 614 29.05.23 21:07 Сейчас в теме
(19) вуаля
Прикрепленные файлы:
22. JohnyDeath 301 29.05.23 21:25 Сейчас в теме
(19) упаковать во внешнюю обработку разовый код ради производительности?
Звучит странновато ....
А сама упаковка во внешнюю сколько занимает?
И сколько в итоге сэкономили?
23. Serg2000mr 311 29.05.23 21:28 Сейчас в теме
(22) Упаковка меньше секунды. Сколько удастся сэкономить, зависит от задачи. Тут, правда есть ограничение, что так можно выполнить только серверную процедуру.
24. nikolav 47 30.05.23 08:32 Сейчас в теме
(21)(23) Напишите пожалуйста, как упаковать код в модуль внешней обработки программно, т.к. изначально тоже хотел пойти этим путем. Для упаковки будет нужен доступ к конфигуратору и будет ли это работать на клиент-серверной базе? Будет ли просить подтверждение на подключение внешней обработки?
(22) Проблема производительности действительно немного преувеличена, в реальной работе наткнулся только 1 раз, когда загружал справочник из Excel, да и то оказалось, что нужно дописать "ОбменДанными.Загрузка = Истина". Для разового кода достаточно текущей производительности, часто используемые функции можно перенести в модуль.
JohnyDeath; +1 Ответить
26. tormozit 7136 30.05.23 08:34 Сейчас в теме
(24) ирОбщий.ОбновитьМодульВнешнейОбработкиДляОтладкиЛкс()
27. Serg2000mr 311 30.05.23 09:00 Сейчас в теме
(24) Я через v8unpack делал
Код переупаковки

Доступ к конфигуратору не нужен, на клиент-сервере работает и подтверждений не запрашивает. Все невидимо глазу происходит.
34. Lars Ulrich 614 30.05.23 11:22 Сейчас в теме
(24) в дополнение к способам выше, можно хардкорно (для windows):
- создаете новую "пустую" обработку как шаблон и выгружаете в файлы; для автоматизации процесса сборки можно сложить все файлы в zip и положить в макет;
- в составе файлов выгруженной обработки будет:
- ВашаОбработка.xml - "корневой" файл с описанием объекта метаданных
- Ext\ObjectModule.bsl - это и есть файл-источник модуля объекта, в который нужно будет помещать код перед сборкой;
- для сборки можно:
- создать отдельную пустую базу во временном каталоге: 1cv8.exe CREATEINFOBASE File="КаталогБазы"
- с помощью созданной пустой базы собрать обработку: 1cv8.exe DESIGNER /F КаталогБазы /LoadExternalDataProcessorOrReportFromFiles ВашаОбработка.xml СобраннаяОбработка.epf /Out ЛогНаВсякийСлучай.txt /DisableStartUpMessages
35. tormozit 7136 30.05.23 11:48 Сейчас в теме
(34) Способ рабочий, но очень долгий и требует клиентскую лицензию на компьютере выполнения.
20. triviumfan 92 29.05.23 17:24 Сейчас в теме
А перехват запросов и параметров из отладки имеется? В упор не вижу, а консоль без этого функционала уже не торт =\
25. nikolav 47 30.05.23 08:34 Сейчас в теме
28. nikolav 47 30.05.23 09:05 Сейчас в теме
(26)(27) Спасибо, посмотрел. Выгрузка в файлы через конфигуратор с последующей коррекцией кода модуля или распаковка / упаковка сторонней утилитой накладывает достаточно много ограничений. Сценарий "отправил обработку и скрипт клиенту" уже не прокатит.
29. Serg2000mr 311 30.05.23 09:06 Сейчас в теме
(28) Можете YellowPacker использовать https://infostart.ru/public/1546726/ Там никаких внешних утилит.
30. JohnyDeath 301 30.05.23 10:12 Сейчас в теме
(29) зачем вообще эти телодвижения с внешней обработкой? Какой выигрыш?
Тем более, что в консоли обычно разовые операции производятся
31. tormozit 7136 30.05.23 10:13 Сейчас в теме
(30) Там можно отладить код. А наличие методов подразумевает что код уже непростой.
33. Serg2000mr 311 30.05.23 10:21 Сейчас в теме
(31) Сейчас как раз думаю над возможностью отладки в консоли кода. Для этого нужно возможность получения всех свойств объекта. Не знаете, можно ли по адресу переменной объекта в памяти получить такой список?
32. Serg2000mr 311 30.05.23 10:15 Сейчас в теме
(30) Автор сам затронул тему производительности в статье. Но как правило да, в консоли максимальная скорость не нужна.
36. nikolav 47 30.05.23 12:53 Сейчас в теме
(32) Автор уже пожалел об этом)) Но если бы не затронул, то уже запинали бы, что не оптимально.
37. artbear 1448 30.05.23 16:14 Сейчас в теме
Не увидел ни одного скриншота с объявлением процедур и функций, с Возврат-ами также нет скриншотов.
38. nikolav 47 03.06.23 12:41 Сейчас в теме
(37) Сделал скриншот. Приведен код открытия доп. отчета, выполняется на клиенте, объявлена серверная функция, в основном коде есть досрочный возврат по её результатам.
Прикрепленные файлы:
39. reset50 09.07.23 13:20 Сейчас в теме
Скачал обработки. При проверке консоли кода все процедуры выполняются на Клиенте. На сервере выдает ошибку. Закрыть крестиком не получается, тоже ошибка. Консоль запросов выглядит интересно.
40. nikolav 47 10.07.23 07:09 Сейчас в теме
(39) Вы первый с такой проблемой. Напишите подробно какая именно ошибка в какой строчке возникает, и какой код выполняете; попробуйте выполнить что-нибудь совсем примитивное вроде "Сообщить(2+2);". Закрыть может не получаться из-за того, что обработка предлагает сохранить код в файл, убедитесь что у вас это окно не возникает где-нибудь на втором мониторе или может прячется. И еще, удалите или отключите все отслеживания переменных, возможно в них используется какая-то несуществующая переменная, это тоже может помешать выполнению.
41. Serg2000mr 311 03.08.23 01:07 Сейчас в теме
Хотелось бы еще видеть в окне "Отслеживание переменных" не Массив и Структура. А разворачиваемое дерево массива и структуры
МассивЭлементов
L 1
L 2
L ...
L N

Иначе все опять возвращается к написанию циклов и Сообщить.
42. nikolav 47 08.08.23 15:04 Сейчас в теме
(41) Идея хорошая, когда-нибудь будет. Сейчас можно использовать функцию Вывести, она покажет содержимое структуры или массива, пока к сожалению не в дереве, а только в таблице.
Оставьте свое сообщение