Имя: Пароль:
1C
1С v8
Создать программно реквизит с типом Стандартный период на УФ
0 Hlorka
 
31.10.22
15:51
Добрый день!
Стоит задача создать программно реквизит формы с типом Стандартный период.
Например, до этого программно создавала следующим образом:
НовыйЭлемент = Элементы.Вставить("НесколькоТиповВидовУслугПоДоговору", Тип("ПолеФормы"), Элементы.ГруппаШапкаЛево, Неопределено);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "Объект.НесколькоТиповВидовУслугПоДоговору";

В документе создала два реквизита ДатаНачалаПериода и ДатаОкончанияПериода.
Далее пишу:
НовыйЭлемент = Элементы.Вставить("ргс_ПериодОказанияУслуги", Тип("ПолеФормы"), Элементы.ГруппаПараметрыПраво, Неопределено);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеПериода;
...
Но как дальше связать два реквизита объекта с реквизитом формы?
1 inkvizitr
 
31.10.22
16:04
создаешь команду и рисуешь в ней три точки
&НаКлиенте
Процедура ВыбратьПериод(Команда)
    ПараметрыВыбора = Новый Структура("НачалоПериода,КонецПериода", Отчет.НачДата, Отчет.КонДата);
    ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьПериодЗавершение", ЭтаФорма);
    ОткрытьФорму("ОбщаяФорма.ВыборСтандартногоПериода", ПараметрыВыбора,, , , , ОписаниеОповещения);
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьПериодЗавершение(РезультатВыбора, ДопПараметры) Экспорт    
    Если РезультатВыбора = Неопределено Тогда
        Возврат;
    КонецЕсли;
    Отчет.НачДата=РезультатВыбора.НачалоПериода;
    Отчет.КонДата=РезультатВыбора.КонецПериода;    
КонецПроцедуры
2 inkvizitr
 
31.10.22
16:04
(0) Отчет.НачДата и Отчет.КонДата это результат выбора периода
3 inkvizitr
 
31.10.22
16:04
(2) ну или куда угодно
4 ass1c
 
31.10.22
16:06
Смотри типовые решения. Если коротко, то плясать нужно примерно так

Реквизит формы "ПериодПланирования" - тип "СтандартныйПериод" - кидаешь его на форму.
Два реквизита объекта: "НачалоПериода", "ОкончаниеПериода"

И процедура изменения ПериодПланирования, который на форме:

&НаСервере
Процедура ПериодПланированияПриИзмененииНаСервере()

    Объект.НачалоПериода    = НачалоДня(ПериодПланирования.ДатаНачала);
    Объект.ОкончаниеПериода = КонецДня(ПериодПланирования.ДатаОкончания);


    ЭтаФорма.Модифицированность = Истина;
КонецПроцедуры
5 Hlorka
 
01.11.22
14:40
(4) я могу только программным образом изменить форму(делаю это в общем модуле в процедуре создания формы на сервере). То бишь так(подскажите, как правильно вставлять код в тему??):
//Добавление реквизита формы
    ДобавляемыеРеквизиты = Новый Массив;
    
    РеквизитФормыПериодОказанияУслуги = Новый РеквизитФормы("ПериодОказанияУслуги",Новый ОписаниеТипов("СтандартныйПериод"),,"Период оказания услуг(и)");
    ДобавляемыеРеквизиты.Добавить(РеквизитФормыПериодОказанияУслуги);
    
    //Применение реквизитов
    Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    
    //Создание поля на форме
    НовыйЭлемент = Элементы.Добавить("ПериодОказанияУслуги", Тип("ПолеФормы"), Элементы.ГруппаПараметрыПраво);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "ПериодОказанияУслуги";
    
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "ПериодОказанияУслугиПриИзменении");

В модуле формы документа в процедуре ПериодОказанияУслугиПриИзменении пишу:

   Объект.ДатаНачалаОказанияУслуги    = НачалоДня(ПериодОказанияУслуги.ДатаНачала);
   Объект.ДатаОкончанияОказанияУслуги = КонецДня(ПериодОказанияУслуги.ДатаОкончания);
   ЭтаФорма.Модифицированность = Истина;

Но по сути в реквизитах формы нет реквизита ПериодОказанияУслуги, он в общем модуле создан. Как к нему обратиться из модуля формы?
6 vicof
 
01.11.22
14:58
"Но по сути в реквизитах формы нет реквизита ПериодОказанияУслуги"
Есть

"Как к нему обратиться из модуля формы?"
По имени.
ЭтотОбъект[ИмяРеквизита]
ИмяРеквизита
7 Hlorka
 
01.11.22
15:52
(6) Да, получилось! Спасибо большое Вам!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс