Форум Кладовочки АЛьФ`а

Общие вопросы => 7.7 => Тема начата: Злоп от 19 апреля 2024, 23:29

Название: Операция.Новый() - как поставить в начало дня?
Отправлено: Злоп от 19 апреля 2024, 23:29
Собственно, сабж.
Программно формируем Операцию:
Операция.Новый();
- как поставить в начало дня...?
Название: Re: Операция.Новый() - как поставить в начало дня?
Отправлено: Злоп от 20 апреля 2024, 00:21
.. только через Операция.УстановитьВремя()..? (предварительно считав первый документ/операцию в дне)
иначе никак?
Название: Re: Операция.Новый() - как поставить в начало дня?
Отправлено: Пиит от 20 апреля 2024, 09:01
Через Документ

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

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

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

это у меня так ПриЗаписи, в самой форме операции
Название: Re: Операция.Новый() - как поставить в начало дня?
Отправлено: Злоп от 20 апреля 2024, 12:36
хм... Это у Документа есть Операция.
А вот если делаем голую операцию - документа-то нет...
Название: Re: Операция.Новый() - как поставить в начало дня?
Отправлено: Пиит от 21 апреля 2024, 08:56
Вот, выдрал из формы операции, не причёсывал, здесь я устанавливаю время операции непосредственно в форме,
ВремяДок - это атрибут формы, строка 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;
КонецФункции //глУстановитьВремя
Название: Re: Операция.Новый() - как поставить в начало дня?
Отправлено: Злоп от 21 апреля 2024, 14:21
Итого: проверил.
У Операция есть реквизит "Документ". Можно применить все методы к типу данных "Документ", в частности, например, АвтоВремяНачалоДня().
При этом, если делать голую операцию, то Документ - будет сама эта Операция, т.е. рекурсия зацикленная ;-)
.
ОчиститьОкноСообщений();
Операция = СоздатьОбъект("Операция");
Операция.Новая();
Операция.Документ.АвтоВремяНачалоДня();
Операция.Записать();

Сообщить(ТипЗначенияСтр(Операция.Документ));
Сообщить(Операция.Документ.Вид());
Сообщить(Операция.Документ.НомерДок);
Сообщить(Операция.Документ.Операция.Документ.Операция.Документ.Операция); // и так можно "...эх раз, еще раз"
Название: Re: Операция.Новый() - как поставить в начало дня?
Отправлено: Злоп от 21 апреля 2024, 14:33
Вопрос закрыт.