Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 20:14

Вывести свободную дату

Автор Ermak1985, 01 фев 2016, 12:15

0 Пользователей и 1 гость просматривают эту тему.

Ermak1985

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

    Пока Результат.Следующий() Цикл             
        КоличествоЗаявок=Результат.Количество;     
    КонецЦикла;
   
    Если ЗначениеЗаполнено(КоличествоРЗ) Тогда

    Если КоличествоЗаявок=Неопределено или КоличествоЗаявок < КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
        Предупреждение("Дата и время свободно!");   
    Иначе
        Предупреждение("На этот день и время количество заявок закончились!"+Символы.ПС+"Выберите другую дату или время.");

    КонецЕсли;
    КонецЕсли;

Вот пример

Вот пример РегистрыСведений.ПланировщикРемонтныхЗаявок

Дата           Участок   ВремяЗаявки   ВидЗаявки   Количество
26.01.2016   Иванова   08:00-12:00   ИГБУ             2
26.01.2016   Петрова   08:00-12:00   ИГБУ             2
26.01.2016   Иванова   12:00-17:00   ИГБУ             3
26.01.2016   Петрова   12:00-17:00   ИГБУ             6
27.01.2016   Иванова   08:00-12:00   ИГБУ             2
27.01.2016   Петрова   08:00-12:00   ИГБУ             2
28.01.2016   Иванова   08:00-12:00   ИГБУ             2
28.01.2016   Петрова   08:00-12:00   ИГБУ             2
Начинаем добавляться заявки . Выбираем дату 26.01.2016, участок Иванова, при выборе время 08:00-12:00 начинаем искать дату, если выбранная дата свободна (отбор идет по дате, участку, видзаявки, времязаявки) тогда добавляем, если не свободна тогда должен предложить согласно таблице дату 27.01.2016, если и здесь даты уже заняты тогда 28.01.2016, если и эта дата занята и таблица дальше не заполнена тогда 29.01.2016

Rasty

сортируйте по времени заявки и уже там смотри время
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Ermak1985

В запросе отсортировал, как потом дальше найти нужную дату?

Rasty

По возрастанию или убыванию?
Добавлено: 01 фев 2016, 12:47


только не выбрать() а выгрузить() тогда уж
если убыванию то Результат[0].ВремяЗаявки, вы получите время последней заявки
если возрастанию Результат[Результат.Количество()-1]
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Ermak1985

Ругается
{Форма.Форма.Форма(47)}: Значение не является значением объектного типа (ВремяЗаявки)
      ПоследняяЗ=Результат[0].ВремяЗаявки;

                   |ГДЕ
                   | ИсторияЗаявкиЕдиноеОкно.Период МЕЖДУ &ДатаНач И &ДатаКон
                   | И ИсторияЗаявкиЕдиноеОкно.Участок = &Участок
                   | И ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки = &ВремяЗаявки
                   | И ИсторияЗаявкиЕдиноеОкно.ВидЗаявки = &ВидЗаявки
                   |
                   |СГРУППИРОВАТЬ ПО
                   | ИсторияЗаявкиЕдиноеОкно.Период,
                   | ИсторияЗаявкиЕдиноеОкно.Участок,
                   | ИсторияЗаявкиЕдиноеОкно.ВидЗаявки,
                   | ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки
                   |
                   |УПОРЯДОЧИТЬ ПО
                   | ВремяЗаявки УБЫВ";
   
    Запрос.УстановитьПараметр("Участок",Участок);
    Запрос.УстановитьПараметр("ВидЗаявки",ВидЗаявки);
    Запрос.УстановитьПараметр("ВремяЗаявки",ВремяЗаявки);
    Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаЗаявки));
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаЗаявки));
    Результат = Запрос.Выполнить().Выбрать();

    Пока Результат.Следующий() Цикл             
        КоличествоЗаявок=Результат.Количество;
ПоследняяЗ=Результат[0].ВремяЗаявки;
    КонецЦикла;
   
    Если ЗначениеЗаполнено(КоличествоРЗ) Тогда

    Если КоличествоЗаявок=Неопределено или КоличествоЗаявок < КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
        Предупреждение("Дата и время свободно!");   
    Иначе
        Предупреждение("На этот день и время количество заявок закончились!"+Символы.ПС+"Выберите другую дату или время.");

    КонецЕсли;
    КонецЕсли;
Сообщить(ДатаЗаявки);

Rasty

а зачем вы устанавливаете параметры время заявки?
писал же

Результат = Запрос.Выполнить().Выбрать();

    Пока Результат.Следующий() Цикл             
        КоличествоЗаявок=Результат.Количество;
        ПоследняяЗ=Результат[0].ВремяЗаявки;
    КонецЦикла;


Результат = Запрос.Выполнить().Выгрузить();
ВремяЗаявки = Результат[0].ВремяЗаявки

Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Ermak1985

Получил, только теперь как получить КоличествоЗаявок, я получал так
    Результат = Запрос.Выполнить().Выбрать();

    Пока Результат.Следующий() Цикл             
        КоличествоЗаявок=Результат.Количество;
    КонецЦикла;

а теперь через выгрузку делаем. И что дальше, мне не понятно что то

Rasty

Так зачем вы в параметрах к запросу устанавливаете время заявки, получается то, что из запроса вы получаете то время заявки, которое вы устанавливаете в параметре т.е. получается
ВремяЗаявки = Результат[0].ВремяЗаявки

"ВЫБРАТЬ
|    ИсторияЗаявкиЕдиноеОкно.Участок КАК Участок,
|    КОЛИЧЕСТВО(ИсторияЗаявкиЕдиноеОкно.Статус) КАК Количество,
|    ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки КАК ВремяЗаявки,
|    ИсторияЗаявкиЕдиноеОкно.ВидЗаявки КАК ВидЗаявки
|ИЗ
|    РегистрСведений.ИсторияЗаявкиЕдиноеОкно КАК ИсторияЗаявкиЕдиноеОкно
|ГДЕ
|    ИсторияЗаявкиЕдиноеОкно.Период МЕЖДУ &ДатаНач И &ДатаКон
|    И ИсторияЗаявкиЕдиноеОкно.Участок = &Участок
|СГРУППИРОВАТЬ ПО
|    ИсторияЗаявкиЕдиноеОкно.Период,
|    ИсторияЗаявкиЕдиноеОкно.Участок,
|    ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки,
|    ИсторияЗаявкиЕдиноеОкно.ВидЗаявки";
скорее всего ваш запрос должен так выглядеть
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Ermak1985

Я так и сделал, мне нужно получить свободную Дату на которую можно занести заявку

Фильтр = Новый Структура();     
    Фильтр.Вставить("Участок",Участок);
    Фильтр.Вставить("ВидЗаявки",ВидЗаявки);
    КоличествоРЗ=РегистрыСведений.ПланировщикРемонтныхЗаявок.ПолучитьПоследнее(КонецДня(ДатаЗаявки),Фильтр).Количество;
   
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   | ИсторияЗаявкиЕдиноеОкно.Период КАК Период,
                   | ИсторияЗаявкиЕдиноеОкно.Участок КАК Участок,
                   | КОЛИЧЕСТВО(ИсторияЗаявкиЕдиноеОкно.Статус) КАК Количество,
                   | ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки КАК ВремяЗаявки,
                   | ИсторияЗаявкиЕдиноеОкно.ВидЗаявки КАК ВидЗаявки
                   |ИЗ
                   | РегистрСведений.ИсторияЗаявкиЕдиноеОкно КАК ИсторияЗаявкиЕдиноеОкно
                   |ГДЕ
                   | ИсторияЗаявкиЕдиноеОкно.Период МЕЖДУ &ДатаНач И &ДатаКон
                   | И ИсторияЗаявкиЕдиноеОкно.Участок = &Участок
                   | И ИсторияЗаявкиЕдиноеОкно.ВидЗаявки = &ВидЗаявки
                   |
                   |СГРУППИРОВАТЬ ПО
                   | ИсторияЗаявкиЕдиноеОкно.Период,
                   | ИсторияЗаявкиЕдиноеОкно.Участок,
                   | ИсторияЗаявкиЕдиноеОкно.ВидЗаявки,
                   | ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки
                   |
                   |УПОРЯДОЧИТЬ ПО
                   | ВремяЗаявки УБЫВ";
   
    Запрос.УстановитьПараметр("Участок",Участок);
    Запрос.УстановитьПараметр("ВидЗаявки",ВидЗаявки);
    Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаЗаявки));
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаЗаявки));

Результат = Запрос.Выполнить().Выгрузить();
ВремяЗаявки = Результат[0].ВремяЗаявки;



Rasty

ваш код ведь
Цитата: Ermak1985 от 01 фев 2016, 13:44
Ругается
{Форма.Форма.Форма(47)}: Значение не является значением объектного типа (ВремяЗаявки)
      ПоследняяЗ=Результат[0].ВремяЗаявки;

                   |ГДЕ
                   | ИсторияЗаявкиЕдиноеОкно.Период МЕЖДУ &ДатаНач И &ДатаКон
                   | И ИсторияЗаявкиЕдиноеОкно.Участок = &Участок
                   | И ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки = &ВремяЗаявки
                   | И ИсторияЗаявкиЕдиноеОкно.ВидЗаявки = &ВидЗаявки
                   |
                   |СГРУППИРОВАТЬ ПО
                   | ИсторияЗаявкиЕдиноеОкно.Период,
                   | ИсторияЗаявкиЕдиноеОкно.Участок,
                   | ИсторияЗаявкиЕдиноеОкно.ВидЗаявки,
                   | ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки
                   |
                   |УПОРЯДОЧИТЬ ПО
                   | ВремяЗаявки УБЫВ";
   
    Запрос.УстановитьПараметр("Участок",Участок);
    Запрос.УстановитьПараметр("ВидЗаявки",ВидЗаявки);
    Запрос.УстановитьПараметр("ВремяЗаявки",ВремяЗаявки);
    Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаЗаявки));
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаЗаявки));
    Результат = Запрос.Выполнить().Выбрать();

    Пока Результат.Следующий() Цикл             
        КоличествоЗаявок=Результат.Количество;
ПоследняяЗ=Результат[0].ВремяЗаявки;
    КонецЦикла;
   
    Если ЗначениеЗаполнено(КоличествоРЗ) Тогда

    Если КоличествоЗаявок=Неопределено или КоличествоЗаявок < КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
        Предупреждение("Дата и время свободно!");   
    Иначе
        Предупреждение("На этот день и время количество заявок закончились!"+Символы.ПС+"Выберите другую дату или время.");

    КонецЕсли;
    КонецЕсли;
Сообщить(ДатаЗаявки);

Добавлено: 01 фев 2016, 15:55


ладно не будем зацикливаться, вы получили последнее время заявки?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск