![]() |
|
v8.3: Процедура ОбработкаПроведения | ☑ | ||
---|---|---|---|---|
0
user1365457
27.04.20
✎
01:13
|
Документ "Резервирование" при проведении должен проверять:
окончание резервирования должно быть строго позже начала резервирования если стол уже зарезервирован на указанное время, то выводить сообщение и не проводить документ дописать код надо чуть чуть не понимаю помогите пожалуйста Процедура ОбработкаПроведения(Отказ, РежимПроведения) СекундВЧасе = 3600; СекундВМинуте = 60; ТекНачалоБронирования = НачалоДня(Дата) + СекундВЧасе * Час(НачалоРезервирование) + СекундВМинуте * Минута(НачалоРезервирование) + Секунда(НачалоРезервирование); ТекОкончаниеБронирования = НачалоДня(Дата) + СекундВЧасе * Час(КонецРезервирование) + СекундВМинуте * Минута(КонецРезервирование) + Секунда(КонецРезервирование); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка); Запрос.УстановитьПараметр("Стол", Стол); Запрос.УстановитьПараметр("НачалоПериода", ТекНачалоБронирования); Запрос.УстановитьПараметр("КонецПериода", ТекОкончаниеБронирования); Запрос.Текст = "ВЫБРАТЬ | РезервированиеСтоликовСрезПоследних.Период КАК Период, | РезервированиеСтоликовСрезПоследних.Стол КАК Стол, | РезервированиеСтоликовСрезПоследних.ОкончаниеБронирования КАК ОкончаниеБронирования |ИЗ | РегистрСведений.РезервированиеСтоликов.СрезПоследних(&НачалоПериода, Стол = &Стол) КАК РезервированиеСтоликовСрезПоследних |ГДЕ | РезервированиеСтоликовСрезПоследних.ОкончаниеБронирования > &НачалоПериода | И РезервированиеСтоликовСрезПоследних.Регистратор <> &ТекущийДокумент | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | РезервированиеСтоликов.Период, | РезервированиеСтоликов.Стол, | РезервированиеСтоликов.ОкончаниеБронирования |ИЗ | РегистрСведений.РезервированиеСтоликов КАК РезервированиеСтоликов |ГДЕ | РезервированиеСтоликов.Стол = &Стол | И РезервированиеСтоликов.Период > &НачалоПериода | И РезервированиеСтоликов.Период < &КонецПериода | И РезервированиеСтоликов.Регистратор <> &ТекущийДокумент"; ВыборкаПересечениеПериодов = Запрос.Выполнить().Выбрать(); РезервированиеСтоликов.ДатаНачалоРезервирование <= &ДатаОкончаниеБронирования; РезервированиеСтоликов.ОкончаниеБронирования >= &ДатаНачалоРезервирование); Пока ВыборкаПересечениеПериодов.Следующий() Цикл Сообщить("Стол " + Стол + " уже забронирован с " + ВыборкаПересечениеПериодов.Период + " по " + ВыборкаПересечениеПериодов.ОкончаниеБронирования); КонецЦикла; Если ВыборкаПересечениеПериодов.Количество() > 0 Тогда Отказ = Истина; Возврат; КонецЕсли; Движения.РезервированиеСтоликов.Записывать = Истина; Движение = Движения.РезервированиеСтоликов.Добавить(); Движение.Период = НачалоДня(Дата) + СекундВЧасе * Час(НачалоРезервирование) + СекундВМинуте * Минута(НачалоРезервирование) + Секунда(НачалоРезервирование); Движение.Стол = Стол; Движение.ОкончаниеБронирования = НачалоДня(Дата) + СекундВЧасе * Час(КонецРезервирование) + СекундВМинуте * Минута(КонецРезервирование) + Секунда(КонецРезервирование); //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры |
|||
1
palsergeich
27.04.20
✎
01:51
|
А зачем так хитро даты хранятся?
Время без даты. Вот ты на эти грабли по всему коду и наступаешь. Храни не просто время, а полную дату, тогда условие будет тривиально. |
|||
2
user1365457
27.04.20
✎
03:12
|
более подробно можете пояснить ????
а как правильно написать? подскажите чуть чуть не понятно |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |