Перейти к содержимому


- - - - -

Цикл в 1с 8.1


Сообщений в теме: 15

#1 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 10:47

Как в теле цикла обратиться к предыдущему элементу выборки?
Пока ВыборкаДетали.Следующий() Цикл
КонецЦикла;

SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#2 d_control

    Активист


  • 452 сообщений

Отправлено 24 января 2012 - 10:52

выборка гуляет только вперед.
если нужно только к предыдущему - можно хранить значение предыдущего элемента в переменной.

#3 BabySG

    Любитель программирования


  • 12 207 сообщений

Отправлено 24 января 2012 - 11:06

Алгоритм, который требует обращения к пред элементу - весьма странен.
Что делать, например, в момент первой итерации?
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#4 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 12:03

В первой итерации значение переменной = 0, как изменить значение этой переменной на витке цикла?
SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#5 shurikvz

    Ветеран


  • 5 224 сообщений

Отправлено 24 января 2012 - 12:07

Задачу полностью распишите. Нефига не понятно что вы пытаетесь сделать и нужно ли оно.
Now, this bell tolling softly for another, says to me: Thou must die...

#6 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 12:12

Через ЗАПРОС обращаюсь к элементам справочника, циклом выводится результат, нужно добавить в макет новую колонку (переменную), которая рассчитывается по элементам выборки и зависет от предыдущего значения выборки, как-то так...
SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#7 shurikvz

    Ветеран


  • 5 224 сообщений

Отправлено 24 января 2012 - 12:21

Просмотр сообщенияrshakiro (24 января 2012 - 12:12) писал:

Через ЗАПРОС обращаюсь к элементам справочника, циклом выводится результат, нужно добавить в макет новую колонку (переменную), которая рассчитывается по элементам выборки и зависет от предыдущего значения выборки, как-то так...
Почему нельзя данные сразу получить в запросе?
Now, this bell tolling softly for another, says to me: Thou must die...

#8 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 12:24

На первом витке цикла получаю значение элемента запроса = 100, по формуле изменяю значение выводимой переменной, получаем результат = 230, на следущем витке получаю значение элемента запроса = 150, теперь мне в первоначальную формулу нужно прибавить полученный результат 230
SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#9 shurikvz

    Ветеран


  • 5 224 сообщений

Отправлено 24 января 2012 - 12:29

Просмотр сообщенияrshakiro (24 января 2012 - 12:24) писал:

На первом витке цикла получаю значение элемента запроса = 100, по формуле изменяю значение выводимой переменной, получаем результат = 230, на следущем витке получаю значение элемента запроса = 150, теперь мне в первоначальную формулу нужно прибавить полученный результат 230
Не понятно.
Конфигурация типовая?
Текст запроса показывайте, и задачу опишите откуда, как и что в итоге получить надо.
Now, this bell tolling softly for another, says to me: Thou must die...

#10 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 12:33

Конфигурация самописная.


Запрос = Новый Запрос;

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

Запрос.УстановитьПараметр("Владелец", Владелец);
Результат = Запрос.Выполнить();

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаДетали = Результат.Выбрать();
Колво = ВыборкаДетали.Количество();
Пока ВыборкаДетали.Следующий() Цикл
ГенУслуги = ВыборкаДетали.Владелец.ГенУслуги;
Остаток = ВыборкаДетали.Выполнение - ВыборкаДетали.ФинансированиеФакт + ВыборкаДетали.Выполнение * ГенУслуги / 100;
ОбластьДетальныхЗаписей.Параметры.Остаток = Остаток;
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;
Остаток = ОбщаяСтоимость - ВыполнениеСумма;
ОбластьПодвал.Параметры.Остаток = Остаток;
ТабДок.Вывести(ОбластьПодвал);
ТабДок.ЗакончитьАвтогруппировкуСтрок();


Сообщение отредактировал shurikvz: 24 января 2012 - 12:46

SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#11 shurikvz

    Ветеран


  • 5 224 сообщений

Отправлено 24 января 2012 - 13:01

Код вижу, описание нет.


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

не знаю по чему они вам там нужны?
Now, this bell tolling softly for another, says to me: Thou must die...

#12 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 14:29

"ВЫБРАТЬ
|ПланыНаГод.Владелец,
|ПланыНаГод.Выполнение,
|ПланыНаГод.Год КАК Год,
|ПланыНаГод.Месяц КАК Месяц,
|ПланыНаГод.ФинансированиеФакт
|ИЗ
|Справочник.ПланыНаГод КАК ПланыНаГод
|ГДЕ
|ПланыНаГод.Владелец В(&Владелец)
|И ПланыНаГод.Выполнение>0
|И ПланыНаГод.План = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
|Год УБЫВ,
|Месяц
|ПланыНаГод.Выполнение - ПланыНаГод.ФинансированиеФакт + ПланыНаГод.Выполнение * ПланыНаГод.Владелец.ГенУслуги / 100 КАК Остаток
|";
Как записать код без итогов? Как обратиться к этой переменной?
SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#13 shurikvz

    Ветеран


  • 5 224 сообщений

Отправлено 24 января 2012 - 14:31

Просмотр сообщенияrshakiro (24 января 2012 - 14:29) писал:

Как записать код без итогов? Как обратиться к этой переменной?
?
вы запрос сами писали?

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

Now, this bell tolling softly for another, says to me: Thou must die...

#14 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 14:36

Ок, спасибо... запрос формировал через конструктор запроса
SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!

#15 Tiger86

    Ветеран


  • 1 074 сообщений

Отправлено 24 января 2012 - 15:10

Просмотр сообщенияrshakiro (24 января 2012 - 14:29) писал:

Как обратиться к этой переменной?

к какой переменно? Остаток? дак так и обращайтесь как к остальным
хотите сказать спасибо? жмите Изображение

#16 rshakiro

    Активист


  • 435 сообщений

Отправлено 24 января 2012 - 15:58

Вот решение моей напутанной задачки

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

SUCCESS DOESN'T COME TO YOU …YOU GO TO IT!





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных