Операция.Новый() - как поставить в начало дня?

Автор Злоп, 19 апреля 2024, 23:29

« назад - далее »

Злоп

Собственно, сабж.
Программно формируем Операцию:
Операция.Новый();
- как поставить в начало дня...?

Злоп

.. только через Операция.УстановитьВремя()..? (предварительно считав первый документ/операцию в дне)
иначе никак?

Пиит

Через Документ

Документ.УстановитьВремя(Часы, Минуты, Секунды);

тока в форме операции придётся ее вначале записать, тут не помню

может, и АвтоВремяНачалоДня() так сработает

это у меня так ПриЗаписи, в самой форме операции

Злоп

хм... Это у Документа есть Операция.
А вот если делаем голую операцию - документа-то нет...

Пиит

Вот, выдрал из формы операции, не причёсывал, здесь я устанавливаю время операции непосредственно в форме,
ВремяДок - это атрибут формы, строка 99:99:99
Процедура ПриЗаписи()
...
    Если СтатусВозврата() = 1 Тогда
        
        Если Выбрана() = 0 Тогда
            Попытка
                Записать();
            Исключение
                Предупреждение(ОписаниеОшибки());
                СтатусВозврата(0);
                Возврат;
            КонецПопытки;
        ИначеЕсли (ВремяДок = ПолучитьВремя()) Или (глПустоеВремя(ВремяДок) = 1) Тогда
            Возврат;
        КонецЕсли;
        Если глУстановитьВремя(Документ, ВремяДок) = 0 Тогда
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры


//_____________________________________________________________________________
Функция глПустоеВремя(Знач Время, Знач Разделитель = ":") Экспорт
    Время = СокрЛП(СтрЗаменить(Время, Разделитель, ""));
    Время = СокрЛП(СтрЗаменить(Время, "0", ""));
    Возврат ПустаяСтрока(Время);
КонецФункции //глПустоеВремя()
//_____________________________________________________________________________
Процедура глРазложитьВремя(Знач Время, Часы = 0, Минуты = 0, Секунды = 0) Экспорт
    Перем КоличествоСтрок;
    
    Часы = 0; Минуты = 0; Секунды = 0;
    
    Время = СтрЗаменить(Время, ":", РазделительСтрок);
    КоличествоСтрок = СтрКоличествоСтрок(Время);
    
    Если КоличествоСтрок > 0 Тогда
        Часы = Число(СтрПолучитьСтроку(Время, 1));
        Если КоличествоСтрок > 1 Тогда
            Минуты = Число(СтрПолучитьСтроку(Время, 2));
            Если КоличествоСтрок > 2 Тогда
                Секунды = Число(СтрПолучитьСтроку(Время, 3));
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
//_____________________________________________________________________________
Функция глУстановитьВремя(Док, Время, Часы = 0, Минуты = 0, Секунды = 0, Знач Разделитель = ":") Экспорт
    глРазложитьВремя(Время, Часы, Минуты, Секунды);
    Док.УстановитьВремя(Часы, Минуты, Секунды);
    Возврат 1;
КонецФункции //глУстановитьВремя

Злоп

Итого: проверил.
У Операция есть реквизит "Документ". Можно применить все методы к типу данных "Документ", в частности, например, АвтоВремяНачалоДня().
При этом, если делать голую операцию, то Документ - будет сама эта Операция, т.е. рекурсия зацикленная ;-)
.
ОчиститьОкноСообщений();
	Операция = СоздатьОбъект("Операция");
	Операция.Новая();
	Операция.Документ.АвтоВремяНачалоДня();
	Операция.Записать();

	Сообщить(ТипЗначенияСтр(Операция.Документ));
	Сообщить(Операция.Документ.Вид());
	Сообщить(Операция.Документ.НомерДок);
	Сообщить(Операция.Документ.Операция.Документ.Операция.Документ.Операция); // и так можно "...эх раз, еще раз"

Злоп