Имя: Пароль:
1C
 
Как попасть отладчиком во внешнюю печатную форму?
,
0 Мисти
 
16.03.24
15:11
Всегда делаю ее с возможностью запуска прямо из обработки, там всё работает, а подключаю как внешнюю - нет. Как было бы удобно понять, где ломается... Галку "фоновые задания" поставила... Вроде, какой-то параметр задать при запуске? или нет?
1 Garykom
 
гуру
16.03.24
15:17
(0) Простейше это сохранить ее по пути доступному и с сервера и с клиента
2 Aleksey
 
16.03.24
15:29
3 СвинТуз
 
17.03.24
19:38
(0)
Обработка запускается при наличии уже подключенной
в списке внешних обработок
с такими же параметрами регистрации?
Причем загруженная в конфу обработка активна?
4 СвинТуз
 
17.03.24
19:40
(0)
Хороший тон это когда хотя бы пишут тип платформы?
Вы не на 7.7 пишите?
Если на 7.7 то там бывает так что с диска текст обработки грузится.
5 Aleksey
 
17.03.24
19:54
(4) некромантов тут мало, тем более ВР же сказал "закопать стюардессу". К тому же Галка "фоновые задания" как бы намекает.
6 Волшебник
 
17.03.24
21:14
(5) Спасибо, что помните и транслируете. Да, семёрку надо убить. Эта стюардесса должна быть закопана навсегда.
7 СвинТуз
 
18.03.24
00:30
(5)
Согласен.
Понятно не 7.7.
8 СвинТуз
 
18.03.24
00:31
(5)
И даже понятно, что после 12 лет программирования
можно задавать подобные вопросы. Все люди.
9 DrZombi
 
гуру
18.03.24
09:28
(0) Что бы попасть в обработку, вам придется её вызвать дедовским способом, как в УПП, через файлик.

Т.е. вклиниться в общий модуль БСП и переназначить путь ко внешней обработке.

И ваши догадки правильны, вам раскроется больший перечень возможностей в корректировке работы механизмов БСП во внешних обработках :)
10 DrZombi
 
гуру
18.03.24
09:19
+(0) Все живет тут общий модуль "ДополнительныеОтчетыИОбработки"

Код надо примерно такой.
У меня просто реквизитики добавлены, через расширение.
Но в вашем случаи, можно и разово прописать в коде :)

Код из ЗУП 3.1.28.84, у вас может немножко будет другой вид, но смысл не теряется от релиза к релизу.

Подробности
&Вместо("ПодключитьВнешнююОбработку")
Функция СОГ_ПодключитьВнешнююОбработку(Ссылка) Экспорт
    
    //Проверка версии кода... доработки, он меняется!!!
    //Хлебные крошки
    //РасшА_ДопФункции.ПроверитьВерсиюИсполняемогоКода("3.1.28.84");
    //----
    
    СтандартнаяОбработка = Истина;
    Результат = Неопределено;
    
    ИнтеграцияПодсистемБСП.ПриПодключенииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат);
    Если Не СтандартнаяОбработка Тогда
        Возврат Результат;
    КонецЕсли;
        
    // Проверка корректности переданных параметров.
    Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")
        Или Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    // Подключение
#Если ТолстыйКлиентОбычноеПриложение Тогда
    ИмяОбработки = ПолучитьИмяВременногоФайла();
    ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки");
    ДвоичныеДанные = ХранилищеОбработки.Получить();
    ДвоичныеДанные.Записать(ИмяОбработки);
    Возврат ИмяОбработки;
#КонецЕсли
    
    Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид");
    Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет
        Или Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
        Менеджер = ВнешниеОтчеты;
    Иначе
        Менеджер = ВнешниеОбработки;
    КонецЕсли;
    
    //+ТУТ менялось
    Попытка
    Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
        ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки, СОГ_ПолныйПутьДляОтладки, СОГ_ИспользоватьОтладку");
        
        Если ПараметрыЗапуска.СОГ_ИспользоватьОтладку = Истина и НЕ ПустаяСтрока(ПараметрыЗапуска.СОГ_ПолныйПутьДляОтладки) Тогда
            АдресВоВременномХранилище = СокрЛП(ПараметрыЗапуска.СОГ_ПолныйПутьДляОтладки); //Указывать сетевой путь, т.к. обработка запускается с Сервера...
            пФайл = Новый Файл(АдресВоВременномХранилище);
            Если НЕ (пФайл.Существует() и пФайл.ЭтоФайл()) Тогда
                //Нет файла, либо не доступен...
                АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить());
            КонецЕсли;
            
        Иначе
            АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить());
        КонецЕсли;
        
    //-ТУТ менялось
    Иначе
    
    ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки");
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить());
    
    КонецЕсли;
    Исключение
    //Если ошибка, то типовой код...
    ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки");
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить());
    КонецПопытки;
    //...........
        
    Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
        МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
        ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности();
    Иначе
        ИспользуютсяПрофилиБезопасности = Ложь;
    КонецЕсли;
    
    Если ИспользуютсяПрофилиБезопасности Тогда
        
        МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный");
        БезопасныйРежим = МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Ссылка);
        
        Если БезопасныйРежим = Неопределено Тогда
            БезопасныйРежим = Истина;
        КонецЕсли;
        
    Иначе
        
        БезопасныйРежим = ПолучитьФункциональнуюОпцию("СтандартныеПодсистемыВМоделиСервиса") Или ПараметрыЗапуска.БезопасныйРежим;
        
        Если БезопасныйРежим Тогда
            ЗапросРазрешений = Новый Запрос(
                "ВЫБРАТЬ ПЕРВЫЕ 1
                |    ДополнительныеОтчетыИОбработкиРазрешения.НомерСтроки,
                |    ДополнительныеОтчетыИОбработкиРазрешения.ВидРазрешения
                |ИЗ
                |    Справочник.ДополнительныеОтчетыИОбработки.Разрешения КАК ДополнительныеОтчетыИОбработкиРазрешения
                |ГДЕ
                |    ДополнительныеОтчетыИОбработкиРазрешения.Ссылка = &Ссылка");
            ЗапросРазрешений.УстановитьПараметр("Ссылка", Ссылка);
            ЕстьРазрешений = Не ЗапросРазрешений.Выполнить().Пустой();
            
            РежимСовместимости = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "РежимСовместимостиРазрешений");
            Если РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2
                И ЕстьРазрешений Тогда
                БезопасныйРежим = Ложь;
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
    
    ЗаписатьПримечание(Ссылка,
        СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, %1 = ""%2"".'"), "БезопасныйРежим", БезопасныйРежим));
    
    //+ТУТ менялось
    Если Не ПустаяСтрока(АдресВоВременномХранилище) и Не ЭтоАдресВременногоХранилища(АдресВоВременномХранилище) Тогда
        ИмяОбработки = Менеджер.Создать(АдресВоВременномХранилище,Ложь);
        ИмяОбработки = ИмяОбработки.Метаданные().Имя;
        
    //-ТУТ менялось
    ИначеЕсли ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
    ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,
        ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
    Иначе
        ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим);
    КонецЕсли;
    
    Возврат ИмяОбработки;
    
