Имя: Пароль:
1C
 
Помогите с ОформлениеСтроки
0 Alexey87
 
22.03.10
15:19
Всем привет!Хочу раскрашивать строки формы списка документа "Заказ покупателя" в зависимости от реквизита "состояние"

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
здесь вычисляется этот самый реквизит "состояние"
Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
....
ОформлСтроки=ОформлениеСтроки.ДанныеСтроки.Ссылка.ПолучитьОбъект();
ОформлСтроки.Состояние=Перечисления.СостояниеЗаказаПокупателя.НеВыполнен;
....//пытаюсь записать новое состояние
КонецЦикла;
//здесь уже раскраска
СписокПриВыводеСтроки(ЭтаФорма, Элемент, ОформлениеСтроки,ОформлениеСтроки.ДанныеСтроки);

но после этого состояние у ОформлениеСтроки.ДанныеСтроки.Ссылка.Состояние не меняется, следовательно ничего и не раскрашивается, подскажите где ошибка
1 Defender aka LINN
 
22.03.10
15:20
Мать моя...
2 Лефмихалыч
 
22.03.10
15:21
(0) ты определись - ты вичисляешь состояние или устанавливаешь его?
ЗЫ закрой конфигуратор срочно
3 Нуф-Нуф
 
22.03.10
15:21
(1)+100
4 Нуф-Нуф
 
22.03.10
15:21
(2)+100
5 Alexey87
 
22.03.10
15:24
В зависимости от условия ему присваивается значение, которое потом хочу записать в оформление строк
6 Нуф-Нуф
 
22.03.10
15:25
приведи весь код процедуры СписокПриПолученииДанных
7 Лефмихалыч
 
22.03.10
15:27
(5) ты хочешь красить строки табличного поля в зависимости от данных в строках? Я правильно понимаю?
8 Defender aka LINN
 
22.03.10
15:28
(6) Смелый ты...
*убежал с визгами*
9 Irbis
 
22.03.10
15:29
Даром что 87, может обманывает?
10 Лефмихалыч
 
22.03.10
15:29
(9) может явнварь? типа почти 86... на машинах так часто пишут
11 Alexey87
 
22.03.10
15:29
ОформлениеСтроки.ДанныеСтроки.Ссылка и есть сам документ, сначала вычислять его реквизит состояние, потом красить, щас код выложу
12 Лефмихалыч
 
22.03.10
15:30
(11) ответь на (7) внятно
13 IronDemon
 
22.03.10
15:30
На ИТСе статью читал?
14 Лефмихалыч
 
22.03.10
15:30
(13) возвижу следующий вопрос...
15 Alexey87
 
22.03.10
15:31
(7)ДА
(13)Нет - как называется?
16 Irbis
 
22.03.10
15:34
ОформлениеСтроки (RowAppearance)
Свойства:
ДанныеСтроки (RowData)
ЦветТекста (TextColor)
ЦветФона (BackColor)
Шрифт (Font)
Ячейки (Cells)

Описание:
Определяет оформление строки табличного документа. Используется для определения значений типа ОформлениеСтроки.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
См. также:
ОформлениеЯчейки
ТабличноеПоле, событие ПриВыводеСтроки
ОформленияСтрок, метод Получить
ТабличноеПоле, метод ОформлениеСтроки
17 IronDemon
 
22.03.10
15:37
18 Alexey87
 
22.03.10
15:45
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   
   Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
       
       ЗаказСсылка = Элемент.ТекущаяСтрока;
       ДвиженияЗаказа = ПолучитьДвиженияЗаказа(ЗаказСсылка);
       ЭтотЗаказ = ЗаказСсылка.ПолучитьОбъект();
       Если ЗаказСсылка.Проведен И ДвиженияЗаказа<>Неопределено Тогда
           КолРаспределенных = 0;
           Для каждого СтрокаТЧ Из ЗаказСсылка.Товары Цикл
               ОтборПоНоменклатуре=Новый Структура("Номенклатура,ХарактеристикаНоменклатуры",СтрокаТЧ.ДанныеСтроки.Номенклатура,СтрокаТЧ.ДанныеСтроки.ХарактеристикаНоменклатуры);
               НоменклатураОбороты=ДвиженияЗаказа.НайтиСтроки(ОтборПоНоменклатуре);
               Если НоменклатураОбороты.Количество()>0 Тогда
                   //В списке оборотов номенклатура найдена
                   ДвиженияНоменклатуры=НоменклатураОбороты[0];
                   Если ДвиженияНоменклатуры.Распределено=NULL Тогда ДвиженияНоменклатуры.Распределено=0; КонецЕсли;
               КонецЕсли;
           КонецЦикла;
           //Здесь нужно изменять оформления строк
           Если Распределенных = 0 Тогда
               ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.НеВыполнен;
           ИначеЕсли Распределенных < ЗаказСсылка.Товары.Количество() Тогда
               ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.ВыполненЧастично;
           ИначеЕсли Распределенных = ЗаказСсылка.Товары.Количество() Тогда
               ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.Выполнен;
           КонецЕсли;
       Иначе
           ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.НеВыполнен;
       КонецЕсли; //Если ЗаказСсылка.Проведен И ДвиженияЗаказа<>Неопределено Тогда
       СписокПриВыводеСтроки(ЭтаФорма, Элемент, ОформлениеСтроки, ОформлениеСтроки.ДанныеСтроки);
   КонецЦикла;
КонецПроцедуры //СписокПриПолученииДанных()
19 Лефмихалыч
 
22.03.10
15:47
(15) тогда удали код

ОформлСтроки=ОформлениеСтроки.ДанныеСтроки.Ссылка.ПолучитьОбъект();
ОформлСтроки.Состояние=Перечисления.СостояниеЗаказаПокупателя.НеВыполнен;
....//пытаюсь записать новое состояние

и ни когда ни кому не показывай. Вообще приПолученииДанных не трогай, используй ПриВыводеСтроки
20 IronDemon
 
22.03.10
15:49
Я за (8)
21 Irbis
 
22.03.10
15:50
После (18) чуствуется 87 тоже не хило досталось.
22 Apokalipsec
 
22.03.10
15:56
а у нас есть реквизит состояние...


Если ДанныеСтроки.Ссылка.СостояниеЗаказа = Перечисления.СостояниеЗаказа.Закрыт Тогда
ОформлениеСтроки.ЦветТекста   = WebЦвета.Красный;
ИначеЕсли ДанныеСтроки.Ссылка.СостояниеЗаказа = Перечисления.СостояниеЗаказа.Запущен Тогда
ОформлениеСтроки.ЦветТекста   = WebЦвета.Зеленый;
ИначеЕсли ДанныеСтроки.Ссылка.СостояниеЗаказа = Перечисления.СостояниеЗаказа.Открыт Тогда
ОформлениеСтроки.ЦветТекста   = WebЦвета.Черный;
КонецЕсли;

Вот так банально.
23 Irbis
 
22.03.10
15:58
(22) У (0) тоже есть, но все "... смешалось в доме Облонских" ©
24 Alexey87
 
22.03.10
16:31
прошу критики дальше
25 Alexey87
 
22.03.10
16:31
Функция дкСписокПриВыводеСтроки(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки, ПраваПользователя=Неопределено) Экспорт
   
   Если ЭтаФорма.Заголовок = "Заказ покупателя" Тогда
       ЗаказСсылка = ДанныеСтроки.Ссылка;
       .....
       //здесь формирование таблицы "ДвиженияЗаказа" заказа покупателя//
       ....

       ЭтотЗаказ = ЗаказСсылка.ПолучитьОбъект();
       Если ЗаказСсылка.Проведен И ДвиженияЗаказа<>Неопределено Тогда
           Распределенных = 0;
           Для каждого СтрокаТЧ Из ЭтотЗаказ.Товары Цикл
               ОтборПоНоменклатуре=Новый Структура("Номенклатура,ХарактеристикаНоменклатуры",СтрокаТЧ.Номенклатура,СтрокаТЧ.ХарактеристикаНоменклатуры);
               НоменклатураОбороты=ДвиженияЗаказа.НайтиСтроки(ОтборПоНоменклатуре);
               Если НоменклатураОбороты.Количество()>0 Тогда
                   //В списке оборотов номенклатура найдена
                   ДвиженияНоменклатуры=НоменклатураОбороты[0];
                   Если ДвиженияНоменклатуры.Распределено=NULL Тогда ДвиженияНоменклатуры.Распределено=0; КонецЕсли;
                   Если ДвиженияНоменклатуры.Распределено>0 Тогда
                       Распределенных = Распределенных + 1;    
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;
           Если Распределенных = 0 Тогда
               ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.НеВыполнен;
           ИначеЕсли КолРаспределенных < ЗаказСсылка.Товары.Количество() Тогда
               ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.ВыполненЧастично;
           ИначеЕсли КолРаспределенных = ЗаказСсылка.Товары.Количество() Тогда
               ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.Выполнен;
           КонецЕсли;
       Иначе
           ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.НеВыполнен;
       КонецЕсли; //Если ЗаказСсылка.Проведен И ДвиженияЗаказа<>Неопределено Тогда
   
       Если ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.Выполнен Тогда
           ОформлениеСтроки.ЦветФона = WindowsЦвета.ГраницаАктивногоОкна;
       ИначеЕсли ЭтотЗаказ.Состояние = Перечисления.СостояниеЗаказаПокупателя.ВыполненЧастично Тогда
           ОформлениеСтроки.ЦветФона = WebЦвета.БледноЛиловый;
       КонецЕсли;
   КонецЕсли;
   
   Результат = Истина;
   Возврат Результат;
