Имя: Пароль:
1C
1C 7.7
v7: провести документ концом дня
0 taril115
 
04.08.11
10:44
есть групповая обработка документов.
Перепроводит документы за период. Всё хорошо, но нужно перепровести документы концом дня!

В обработке
Док.Провести(); - проводит тем же временем, которым и был проведён документ.
Помогите, что-то туплю)
1 Ёпрст
 
04.08.11
10:46
Если проведение в дате = датаТА, то провести с параметром (смотри в СП), иначе - только снимать с проведения, устанавливать новое время, проводить.
2 ДенисЧ
 
04.08.11
10:46
Снять проведение, установить нужное время, провести - не предлагать?
3 Chum
 
04.08.11
10:48
(2) это, наверное, не кошерно, равно как и автовремяконецдня
4 taril115
 
04.08.11
10:51
Вот код  процедуры:



Процедура ПоКнопкеВыполнить()
   
   // Проверим, все ли задано
   Если ВариантДействия = 1 Тогда // Печать
       
       Если СпособПечати.ТекущаяСтрока() = 0 Тогда
           Предупреждение("Не выбран способ печати.",60);
           Активизировать("СпособПечати");
           Возврат;
       КонецЕсли;
       
   ИначеЕсли ВариантДействия = 2 Тогда // Пометка на удаление
       
       Если ПометкаУдаления.ТекущаяСтрока() = 0 Тогда
           Предупреждение("Не выбрано действие с пометкой на удаление.",60);
           Активизировать("ПометкаУдаления");
           Возврат;
       КонецЕсли;
   КонецЕсли;    

   Попытка  
       Если флТранзакция = 1 Тогда
           НачатьТранзакцию();
       КонецЕсли;
       
       Док = СоздатьОбъект("Документ");
       ТаблицаДокументов.ВыбратьСтроки();
       Пока ТаблицаДокументов.ПолучитьСтроку() = 1 Цикл
           
           ТекСтрока = ТаблицаДокументов.НомерСтроки;
           
           // Не помечен к обработке
           Если ТаблицаДокументов.Пометка = МеткиНет Тогда
               Продолжить;
           КонецЕсли;    
           
           // не оказалось документа
           Если Док.НайтиДокумент(ТаблицаДокументов.Документ) = 0 Тогда
               Сообщить("Не найден """ + СокрЛП(ТаблицаДокументов.Документ) + """! Действие не выполнено!","!");
               Продолжить;
           КонецЕсли;    
           
           Сообщить("Выполняется обработка позиции "+СокрЛП(Док.ТекущийДокумент()),".");
                           
           Если ВариантДействия = 1 Тогда  // Напечатать
               
               // глПечатьДокумента(Док.ТекущийДокумент(), СпособПечати.ПолучитьЗначение(СпособПечати.ТекущаяСтрока()))
           ИначеЕсли ВариантДействия = 2 Тогда  // Пометка на удаление    
               
               Если ПометкаУдаления.ТекущаяСтрока() = 1 Тогда
                   // Если глПриУдаленииДокумента(Док, 0) = 1 Тогда // можно удалять
                       Док.Удалить(0);                              
                   // КонецЕсли;
               Иначе
                   // Если глПриУдаленииДокумента(Док, 0) = 1 Тогда
                       Док.СнятьПометкуУдаления();
                   // КонецЕсли;
               КонецЕсли;
               
           ИначеЕсли ВариантДействия = 3 Тогда  // Сделать не проведенным
               
               Если Док.Проведен() > 0 Тогда
                   Попытка    
                       
                       // Проверка даты запрета редактирования
                       Если Док.ДатаДок<=Константа.ДатаЗапретаРедактирования Тогда
                           Сообщить("Нельзя отменять проведение документов с датой, более ранней чем дата запрета редактирования документов!","!");
                       Иначе
                           Док.СделатьНеПроведенным();
                       КонецЕсли;
                   Исключение    
                       Сообщить("Не удалось отменить проведение документа "+Строка(Док.ТекущийДокумент()),"!");
                   КонецПопытки;  
               КонецЕсли;
               
           ИначеЕсли ВариантДействия = 4 Тогда  // Провести  
               Попытка    
                   // Проверка даты запрета редактирования
                   Если Док.ДатаДок<=Константа.ДатаЗапретаРедактирования Тогда
                       Сообщить("Нельзя проводить документы с датой, более ранней чем дата запрета редактирования документов!","!");
                   Иначе
                       Док.Провести();
                   КонецЕсли;
               Исключение    
                   Сообщить("Не удалось провести документ "+Строка(Док.ТекущийДокумент()),"!");
               КонецПопытки;
               
           КонецЕсли;
               
           ПерезаполнитьСтрокуТаблицы(ТекСтрока);
       КонецЦикла;
       
       Сообщить("Обработка закончена",".");
       Если флТранзакция = 1 Тогда
           ЗафиксироватьТранзакцию();
       КонецЕсли;
       
   Исключение  
       Если флТранзакция = 1 Тогда
           ОтменитьТранзакцию();
       КонецЕсли;
       
       Сообщить(ОписаниеОшибки(), "!");
   КонецПопытки;
   
КонецПроцедуры // ПоКнопкеВыполнить()
5 taril115
 
04.08.11
10:54
куда засунуть АвтоВремяКонецДня ?? )
6 taril115
 
04.08.11
11:02
сделал проще

Док.УстановитьВремя(24,0,0);
Док.Провести();
))))
7 Ёпрст
 
04.08.11
11:02
(5)
Если Док.ДатаДок = ПолучитьДатуТА() Тогда
  Док.Провести(3);
Иначе
 Док.СделатьНеПроведенным();
 Док.АвтоВремяОтключить();
 Док.АвтоВремяКонецДня();
 Док.Провести();
КонецЕсли;
8 Ёпрст
 
04.08.11
11:03
(6) наивный какой..

Нельзя менять время у проведенного документа.
9 taril115
 
04.08.11
12:38
Всем спасибо за ответы.
10 Cthulhu
 
04.08.11
12:42
(8): ты ещё забыл рассказать про последствия напихивания кучи документов в одну секунду (это даже если позабыть о времени 24:00:00)))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс