Один документ в конце каждого дня. Как реализовать красиво.

1. Mishanam 29 28.06.17 15:03 Сейчас в теме
Друзья, есть задание, в котором стоит условие:
Необходимо реализовать документ, формируемый в единственном экземпляре в конце каждого дня. Данный документ формирует движения по регистру накоплений...
Собственно, два вопроса.

1) Как правильно проверить, что документ единственный за день??
2) Как проводить документ самым последним в текущем дне?
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. vadim1011985 99 28.06.17 15:20 Сейчас в теме
(1)
1) Запросом
Выбрать Первые 1
НужныйДокумент.Ссылка
НужныйДокумент.Дата 
ИЗ Документы.НужныйДокумент КАК НужныйДокумент 
ГДЕ Дата Между &НачалоДня И &КонецДня 

Запрос.УстановитьЗначениеПараметра ( "НачалоДня",Новый Граница (НачалоДня(ТекущаяДата()), ВидГраницы.Включая ) );


Запрос.УстановитьЗначениеПараметра ("КонецДня" ,Новый Граница (КонецДня(ТекущаяДата()), ВидГраницы.Включая ) );

Результат = Запрос.Выполнить() $

Если Результат.пустрой() Тогда 
     // документа нет
КонецЕсли;
Показать
+
6. Mishanam 29 28.06.17 15:22 Сейчас в теме
(4) Наверное, вы правы
+
7. Mishanam 29 28.06.17 15:23 Сейчас в теме
(4) Поясните, зачем включать границу для даты начала?
+
8. Mishanam 29 28.06.17 15:26 Сейчас в теме
(4) А как документ записать в самой конец дня?
+
9. r.moschenskiy 23 28.06.17 15:32 Сейчас в теме
(8)Дата = КонецДня(ТекущаяДата());
+
2. BackinSoda 28.06.17 15:15 Сейчас в теме
ПередЗаписью в модуле объекта проверять запросом на наличие документа на дату = КонецДня(ТекущаяДата()), если нет то присваивать Дате значение Конца дня, иначе Отказ = Истина;
ilyanet; +1
3. pm74 199 28.06.17 15:19 Сейчас в теме
"ВЫБРАТЬ
|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Документ1.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ ВТ1
|ИЗ
|	Документ.Документ1 КАК Документ1
|ГДЕ
|	Документ1.Дата = &Дата
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 1
|	Документ1.МоментВремени КАК МоментВремени
|ПОМЕСТИТЬ ВТ2
|ИЗ
|	Документ.Документ1 КАК Документ1
|ГДЕ
|	Документ1.Дата = &Дата
|
|УПОРЯДОЧИТЬ ПО
|	МоментВремени УБЫВ"

...ВыполнитьПакетСПромежуточнымиДанными  
Показать
+
5. Mishanam 29 28.06.17 15:21 Сейчас в теме
Наверное, надо полностью написать задачу. Документ, который мы создаём в конце дня, будет корректировать движения другого документа, который, в принципе, тоже может быть записан на дату 23:59:59. Нужно чтобы документ корректировка даже в этом случае был последним.
+
10. BackinSoda 28.06.17 15:33 Сейчас в теме
(5) А для чего конкретно нужно, что бы он был последним, если это корректирующий документ (тем более единственный в день) ?
+
11. ipoloskov 162 28.06.17 15:38 Сейчас в теме
(10) наверное, чтобы корректно перепроводить при восстановлении последовательностей.
Тогда надо включать эти документы в последовательность.

Проще не заморачиваться с последовательностями, а при перепроведении корректирующего документа брать движения за весь день за минусом движений корректирующего документа. Тогда неважно, где будет его момент времени. И можно даже не ставить его принудительно в последнюю секунду дня.
+
12. Mishanam 29 28.06.17 15:52 Сейчас в теме
Друзья, всем спасибо, выручили
+
13. Mishanam 29 28.06.17 15:56 Сейчас в теме
Не работает запрос

Выбрать Первые 1
НужныйДокумент.Ссылка
НужныйДокумент.Дата 
ИЗ Документы.НужныйДокумент КАК НужныйДокумент 
ГДЕ Дата Между &НачалоДня И &КонецДня 

Запрос.УстановитьЗначениеПараметра ( "НачалоДня",Новый Граница (НачалоДня(ТекущаяДата()), ВидГраницы.Включая ) );


Запрос.УстановитьЗначениеПараметра ("КонецДня" ,Новый Граница (КонецДня(ТекущаяДата()), ВидГраницы.Включая ) );

Результат = Запрос.Выполнить() $

Если Результат.пустрой() Тогда 
     // документа нет
КонецЕсли;
Показать
+
19. BackinSoda 28.06.17 16:17 Сейчас в теме
(13)
ВЫБРАТЬ ПЕРВЫЕ 1
	НужныйДокумент.Ссылка,
	НужныйДокумент.Дата
ИЗ
	Документ.ОтчетОРозничныхПродажах_Пример КАК НужныйДокумент
ГДЕ
	НужныйДокумент.Дата МЕЖДУ &НачалоДня И &КонецДня

зы: уже ответили выше
+
20. Mishanam 29 28.06.17 16:20 Сейчас в теме
14. Mishanam 29 28.06.17 15:57 Сейчас в теме
Ругается, что Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
КорректировкаЗадолженности.Дата <<?>>МЕЖДУ &НачалоПериода И &КонецПериода
+
15. r.moschenskiy 23 28.06.17 15:59 Сейчас в теме
(14)Убери границы, в выражении МЕЖДУ это точно не нужно, оно и так включает границы.
+
16. Mishanam 29 28.06.17 16:01 Сейчас в теме
(15) Не использовать границы? т. е. вот так

Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	КорректировкаЗадолженности.Ссылка
	|ИЗ
	|	Документ.КорректировкаЗадолженности КАК КорректировкаЗадолженности
	|ГДЕ
	|	КорректировкаЗадолженности.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
	
	Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(Дата));
	Запрос.УстановитьПараметр("КонецПериода", КонецДня(Дата));
Показать
+
17. ipoloskov 162 28.06.17 16:10 Сейчас в теме
(16)
Запрос = Новый Запрос; 
Запрос.Текст = "ВЫБРАТЬ 
|	КорректировкаЗадолженности.Ссылка 
|ИЗ 
|	Документ.КорректировкаЗадолженности КАК КорректировкаЗадолженности 
|ГДЕ 
|	КорректировкаЗадолженности.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|  И КорректировкаЗадолженности.Ссылка<>&Ссылка
|  И КорректировкаЗадолженности.Проведен"; 

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(Дата)); 
Запрос.УстановитьПараметр("КонецПериода", КонецДня(Дата));
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если НЕ Запрос.Выполнить().Пустой() Тогда
Отказ = Истина; 
КонецЕсли;

Показать
+
18. Mishanam 29 28.06.17 16:10 Сейчас в теме
21. VmvLer 29.06.17 09:36 Сейчас в теме
зачем два параметра? достаточно передать один &ДатаДня

и в запросе

НужныйДокумент.Дата МЕЖДУ НАЧАЛОПЕРИОДА( &ДатаДня, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаДня, ДЕНЬ)

это устранит ошибки, когда параметры перепутали или неверно преобразовали перед передачей в запрос
+
Внимание! Тема сдана в архив

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