|
Как в форме списка изменить цвет строки при ручном изменении цены | ☑ | ||
---|---|---|---|---|
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) Учитывая его полоску, вероятно, азы тоже не дадут результата.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |