|
Установить время документа | ☑ | ||
---|---|---|---|---|
0
treor
23.09.17
✎
22:23
|
Добрый вечер!
Стоит следующая задача: установить время первого создаваемого документа на некоторую дату в начало дня, а каждому последующему документу присваивать время на секунду больше Пробую сделать это следующим образом: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ДатаНачалоДня = НачалоДня(Дата); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачалоДня", ДатаНачалоДня); Запрос.Текст = "ВЫБРАТЬ | ЗП_НачислениеОтпуска.Ссылка КАК Ссылка, | ЗП_НачислениеОтпуска.Дата |ИЗ | Документ.ЗП_НачислениеОтпуска КАК ЗП_НачислениеОтпуска |ГДЕ | НАЧАЛОПЕРИОДА(ЗП_НачислениеОтпуска.Дата, ДЕНЬ) = &ДатаНачалоДня | |УПОРЯДОЧИТЬ ПО | ЗП_НачислениеОтпуска.МоментВремени УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Если Выборка.Следующий() Тогда Дата = Выборка.Дата + 1; Иначе Дата = ДатаНачалоДня; КонецЕсли; КонецПроцедуры Но в запросе некорректно отрабатывает секция ГДЕ: запрос при наличии документов на указанную дату ничего не возвращает((( |
|||
1
treor
23.09.17
✎
22:24
|
Будет ли в этом случае как-нибудь влиять настройка формы АвтоВремя?
|
|||
2
treor
23.09.17
✎
22:33
|
(1) Методом проб и ошибок пришла к тому, что код нужно переместить в процедуру ПриЗаписи()
|
|||
3
youalex
23.09.17
✎
23:45
|
(2) не вникал, но ПередЗаписью() - было бы логичнее.
|
|||
4
treor
24.09.17
✎
00:04
|
(3)если ПередЗаписью(),то программа после выполнения процедуры автоматически выставляет время документа
|
|||
5
youalex
24.09.17
✎
00:51
|
(4) А в ПриЗаписи - запись объекта в БД уже состоялась.
Но еще есть ДокументОбъект.УстановитьВремя() . Сам не пользовал, но, сдается, где-то рядом по смыслу. |
|||
6
youalex
24.09.17
✎
00:54
|
(5) + ну и тут еще опер. проведение может вклиниваться, можно поэкспериментировать с вышеупомянутым методом в разных режимах проведения.
|
|||
7
treor
24.09.17
✎
09:36
|
(6)Обязательно попробую. Но мне нужна подсказка почему область ГДЕ в запросе не работает
|
|||
8
VS-1976
24.09.17
✎
09:52
|
Попробуй так:
ЗП_НачислениеОтпуска.Дата МЕЖДУ &ДатаНачалоДня И КОНЕЦПЕРИОДА( &ДатаНачалоДня, День ) И проверь передаётся ли у тебя дата |
|||
9
rudnitskij
24.09.17
✎
10:09
|
(7) может потому, что условие ГДЕ выполняется при чтении данных из таблицы, без вычисления всяких функций? Для условия "ГДЕ ЗП_НачислениеОтпуска.Дата..." - любые условия выполняться будут, а для "ГДЕ НАЧАЛОПЕРИОДА(ЗП_НачислениеОтпуска.Дата..." - не выполняются, что вы уже установили опытным путем
|
|||
10
treor
24.09.17
✎
12:59
|
Уважаемые, форумчане, спасибо ОГРОМНОЕ за помощь!!!
Изначально приведенный код рабочий!!! Просто некоторым, не постесняюсь этого слова, ЛОШАРАМ тестировать надо на тех документах, к которым делаешь запрос!))) Приведу измененный код: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ЭтоНовый() Тогда ДатаНачалоДня = НачалоДня(Дата); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачалоДня", ДатаНачалоДня); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ЗП_ОтпускаОрганизаций.Ссылка КАК Ссылка, | ЗП_ОтпускаОрганизаций.Дата |ИЗ | Документ.ЗП_ОтпускаОрганизаций КАК ЗП_ОтпускаОрганизаций |ГДЕ | НАЧАЛОПЕРИОДА(ЗП_ОтпускаОрганизаций.Дата, ДЕНЬ) = &ДатаНачалоДня | |УПОРЯДОЧИТЬ ПО | ЗП_ОтпускаОрганизаций.МоментВремени УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Если Выборка.Следующий() Тогда Дата = Выборка.Дата + 1; Иначе Дата = ДатаНачалоДня; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
11
breezee
24.09.17
✎
13:28
|
Странная задача. Я не стал бы так делать. Добавил бы еще один реквизит. Как потом понять, когда создан документ? Как потом объяснить пользователю, почему у него время не так работает, как обычно? Есть шанс потерять доверие юзера к системе
|
|||
12
treor
24.09.17
✎
13:43
|
(11)Это как раз для пользователей и делается).
Если в двух словах:в документах Пользователя1 обрабатываются данные из документов, доступа к которым у него нет. Для корректной работы нужно, чтобы эти документы были проведенны до начала рабочего дня. Пользователь2 (бухгалтер)проводит их в рабочее время не парясь о времени документа (т.е. программа выставляет автоматически). На просьбу проводить документы со временем до начала рабочего дня отвечает: "Кому надо, тот пусть и меняет" Здесь документ "Отуска" взят просто для проработки алгоритма. Алгоритм будет внедрен, только с ведома и согласия всех сторон) |
|||
13
rudnitskij
24.09.17
✎
13:57
|
(12) и все же советую условие переписать как в (9), запрос по вашей модели выполняется дольше. За счет вычисления начала периода
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |