Обработка, платформа 8.1

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Вобщем дело такое... нужно заполнить табличную часть формы...
Не могу сообразить что будет являться параметром итерации в цикле:

Для Каждого <параметр1> ИЗ <параметр2> Цикл

Параметр 2 - как я понимаю - документ, т.е. вида примерно Документ.Обращение, а вот с первым - проблема :)
 

Zab

Well-known member
07.08.2006
583
0
#2
Первый - переменная, в которую система положит элемент колекции, которую циклом обходишь (например, строку из таблицы значений, или элемент массива). А параметр 2 совсем не обязательно документ. И вида "примерноДокумент" я тоже не знаю в системе. Например, это может быть массив, таблица значений, табличное поле и пр. и пр.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#3
на твоем примере:
Для Каждого СтрокаТабличнойЧасти ИЗ ТабличнаяЧасть Цикл
 
G

Guest

#4
хм... а вот до того что второй параметр - ТабличнаяЧасть я и не додумалась :) нужно попробовать... тогда теоретически нужно сделать отбор дабы не зациклилось
 
M

mialord

#5
Так. Описываю. Читай внимательно
Из справки 1С
<Оператор цикла Для каждого предназначен для циклического обхода коллекций значений. При каждой итерации цикла возвращается новый элемент коллекции. Обход осуществляется до тех пор, пока не будут перебраны все элементы коллекции.>
Табличная часть содержит коллекцию строк и, при использовании оператора "Для каждого" перебираются все коллекции табличной части (т.е. все строки от начала до конца без повторений и без пропусков). Другое дело что порядок может быть нарушен, но что перебирет их все и без повтора, и без пропусков - это однозначно, и ничего ни где не зациклится.
Вообще, вторым параметром может быть любой объект, имеющий свою коллекцию значений. О наличии коллекции значений у объекта информацию всегда можно найти в синтаксис - помошнике. Посмотрите в СП <ТаблицаЗначений> к примеру.
И я не совсем понял о каком отборе идет речь?
 
G

Guest

#6
Справку 1с я уже читала, для меня лично не очень понятно там написанное :(
С трудом представляю зачем мне обходить значения пустой табличной части :) Для начала хотелось бы ее заполнить
Грубо говоря - имеется конкретный вид документов и эти документы нужно выбрать на определенную дату, которая вычисляется по заданному условию в зависимости от текущей. далее на основе части реквизитов этих документов нужно заполнить табличную часть формы обработки.
Синтаксис-помошник для меня с трудом воспринимаем, а в учебниках приводятся только куски кода, выполняющего те или иные действия без описания что откуда берется :(
 
M

mialord

#7
Так, задание я понял пока что только приблезительно. Толи с русским языком слабовато, ну, или вы не представляете пока то, что хотите сделать. Я склоняюсь ко второму варианту.
Давайте, я потрачу свое время, и мы разберемся с постановкой задачи:
Грубо говоря - имеется конкретный вид документов и эти документы нужно выбрать на определенную дату
Грубо говорить не надо :)
Вид, или тип вы определитесь. Я, например, предполагаю, что тип. Примеры(ЗаказПокупателя, ВозвратТоваровОтПокупателя и т.д.)
дату, которая вычисляется по заданному условию в зависимости от текущей
Текущей, чего? Дата текущая, или текущего документа. Предположим, для дальнейшего разговора, что вы имели ввиду именно текущую дату.
Предположим, что я вас понял, хоть и не уверен в этом, и предположим, что нам необходимо отобрать заказы покупателей(счета) и реквизиты счетов (Ссылка, Контрагент, Сумма) записать в табличную часть, которую назовем ТЧМояОбработка

ЗапросВыбратьСчета = новый Запрос;
ЗапросВыбратьСчета.Текст = " ВЫБРАТЬ
| Счет.Ссылка КАК Счет
| Счет.Контрагент КАК Покупатель
| Счет.Сумма КАК СуммаКВыплате
|
| ИЗ Документ.ЗаказПокупателя КАК Счет
|
| ГДЕ ЗаказПокупателя.ПометкаУдаления = ЛОЖЬ
| И ЗаказПокупателя.Проведен = ИСТИНА
| И ЗаказПокупателя.Дата = Дата
|
| УПОРЯДОЧИТЬ ПО
| ЗаказПокупателя.Дата";

ЗапросВыбратьСчета.УстановитьПараметр("Дата", <Выражение расчета даты вставить сюда, либо вызвать обработчик расчета>);
РезультатЗапроса = ЗапросВыбратьСчета.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
// Если есть найденный счет добавляем элемент ТЧ
СтрокаТЧ = ТЧМояОбработка.Добавить();
СтрокаТЧ.Счет = РезультатЗапроса.Счет; // Колонка ТЧ "Счет" имеет тип Ссылка(Документы.ЗаказПокупателя)
СтрокаТЧ.Контрагент = РезультатЗапроса.Покупатель; // Колонка ТЧ "Контрагент" имеет тип Ссылка(Справочники.Контрагент)
СтрокаТЧ.Сумма = РезультатЗапроса.СуммаКВыплате; // Число
КонецЦикла;
 
G

Guest

#8
Извиняюсь, с формулировками и вправду туго.
Ситуация такова - имеется такой документ как обращение - в отдел поступает заявка. Вводя эту заявку было бы удобнее сразу видеть какой из специалистов занят в ближайшее время, в каком филиале. То есть на основании уже введенных обращений необходимо вывести данные о занятости персонала на определенный период времени (здесь срок зависит от типа заявки, дата - текущая системная, от нее отсчет). Не в текстовом виде, а именно таблицы, т.к. хотелось бы чтобы вызывая обработку не из документа, а из меню, была возможность документ-основание открыть для просмотра/редактирования.
 
M

mialord

#9
Ну вот, с задачкой определились. В дальнейшем старайтесь сразу ставить задачу корректно.
На основании задачи, я пришел к выводу, что вам вполне хватит того что я описал.
В момент ввода заявки определяем необходимые данные (используя запрос), и, возвращаем их в табличную часть. А откуда ВЫ будете вызывать обработку не так уж и важно. Пишите внешную, цепляете куда хотите, она выбирает данные и записывает данные туда, куда вы ей приказали. Все предельно просто.
Пример: как составить запрос и как выгрузить данные я вам показал. Остается дело техники - сложить в голове данные, представить алгоритм, положить перед собой клавиатуру. и твороить, творить, творить.....