Имя: Пароль:
1C
 
Как в форме списка изменить цвет строки при ручном изменении цены
, ,
0 amadeus2010
 
17.09.15
20:23
Добрый вечер, вопрос как в УТ 10.3 в форме списка документа реализация товаров изменить цвет строки при ручном  изменении цены в форме документа. На данный я настроил изменение цвета в колонке цена при изменении типа цен в процедуре ТоварыПриПолученииДанных.Но как выполнить эту задачу пока не сообразил.Привожу код как пример:
///////////////////////////////////////////////////////////////
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        
Если ДокументОбъект.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("оптовая") тогда
        ОформлениеСтроки.Ячейки.Цена.ЦветФона = WebЦвета.Красный;
КонецЕсли;
КонецЦикла;
/////////////////////////////////////////////////////////////
1 Casey1984
 
17.09.15
20:25
Сравнивай цены
2 amadeus2010
 
17.09.15
20:35
а как определить что цена была изменена?
3 Casey1984
 
17.09.15
20:44
(2) А как ты на глаз это определишь, без программирования? Теперь научи этому программу - программируя -> (1)
4 amadeus2010
 
17.09.15
21:13
понятно что требуется программировать но как сделать проверку что если цена товара была сперва 100 руб., а потом пользователь изменил ее на 150 руб. как программно определить что цена была изменена
5 Fragster
 
гуру
17.09.15
22:08
добавляем реквизит будево в документ (или РС, если не хочется менять документ), и при ручном редактировании цены - ставим  его в истину. в ПриПолученииДанных - подсвечиваем строки с установленным флагом.
6 Fragster
 
гуру
17.09.15
22:09
только тогда права у установки цен номенклатуры надо отнять у "безответственных", ибо иначе будут вводить/менять документ установки цен
7 amadeus2010
 
17.09.15
22:10
насколько я понял надо запросом вытащить цену номенклатуры из регистра сведений и сравнить ее с текущей ценой в ТЧ документа?
8 Fragster
 
гуру
17.09.15
22:11
(7) эо будет тормозить
9 amadeus2010
 
17.09.15
22:14
насчет реквизита булево не совсем понял. Например как задать такое условие что если цена изменена тогда реквизит =истина?
10 ДенисЧ
 
18.09.15
06:40
Ещё один реквизит в тч исходная цена. При выводе сравнивать
11 Tarlich
 
18.09.15
08:22
ОформлениеСтроки.Ячейки.Цена - верное направление -))
Получи цену ценаВР= ценообразование.ПолуитьЦенуНоменклатуры() и если она не равна ДанныеСтроки.ЦЕНА тогда меняй цвет
12 SeraFim
 
18.09.15
08:52
(4) а потом вернул обратно на 100    =)
13 amadeus2010
 
18.09.15
10:57
ценаВР= ценообразование.ПолучитьЦенуНоменклатуры() как указать что эта цена привязана к данной номенклатуре?

ценаВР= ценообразование.ПолучитьЦенуНоменклатуры()
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        
Если ценаВР <> ДанныеСтроки.Цена тогда
ОформлениеСтроки.Ячейки.Цена.ЦветФона = WebЦвета.Красный;
КонецЕсли;
КонецЦикла;

правильный ход мысли?
14 amadeus2010
 
18.09.15
11:01
дело в том что мне надо окрашивать строку в форме списка документа реализация товаров чтобы менеджер видел что данный документ был изменен
15 aleks_default
 
18.09.15
11:08
(10)+1
Даже можно не в таб части создавать, а в шапке документа.
Все равно ведь у скольких позиций изменили цену - у одной или нескольких, документ ведь все равно был изменен.
16 aleks_default
 
18.09.15
11:09
(15) + в смысле признак булевый в шапку
17 amadeus2010
 
18.09.15
11:22
добавил такой код
//////////////////////////////
ЦенаВР = Ценообразование.ПолучитьЦенуНоменклатуры();
ТекЦена = ОформлениеСтроки.ДанныеСтроки.Цена;
Если ЦенаВР <> ТекЦена  Тогда
             ОформлениеСтроки.Ячейки.Ссылка.Сумма.ЦветФона = WebЦвета.Красный;
        КонецЕсли;
При открытии документа выходит ошибка недостаточно фактических параметров Ценообразование.ПолучитьЦенуНоменклатуры()
18 amadeus2010
 
18.09.15
13:03
изменил на такой код
ЦенаВР = Ценообразование.ПолучитьЦенуНоменклатуры(ОформлениеСтроки.ДанныеСтроки.Номенклатура,,ТипЦен);
ТекЦена = ОформлениеСтроки.ДанныеСтроки.Цена;
Если ЦенаВР <> ТекЦена  Тогда
             ОформлениеСтроки.Ячейки.Ссылка.Сумма.ЦветФона = WebЦвета.Красный;
КонецЕсли;

вышла такая ошибка
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(2831)}: Поле объекта не обнаружено (Ссылка)
             ОформлениеСтроки.Ячейки.Ссылка.Сумма.ЦветФона = WebЦвета.Красный;
19 ВедущийП
 
18.09.15
14:15
тут две задачи
1. В форме документа при изменении цены нужно устанавливать реквизит документа.
2. В списке документов менять цвет фона у документов, у которых установлен реквизит на Шаге 1.
20 ВедущийП
 
18.09.15
14:16
второй путь: в списке документов запросом сравнивать цнеы в строках документа с ценами из регистра сведений с ценами. Если все делать одним запросом по списку документов то будет даже не сильно тормозить.
21 ВедущийП
 
18.09.15
14:17
Я бы сделал по второму варианту, но ту критично умение писать сложный запрос который будет обрабатывать список документов за 1 раз.
22 aleks_default
 
18.09.15
14:18
(20)"то будет даже не сильно тормозить"
не советовал бы, со временем будет
23 amadeus2010
 
18.09.15
20:51
возможно ли как-то отладить код в (18)? Есть ли возможность окрашивать программно реквизит формы списка документа по условию?
24 Lexey_
 
18.09.15
20:54
(23) конечно,точку останова ставишь и отлаживаешь сколько влезет
25 amadeus2010
 
18.09.15
20:58
не совсем правильно сформулировал вопрос, есть что-то подобное для формы списка документа:
ОформлениеСтроки.Ячейки.Ссылка.Сумма.ЦветФона = WebЦвета.Красный;
26 Lexey_
 
18.09.15
21:01
(25) что-то подобное есть, но сначала надо определиться с именем ячейки "Ссылка" или "Сумма"?
в строке Ячейки.Ссылка.Сумма
27 amadeus2010
 
18.09.15
21:36
Окрашивание по колонке Сумма, что-то наподобие
Если ЦенаВР <> ТекЦена  Тогда
            ДокументОбъект.СуммаДокумента.ЦветФона = WebЦвета.Красный;
        КонецЕсли;
28 Lexey_
 
18.09.15
21:38
(27) ну тогда:
ОформлениеСтроки.Ячейки.Сумма.ЦветФона = WebЦвета.Красный;
29 amadeus2010
 
18.09.15
22:11
(28) этот код окрашивает ячейку ТЧ документа, а как окрасить ячейку в строке списка формы?
30 Lexey_
 
18.09.15
22:23
(29) перенести код в форму списка
31 Злопчинский
 
18.09.15
22:32
Все криво
С самого начала следует задаться вопросом какую цель преследует изменение оформления строки
"Чтобы менеджер увидел" - это не цель
32 amadeus2010
 
18.09.15
22:45
(31) цель зрительно видеть изменение сделанные в документе, согласно заданному условию. А что можете посоветовать вы?
33 amadeus2010
 
18.09.15
23:04
(30) перенос кода не дал результата.Неужели никак нельзя окрасить по условию ячейку списка документа?
34 Lexey_
 
