|   |   | 
| 
 | Установить время документа | ☑ | ||
|---|---|---|---|---|
| 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), запрос по вашей модели выполняется дольше. За счет вычисления начала периода     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |