Дата документа

1. alex218710 18.03.15 11:46 Сейчас в теме
Всем привет, может кто-нибудь подскажет как лучше обработать ситуацию. Есть документ Перемещение товаров. У него завели реквизит Дата приема. Реквизит закрыли от изменения пользователям. Механизм работы такой, что пользователь должен подтвердить перемещение и только тогда у него на остатках появяться товары. При подтверждении Дата приема устанавливается Текущая дата на сервере 1С. Проблема возникает в том, что при оперативном проведении документа время меняется и дата приема получаеться меньше даты документа, что не верно. Пытался обработать ситуацию в Обработке проведения. Это привело к тому, что движения по регистру документ делает верно, но при повторном открытии дата приема остаеться старая, видимо потому что реквизит устанавливаеться в обработке проведения и не проходит процедуры При Записи и Перед Записью. Как быть в такой ситуации, очень не охота открывать доступ пользователям.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Tiger86 18.03.15 11:53 Сейчас в теме
Странно, при проведении документ записывается, может у вас эта Дата приема где храниться? и там вы ее не записываете. Посмотрите может она в процедуре ПриОткрытии или ПередОткрытием перезаполняется?
3. alex218710 18.03.15 11:57 Сейчас в теме
(2) Tiger86, в этих процедурах её нет, упоминаеться только при установке флага "Подтвердить" (событие при изменении). Далее в обработке проведения такой код ДатаПриема = Дата; Если проводить документ не закрывая, то он будет показывать из-за этой строки Модифицированность.
4. SPID 18.03.15 11:59 Сейчас в теме
Перед записью объекта (ПередЗаписью), если режим записи = проведение, то устанавливайте дату приема.
5. alex218710 18.03.15 12:07 Сейчас в теме
ПередЗаписью не прошло, там по отладчику старая дата, при проведении дата изменилась.
7. spacecraft 18.03.15 12:15 Сейчас в теме
(5) alex218710, вообще то в ОбработкеПроведения нужно делать проверку на ЭтоНовый, что бы не перепроводить документы оперативно.
6. SPID 18.03.15 12:13 Сейчас в теме
Какая дата старая? Что то не пойму задачи. Необходимо при проведении документа и при каких то условиях (подтвердить перемещение) обновить значение ДатаПриема и установить значение равное ТекущаяДата()?
8. alex218710 18.03.15 12:18 Сейчас в теме
(6) SPID, Если подряд нажимать Проведение (оперативное), то каждый раз дата документа будет изменяться на секунды. Например я провожу документ в 10.00, Следующий раз я жму провести в 10.05 (время документа получаеться 10.05), при этом в процедуре ПередЗаписью время документа будет 10.00, а когда документ проведеться время будет в 10.05. Таким образом получаеться Дата документа (время) 10.05, а дата приема (время) 10.00. В этом и есть проблема.
9. Salavat 13 18.03.15 12:23 Сейчас в теме
(8) alex218710, вставить тогда - в ту же процедуру - как нужно формировать эту дату.

именно для этого и есть метод/событие - ПередЗаписью()
10. alex218710 18.03.15 12:32 Сейчас в теме
Какую процедуру? Если вставить ПередЗаписью() - то дата приема получаеться меньше, чем дата документа.
11. Salavat 13 18.03.15 13:03 Сейчас в теме
(10) alex218710, в этой процедуре (подцепленной к событию ПередЗаписью()) - надо задать формирование даты - так, как это нужно.

всё!
12. alex218710 18.03.15 13:05 Сейчас в теме
(11) Salavat, Хорошо, тогда как сделать чтобы Дата приема всегда была равна Дате документа?
13. Salavat 13 18.03.15 13:10 Сейчас в теме
(12) alex218710, так и делать - в процедуре ПередЗаписью - написать строку -
Дата приема = Дата
14. SPID 18.03.15 13:13 Сейчас в теме
(13) Salavat,
Не прокатит. Можно написать ДатаПриема = ТекущаяДата()
15. Salavat 13 18.03.15 13:20 Сейчас в теме
(14) SPID, если надо её задавать текущей датой, то ес-но - текущаядата().

автор сказал - ему нужно дату дока присвоить.
16. SPID 18.03.15 13:46 Сейчас в теме
(15) Salavat, Так Дата документа при оперативном проведении будет равно ТекущаяДата() (если конечно алгоритмы ПередЗаписью не выполняются достаточно долго).
Нужно еще добавить условие вида: Если РежимПроведения = оперативно тогда ДатаПриема = ТекущаяДата() Иначе ДатаПриема = Дата.
19. Salavat 13 18.03.15 14:21 Сейчас в теме
(16) SPID, пардон - а кто сказал, что документ всегда только оперативно проводится?

автор похоже - решил наконец.
17. Tiger86 18.03.15 13:53 Сейчас в теме
Если Датаприема =Дате документа на кой вообще этот реквизит нужен? используйте Дату документа и все
20. Boneman 298 18.03.15 14:52 Сейчас в теме
(17) Tiger86, )) вот именно, много зависит от целей.
Может вообще время там и нафиг не нужно. Дата, и состав даты только дата.
Будет всегда 0 часов. День известен, а дальше трава не расти.
21. Tiger86 19.03.15 09:58 Сейчас в теме
(20) Boneman, так я о чем и веду речь. В контексте озвученного, эты 2 величины одинаковые всегда получаются, так зачем геморой то наживать?
18. alex218710 18.03.15 13:57 Сейчас в теме
Всем спасибо, попробую вариант ПередЗаписью ДатаПриема = ТекущаяДата() + 2, не совсем красиво, но по другому не знаю как сделать
22. caponid 19.03.15 12:52 Сейчас в теме
(18) alex218710, тогда уже лучше сделать в ПослеЗаписи если проведение оперативное ДатаПриема = Дата и Записать(РежимЗаписи.Запись)
23. Salavat 13 19.03.15 14:02 Сейчас в теме
(22) caponid, надоже - певый раз увидел такую. Спасибо! (за показ).

но, пардон - это же к форме только относится и она (насколько я понял) относится именно для показа формы (содержимого её).
на саму запись - точно никак не влияет.
24. caponid 19.03.15 15:12 Сейчас в теме
(23) Salavat, к какой форме? как я понял надо просто записать реквизит опираясь на результаты проведения.
а указание режима запись - для проведенного документа просто перезаписывает реквизиты объекта, не вызывая проведение - так что этим нужно пользоваться с осторожностью.

а прибавлять к дате время и надеяться что за 2 секунды документ проведется... а в друг нет - какие нить тормоза или блокировки - данные будут неактуальные

а вообще лучше вот так
ПослеЗаписи (в модуле объекта)
Если дата > ДатаПриема Тогда 
    ДатаПриема = Дата;
    Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;


а если это стандартная конфа, тогда еще перед Записать(РежимЗаписиДокумента.Запись) добавить ОбменДанными.Загрузка = Истина; - что бы отсечь разные ненужные вычисления(опереации).

Только вот объект записывается иногда 2 раза...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот