Имя: Пароль:
1C
1C 7.7
v7: Время документа
0 Eeakie
 
09.07.14
12:57
Добрый день.
Есть документ, в котором установлено АвтоВремяТекущее().
Если документ сохранен сегодняшним числом в 6 утра например, то при перезаписи в 12 дня время не меняется, так и остается 6 утра.
Если перезапись происходит в другой день, то время изменяется нормально. Что за беда такая?
1 DCKiller
 
09.07.14
13:00
Правой кнопкой - "Изменить время документа" спасет отца русской демократии...
2 Eeakie
 
09.07.14
13:03
(1) Понимаю, что это вариант, но нельзя ли это как-то программно замутить?
3 DCKiller
 
09.07.14
13:06
(2) Ну "УстановитьВремя" в модуле формы пропиши...
4 Масянька
 
09.07.14
13:06
(2) Я делала для доп. расходов по поступлению:

//******************************************************************************
Функция ПолучитьВремяДокументаЧислом(Док)

    Перем Ч, М, С;  
    
    Док.ПолучитьВремя(Ч, М, С);
    
    Возврат 3600 * Ч + 60 * М + С;
    
КонецФункции // ПолучитьВремяДокументаЧислом()

//******************************************************************************
Процедура УстановитьВремяДокументаЧислом(Сек)

    Перем Ч, М, С;
    
    Ч    = Цел(Сек / 3600);
    Сек    = Сек - Ч * 3600;
    М    = Цел(Сек / 60);
    С    = Сек - М * 60;
    
    УстановитьВремя(Ч, М, С);
    
КонецПроцедуры // УстановитьВремяДокументаЧислом()
5 Ёпрст
 
09.07.14
13:12
(0) автовремя действует только на НОвый, НЕзаписанный документ.
6 Eeakie
 
09.07.14
13:13
(4) УстановитьВремя() только через "СоздатьОбъект", нет разве?
(5) Уже прочитал в СП.
7 Масянька
 
09.07.14
13:14
(6) Нет. Я тебе привела код из модуля док-та.
8 DCKiller
 
09.07.14
13:14
(6) нет
9 NS
 
09.07.14
13:19
Установитьвремя(1,1,1);
{Документ.ЗаявкаПокупателя.Форма.Модуль(3612)}: Недопустимая операция
10 Eeakie
 
09.07.14
13:23
(9) Та же фигня.
11 Масянька
 
09.07.14
13:24
(9) (10)

Функция ЗаполнениеПоДокументуОснованию()

................    
        мВремя = ПолучитьВремяДокументаЧислом(ДокОснование);
        УстановитьВремяДокументаЧислом(мВремя + 1);
    Иначе
        ВидОперации = Перечисление.КодыОпераций.ДополнительныеРасходы;
    КонецЕсли;
..................
12 Eeakie
 
09.07.14
13:24
+(9) {Документ.Заявка.Форма.Модуль(3189)}: Недопустимая операция

Поделись 423 строками кода. У меня не хватает :)
13 Масянька
 
09.07.14
13:25
+(11) У меня: доп. расходы вводятся на основании поступления, время док-та доп. расходов автоматом ставится ВремяПоступления+1 секунда.
14 Eeakie
 
09.07.14
13:27
(13) Ну, у меня нет параллельного документа, поэтому беру ТекущееВремя(Ч,М,С) и преобразовываю.
15 Масянька
 
09.07.14
13:28
(14) Где устанавливаешь новое время?
16 Eeakie
 
09.07.14
13:30
+(14) В ПриЗаписи().
17 Масянька
 
09.07.14
13:31
(16) Покажи весь код (преобразование времени и записи).
18 Eeakie
 
09.07.14
13:34
(17)
Процедура ПриЗаписи()
.................
Если ДатаДок <> ДатаОплаты Тогда
                АвтоВремяТекущее();
            Иначе
                УстановитьВремяДокумента();
            КонецЕсли;
.................
КонецПроцедуры

