Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Установить время документа

Установить время документа
Я
   treor
 
23.09.17 - 22:23
Добрый вечер!
Стоит следующая задача:
установить время первого создаваемого документа на некоторую дату в начало дня, а каждому последующему документу присваивать время на секунду больше

Пробую сделать это следующим образом:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    ДатаНачалоДня = НачалоДня(Дата);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаНачалоДня", ДатаНачалоДня);   
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЗП_НачислениеОтпуска.Ссылка КАК Ссылка,
                   |    ЗП_НачислениеОтпуска.Дата
                   |ИЗ
                   |    Документ.ЗП_НачислениеОтпуска КАК ЗП_НачислениеОтпуска
                   |ГДЕ
                   |    НАЧАЛОПЕРИОДА(ЗП_НачислениеОтпуска.Дата, ДЕНЬ) = &ДатаНачалоДня
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ЗП_НачислениеОтпуска.МоментВремени УБЫВ";

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Дата = Выборка.Дата + 1;
    Иначе 
        Дата = ДатаНачалоДня;
    КонецЕсли;
    
КонецПроцедуры

Но в запросе некорректно отрабатывает секция ГДЕ: запрос при наличии документов на указанную дату ничего не возвращает(((
 
 
   treor
 
1 - 23.09.17 - 22:24
Будет ли в этом случае как-нибудь влиять настройка формы АвтоВремя?
   treor
 
2 - 23.09.17 - 22:33
(1) Методом проб и ошибок пришла к тому, что код нужно переместить в процедуру ПриЗаписи()
   youalex
 
3 - 23.09.17 - 23:45
(2) не вникал, но ПередЗаписью() - было бы логичнее.
   treor
 
4 - 24.09.17 - 00:04
(3)если ПередЗаписью(),то программа после выполнения процедуры автоматически выставляет время документа
   youalex
 
5 - 24.09.17 - 00:51
(4) А в ПриЗаписи - запись объекта в БД уже состоялась.
Но еще есть ДокументОбъект.УстановитьВремя() .  Сам не пользовал, но, сдается, где-то рядом по смыслу.
   youalex
 
6 - 24.09.17 - 00:54
(5) + ну и тут еще опер. проведение может вклиниваться, можно поэкспериментировать с вышеупомянутым методом в разных режимах проведения.
   treor
 
7 - 24.09.17 - 09:36
(6)Обязательно попробую. Но мне нужна подсказка почему область ГДЕ в запросе не работает
   VS-1976
 
8 - 24.09.17 - 09:52
Попробуй так:
ЗП_НачислениеОтпуска.Дата МЕЖДУ &ДатаНачалоДня И КОНЕЦПЕРИОДА( &ДатаНачалоДня, День )

И проверь передаётся ли у тебя дата
   rudnitskij
 
9 - 24.09.17 - 10:09
(7) может потому, что условие ГДЕ выполняется при чтении данных из таблицы, без вычисления всяких функций? Для условия "ГДЕ ЗП_НачислениеОтпуска.Дата..." - любые условия выполняться будут, а для "ГДЕ НАЧАЛОПЕРИОДА(ЗП_НачислениеОтпуска.Дата..." - не выполняются, что вы уже установили опытным путем
   treor
 
10 - 24.09.17 - 12:59
Уважаемые, форумчане, спасибо ОГРОМНОЕ за помощь!!!
Изначально приведенный код рабочий!!! Просто некоторым, не постесняюсь этого слова, ЛОШАРАМ тестировать надо на тех документах, к которым делаешь запрос!)))

Приведу измененный код:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ЭтоНовый() Тогда
        
        ДатаНачалоДня = НачалоДня(Дата);
        
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("ДатаНачалоДня", ДатаНачалоДня);
        
        Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
        |    ЗП_ОтпускаОрганизаций.Ссылка КАК Ссылка,
        |    ЗП_ОтпускаОрганизаций.Дата
        |ИЗ
        |    Документ.ЗП_ОтпускаОрганизаций КАК ЗП_ОтпускаОрганизаций
        |ГДЕ
        |    НАЧАЛОПЕРИОДА(ЗП_ОтпускаОрганизаций.Дата, ДЕНЬ) = &ДатаНачалоДня
        |
        |УПОРЯДОЧИТЬ ПО
        |    ЗП_ОтпускаОрганизаций.МоментВремени УБЫВ";
        
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
        
        Если Выборка.Следующий() Тогда
            Дата = Выборка.Дата + 1;
        Иначе 
            Дата = ДатаНачалоДня;
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры
 
 Рекламное место пустует
   breezee
 
11 - 24.09.17 - 13:28
Странная задача. Я не стал бы так делать. Добавил бы еще один реквизит. Как потом понять, когда создан документ? Как потом объяснить пользователю, почему у него время не так работает, как обычно? Есть шанс потерять доверие юзера к системе
   treor
 
12 - 24.09.17 - 13:43
(11)Это как раз для пользователей и делается).
Если в двух словах:в документах Пользователя1  обрабатываются данные из документов, доступа к которым у него нет. Для корректной работы нужно, чтобы эти документы были проведенны до начала рабочего дня. Пользователь2 (бухгалтер)проводит их в рабочее время не парясь о времени документа (т.е. программа выставляет автоматически). На просьбу проводить документы со временем до начала рабочего дня отвечает: "Кому надо, тот пусть и меняет"

Здесь документ "Отуска" взят просто для проработки алгоритма.
Алгоритм будет внедрен, только с ведома и согласия всех сторон)
   rudnitskij
 
13 - 24.09.17 - 13:57
(12) и все же советую условие переписать как в (9), запрос по вашей модели выполняется дольше. За счет вычисления начала периода

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует