8.х Условие

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Peroman, 20 ноя 2014.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Доброго всем времени суток.

    Есть РеистрСведений, переодический, период в пределах секунды,с двумя измерениями.
    Что-то никак не могу сообразить как задать условие.
    Если в ближайшее 20 минут, есть запись, по 1 измерению, то в регистр нельзя записать.
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    В чем проблема сделать запрос на выборку данных за период с условием

    Где
    Период Между &Начпериода И &КонПериода


    Запрос.УстановитьПараметр("&Начпериода",ТекущаяДата());
    Запрос.УстановитьПараметр("&Конпериода",ТекущаяДата()+20*60);//добавляем к текущей датае 20 минут

    Ну или наобороот отнимайте
    --- Объединение сообщений, 20 ноя 2014 ---
    Потом
    Выборка=Запрос.Выбрать();
    Если Выборка.следущий() Тогда
    Сообщить("Записи есть. Добавлять нельзя");
    Конецесли;
    --- Объединение сообщений, 20 ноя 2014 ---
    т.к у Вас периодичность секунда занчит пишет с точностью до секунды.

    В условии в запросе и когда праметры устанавливаем мы не приводи ни к началу дня и т.п. так что проверяем то же сточностью до секунды
    Peroman нравится это.
  3. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Отлично, то что надо. Правда я заменил НачалоПериода = ТекущаяДата()-20*60, так как нужно проверить уже прошедшие 20 минут ,а не будующие.
    Но у меня проблема. Создал простой запрос ,через конструктор.

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

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну в отладчике когда смотрите Даты. НачалоПериода и КонецПериода что там передается
  5. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Код:
       
     НачалоПериода = ТекущаяДата()-20*60;
     КонецПериода = ТекущаяДата();
    
    Соответственно в отладчике я вижу , эти даты, в параметры запроса , ставятся тоже эти даты.
    Вся беда в том, что если я даже уберу отбор по условию "Между" (вообще уберу все параметры) один фиг в запросе, в отладчике результат запроса:

    upload_2014-11-28_14-7-24.png
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну и правильно - это же выборкаИзРезультатаЗапроса. Это не строка в выборке... сначала надо Выборка.Следующий() спозиционироваться на записи, а потом смотреть поля
    Peroman нравится это.
  7. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Доброго всем времени суток.

    продолжаю ковыряться.
    Есть:
    Код:
        Режим = РежимДиалогаВопрос.ДаНет;
        ТекстВопроса = "Выполнить идентификацию?";
        Ответ = Вопрос(ТекстВопроса, Режим,10);
        Пока Ответ <> КодВозвратаДиалога.Нет Цикл
            Идентификация = _Anviz.ВызватьИдентификацию();
            Если Идентификация.Сотрудник = Ложь  Тогда
                Предупреждение("Идентификация была отменена пользователем ",20,"Отмена идентификации");
                Возврат;
            ИначеЕсли Идентификация.Сотрудник = Неопределено Тогда
                Предупреждение("Идентификация не удалась, необходимо повторить процедуру!", 180, "Ошибка идентификации");
                Продолжить;
            Иначе
                Сообщить("Сотрудник: " + Идентификация.Сотрудник);
                ВремяИдентификацииAnviz = РегистрыСведений.ВремяИдентификацииAnviz;
                Запись = ВремяИдентификацииAnviz.СоздатьМенеджерЗаписи();
                Запись.Период = ТекущаяДата();
                Запись.Сотрудник = Идентификация.Сотрудник;
                Запись.Магазин = ПараметрыСеанса.ТекущийМагазин;
                Запись.Записать();
            КонецЕсли;
            Режим = РежимДиалогаВопрос.ДаНет;
            ТекстВопроса = "продолжить идентификацию?";
            Ответ = Вопрос(ТекстВопроса, Режим,180);
            Если Ответ = КодВозвратаДиалога.Да Тогда
                Продолжить;
            Иначе
                Возврат;
            КонецЕсли;
    
    Нужно в условие "Если Идентификация.Сотрудник" = при срабатывании услвоия "Иначе" задать условие того что если в пределах 20 минут есть запись, то создать новую запись в регистре нельзя.
    Если сделать запрос типа:
    Код:
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ВремяИдентификацииAnviz.Сотрудник,
        |    ВремяИдентификацииAnviz.Магазин,
        |    ВремяИдентификацииAnviz.Период
        |ИЗ
        |    РегистрСведений.ВремяИдентификацииAnviz КАК ВремяИдентификацииAnviz
        |ГДЕ
        |    ВремяИдентификацииAnviz.Период МЕЖДУ &НачалоПериода И &КонецПериода";
        Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
        Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
        РезультатЗапроса = Запрос.Выполнить();
    
    еще до первого цикла, то получается фигня. Так как запрос отработает один раз, в самом начале, что меня не устраивает т.к. если сотрудника, не было, но во время обработчика он записался и попробует записаться еще раз, то он это спокойно сделает, т.к. его нет в результате запроса.
    Вставлять запрос в цикл, не самое лучшее решение, хотя я может быть и так сделал бы, если бы понимал, как отработать тот случай, когда в запрос ничего не попало и не сработал метод Выборка.Следующий()
Похожие темы
  1. Dmitrij
    Ответов:
    3
    Просмотров:
    690
  2. andryscha92
    Ответов:
    7
    Просмотров:
    1.506
Загрузка...

Поделиться этой страницей