Иногда достаточно изменить 1-2 строки кода.Но для проверки всегда нужно перегрузить клиента и выполнить код заново. Можно конечно воспользоваться какой-нибудь консолью кода,выложенной на сайте, и отлаживать код в ней. Но для получения конечного результата нужны переменные исходного модуля. Есть еще замечательная функция Ду (на Мисте автор Гений 1С) ,куда можно передать переменные. Но код там нужно писать от руки , что непросто для большого куска. А если использовать буфер обмена Windows? То получится функция ДуБуфер, где код берем из буфера, описываем и присваиваем ему переменные и на выходе — результат выполнения измененного кода. Иными словами порядок работы таков
1) в отладчике поставили точку останова после отлаживаемого кода, т.е. видим результат его выполнения
2) изменили кода
3) скопировали код в буфер
4) в строке описали через параметры функции все необходимые входящие переменные, которые используются в отлаживаемом коде но назначаются не в нем (пример в функции)
5) так же в строке описали через параметры функции все исходящие переменные, результат которых мы хотим увидеть
6) вызвали функцию ДуБуфер — и увидели на выходе результат выполнения изменного кода
7) если результат не устраивает- повторили пункты 2,3,4,5,6
Разукрашка кода //infostart.ru/public/19856/
//вызов на картинке
// ДуБуфер(,»п0=вых;»,»инит=п1;»,»»,инит)[0]
//на рисунке «пример вызова для части кода» пример вызова с несколькими параметрами
//модульрпчв.ВО().ДуБуфер(,»п0=вых;п1=сч;»,»инит=п2;выборка=п3;»,»»,»»,инит,выборка)[0]
Функция ДУбуфер(ВернутьМассив=неопределено, СписокПараметрыИсходящие,СписокПараметрыВходящие=«»,П0=Неопределено, П1=Неопределено, П2=Неопределено, П3=Неопределено, П4=Неопределено,П5=Неопределено) Экспорт
Код=GetClip();
мас= Новый Массив(6);
Если найти(код,«дубуфер»)<>0 Тогда мас[0]=«зацикленная ссылка в коде»; возврат мас; КонецЕсли;
исходныйКод=Код;
исполняемыйКод=СписокПараметрыВходящие+символы.ПС+Код+символы.ПС+СписокПараметрыИсходящие;
Попытка
выполнить исполняемыйКод;
Исключение
оО=описаниеОшибки();
мас[0]=оО+символы.пс+исполняемыйКод; возврат мас;
КонецПопытки;
Если П0<>Неопределено Тогда мас[0]=п0; КонецЕсли;
Если П1<>Неопределено Тогда мас[1]=п1; КонецЕсли;
Если П2<>Неопределено Тогда мас[2]=п2; КонецЕсли;
Если П3<>Неопределено Тогда мас[3]=п3; КонецЕсли;
Если П4<>Неопределено Тогда мас[4]=п4; КонецЕсли;
Если П5<>Неопределено Тогда мас[5]=п5; КонецЕсли;
Если ВернутьМассив<>неопределено Тогда ВернутьМассив=мас; КонецЕсли;
Возврат мас;
КонецФункции
Функция GetClip() Экспорт
strTXT=«»;
objHTM=Новый COMОбъект(«htmlfile»);
strTXT=строка(objHTM.ParentWindow.ClipboardData.GetData(«text»));
возврат strTXT
КонецФункции








Подписался
Отладка без перезагрузки клиента, это нужная вещь, попробуем)
Интересная очень идея. И очень бы хотелось иметь такой инструмент, чтобы можно было отладку кода проводить «онлайн», как в интерпретаторах, но, честно говоря, мне кажется это подойдет только для мелкой рихтовки кода, когда сомневаешься в небольшой части кода, а так описывать даже 15-20 входящих переменных слишком накладно. Это ладно, если еще сам список во время отладки меняться не будет — 1 раз написал список входящих и копируешь опять же хоть из текстового редактора, но в полевых условиях собирать такую строку не очень удобно.
имхо, широкого применения обработка иметь не может. Но большое спасибо топикстартеру за ссылку на f ДУ… почитал, обогатился.
(3) Necytij, действительно описывать множество переменных неудобно и отлаживаться можно частями, прописывая переменные в каждую часть. но 1)код-описание !временно! можно писать прямо в модуле 2) выложу обработку, где будет выгружаться код и переменные . через обработку будет удобнее отлаживать большие куски
(3) Necytij, да и описывать нужно либо те переменные которые хочешь получить на выходе либо те которых нет в изменном коде .зачем 15-20 переменных?
Интересно, будем посмотреть…
Тем, кому идея действительно интересна и кто не боится объединить конфу с другой, рекомендую ИР
Там есть мощная консоль кода, которую можно вызывать во время отладки функциями Оп, Опс и др.
Интересная идея. Для отладки пригодится. Очень часто приходится менять что-то по мелочи, а не большие участки кода.
Речь идет про 8-ку. Насколько я знаю, если вы не меняли структуру базы (новый справочник, реквизит и т.д.), то изменив кусочек кода, можно обновиться динамически не выгоняя пользователей.
(9) JER_MARK, можно обновиться динамически, но с функцией можно проверить изменный вариант тут же не обновляясь
(7) tormozit, В авторитете платформы ИР нет сомнений. Вещь необходимая любому разработчику. Но ,насколько я понял, передать в функции ОП,ОПС можно только определенный код, а не код из буфера.
(11) ИР не платформа, а подсистема. По поводу автоматической вставки из буфера в случае открытия консоли кода (Оп, Опс и т.д.) кажется что это не такая уж и полезная «фича». Нажать CTRL+V в открывшемся окне большого труда не составляет. В твоей ДуБуфер эта «фича» действительно полезна, т.к. все делается неинтерактивно. В ИР есть еще Ду, но она скромнее, т.к. не позволяет подменять имена. Надо будет ее «проапгрейдить» тоже.
В ИР добавлена функция режима отладки Поп()
открытие фрагмента программы в консоли кода — Поп(ТекстПрограммы=), используется путем копирования в буфер обмена целостного фрагмента программы и вычисления «Вычислить(Поп())»
позволяет осуществить предварительное многократное выполнение кода с возможностью внесения изменений на ходу
!