Изменение времени документа
03.12.2008
16:56
#31
"Мои корявые ручонки додумались с вашей подачи только до такого:
Обработка.ИзменениеВремениДокумента
Модуль формы
//*******************************************
Процедура Выполнить()
Если ВыбДокумент.Выбран() = 0 Тогда
Предупреждение("Не выбран документ!");
Возврат;
КонецЕсли;
Док = СоздатьОбъект("Документ."+ВыбДокумент.Вид());
Док.НайтиДокумент(ВыбДокумент);
БылПоведен=0;
Если Док.Проведен() = 1 Тогда
Док.СделатьНеПроведенным();
БылПоведен = 1;
КонецЕсли;
Док1 = СоздатьОбъект("Документ");
Док1.ВыбратьДокументы(Док.ДатаДок,Док.ДатаДок);
Пока Док1.ПолучитьДокумент() = 1 Цикл
Текущий = Док1.ТекущийДокумент();
КонецЦикла;
ЧЧ = 0;
ММ = 0;
СС = 0;
Текущий.ПолучитьВремя(ЧЧ,ММ,СС);
СС = СС + 1;
Если СС > 59 Тогда
СС = 00;
ММ = ММ + 1;
Если ММ > 59 Тогда
ММ = 00;
ЧЧ = ЧЧ + 1;
Если ЧЧ > 23 Тогда
ЧЧ = 23;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Док.УстановитьВремя(ЧЧ,ММ,СС);
Док.Записать();
Если БылПоведен=1 Тогда
Док.Провести();
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ПриОткрытии()
Если ТипЗначения(Форма.Параметр)=12 Тогда //Тип значения 12 - Документ
ВыбДокумент=Форма.Параметр;
Форма.Закрыть();
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ПриЗакрытии()
Выполнить();
КонецПроцедуры
Теперь маюся - откуда это добро вызывать: желательно, чтобы в отгрузке добавить к кнопке "ок" вызов данной обработки..."
Обработка.ИзменениеВремениДокумента
Модуль формы
//*******************************************
Процедура Выполнить()
Если ВыбДокумент.Выбран() = 0 Тогда
Предупреждение("Не выбран документ!");
Возврат;
КонецЕсли;
Док = СоздатьОбъект("Документ."+ВыбДокумент.Вид());
Док.НайтиДокумент(ВыбДокумент);
БылПоведен=0;
Если Док.Проведен() = 1 Тогда
Док.СделатьНеПроведенным();
БылПоведен = 1;
КонецЕсли;
Док1 = СоздатьОбъект("Документ");
Док1.ВыбратьДокументы(Док.ДатаДок,Док.ДатаДок);
Пока Док1.ПолучитьДокумент() = 1 Цикл
Текущий = Док1.ТекущийДокумент();
КонецЦикла;
ЧЧ = 0;
ММ = 0;
СС = 0;
Текущий.ПолучитьВремя(ЧЧ,ММ,СС);
СС = СС + 1;
Если СС > 59 Тогда
СС = 00;
ММ = ММ + 1;
Если ММ > 59 Тогда
ММ = 00;
ЧЧ = ЧЧ + 1;
Если ЧЧ > 23 Тогда
ЧЧ = 23;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Док.УстановитьВремя(ЧЧ,ММ,СС);
Док.Записать();
Если БылПоведен=1 Тогда
Док.Провести();
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ПриОткрытии()
Если ТипЗначения(Форма.Параметр)=12 Тогда //Тип значения 12 - Документ
ВыбДокумент=Форма.Параметр;
Форма.Закрыть();
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ПриЗакрытии()
Выполнить();
КонецПроцедуры
Теперь маюся - откуда это добро вызывать: желательно, чтобы в отгрузке добавить к кнопке "ок" вызов данной обработки..."
03.12.2008
18:50
#32
"ИМХО, получение ТА корректнее сделать так:
Функция ПолучитьВремяТАБух(ВидДок="""")
Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
КонецЕсли;
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
ЧЧ=-1;
ММ=-1;
СС=-1;
Пока Док.ПолучитьДокумент()>0 Цикл
Если Док.Проведен()=1 Тогда
ТА=Док.ПолучитьВремя(ЧЧ,ММ,СС);
Прервать;
КонецЕсли;
КонецЦикла;
ВремяПоДокументу=0;
Если ЧЧ>0 Тогда
ВремяПоДокументу=ЧЧ*3600;
ВремяПоДокументу=ВремяПоДокументу+(ММ*60);
ВремяПоДокументу=ВремяПоДокументу+СС;
КонецЕсли;
Время=ТекущееВремя(ЧЧ,ММ,СС);
ВремяПоТекущему=ЧЧ*3600;
ВремяПоТекущему=ВремяПоТекущему+(ММ*60);
ВремяПоТекущему=ВремяПоТекущему+СС;
Если ВремяПоДокументу>ВремяПоТекущему Тогда
Возврат ТА;
Иначе
Возврат Время;
КонецЕсли;
КонецФункции
Описание: если при вызове функции не передавать в нее вид документа то функция вернет теущее время или врем последнего проведенного документа если оно больше текущего. Если передать вид документа, то функция вернет текущее время документа или время последнего поведенного документа _заданного_ _вида_ если его время больше текущего.
А далее для проведения можно другого документа после ТА можно просто распарсить секунды, прибавить кним 1,2 или сколько угодно секунд, проконтролировать не получилось ли более 59 со всеми вытекающими полседствиями, и использовать новое время для проведение нужного документа."
Функция ПолучитьВремяТАБух(ВидДок="""")
Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
КонецЕсли;
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
ЧЧ=-1;
ММ=-1;
СС=-1;
Пока Док.ПолучитьДокумент()>0 Цикл
Если Док.Проведен()=1 Тогда
ТА=Док.ПолучитьВремя(ЧЧ,ММ,СС);
Прервать;
КонецЕсли;
КонецЦикла;
ВремяПоДокументу=0;
Если ЧЧ>0 Тогда
ВремяПоДокументу=ЧЧ*3600;
ВремяПоДокументу=ВремяПоДокументу+(ММ*60);
ВремяПоДокументу=ВремяПоДокументу+СС;
КонецЕсли;
Время=ТекущееВремя(ЧЧ,ММ,СС);
ВремяПоТекущему=ЧЧ*3600;
ВремяПоТекущему=ВремяПоТекущему+(ММ*60);
ВремяПоТекущему=ВремяПоТекущему+СС;
Если ВремяПоДокументу>ВремяПоТекущему Тогда
Возврат ТА;
Иначе
Возврат Время;
КонецЕсли;
КонецФункции
Описание: если при вызове функции не передавать в нее вид документа то функция вернет теущее время или врем последнего проведенного документа если оно больше текущего. Если передать вид документа, то функция вернет текущее время документа или время последнего поведенного документа _заданного_ _вида_ если его время больше текущего.
А далее для проведения можно другого документа после ТА можно просто распарсить секунды, прибавить кним 1,2 или сколько угодно секунд, проконтролировать не получилось ли более 59 со всеми вытекающими полседствиями, и использовать новое время для проведение нужного документа."
04.12.2008
09:18
#33
Ну, с ТА вроде разобрался..))) Теперь хотел бы спросить как лучше вызвать обработку с изменением времени, чтобы для пользователя визуально ничего не поменялось - т.е. по привычному нажатию на одну кнопку он проводил и закрывал документ...
04.12.2008
09:36
#34
Интереснол, а что будет если существуют проведенные документы с датой больше чем РабочаяДата()?
04.12.2008
10:20
#35
> Интереснол, а что будет если существуют проведенные документы с датой больше чем РабочаяДата()?
Да, тут я забыл написать комментарий... надо дорабатывать... вот только не знаю уж как, может на дату документа завязаться
Да, тут я забыл написать комментарий... надо дорабатывать... вот только не знаю уж как, может на дату документа завязаться
04.12.2008
10:23
#36
> Ну, с ТА вроде разобрался..))) Теперь хотел бы спросить как лучше вызвать обработку с изменением времени, чтобы для пользователя визуально ничего не поменялось - т.е. по привычному нажатию на одну кнопку он проводил и закрывал документ...
Не получиться так, документ все равно надо закрыть, но можно по нажатию кнопки документ сначала проводить и потом вызывать обработку с третьим параметром = 0, она тогда изменит время документа но не откроет его после этого.
Не получиться так, документ все равно надо закрыть, но можно по нажатию кнопки документ сначала проводить и потом вызывать обработку с третьим параметром = 0, она тогда изменит время документа но не откроет его после этого.
04.12.2008
10:33
#37
"В связи с замечанием Prikum'а заменяем
Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
КонецЕсли;
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
на
Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(Док.ДатаДок,Док.ДатаДок);
КонецЕсли;
Если будет выбран документ записаный заньше чем забочая дата, то ТА будет искаться в тот день, иначе в рабочей дате.
"
Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
КонецЕсли;
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
на
Если ВидДок="""" Тогда
Док=СоздатьОбъект("Документ");
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(РабочаяДата(),РабочаяДата());
Иначе
Док=СоздатьОбъект("Документ."+ВидДок);
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы(Док.ДатаДок,Док.ДатаДок);
КонецЕсли;
Если будет выбран документ записаный заньше чем забочая дата, то ТА будет искаться в тот день, иначе в рабочей дате.
"
04.12.2008
10:43
#38
Не, просто надо убрать второй параметр, тогда будут выбираться все документы, с первой даты и до конца века!
Не проводится ни один документ в 1С:Бухгалтерия8.1пересчет оклада за предыдущий месяц в 1С ЗП и кадры
Читают тему
(гостей: 1)