18.09.15
23:09
(33) можно, выкладывай код
35 amadeus2010
 
18.09.15
23:49
код такой

ЦенаВР = Ценообразование.ПолучитьЦенуНоменклатуры(ОформлениеСтроки.ДанныеСтроки.Номенклатура,,ТипЦен);
        ТекЦена = ОформлениеСтроки.ДанныеСтроки.Цена;
        
        Если ЦенаВР <> ТекЦена  Тогда
             ОформлениеСтроки.Ячейки.Цена.ЦветФона = WebЦвета.Красный;
             ДокументОбъект.ЦенаИзменена = Истина;
        КонецЕсли;
только как делать чтобы вместо значения Цена  можно было окрасить Сумму документа в списке формы?
36 Lexey_
 
18.09.15
23:50
(35) ты не поверишь...
37 Lexey_
 
18.09.15
23:57
(35) не пробовал думать?
думать - хорошая штука, помогает во многих вопросах
38 amadeus2010
 
19.09.15
00:22
ДокументОбъект.ЦенаИзменена = Истина;
этот код срабатывает,и окрашивается Цена только в ТЧ, а по заданию надо чтобы окрасилась строка в списке документа
39 Lexey_
 
19.09.15
00:24
(38) смотри (30)
40 amadeus2010
 
19.09.15
00:33
переносил но не срабатывает
41 ВРедная
 
19.09.15
01:06
(40) перенесенный код-то напишешь?
42 ВедущийП
 
19.09.15
07:15
(40) обратитесь к программисту
43 amadeus2010
 
19.09.15
10:46
вот код в списке формы

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    
    // Начало ЭлектронныеДокументы
    Если НЕ мИспользоватьОбменЭД ИЛИ НЕ Элемент.Колонки.СостояниеЭД.Видимость Тогда
        Возврат;
    КонецЕсли;
    
    // Сформируем массив документов для получения состояния
    ДокументыДляПолученияСостояния = Новый Массив();
    Для каждого ОформлениеСтроки из ОформленияСтрок Цикл
        ДокументыДляПолученияСостояния.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
    КонецЦикла;
    
    СостоянияЭД = ЭлектронныеДокументы.ПолучитьТекстСостоянияЭДПоВладельцам(ДокументыДляПолученияСостояния);
    
    Для каждого оформлениеСтроки из ОформленияСтрок Цикл
        ОформлениеСтроки.Ячейки.СостояниеЭД.УстановитьТекст(СостоянияЭД[ОформлениеСтроки.ДанныеСтроки.Ссылка]);
        
        ЦенаВР = Ценообразование.ПолучитьЦенуНоменклатуры(ОформлениеСтроки.ДанныеСтроки.Номенклатура,,ТипЦен);
        ТекЦена = ОформлениеСтроки.ДанныеСтроки.Цена;
        
        Если ЦенаВР <> ТекЦена  Тогда
             ОформлениеСтроки.Ячейки.СуммаДокумента.ЦветФона = WebЦвета.Красный;
            
        КонецЕсли;
    КонецЦикла
    // Конец ЭлектронныеДокументы
    
КонецПроцедуры
44 ВРедная
 
19.09.15
11:07
(43) Откуда в списке документов номенклатура и ее цена?
Этот код не выдает ошибки?
Или ты в список добавил пару колонок?
45 amadeus2010
 
19.09.15
20:11
(44) номенклатура и цена ошибки не дает, ошибка выходит по Тип цен
46 amadeus2010
 
19.09.15
20:15
мне как раз и надо сравнить изменение цен в табличной части формы документа и если цена была изменена то окрасить ссылку на документ в списке формы
47 ВРедная
 
19.09.15
22:21
(46)
Ты что с чем пытаешься сравнить?
Если цену строки табличной части с ценой из прайса, то где цикл по строкам табличной части? У тебя в  списке документов может быть 10 строк в каждом документе. Где ты  перебираешь каждую?
В типовом списке документов нет колонки "Цена" и нет колонки "Номенклатура". Тип цен - это реквизит документа, а не переменная формы.

