8.х Цикл в 1С 8.1

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

  1. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Как в теле цикла обратиться к предыдущему элементу выборки?
    Код:
    Пока ВыборкаДетали.Следующий() Цикл
    КонецЦикла;
  2. d_control
    Offline

    d_control Опытный в 1С

    Регистрация:
    21 дек 2011
    Сообщения:
    511
    Симпатии:
    0
    Баллы:
    26
    выборка гуляет только вперед.
    если нужно только к предыдущему - можно хранить значение предыдущего элемента в переменной.
  3. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Алгоритм, который требует обращения к пред элементу - весьма странен.
    Что делать, например, в момент первой итерации?
  4. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    В первой итерации значение переменной = 0, как изменить значение этой переменной на витке цикла?
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Задачу полностью распишите. Нефига не понятно что вы пытаетесь сделать и нужно ли оно.
  6. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Через ЗАПРОС обращаюсь к элементам справочника, циклом выводится результат, нужно добавить в макет новую колонку (переменную), которая рассчитывается по элементам выборки и зависет от предыдущего значения выборки, как-то так...
  7. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Почему нельзя данные сразу получить в запросе?
  8. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    На первом витке цикла получаю значение элемента запроса = 100, по формуле изменяю значение выводимой переменной, получаем результат = 230, на следущем витке получаю значение элемента запроса = 150, теперь мне в первоначальную формулу нужно прибавить полученный результат 230
  9. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не понятно.
    Конфигурация типовая?
    Текст запроса показывайте, и задачу опишите откуда, как и что в итоге получить надо.
  10. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Конфигурация самописная.

    Код:
    Запрос = Новый Запрос;
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПланыНаГод.Владелец,
    | ПланыНаГод.Выполнение,
    | ПланыНаГод.Год КАК Год,
    | ПланыНаГод.Месяц КАК Месяц,
    | ПланыНаГод.ФинансированиеФакт
    |ИЗ
    | Справочник.ПланыНаГод КАК ПланыНаГод
    |ГДЕ
    | ПланыНаГод.Владелец В(&Владелец)
    | И ПланыНаГод.Выполнение > 0
    | И ПланыНаГод.План = ЛОЖЬ
    |
    |УПОРЯДОЧИТЬ ПО
    | Год УБЫВ,
    | Месяц";
    
    Запрос.УстановитьПараметр("Владелец", Владелец);
    Результат = Запрос.Выполнить();
    
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетали = Результат.Выбрать();
    Колво = ВыборкаДетали.Количество();
    Пока ВыборкаДетали.Следующий() Цикл
    ГенУслуги = ВыборкаДетали.Владелец.ГенУслуги;
    Остаток = ВыборкаДетали.Выполнение - ВыборкаДетали.ФинансированиеФакт + ВыборкаДетали.Выполнение * ГенУслуги / 100;
    ОбластьДетальныхЗаписей.Параметры.Остаток = Остаток;
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;
    Остаток = ОбщаяСтоимость - ВыполнениеСумма;
    ОбластьПодвал.Параметры.Остаток = Остаток;
    ТабДок.Вывести(ОбластьПодвал);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    
  11. shurikvz
    Offline

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

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


    Почему нельзя все посчитать в запросе?
    Добавить в выборку:
    Код:
    "| ПланыНаГод.Выполнение - ПланыНаГод.ФинансированиеФакт + ПланыНаГод.Выполнение * ПланыНаГод.Владелец.ГенУслуги / 100 КАК Остаток"
    ну и
    Код:
    "ИТОГ .. ПО .."
    не знаю по чему они вам там нужны?
  12. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Код:
    "ВЫБРАТЬ
    |ПланыНаГод.Владелец,
    |ПланыНаГод.Выполнение,
    |ПланыНаГод.Год КАК Год,
    |ПланыНаГод.Месяц КАК Месяц,
    |ПланыНаГод.ФинансированиеФакт
    |ИЗ
    |Справочник.ПланыНаГод КАК ПланыНаГод
    |ГДЕ
    |ПланыНаГод.Владелец В(&Владелец)
    |И ПланыНаГод.Выполнение>0
    |И ПланыНаГод.План = ЛОЖЬ
    |УПОРЯДОЧИТЬ ПО
    |Год УБЫВ,
    |Месяц
    |ПланыНаГод.Выполнение - ПланыНаГод.ФинансированиеФакт + ПланыНаГод.Выполнение * ПланыНаГод.Владелец.ГенУслуги / 100 КАК Остаток
    |";
    Как записать код без итогов? Как обратиться к этой переменной?
  13. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ?
    вы запрос сами писали?

    Код:
    "ВЫБРАТЬ
    |ПланыНаГод.Владелец,
    |ПланыНаГод.Выполнение,
    |ПланыНаГод.Год КАК Год,
    |ПланыНаГод.Месяц КАК Месяц,
    |ПланыНаГод.ФинансированиеФакт,
    |ПланыНаГод.Выполнение - ПланыНаГод.ФинансированиеФакт + ПланыНаГод.Выполнение * ПланыНаГод.Владелец.ГенУслуги / 100 КАК Остаток
    |ИЗ
    |Справочник.ПланыНаГод КАК ПланыНаГод
    |ГДЕ
    |ПланыНаГод.Владелец В(&Владелец)
    |И ПланыНаГод.Выполнение>0
    |И ПланыНаГод.План = ЛОЖЬ
    |УПОРЯДОЧИТЬ ПО
    |Год УБЫВ,
    |Месяц
    |";
  14. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Ок, спасибо... запрос формировал через конструктор запроса
  15. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    к какой переменно? Остаток? дак так и обращайтесь как к остальным
  16. TopicStarter Overlay
    rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Вот решение моей напутанной задачки

    Код:
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |ПланыНаГод.Владелец,
    |ПланыНаГод.Выполнение,
    |ПланыНаГод.Год КАК Год,
    |ПланыНаГод.Месяц КАК Месяц,
    |ПланыНаГод.ФинансированиеФакт
    |ИЗ
    |Справочник.ПланыНаГод КАК ПланыНаГод
    |ГДЕ
    |ПланыНаГод.Владелец В(&Владелец)
    |И ПланыНаГод.Выполнение > 0
    |И ПланыНаГод.План = ЛОЖЬ
    |УПОРЯДОЧИТЬ ПО
    |Год УБЫВ,
    |Месяц
    |";
    Запрос.УстановитьПараметр("Владелец", Владелец); Результат = Запрос.Выполнить();
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    ВыборкаДетали = Результат.Выбрать();
    ВыполнениеСумма = 0;
    ФинансированиеСумма = 0;
    ОстатокТек = 0;
    Пока ВыборкаДетали.Следующий() Цикл
    Процент = ВыборкаДетали.Владелец.ГенУслуги;
    ВыполнениеСумма = ВыполнениеСумма + ВыборкаДетали.Выполнение;<br>ФинансированиеСумма = ФинансированиеСумма + ВыборкаДетали.ФинансированиеФакт;
    ОстатокТек = ВыполнениеСумма + ВыполнениеСумма * Процент / 100 - ФинансированиеСумма;
    ОбластьДетальныхЗаписей.Параметры.ОстатокТек = ОстатокТек;<br>ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;
    Остаток = ОбщаяСтоимость - ВыполнениеСумма;
    ОбластьПодвал.Параметры.Остаток = Остаток;
    ТабДок.Вывести(ОбластьПодвал);
    ТабДок.ЗакончитьАвтогруппировкуСтрок();

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