8.х Запрос в цикле

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

  1. TopicStarter Overlay
    Amplifier
    Offline

    Amplifier Опытный в 1С

    Регистрация:
    5 май 2010
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    В цикле обрабатывается таблица значений . В строке таблицы значений нужно сравнить две даты по
    дням. Поместил в цикл следующий код:
    Код:
    ...
    Запрос=Новый Запрос(
    Выбрать РазностьДат(&Дата1,&Дата2,День) КАК Количество Дней);
    Запрос.УстановитьПараметр("Дата1",СтрТз.Дата1);
    Запрос.УстановитьПараметр("Дата2",СтрТз.Дата2);
    Результат=Запрос.Выполнить().Выбрать();
    Результат.Следущий;
    СтрТз.КоличествоДней=Результат.КоличествоДней;
    ...
    
    
    Насколько это корректно? Я знаю, что очень не рекомендуется размещать запросы в цикле. Однако здесь ситуация такая что обращений к базе данных не происходит и в результате запроса всего одна строка.
  2. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    А вы не пробывали так:
    Код:
     Пока Результат.Следующий() Цикл
    
    ?
  3. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А просто так посчитать разность дат вообще не вариант? Не ваша тема?
    Код:
    СтрТз.КоличествоДней = (СтрТз.Дата1 - СтрТз.Дата2)/(60*60*24)
    
    
  4. TopicStarter Overlay
    Amplifier
    Offline

    Amplifier Опытный в 1С

    Регистрация:
    5 май 2010
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    alexburn, а разница? Если у выборки результата запроса всего одна строка то можно использовать Выборка.Следующий() без цикла.
    В данном случае Выборка.Следующий и перебор результата запроса в цикле дадут один тот же результат.

    x_under, можно и таким образом.

    Мне интересно стало моя задумка будет работать вот создал тему.
  5. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    В принципе все-равно какой рукой держать ложку, главное чтоб удобно было. Если уверены что в результате запроса одна строка, то можно и запрос в цикл вгонять, но с точки зрения программирования-это как-то не этично:)
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.579
    Симпатии:
    717
    Баллы:
    204
    Очень даже этично - заодно проверяется и на пустой результат.
  7. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Это не этично не столько с точки зрения программирвания, сколько с точки зрения СКОРОСТИ.
    Запрос в цикле, пусть даже и простой будет выполняться ДОЛЬШЕ!
    Запрос 1С должен провериться, преобразоваться, снова провериться, интерпретироваться, передаться на управление серверу, там выполниться, вернуть получившиеся данные сеансу пользователя, сеанс пользователя по этим данным должен еще и пробежаться... много СЛИШКОМ много лишних, нафиг не нужных движений для данного случая.

    P.S.
    Если я увижу такую строчку кода в тестовом задании кандидата - кандидат в программисты сразу получит "В пролете! Следующий!" .

    P.P.S
    А с точки зрения программирования - этож ПИЛИН 7!!! строчек кода (нифига не интуитивно понятного) вместо ОДНОЙ! (простой и лаконичной, и понятной даже идиоту вроде меня ;) )
  8. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Это не только не этично, но и повлияет на работу в клиент-серверном вариантен работы, т.к. все запросы выполняются на сервере, ваш запрос будет отправлен на сервер, на сервере выполнен, возвращен клиенту, т.е. безобразное использование ресурсов сервера, когда на выполнение данной операции хватит ресурсов самого клиента. Пишите тогда так...
    Код:
    #Если Клиент Тогда
    //Ваш этичный запрос в цикле
    #КонецЕсли
    
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.579
    Симпатии:
    717
    Баллы:
    204
    за запросы в цикле - леской за гениталии подвешивать, однозначно :)

    а вот обход результата запроса циклом - это очень этично, если кто не правильно понял....

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