Имя: Пароль:
1C
 
Как организовать проверку в ТЧ.
0 ZloyRafa
 
29.09.16
05:08
Доброго времени суток!
До этого не сталкивался с подобным, хотелось бы у опытных людей спросить.
У меня ТЧ, в ней есть 4 реквизита(Класс, Курс, ДатаНач, ДатаКон), составляется подобие расписания, вводится 3 курса с произвольными для каждого свой класс, после при вводе любого курса должна проходить проверка ДатыНач курса, если она меньше даты окончания прошлого курса в этом классе, то запрещать проведение(простым языком, дата начала нового курса в кабинете должна быть больше больше даты окончания предыдущего), как сделать проверку такую, либо возможно по другому организовать решение.
Заранее всем откликнувшимся, благодарен.
1 Sammo
 
29.09.16
05:13
Или делать проверку на этапе ввода данных (смотри тогда события ТЧ на форме) или делать массовую проверку при (точнее перед) записью. Там тоже ничего сложного - только я бы сортировал по классу/курсу.
2 ZloyRafa
 
29.09.16
05:17
Проверку сделать через текущие данные ?
3 impulse9
 
29.09.16
06:07
Обычно такие вещи делают при проведении документа, потому что может быть другой документ с пересекающимися данными
4 ZloyRafa
 
29.09.16
06:08
Такая вещи не сработает ?

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РасписаниеРасписание.Класс КАК Класс,
        |    РасписаниеРасписание.Курс КАК Курс,
        |    РасписаниеРасписание.ДатаНачала КАК ДатаНачала,
        |    РасписаниеРасписание.ДатаОкончания КАК ДатаОкончания
        |ИЗ
        |    Документ.Расписание.Расписание КАК РасписаниеРасписание
        |ГДЕ
        |    РасписаниеРасписание.Ссылка = &Ссылка
        |ИТОГИ ПО
        |    Класс";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаКласс = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаКласс.Следующий() Цикл
        // Вставить обработку выборки ВыборкаКласс
    
        Выборка = ВыборкаКласс.Выбрать();
    
        Пока Выборка.Следующий() Цикл
            Если Выборка.ДатаОкончания>=Выборка.Следующий().ДатаНачала Тогда
                Отказ=истина;
                Возврат;
                КонецЕсли;
            КонецЦикла;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецПроцедуры
5 ZloyRafa
 
29.09.16
06:08
Такие*
6 impulse9
 
29.09.16
06:13
ПередЗаписью
Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа.
7 impulse9
 
29.09.16
06:14
У тебя будут неактуальные данные в запросе
8 Мимохожий Однако
 
29.09.16
07:45
Подобные вещи для пользователя интереснее делать через табличное поле, в котором можно двигать диапазоны занятий по оси времени. А результат помещать в ТЧ. Кроме ТЧ в документе надо добавить регистры сведений, из которых и брать дополнительные данные. ИМХО, постановка задачи очень размытая.
9 ZloyRafa
 
29.09.16
07:59
(8) я может чего-то не понял. вот задание.
В начале месяца составляется расписание курсов на следующий месяц и вводится документ «Расписание», где указано, в каком классе, в какое время и какой курс будет проводиться. Далее документом «Заявка» от слушателей принимаются заявки на обучение.
При вводе расписания необходимо контролировать, что в одном классе, в одно и то же время не могут проводиться разные курсы. Следует считать, что курс длится произвольное количество дней, и занятия по нему длятся полный день, т.е. в один день в одном классе может проводиться не более одного курса, В зависимости от запланированного расписания занятия по курсу могут проводиться в различных классах.