Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 мая 2024, 06:48

Управляемая форма, перебор значений Таблицы и Запись по результату в строку

Автор JonAir, 27 мая 2014, 15:04

0 Пользователей и 1 гость просматривают эту тему.

JonAir

Суть в следующем есть документ, в нем есть таблица, строки которой содержат значения, нужно перебрать строки табличной части и если хотя бы 1 значение строк не соответствует заданному значению  то записать статус, например "в работе". Реквезит создан программно я могу его записать и отобразит как удобно в условном оформлении списка документов. Помощъ нужно в цикле и условиях.

Для Каждого Строка Из Объект.Услуги Цикл
   Если Строка.Свойство(Объект,Стат) = "Выполнен" тогда
   Объект.Статус = "Вработе";
   Иначе
   Объект.Статус = "Выполнен";   
КонецЕсли;
КонецЦикла;

Подозреваю что проблема в указании свойства строки, как корректно отработать ее

cska-fanat-kz

Объект.Статус = "Выполнен";
Для Каждого Строка Из Объект.Услуги Цикл
   Если Строка.Стат = "Выполнен" тогда
       Объект.Статус = "Вработе";
       Прервать;
    КонецЕсли;
КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

JonAir

Строки перебирает согласен, но при этом он не присваивает Заданный реквизит - реквизиту документа
Доберусь до компа буду разбираться но спасибо за подсказку.

cska-fanat-kz

ну либо условие не срабатывает... значит я чего то не знаю о ВАШЕЙ базе...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

JonAir

Цитата: cska-fanat-kz от 27 мая 2014, 19:08
ну либо условие не срабатывает... значит я чего то не знаю о ВАШЕЙ базе...
Вполне может быть), но все равно спасибо)

JonAir

В общем я выяснил причину того что условие не отрабатывало в условии стоит проверка строки а у меня реквизит в виде Перечисления, и нужно поиск делать по значению перечисления не подскажите как лучше это сделать?, а то поля со списком вроде нет как в 7.7

cska-fanat-kz

Если Строка.Стат = ПредопределенноеЗначение("Перечисление.<<ИмяПеречисления>>.Выполнен") тогда

В смысле нет поля со списком?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

JonAir

Ну я про то что в 8ке нет явного вида строки со списком.

По поводу цикла
Для Каждого Строка Из Объект.Услуги Цикл
   Если Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Вработе") тогда
      Объект.Статус = "В работе";
    Прервать; 
  ИначеЕсли Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Отказ") тогда   
     Объект.Статус = "Отказ";
  Прервать;
ИначеЕсли Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Выполнен") тогда
      Объект.Статус = "Выполнен";
Прервать;    
  КонецЕсли;
КонецЦикла;

Сделал такое, но есть ошибка он отбирает значение только по первой строке не перебирая всю таблицу полагаю это из-за Прервать; что он находит условие которое удовлетворяет и цикл закрывается, но надо чтоб он перебрал значения всей таблицы и в случае если находит хоть 1 значение строки таблицы не "Выполнен" то ставит статус в работе.

cska-fanat-kz

Если Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Вработе")
ИЛИ Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Отказ") тогда
  Если Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Вработе") тогда
      Объект.Статус = "В работе";
  ИначеЕсли Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Отказ") тогда   
     Объект.Статус = "Отказ";
  КонецЕсли;
  Прервать;
КонецЕсли;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

JonAir

Цитата: cska-fanat-kz от 04 июн 2014, 12:26
Если Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Вработе")
ИЛИ Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Отказ") тогда
  Если Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Вработе") тогда
      Объект.Статус = "В работе";
  ИначеЕсли Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Отказ") тогда   
     Объект.Статус = "Отказ";
  КонецЕсли;
  Прервать;
КонецЕсли;

Да, спасибо, дошло тоже ,что "или" надо добавить)
Добавлено: 04 июн 2014, 12:53


В общем в итоге привожу то что отрабатывает и прокомментирую мало ли кому пригодится:
Объект.Статус = "Выполнен"; (изначально задаем общий статус значения по документу)
Для Каждого Строка Из Объект.Услуги Цикл (перебор строк и поиск по определенному значению)
Если Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Вработе")
ИЛИ Строка.Стат  = ПредопределенноеЗначение("Перечисление.СтатусРабот.Отказ") тогда
      Объект.Статус = "В работе";
Прервать; (если найдено хоть 1 значение "вработе или отказ" то меняем общий статус документа на "В работе")
КонецЕсли;      
КонецЦикла;

П.с данный цикл добавлен в процедуру перед записью. Спасибо за подсказки а то заклинило)
Добавлено: 04 июн 2014, 15:48


Пытаюсь по аналогии сделать перебор значений еще 1 реквизита, но он берет только или последую или 1 строку из табличной части, Задача чтоб он подставлял значение реквизита строки если она меньше текущей даты и запись этого значения в шапку документа. Ткните пож в что не так в условиях.

Объект.Просрочка = Объект.Дата;
Для Каждого Строка Из Объект.Услуги Цикл
   Пока Строка.СрокВыполнения <=  ТекущаяДата() ИЛИ Строка.СрокВыполнения = "" Цикл
      Объект.Просрочка = Строка.СрокВыполнения;   
   Прервать;   
   КонецЦикла;//Прервать; //
//Иначе
//КонецЕсли;
КонецЦикла;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск