Имя: Пароль:
1C
1С v8
Как отлаживать внешнюю обработку заполнения ТЧ на УФ
,
0 manti
 
05.11.13
14:11
Собственно САБЖ:
как можно отлаживать внешнюю обработку заполнения ТЧ под УФ на тонком клиенте? Вроде под 8.1 была спец. обработка. Есть ли что для 8.2 и под УФ именно. Если нет, то как быть?
1 Холодильник
 
05.11.13
14:12
как как.. делаешь ошибку в обработке и включаешь остановку по ошибке.. эх, студенты
2 manti
 
05.11.13
14:15
(1) прикольно, и как это Вы представляете, если в данном типе обработки нет ссылки на объект?
3 Wobland
 
05.11.13
14:16
(2) я, к примеру, представляю себе попытку деления на ноль
4 vicof
 
05.11.13
14:22
(3) Боже, какое извращение...
5 Wobland
 
05.11.13
14:24
(4) дёшево и сердито. удобней, чем форму рисовать ;)
6 Sabbath
 
05.11.13
14:25
(5) по мне так форму нарисовать совсем не проблема
7 vicof
 
05.11.13
14:26
(5) поднял табличку [sarcasm]
8 Wobland
 
05.11.13
14:28
(6) по мне тоже. всё сильно зависит от обстоятельств
9 manti
 
05.11.13
14:29
(3) например есть обработка заполнения ТЧ у документа перемещение запасов в УНФ  на основе документа авансового отчета
Если тестировать напрямую запуском этой обработки, то на строке Для каждого Элемент из ОбъектыНазначенияМассив
ОбъектыНазначенияМассив - так неопределен.

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
     //Спросим у пользователя разрешение на продолжение обработки
    Режим = РежимДиалогаВопрос.ДаНет;
    Текст = "Текущие данные документа будут заменены новыми без возможности восстановления.
    |Продолжить?";
    Ответ = Вопрос(Текст, Режим, 0);
    Если Ответ = КодВозвратаДиалога.Да Тогда

        //Если пользователь дал разрешение на продолжение, то начнем перебирать все
        //документы, у которых мы планируем заполнить табличную часть
        Для каждого Элемент из ОбъектыНазначенияМассив Цикл

            //Зададим ключ поиска документа, из которого вызвана данная обработка,
            //чтобы получить ссылку на редактирумый документ в удобном виде для
            //функции ОткрытьФорму()
            КлючПоиска = Новый Структура("Ключ", Элемент);

            //Но нам не надо открывать новую форму (окно) для изменяемого документа, а
            //Нам надо все изменения показать в уже открытых у клиента окнах
            Окна = ПолучитьОкна();
            Для каждого Окно из Окна Цикл

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

                    //Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
                    //В объекте содержатся все реквизиты (элементы) формы
                    НовыйОбъект = Форма.Объект;

                    //Мы помещаем объект формы в переменную,
                    //так как должны передать её в процедуру на сервере,
                    //где нельзя изменять объект формы, зато можно править переменную содержащую его
                    ЗаполнитьОбъект(НовыйОбъект);

                    //После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект,
                    //которую необходимо передать в уже полученную нами форму
                    КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
                КонецЕсли;
            КонецЦикла;

        КонецЦикла;
    КонецЕсли;
КонецПроцедуры
10 Новиков
 
05.11.13
14:47
(1), (3) поведение платформы меняется от релиза к релиза. В каких-то, данный трюк правда работает, в каких-то нет.

(9) ну ссылку то положи уж в массив :)
11 manti
 
05.11.13
14:48
быть можеть данная обработка хранится в темпе и к ней можно всетак как то обратиться из кнфигуратора? просто без отладчика дело встало((
12 CrazyBear
 
05.11.13
15:07
(11) ну посмотри в справочнике "внешние отчеты и обработки"куда тем складывается или создай форму, а из нее вызови процедуру модуля (Инициализировать по моему) и задай ей правильно параметры :)
13 Новиков
 
05.11.13
15:23
(12) очевидно, если это БСП, то внешняя форма подключается. И посмотреть, куда он там складывается, не получится. Если сработает брейкпоинт по ошибке - то да, увидишь. Но то, что сработает - не факт :)
14 shlyahtich
 
05.11.13
15:27
по сабжу
создаешь обработку сначала со своей формой и с кнопкой Выполнить и со ссылкой на объект и отлаживаешь. Отладил - загружай в справочник внешних обработок
15 Холодильник
 
05.11.13
15:27
(4) стандартное
Выполнить("абракадабра");
в нужном месте отчета