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