КонецФункции // дкСписокПриВыводеСтроки()
26 hhhh
 
22.03.10
16:58
(25) неужели не понимаешь, что эта твоя процедурка будет выполняться минимум несколько секунд, а если умножить на количество строк, получится что на экран список будет выводиться больше чем минуту. Да тебя пользователи живьем закопают за такую программу.
27 Alexey87
 
22.03.10
17:00
это и понятно, можно еще проверять на то изменился ли реквизит или нет, если изменился - тогда перекрашивать
28 Лефмихалыч
 
22.03.10
17:00
(24) Ты на обращенные к тебе предложения по исправлению твоего кода не реагируешь и продолжаешь писать адову поделку, другой критики не будет, кроме вариаций на тему: "Убейся об дерево"
29 Alexey87
 
22.03.10
17:02
перенес все в СписокПриВыводеСтроки(), еще то как?
30 hhhh
 
22.03.10
17:04
(29) лучше заведи регистр сведений, и в нем два поля: заказ и выполнен. Заполняй его при при проведении заказа. А при выводе строки, просто анализируй этот регистр.
31 Alexey87
 
22.03.10
17:10
дык все и вычисление из-за того что, проведение заказа покупателя никаким образом не влияет на его состояние, проведение лишь регистрирует сам факт заказа товаров покупателем. Потом в заказе поставщику размещаются заказы покупателей, потом идут поступления от этих поставщиков, которые могут привести заказ полностью либо частично, вот и получается, что состояние заказа покупателя нужно постоянно анализировать.
32 Лефмихалыч
 
22.03.10
17:11
вот это вот убери совсем "ЭтотЗаказ = ЗаказСсылка.ПолучитьОбъект();" для начала.
Для решения этой задачи нужно сделать какой-нить регистр сведений, в который писать состояние заказов. Записывать туда должны документы, которые двигают регистр заказов.
Кстати, раз запросом к базе лезешь, то код раскрашиваться тогда все-таки придется перенести в ПриПолучении данных, чтобы запрос формировать по пачке отображаемых в данный момент документов за раз. Запрос должен получать из этого нового регистра состояние заказа по ссылкам, полученным из оформленияСтрок
33 Alexey87
 
22.03.10
17:13
ну сделаю это я допустим это на значениях свойств, все равно суть не изменится, все равно запрос и перезапись реквизитов
34 Alexey87
 
22.03.10
17:17
(32)Если убирать ЭтотЗаказ = ЗаказСсылка.ПолучитьОбъект(), то и реквизит "Состояние" нафиг убрать и его перезаполнение. Получается красить только по данным запроса
35 Лефмихалыч
 
22.03.10
17:21
(34) а, так ты СОЗНАТЕЛЬНО при отображении в списке меняешь данные документа?! о_О
36 Alexey87
 
22.03.10
21:50
(35)Всем привет!Хочу раскрашивать строки формы списка документа "Заказ покупателя" в зависимости от реквизита "состояние" - это я как бы не просто так наисал;

заказ, размещенный поставщику может прийти в любой момент, вот и проверяю, а уж не надо ли менять реквизит "состояние"