Изменение времени документа

Новая тема
Показывать по 10 20 40 сообщений
"Мои корявые ручонки додумались с вашей подачи только до такого:

Обработка.ИзменениеВремениДокумента

Модуль формы
//*******************************************
Процедура Выполнить()

Если ВыбДокумент.Выбран() = 0 Тогда
  Предупреждение("Не выбран документ!");
Возврат;
КонецЕсли;

Док = СоздатьОбъект("Документ."+ВыбДокумент.Вид());
Док.НайтиДокумент(ВыбДокумент);
БылПоведен=0;

Если Док.Проведен() = 1 Тогда
  Док.СделатьНеПроведенным();
БылПоведен = 1;
КонецЕсли;
 
Док1 = СоздатьОбъект("Документ");
Док1.ВыбратьДокументы(Док.ДатаДок,Док.ДатаДок);
Пока Док1.ПолучитьДокумент() = 1 Цикл
Текущий = Док1.ТекущийДокумент();
КонецЦикла;
ЧЧ = 0;
ММ = 0;
СС = 0;
Текущий.ПолучитьВремя(ЧЧ,ММ,СС);
СС = СС + 1;
Если СС > 59 Тогда
СС = 00;
ММ = ММ + 1;
Если ММ > 59 Тогда
ММ = 00;
ЧЧ = ЧЧ + 1;
Если ЧЧ > 23 Тогда
ЧЧ = 23;
КонецЕсли;
КонецЕсли;
КонецЕсли;

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

Если БылПоведен=1 Тогда
Док.Провести();
КонецЕсли;

КонецПроцедуры

//*******************************************
Процедура ПриОткрытии()
   
Если ТипЗначения(Форма.Параметр)=12 Тогда //Тип значения 12 - Документ
  ВыбДокумент=Форма.Параметр;
  Форма.Закрыть();
КонецЕсли;

КонецПроцедуры  

//*******************************************
Процедура ПриЗакрытии()
   
Выполнить();

КонецПроцедуры


Теперь маюся - откуда это добро вызывать: желательно, чтобы в отгрузке добавить к кнопке "ок" вызов данной обработки..."
"ИМХО, получение ТА корректнее сделать так:
Функция ПолучитьВремяТАБух(ВидДок="""")
   Если ВидДок="""" Тогда
       Док=СоздатьОбъект("Документ");
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
КонецЕсли;
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
ЧЧ=-1;
ММ=-1;
СС=-1;
Пока Док.ПолучитьДокумент()>0 Цикл
   Если Док.Проведен()=1 Тогда
       ТА=Док.ПолучитьВремя(ЧЧ,ММ,СС);
Прервать;
   КонецЕсли;
КонецЦикла;
ВремяПоДокументу=0;
Если ЧЧ>0 Тогда
   ВремяПоДокументу=ЧЧ*3600;
ВремяПоДокументу=ВремяПоДокументу+(ММ*60);
ВремяПоДокументу=ВремяПоДокументу+СС;
КонецЕсли;
Время=ТекущееВремя(ЧЧ,ММ,СС);
ВремяПоТекущему=ЧЧ*3600;
ВремяПоТекущему=ВремяПоТекущему+(ММ*60);
ВремяПоТекущему=ВремяПоТекущему+СС;
Если ВремяПоДокументу>ВремяПоТекущему Тогда
   Возврат ТА;
Иначе
Возврат Время;
КонецЕсли;
КонецФункции

Описание: если при вызове функции не передавать в нее вид документа то функция вернет теущее время или врем последнего проведенного документа если оно больше текущего. Если передать вид документа, то функция вернет текущее время документа или время последнего поведенного документа _заданного_ _вида_ если его время больше текущего.

А далее для проведения можно другого документа после ТА можно просто распарсить секунды, прибавить кним 1,2 или сколько угодно секунд, проконтролировать не получилось ли более 59 со всеми вытекающими полседствиями, и использовать новое время для проведение нужного документа."
Ну, с ТА вроде разобрался..))) Теперь хотел бы спросить как лучше вызвать обработку с изменением времени, чтобы для пользователя визуально ничего не поменялось - т.е. по привычному нажатию на одну кнопку он проводил и закрывал документ...
Интереснол, а что будет если существуют проведенные документы с датой больше чем РабочаяДата()?
> Интереснол, а что будет если существуют проведенные документы с датой больше чем РабочаяДата()?

Да, тут я забыл написать комментарий... надо дорабатывать... вот только не знаю уж как, может на дату документа завязаться
> Ну, с ТА вроде разобрался..))) Теперь хотел бы спросить как лучше вызвать обработку с изменением времени, чтобы для пользователя визуально ничего не поменялось - т.е. по привычному нажатию на одну кнопку он проводил и закрывал документ...

Не получиться так, документ все равно надо закрыть, но можно по нажатию кнопки документ сначала проводить и потом вызывать обработку с третьим параметром = 0, она тогда изменит время документа но не откроет его после этого.
"В связи с замечанием Prikum'а заменяем

Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
КонецЕсли;
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());

на

   Если ВидДок="""" Тогда
       Док=СоздатьОбъект("Документ");
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(Док.ДатаДок,Док.ДатаДок);
КонецЕсли;

Если будет выбран документ записаный заньше чем забочая дата, то ТА будет искаться в тот день, иначе в рабочей дате.

"
Не, просто надо убрать второй параметр, тогда будут выбираться все документы, с первой даты и до конца века!
Да, конечно, можно и так, но тут подразумевается ограничение в день документа...
если мы говорим о ТА, то не должно быть ограничения в день документа!
Читают тему
(гостей: 1)

Быстрый переход