8.х Оптимизировать выполнение цикла

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

  1. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Есть цикл обхода регистра накопления. Как оптимизировать данный цикл, таким образом, чтобы он каждое наименование обходил лиш один раз?

    Код:
    Для Каждого ТекСтрокаРасход Из Расход Цикл
    ДанныеТекСтроки=ТекСтрокаРасход.Наименование;
    
    
    Пока ВыборкаРезЗап.Следующий() Цикл
    Если ДанныеТекСтроки.Наименование= ВыборкаРезЗап.НаименованиеТ тогда
    
    Сообщить(ВыборкаРезЗап.НаименованиеТ+" "+ВыборкаРезЗап.ОстатокТовараНаСкладе);
    
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    
    
    впринципе я знаю что можно установить флажок, и обнулять его, если условие Если ... тогда возвращает ложь, но будет ли это правильным по правилам 1с, или есть попроще(или поправильнее) варианты?
  2. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    А если выгрузить в таблицу значений и свернуть по наименованию?
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Что такое Расход?
    Почему нужные данные нельзя в самом запросе выбрать?

    Какая вообще стоит задача?
  4. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Расход, это табличная часть, в ней хранятся данные на списание.Задача стоит проверка остатка на складе при проведении расходной накладной, просто тот цикл что я указал, показывает остатки столько раз, сколько записей в регистре накоплений,а это в итоге может дать большую нагрузку,

    has, поподробней можно?
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Catsys, думаю у вас неверно составлен запрос.
  6. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Можно ведь все одним запросом сделать. Расход левым соединением с остатками регистра.
    Вот тут посмотрите
  7. BVB_berserk
    Offline

    BVB_berserk Опытный в 1С

    Регистрация:
    30 янв 2009
    Сообщения:
    162
    Симпатии:
    0
    Баллы:
    26
    проверять остатки товаров в цикле :angry:
    Это делается одним запросом.
  8. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Сделал конструктором запроса, по книге из комплекта, вот что получилось

    Код:
    ВЫБРАТЬ
    |	РасходнаяНакладнаяРасход.Ссылка,
    |	РасходнаяНакладнаяРасход.НомерСтроки,
    |	РасходнаяНакладнаяРасход.Наименование,
    |	РасходнаяНакладнаяРасход.Количество,
    |	РасходнаяНакладнаяРасход.Стоимость,
    |	РасходнаяНакладнаяРасход.Себестоимость,
    |	ОстаткиТоваровОстатки.Наименование КАК Наименование1,
    |	ОстаткиТоваровОстатки.КоличествоОстаток
    |ИЗ
    |	Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
    |		ПО РасходнаяНакладнаяРасход.Наименование.Наименование = ОстаткиТоваровОстатки.Наименование.Наименование
    |ГДЕ
    |	РасходнаяНакладнаяРасход.Ссылка = &Ссылка
    |
    |ДЛЯ ИЗМЕНЕНИЯ
    |	РегистрНакопления.ОстаткиТоваров.Остатки
    
    
    Все вроде работает, но понимание так и не пришло, по той ссылке которую давали выше была фраза

    поясните идиоту, плиз, что за что отвечает, очень хочу понять
  9. afinogen
    Offline

    afinogen Опытный в 1С

    Регистрация:
    28 фев 2011
    Сообщения:
    160
    Симпатии:
    0
    Баллы:
    26
    а менеджером временных таблиц не пробовали?
  10. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    неа, а как? можно пример кода

    зы
    все работает, но просто ради интереса
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    В регистре накопления вы не используете параметры виртуальной таблицы это ведет к снижению быстродействия.
    Вы связываете таблицы по наименованию, это неправильно. Связывать надо по ссылке.

    Кроме того, немного отступая - если документ проводится неоперативно (т.е. задним числом) - контролировать остаток вообще смысла нет (в общем случае).


    Это означает свернуть в одну строки с одинаковыми позициями номенклатуры (ну естественно и единицей измерения и ценой). В запросе для этого используется ключевое слово "СГРУППИРОВАТЬ ПО"
  12. afinogen
    Offline

    afinogen Опытный в 1С

    Регистрация:
    28 фев 2011
    Сообщения:
    160
    Симпатии:
    0
    Баллы:
    26
    менеджер временных таблиц формирует одну глобальную таблицу, потом из нее можно выбирать что угодно, в вашем случае запрос приемерно так будет выглядеть:
    Код:
    
    ВЫБРАТЬ
    |    РасходнаяНакладнаяРасход.Ссылка КАК Ссылка,
    |    РасходнаяНакладнаяРасход.НомерСтроки КАК Номер,
    |    РасходнаяНакладнаяРасход.Наименование,
    |    РасходнаяНакладнаяРасход.Количество,
    |    РасходнаяНакладнаяРасход.Стоимость,
    |    РасходнаяНакладнаяРасход.Себестоимость,
    |    ОстаткиТоваровОстатки.Наименование КАК Наименование1,
    |    ОстаткиТоваровОстатки.КоличествоОстаток
    |  ПОМЕСТИТЬ Основная //ваша временная таблица
    |ИЗ
    |    Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
    |        ПО РасходнаяНакладнаяРасход.Наименование.Наименование = ОстаткиТоваровОстатки.Наименование.Наименование
    
    
    Запрос.Выполнить();
    
    //тут сформируется временная таблица которая будет содержать все данные 
    //и затем просто выбирайте уже из нее, передавая нужные условия,  
    //например данные по какой-нибудь конкретной ссылке
    
    Запрос.Текст="ВЫБРАТЬ * ИЗ Основная ГДЕ Ссылка = &ВашаСсылка";
    Запрос.УстановитьПараметр("ВашаСсылка", КакаяНибудьСсылка);
    Результат = Запрос.Выполнить().Выгрузить();
    
    
    
  13. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    Виртуальная таблица это которая менеджер временных таблиц, или регистр? чтото я путатся начинаю :angry:

    Во ближе к родному, как я понимаю там уже можно будет использовать стандартный sql язык запросов?
  14. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    так правильнее,но насчет виртуальной таблицы так ине понял, как ее параметры использовать?
    Код:
    ВЫБРАТЬ
    |	ОстаткиТоваровОстатки.Наименование КАК Наименование,
    |	ОстаткиТоваровОстатки.КоличествоОстаток,
    |	РасходнаяНакладнаяРасход.Ссылка,
    |	РасходнаяНакладнаяРасход.Наименование КАК Наименование1,
    |	РасходнаяНакладнаяРасход.Количество КАК КоличествоПоНакладной
    |ИЗ
    |	Документ.РасходнаяНакладная.Расход КАК РасходнаяНакладнаяРасход
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
    |		ПО РасходнаяНакладнаяРасход.Наименование.Ссылка = ОстаткиТоваровОстатки.Наименование.Ссылка
    |ГДЕ
    |	РасходнаяНакладнаяРасход.Ссылка = &Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |	Наименование
    
    
    
  15. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    В конструкторе запроса вкладка Таблицы и Поля, поле Таблицы выберите регистр. Сверху кнопки, нажимаете на правую, там указываете нужные условия. Это и есть параметры виртуальной таблицы. Потом смотрите как изменится текст запроса)))) А вобще литературы в инете достаточно про виртуальные таблицы.
  16. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    аа,это я знал, просто незнал что они параметрами виртуальных таблиц называются, но помоему в данном случае они не нужны, параметры там проставлять никакие вродь ненадо
  17. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Я же ссылку давал выше, там они используются. Подходящий пример там.
  18. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Рекомендую посетить курсы по работе с запросами, иначе у нас в данной ветке будет новая многотомная книга, могу Вас успокоить, что большая часть программистов использует запросы без особого их понимания, просто руку набили, а на курсах Вам тщательно пояснят, есть курсы от 1С, есть курсы Гилева, и там, и там, объясняют достаточно доходчиво.
  19. TopicStarter Overlay
    Catsys
    Offline

    Catsys

    Регистрация:
    6 мар 2011
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    нет в моем городе курсов нормальных

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