Процедура УстановитьВремяДокумента()
    _Ч = 0; _М = 0; _С = 0;
    ТекущееВремя(_Ч, _М, _С);
    Сек = 3600 * _Ч + 60 * _М + _С;
    
    Ч    = Цел(Сек / 3600);
    Сек    = Сек - Ч * 3600;
    М    = Цел(Сек / 60);
    С    = Сек - М * 60;
    
    УстановитьВремя(Ч, М, С);
КонецПроцедуры
19 NS
 
09.07.14
13:34
(17) Вроде вопрос был про уже записанный документ. Или мне показалось?
20 Eeakie
 
09.07.14
13:35
(19) Всё верно.
21 DCKiller
 
09.07.14
13:36
(20) ну тады

Док = СОздатьОбъект("Документ");
Док.НайтиДокумент(ТекущийДокумент());
Док.УстановитьВремя(ЧЧ, ММ, СС);
22 NS
 
09.07.14
13:37
(21) Из формы документа? :)
23 NS
 
09.07.14
13:37
Через форма.Закрыть() можно, или просто в призакрытии(), а иначе штатно не выйдет.
24 Масянька
 
09.07.14
13:39
(18) А попробуй - после записи.
25 NS
 
09.07.14
13:41
(24) В семерке после записи? Это как?
26 Eeakie
 
09.07.14
13:43
(25) Только хотел спросить...

ПриЗакрытии() тоже не канает, ибо если срабатывает условие в ПриЗаписи() то документ проводится, а проведенный править уже нельзя.
27 Eeakie
 
09.07.14
13:46
Вот в этом месте надо каким-то образом сделать запись времени.

Если (ПустоеЗначение(ДатаОплаты) = 0) и (Проведен() = 0) Тогда
        АвтоВремяТекущее();        
        ДатаДок = ДатаОплаты;
                
        Если Провести() = 0 Тогда
            ДатаОплаты = Дата(0);
        КонецЕсли;
    КонецЕсли;
28 Eeakie
 
09.07.14
13:47
+(27) это процедура ПриЗаписи()
29 NS
 
09.07.14
13:48
(28) Я же написал - штатно это не сделать. Только через извраты.
30 Eeakie
 
09.07.14
13:49
(29) Делать надо в любом случае. Через Форма.Закрыть() что имели в виду?
31 NS
 
09.07.14
13:57
(30) Переменная модуля формы "НеЗакрывать".
В приЗакрытии(), если НеЗакрывать равно единице, то вызываешь обработку через открытьформу, которой передаешь документ, и нужное время. Обработка находит документ, меняет время, и опять открывает форму документа.
Всё сработает, так как открытьформу() выполнится после закрытия формы документа.
32 Eeakie
 
09.07.14
14:06
(31) Действительно изврат :) Спасибо.
33 Ёпрст
 
09.07.14
14:07
(6)
>>>УстановитьВремя() только через "СоздатьОбъект", нет разве?

Не совсем так.
Для НОвого, НЕзаписанного документа можно просто использовать в форме :

Процедура ПриЗаписи()
  Если Выбран()=0 Тогда
    АвтоВремяОтключить();
    УстановитьВремя(8,0,0);
  КонецЕсли;
КонецПроцедуры
34 Ёпрст
 
09.07.14
14:08
Если хочешь с формы менять время, то красивое решение - на синьере
35 Ёпрст
 
09.07.14
14:08
36 Ёпрст
 
09.07.14
14:08
Это лучше, чем мелькание формы обработки
37 Eeakie
 
09.07.14
14:18
(35) Охохо, вот это способ. Спасибо :)
38 Eeakie
 
09.07.14
14:38
Почему автовремя отрабатывает, если перезаписывать с даты на дату? То есть было 8 утра 01.01, а если переписать с автовременем на 02.01, то время проставится текущее.
39 Eeakie
 
09.07.14
15:40
Решил проблему кардинально. В заявке создал процедуру "ДляЗаписиЗаявки()", куда воткнул просто Записать(). При Записи() просто тупо отматывал дату на 1 день назад с АвтоТекущееВремя() и записывал через "ДляЗаписиЗаявки()". Дальше обратно перемещал дату на текущую и перезаписывал - всё заработало.