Была мысль сделать проверку времени документа и подставлять свободные даты. В ходе размышлений, пришел к выводу что мне это не надо и забросил, а вот код выдающий список секунд за дату я решил не выбрасывать. А потом пришел к выводу что надо и переделал
Функция ПолучитьДатуДокумента()
Если НЕ ЭтоНовый() Тогда
ШестьдесятСекундТЗ=Новый ТаблицаЗначений;
ШестьдесятСекундТЗ.Колонки.Добавить("Секунд",Новый ОписаниеТипов("Число"));
Секунд=0;
Пока Секунд<=59 цикл
ШестьдесятСекундТЗ.Добавить().Секунд=Секунд;
Секунд=Секунд+1;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| секунды.секунд КАК секунд
|ПОМЕСТИТЬ ШестьдесятСекунд
|ИЗ
| &ШестьдесятСекунд КАК секунды
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ), СЕКУНДА, часов.часы * минут.минуты * секунд.секунды) КАК СекундаДня
|ПОМЕСТИТЬ ДатаПоСекундам
|ИЗ
| (ВЫБРАТЬ
| секунды.секунд КАК часы
| ИЗ
| ШестьдесятСекунд КАК секунды
| ГДЕ
| секунды.секунд <= 23) КАК часов,
| (ВЫБРАТЬ
| секунды.секунд КАК минуты
| ИЗ
| ШестьдесятСекунд КАК секунды) КАК минут,
| (ВЫБРАТЬ
| секунды.секунд КАК секунды
| ИЗ
| ШестьдесятСекунд КАК секунды) КАК секунд
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА КоличествоДатТекущегоДокумента.Количество = 0
| ТОГДА &Дата
| ИНАЧЕ МИНИМУМ(ДатаПоСекундам.СекундаДня)
| КОНЕЦ КАК НоваяДата
|ИЗ
| (ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ACG_ЗаказНаПроизводство.Дата) КАК Количество
| ИЗ
| Документ.ACG_ЗаказНаПроизводство КАК ACG_ЗаказНаПроизводство
| ГДЕ
| ACG_ЗаказНаПроизводство.Дата = &Дата
| И ACG_ЗаказНаПроизводство.Ссылка <> &Ссылка) КАК КоличествоДатТекущегоДокумента,
| ДатаПоСекундам КАК ДатаПоСекундам
|ГДЕ
| НЕ ДатаПоСекундам.СекундаДня В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ACG_ЗаказНаПроизводство.Дата КАК Дата
| ИЗ
| Документ.ACG_ЗаказНаПроизводство КАК ACG_ЗаказНаПроизводство
| ГДЕ
| ACG_ЗаказНаПроизводство.Дата >= НАЧАЛОПЕРИОДА(&дата, ДЕНЬ)
| И ACG_ЗаказНаПроизводство.Дата <= КОНЕЦПЕРИОДА(&дата, ДЕНЬ))
|
|СГРУППИРОВАТЬ ПО
| КоличествоДатТекущегоДокумента.Количество";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("ШестьдесятСекунд",ШестьдесятСекундТЗ);
Запрос.УстановитьПараметр("Ссылка",Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество()=0 Тогда
НоваяДата=Дата;
Сообщить("Необходимо изменить время/дату документа, программно не получается - лапки");
Иначе
НоваяДата=РезультатЗапроса[0].НоваяДата;
КонецЕсли;
ИНаче
НоваяДата=ТекущаяДата();
КонецЕсли;
Возврат(НоваяДата);
КонецФункции
Банально и просто
Комментариев нет:
Отправить комментарий