Имя: Пароль:
1C
1С v8
Расчетные листки по V83.Application
0 Надмозг
 
04.02.19
13:05
Запускаю из ЗУП Корп 3.1 расчетные листки организаций ЗУП 2.5 через V83.Application

Вытащил код процедуры в 2.5

УправлениеОтчетамиПереопределяемый.ВызовРасчетногоЛисткаИзФормыСпискаРР(ЭлементыФормы.РегистрРасчетаСписок.ТекущиеДанные,"ОсновныеНачисленияРаботниковОрганизаций");

Отладил его полностью в ЗУП 2.5 на тестовой обработке. Эта обработка просто создает отчет, заполняет параметры и заполняет результат (таб док)

Далее переношу все это в ЗУП 3.1. Соединяюсь через COMОбъект("V83.Application")

В отладке смотрю, вроде, все работает аналогично. Но тут есть нюанс, не смог перейти в отладке по внешнему соединению в ЗУП 2.5. Это один из вопросов, как запустить отладку? Галку "Клиентские и внешние соединения на сервере" поставил.

В итоге отчет цепляет какие-то сохраненные настройки, с другими параметрами и отборами, хотя проверяю, что там в настройках отчета (отладчиком в ЗУП 3.1) - все ОК.

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

Как победить?
1 Надмозг
 
04.02.19
13:09
Код процедур такой. Они выдернуты из типового модуля

&НаКлиенте
Процедура ВызовРасчетногоЛисткаИзФормыСпискаРР(ТекущиеДанные, ИмяФормы, Соединение)
    
    Если ТекущиеДанные <> Неопределено Тогда
        
        Если Найти(ИмяФормы,"Организаций") > 0 Тогда             
            РасчетныйЛисток    = Соединение.Отчеты.РасчетныеЛисткиОрганизаций.Создать();
            РасчетныйЛисток.СохраненнаяНастройка = Соединение.Справочники.СохраненныеНастройки.РасчетныеЛисткиОрганизаций;
            РасчетныйЛисток.ПрименитьНастройку();
            РасчетныйЛистокФорма = РасчетныйЛисток.ПолучитьФорму();
            РасчетныйЛистокФорма.Открыть();
            Если РасчетныйЛисток.ЗначенияНастроекПанелиПользователя = Неопределено тогда
                Если РасчетныйЛисток.ЗначенияНастроекПанелиПользователя.Получить().ДинамическиеОтборы.Количество() = 0 тогда
                    РасчетныйЛисток.ЗначенияНастроекПанелиПользователя = Соединение.NewObject("ХранилищеЗначения", Соединение.ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователя(РасчетныйЛисток, РасчетныйЛистокФорма));
                КонецЕсли;
            КонецЕСли;
            РасчетныйЛистокФорма.ЭтоОтработкаРасшифровки = истина;
            УстановитьОтбор(РасчетныйЛисток, "Организация", ТекущиеДанные.ОбособленноеПодразделение, Соединение);
        Иначе
            РасчетныйЛисток    = Соединение.Отчеты.РасчетныеЛистки.Создать();    
            РасчетныйЛисток.СохраненнаяНастройка = Соединение.Справочники.СохраненныеНастройки.РасчетныеЛистки;
            РасчетныйЛисток.ПрименитьНастройку();
            РасчетныйЛистокФорма = РасчетныйЛисток.ПолучитьФорму();
            РасчетныйЛистокФорма.Открыть();
            Если РасчетныйЛисток.ЗначенияНастроекПанелиПользователя = Неопределено тогда
                Если РасчетныйЛисток.ЗначенияНастроекПанелиПользователя.Получить().ДинамическиеОтборы.Количество() = 0 тогда
                    РасчетныйЛисток.ЗначенияНастроекПанелиПользователя = Соединение.NewObject("ХранилищеЗначения", Соединение.ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователя(РасчетныйЛисток, РасчетныйЛистокФорма));
                КонецЕсли;
            КонецЕСли;
            РасчетныйЛистокФорма.ЭтоОтработкаРасшифровки = истина;
            УстановитьОтбор(РасчетныйЛисток, "Подразделение", ТекущиеДанные.Подразделение, Соединение);
            
        КонецЕсли;
        
        ЗначенияНастроекПанелиПользователя = РасчетныйЛисток.ЗначенияНастроекПанелиПользователя.Получить();
        ЗначенияНастроекПанелиПользователя.СтандартныйПериод.ДатаНачала   = НачалоМесяца(ТекущиеДанные.ПериодРегистрации);
        ЗначенияНастроекПанелиПользователя.СтандартныйПериод.ДатаОкончания = КонецМесяца(ТекущиеДанные.ПериодРегистрации);
        РасчетныйЛисток.ЗначенияНастроекПанелиПользователя = Соединение.NewObject("ХранилищеЗначения", ЗначенияНастроекПанелиПользователя);
        
        Соединение.ТиповыеОтчеты.УстановитьПараметр(РасчетныйЛисток.КомпоновщикНастроек,  "Группировать",  ложь);
        
        Если Найти(ИмяФормы,"Удержания") > 0 или Найти(ИмяФормы,"Организаций") = 0 Тогда
            Соединение.ТиповыеОтчеты.ДобавитьОтбор(РасчетныйЛисток.КомпоновщикНастроек, "ФизЛицо", ТекущиеДанные.ФизЛицо);
        Иначе
            УстановитьОтбор(РасчетныйЛисток, "Сотрудник", ТекущиеДанные.Сотрудник, Соединение);
        КонецЕсли;
        
        ДокументРезультат = РасчетныйЛистокФорма.ЭлементыФормы.Результат;
        РасчетныйЛистокФорма.ОбновлениеОтображения();
        //РасчетныйЛисток.СформироватьОтчет(ДокументРезультат);
        //РасчетныйЛистокФорма.Модифицированность = Истина;
        РасчетныйЛистокФорма.ОбновитьОтчет();
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура УстановитьОтбор(Отчет, Поле, Значение, Соединение)
    Если Отчет.ЗначенияНастроекПанелиПользователя = Неопределено тогда
        Возврат;
    КонецЕсли;
    ЗначениеПользовательскойНастройки = Отчет.ЗначенияНастроекПанелиПользователя.Получить();
    Если ЗначениеПользовательскойНастройки = Неопределено тогда
        Возврат;
    КонецЕсли;
    Если ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле) <> Неопределено тогда
        Если ТипЗнч(ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).Значение) <> Тип("СписокЗначений") тогда
            ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).Значение = Значение;
            ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).Использование = истина;
        Иначе
            ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).Значение.Очистить();
            ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).Значение.Добавить(Значение);
            ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).Использование = истина;
            Если ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).ВидСравнения = "" Тогда
                ЗначениеПользовательскойНастройки.ДинамическиеОтборы.Получить(Поле).ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Отчет.ЗначенияНастроекПанелиПользователя = Соединение.NewObject("ХранилищеЗначения", ЗначениеПользовательскойНастройки);
КонецПроцедуры
2 Надмозг
 
04.02.19
13:10
Формирование значений параметров не так важно. Там все ок, Соединение тоже банально, поэтому не скидываю
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс