Имя: Пароль:
1C
 
Помогите с расписанием регл
0 Florist
 
14.05.25
19:34
У меня есть такой код в форме справочника по ТО оборудования, там задается в форме элемента расписание через команду, код который

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

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

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

Как сделать грамотнее, чтобы сохранять нормально расписание и в строку и при этом куда-то еще чтобы потом в обработке использовать данные расписания. Также у меня открывается расписание каждый раз с стандартным значением расписания, даже когда расписание уже задано, как это исправить тоже?
1 Мультук
 
гуру
14.05.25
20:12
(0)

1) Пожалуйста, не пиши код, который не работает

Расписание.ИзСтроки(ЭтотОбъект.Расписание);


2) ну например, создадим обработку с реквизитом (см рис)


РасписаниеСтрока Строка(0)


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

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

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

&НаСервереБезКонтекста
Функция ЗначениеВСтрокуXML(Значение) Экспорт
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);
	Возврат ЗаписьXML.Закрыть();
КонецФункции

&НаСервереБезКонтекста
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);
		
	Значение=СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	Возврат Значение;
	
КонецФункции
2 Florist
 
14.05.25
20:25
(1) Да теперь работает намного лучше, понял все, спасибо, получается данный код можно и в форме элемента справочника использовать? Чтобы элементу присвоить расписание
3 Мультук
 
гуру
14.05.25
20:49
(2)

Нужно взять и попробовать.
4 Florist
 
14.05.25
21:26
(3) К сожалению выдает ошибку
Ошибка при вызове метода контекста (ПрочитатьXML)
{Справочник.ТехническоеОбслуживание.Форма.ФормаЭлемента.Форма(66)}:Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
{Справочник.ТехническоеОбслуживание.Форма.ФормаЭлемента.Форма(36)}:пРасписание = ЗначениеИзСтрокиXML(Объект.Расписание);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Ошибка разбора XML:  - [1,151]
Фатальная ошибка:
AttValue: ' expected
5 Мультук
 
гуру
14.05.25
22:29
(4)

1) Какой тип у Объект.Расписание ?

2) СтрДлина(ЗначениеВСтрокуXML(НовоеРасписание))

точно влазит в Объект.Расписание ?

Говорят в 1С есть отладчик. Небось врут (с)
6 Florist
 
15.05.25
00:23
(5) Тип строка, неограниченная.
7 craxx
 
15.05.25
07:45
(6)XML невалидный у тебя, проверяй
8 Florist
 
15.05.25
15:12
(5) Можно ли записанные данные потом снова преобразовать в объект расписания?
9 Мультук
 
гуру
15.05.25
15:25
(8)

1) Вики "Сериализация", "Десериализация"

2) Что же делает строка ниже ?

пРасписание = ЗначениеИзСтрокиXML(Объект.РасписаниеСтрока);


Поставь на ней отладчик.
О чудо!
Эта конструкция из xml-строки делает объект.
10 Florist
 
15.05.25
18:58
(9) Так хорошо получилось хранить строку <JobSchedule xmlns="http://v8.1c.ru/8.1/data/enterprise" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" BeginDate="0001-01-01" EndDate="0001-01-01" BeginTime="00:00:00" EndTime="00:00:00" CompletionTime="00:00:00" CompletionInterval="0" RepeatPeriodInDay="0" RepeatPause="0" WeekDayInMonth="0" DayInMonth="0" WeeksPeriod="1" DaysRepeatPeriod="3">¶    <WeekDays>1 2 3 4 5 6 7</WeekDays>¶    <Months/>¶</JobSchedule>. Как в обработку можно эту строку передать туда и считать ее так, как расписание, чтобы потом в  определенном периоде по этому расписанию создались документы?