Ты перед переносом кода в форму списка пытался его адаптировать для списка?
48 amadeus2010
 
19.09.15
23:11
у меня есть 2 переменные ТекЦена - цена в тч документа, которая может быть изменена и ЦенаВР-цена по прайсу.
Если бы знал как адаптировать код к форме списка то сделал бы это, но так как не знаю поэтому обратился
49 Lexey_
 
19.09.15
23:15
(48) "ТекЦена - цена в тч документа" по какой из N строк?
50 ВРедная
 
19.09.15
23:20
(48) Где у тебя в коде выбирается цена в ТЧ документа? Где вообще там обработка ТЧ документа в коде?
51 amadeus2010
 
19.09.15
23:40
имеете ввиду надо сделать запрос к ТЧ документа? и потом значение запроса подставить в ПолучитьЦенуНоменклатуры?
52 ВРедная
 
19.09.15
23:46
(51) Я имею в виду, что нужно подумать, что и откуда ты хочешь получить, на бумажке схему нарисовать, потом уже писать запрос.

Если для каждого документа в списке пробегать по его ТЧ и для каждой строки выполнять запрос на цену и сравнивать ее с ценой документа, у тебя список будет открываться по минуте.
53 ВРедная
 
19.09.15
23:48
Информацию о том, что цена была изменена в документе, лучше хранить в самом документе, в добавленном реквизите. Можно в реквизитах ТЧ тоже хранить эту информацию построчно.

Тогда не придется заниматься вычислениями в списке.
54 amadeus2010
 
19.09.15
23:51
хорошо опустим окрашивание цвета, я пытался сделать дополнительный реквизит как реквизит ЦенаИзменена тип булево, работает но при восстановлении старой цены значение реквизита не меняется обратно на ложь
55 amadeus2010
 
19.09.15
23:53
что-то типа такого в процедуре товары при получении данных

ЦенаВР = Ценообразование.ПолучитьЦенуНоменклатуры(ОформлениеСтроки.ДанныеСтроки.Номенклатура,,ТипЦен);
        ТекЦена = ОформлениеСтроки.ДанныеСтроки.Цена;
        
        Если ЦенаВР <> ТекЦена  Тогда
             ОформлениеСтроки.Ячейки.Цена.ЦветФона = WebЦвета.Красный;
             ДокументОбъект.ЦенаИзменена = Истина;
        ИначеЕсли ЦенаВР = ТекЦена Тогда    
             ДокументОбъект.ЦенаИзменена = Ложь;
            
        КонецЕсли;
56 ВРедная
 
19.09.15
23:53
ну выкладывай код, что
57 amadeus2010
 
19.09.15
23:56
я уже выложил код
58 ВРедная
 
20.09.15
15:35
(57) Давай подумаем вместе.
У документа 10 строк.

изменена цена в 5-й строке документа.

Цикл
1-я строка. ДокументОбъект.ЦенаИзменена = ложь
2-я строка - аналогично
---
5-я строка ДокументОбъект.ЦенаИзменена = истина. (ура)
6-я строка ДокументОбъект.ЦенаИзменена = ложь ( :( )
7-я и до конца документа - ДокументОбъект.ЦенаИзменена = ложь

В конец твоей процедуры цена изменена в документе будет ложь для всех документов, кроме тех, у которых изменена последняя строка.

Это было первое.
Теперь второе.
Твой код выполняется при получении данных, т.е. намного чаще, чем происходит изменение строк. Зачем?
Тебе нужно знать, что цена в какой либо строке была изменена только перед записью, чтобы зафиксировать последний результат.
59 ВедущийП
 
21.09.15
03:26
(58) это бесполезно, в данном случае надо начинать с азов...
60 ВРедная
 
21.09.15
08:57
(59) Учитывая его полоску, вероятно, азы тоже не дадут результата.