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
более подробно можете пояснить ????
а как правильно написать?
подскажите чуть чуть не понятно
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс