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

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 человек.
Рекламное место пустует