Имя: Пароль:
1C
1С v8
Передать параметр период из формы в модуль объекта в запрос.
0 lirt82
 
20.07.22
11:15
Есть внешняя обработка у нее есть форма, на форме выбор периода, пользователь открывает обработку выбирает период, закрывает форму, опять открывает период выбранный период сохраняется. Дальше встроили эту обработку в базу настроили расписание выполнения, осталась проблема как передать выбранный и сохраненный в настройках период с формы обработки в модуль объекта этой обработки в процедуру где запрос с параметром период.

код формы обработки
/////////////////////////////////////////

&НаКлиенте
Процедура ВыбратьПериод(Команда)
    
    ПараметрыВыбора = Новый Структура("НачалоПериода,КонецПериода", Объект.НачалоПериода, Объект.КонецПериода);
    ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьПериодЗавершение", ЭтотОбъект);
    ОткрытьФорму("ОбщаяФорма.ВыборСтандартногоПериода", ПараметрыВыбора, Элементы.ВыбратьПериод, , , , ОписаниеОповещения);
    
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьПериодЗавершение(РезультатВыбора, ДопПараметры) Экспорт
    
    Если РезультатВыбора = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(Объект, РезультатВыбора, "НачалоПериода,КонецПериода");
            
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиНаСервере(КлючОбъекта, КлючНастроек, Пользователь = Неопределено)
        
    Настройки = Новый Структура;
    Для Каждого Элем ИЗ Элементы Цикл
        Если ТипЗнч(Элем) = Тип("ПолеФормы") Тогда
            Если Объект.Свойство(Элем.Имя) Тогда
                Настройки.Вставить(Элем.Имя, Объект[Элем.Имя]);
            Иначе
                Настройки.Вставить(Элем.Имя, ЭтаФорма[Элем.Имя]);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    //если пользователя не указать (значение Неопределено),
    // то настройки будут сохранены для ТЕКУЩЕГО пользователя
    ХранилищеОбщихНастроек.Сохранить(КлючОбъекта,  КлючНастроек, Настройки,, Пользователь);
    
КонецПроцедуры

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

&НаСервере
Процедура УдалитьНастройкиНаСервере(КлючОбъекта, КлючНастроек, Пользователь = Неопределено)
    
    //Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    
    ХранилищеОбщихНастроек.Удалить(КлючОбъекта, КлючНастроек, Пользователь);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Настройки " + КлючОбъекта + " для " + Пользователь + " удалены.";
    Сообщение.Сообщить();
    
КонецПроцедуры


модуль объекта этой обработки
////////////////////////////////////


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("1.0.0.0");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0";
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    
    НоваяКоманда.Представление = "Обработать документы";
    НоваяКоманда.Идентификатор = НоваяКоманда.Представление;    
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Функция ВыполнитьКоманду(ИдентификаторКоманды,  ПараметрыВыполненияКоманды = Неопределено) Экспорт
    
    Если ИдентификаторКоманды = "Обработать документы" Тогда
        ОбработатьДоки();
    КонецЕсли;
    
КонецФункции

&НаСервере
Процедура ОбработатьДоки()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЗакрытиеМесяца.Ссылка КАК ДокЗакрытия
    |ИЗ
    |    Документ.ЗакрытиеМесяца КАК ЗакрытиеМесяца
    |ГДЕ
    |    НЕ ЗакрытиеМесяца.ПометкаУдаления
    |    И ЗакрытиеМесяца.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |
    |УПОРЯДОЧИТЬ ПО
    |    ЗакрытиеМесяца.Дата";
    
    Запрос.УстановитьПараметр("ДатаНачала", ЭтотОбъект.НачалоПериода); //как передать сохраненное значение периода из формы
    Запрос.УстановитьПараметр("ДатаОкончания", ЭтотОбъект.КонецПериода); //как передать сохраненное значение периода из формы
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        Попытка
            ДокОбъект = ВыборкаДетальныеЗаписи.ДокЗакрытия.ПолучитьОбъект();
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            ТекстОшибки = ОписаниеОшибки();
            ЗаписьЖурналаРегистрации("Обработка документов ""Закрытие месяца"" (регл. задание)", УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
        КонецПопытки;
        
    КонецЦикла;
    
КонецПроцедуры
1 lirt82
 
20.07.22
11:56
(0) проблема решена, после выбора периода пользователем в доп свойства доков устанавливается признак, и в запросе это признак считывается:)
2 + 2 = 3.9999999999999999999999999999999...