КонецФункции

11 Мисти
 
18.03.24
23:05
#Если ВнешнееСоединение Тогда
    ВыполнитьБезФоновогоЗадания = ИнформационнаяБазаФайловая
        Или ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне
        Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне)
        Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры);
#Иначе
    ВыполнитьБезФоновогоЗадания = Не ПараметрыВыполнения.БезРасширений
        И Не ПараметрыВыполнения.СРасширениямиБазыДанных
        И (ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне
            Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне)
            Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры));
#КонецЕсли

    // Выполнить в основном потоке.
    Если ВыполнитьБезФоновогоЗадания Тогда
        Попытка
            Если ПараметрыВыполнения.Свойство("ЭтоФункция") И ПараметрыВыполнения.ЭтоФункция Тогда
                ВызватьФункцию(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, ПараметрыВыполнения);
            Иначе
                ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, ПараметрыВыполнения);
12 Мисти
 
18.03.24
23:07
куда-то туда попадаю. Если бы как-то без фонового задания и без длительной операции. Раньше я ловко вставала на вызов функции из общего модуля и потом попадала во внешнюю форму оттуда, а сейчас всё заканчивается длительными операциями
13 DrZombi
 
гуру
19.03.24
06:08
(12) Выставить РежимОтладка
https://itsale.ru/info/articles/nastroyka-konfiguratora-1s-pod-sebya/parametr-zapuska-rezhimotladki/

И все фоновое превращается во все обычное :)
14 Altone
 
19.03.24
08:33
яндексом ТС так и не научился пользоваться ? эта тема 100500 раз уже по полочкам разложена.
а всё просят разжевать и в клювик засунуть.
15 Gucci76
 
19.03.24
09:33
Не знаю есть ли в ссылках этот способ:
https://www.youtube.com/watch?v=XcXIoLNCwRg&t=101s

но мне он показался самым простым и удобным и обязательно (13)
16 Буковка
 
19.03.24
10:41
(0) пользуюсь этой обработкой
https://ironskills.by/tpost/vr9ypy76d1-otladka-dopolnitelnih-obrabotok-1s
17 Одинист
 
19.03.24
10:45
(0) а что уже «сообщить(“ не работает?
18 Волшебник
 
19.03.24
10:47
(17) на сервере? куда-то там сообщает
19 Одинист
 
19.03.24
10:52
(18) и? Это же не регламетное задание, а печатная форма.  Вполне сообщает.
20 Волшебник
 
19.03.24
10:54
(19) можно ещё делать ЗаписьЖурналаРегистрации
21 Одинист
 
19.03.24
10:57
(20) зачем? тем более  журнал долго открывается.

Тупо навставлять
….
Сообщит("х1");

Сообщит("х2");

Сообщит("х5-3");

Сообщить("ж1");

Поставить минут убрать минуту
22 evorle145
 
19.03.24
11:03
(0) уже лет 5 пользуюсь этим:

https://infostart.ru/1c/tools/916110/

ниразу не подводила. Очень удобно.
23 Garykom
 
гуру
19.03.24
11:18
(21) Издеваешься?
Хотя бы процедуру/функцию общего модуля своего вставить по типу Лог()
А уже внутри ее что надо, например Сообщить
Тогда легко это дело убрать или отключить
24 Одинист
 
19.03.24
11:49
(23) ошибка на уровне общего модуля или во внешней обработке?
25 DrZombi
 
гуру
20.03.24
06:04
(17) (20) Легких путей не ищете :)
26 DrZombi
 
гуру
20.03.24
06:05
(16) (22) Т.е. способ один, просто подменить вызов обработки из макета, вызовом из файлика :DDD