Как в форме списка изменить цвет строки при ручном изменении цены #753504


#0 by amadeus2010
Добрый вечер, вопрос как в УТ 10.3 в форме списка документа реализация товаров изменить цвет строки при ручном  изменении цены в форме документа. На данный я настроил изменение цвета в колонке цена при изменении типа цен в процедуре ТоварыПриПолученииДанных.Но как выполнить эту задачу пока не сообразил.Привожу код как пример: /////////////////////////////////////////////////////////////// Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
#1 by Casey1984
Сравнивай цены
#2 by amadeus2010
а как определить что цена была изменена?
#3 by Casey1984
А как ты на глаз это определишь, без программирования? Теперь научи этому программу - программируя ->
#4 by amadeus2010
понятно что требуется программировать но как сделать проверку что если цена товара была сперва 100 руб., а потом пользователь изменил ее на 150 руб. как программно определить что цена была изменена
#5 by Fragster
добавляем реквизит будево в документ (или РС, если не хочется менять документ), и при ручном редактировании цены - ставим  его в истину. в ПриПолученииДанных - подсвечиваем строки с установленным флагом.
#6 by Fragster
только тогда права у установки цен номенклатуры надо отнять у "безответственных", ибо иначе будут вводить/менять документ установки цен
#7 by amadeus2010
насколько я понял надо запросом вытащить цену номенклатуры из регистра сведений и сравнить ее с текущей ценой в ТЧ документа?
#8 by Fragster
эо будет тормозить
#9 by amadeus2010
насчет реквизита булево не совсем понял. Например как задать такое условие что если цена изменена тогда реквизит =истина?
#10 by ДенисЧ
Ещё один реквизит в тч исходная цена. При выводе сравнивать
#11 by Tarlich
ОформлениеСтроки.Ячейки.Цена - верное направление -)) Получи цену ценаВР= ценообразование.ПолуитьЦенуНоменклатуры и если она не равна ДанныеСтроки.ЦЕНА тогда меняй цвет
#12 by SeraFim
а потом вернул обратно на 100    =)
#13 by amadeus2010
ценаВР= ценообразование.ПолучитьЦенуНоменклатуры как указать что эта цена привязана к данной номенклатуре? ценаВР= ценообразование.ПолучитьЦенуНоменклатуры Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл          Если ценаВР <> ДанныеСтроки.Цена тогда правильный ход мысли?
#14 by amadeus2010
дело в том что мне надо окрашивать строку в форме списка документа реализация товаров чтобы менеджер видел что данный документ был изменен
#15 by aleks_default
+1 Даже можно не в таб части создавать, а в шапке документа. Все равно ведь у скольких позиций изменили цену - у одной или нескольких, документ ведь все равно был изменен.
#16 by aleks_default
+ в смысле признак булевый в шапку
#17 by amadeus2010
добавил такой код         КонецЕсли; При открытии документа выходит ошибка недостаточно фактических параметров Ценообразование.ПолучитьЦенуНоменклатуры
#18 by amadeus2010
изменил на такой код вышла такая ошибка {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(2831)}: Поле объекта не обнаружено (Ссылка)              ОформлениеСтроки.Ячейки.Ссылка.Сумма.ЦветФона = WebЦвета.Красный;
#19 by ВедущийП
тут две задачи 1. В форме документа при изменении цены нужно устанавливать реквизит документа. 2. В списке документов менять цвет фона у документов, у которых установлен реквизит на Шаге 1.
#20 by ВедущийП
второй путь: в списке документов запросом сравнивать цнеы в строках документа с ценами из регистра сведений с ценами. Если все делать одним запросом по списку документов то будет даже не сильно тормозить.
#21 by ВедущийП
Я бы сделал по второму варианту, но ту критично умение писать сложный запрос который будет обрабатывать список документов за 1 раз.
#22 by aleks_default
"то будет даже не сильно тормозить" не советовал бы, со временем будет
#23 by amadeus2010
возможно ли как-то отладить код в ? Есть ли возможность окрашивать программно реквизит формы списка документа по условию?
#24 by Lexey_
конечно,точку останова ставишь и отлаживаешь сколько влезет
#25 by amadeus2010
не совсем правильно сформулировал вопрос, есть что-то подобное для формы списка документа:
#26 by Lexey_
что-то подобное есть, но сначала надо определиться с именем ячейки "Ссылка" или "Сумма"? в строке Ячейки.Ссылка.Сумма
#27 by amadeus2010
Окрашивание по колонке Сумма, что-то наподобие Если ЦенаВР <> ТекЦена  Тогда
#28 by Lexey_
ну тогда: ОформлениеСтроки.Ячейки.Сумма.ЦветФона = WebЦвета.Красный;
#29 by amadeus2010
этот код окрашивает ячейку ТЧ документа, а как окрасить ячейку в строке списка формы?
#30 by Lexey_
перенести код в форму списка
#31 by Злопчинский
Все криво С самого начала следует задаться вопросом какую цель преследует изменение оформления строки "Чтобы менеджер увидел" - это не цель
#32 by amadeus2010
цель зрительно видеть изменение сделанные в документе, согласно заданному условию. А что можете посоветовать вы?
#33 by amadeus2010
перенос кода не дал результата.Неужели никак нельзя окрасить по условию ячейку списка документа?
#34 by Lexey_
можно, выкладывай код
#35 by amadeus2010
КонецЕсли; только как делать чтобы вместо значения Цена  можно было окрасить Сумму документа в списке формы?
#36 by Lexey_
ты не поверишь...
#37 by Lexey_
не пробовал думать? думать - хорошая штука, помогает во многих вопросах
#38 by amadeus2010
ДокументОбъект.ЦенаИзменена = Истина; этот код срабатывает,и окрашивается Цена только в ТЧ, а по заданию надо чтобы окрасилась строка в списке документа
#39 by Lexey_
смотри
#40 by amadeus2010
переносил но не срабатывает
#41 by ВРедная
перенесенный код-то напишешь?
#42 by ВедущийП
обратитесь к программисту
#43 by amadeus2010
вот код в списке формы Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
#44 by ВРедная
Откуда в списке документов номенклатура и ее цена? Этот код не выдает ошибки? Или ты в список добавил пару колонок?
#45 by amadeus2010
номенклатура и цена ошибки не дает, ошибка выходит по Тип цен
#46 by amadeus2010
мне как раз и надо сравнить изменение цен в табличной части формы документа и если цена была изменена то окрасить ссылку на документ в списке формы
#47 by ВРедная
Ты что с чем пытаешься сравнить? Если цену строки табличной части с ценой из прайса, то где цикл по строкам табличной части? У тебя в  списке документов может быть 10 строк в каждом документе. Где ты  перебираешь каждую? В типовом списке документов нет колонки "Цена" и нет колонки "Номенклатура". Тип цен - это реквизит документа, а не переменная формы. Ты перед переносом кода в форму списка пытался его адаптировать для списка?
#48 by amadeus2010
у меня есть 2 переменные ТекЦена - цена в тч документа, которая может быть изменена и ЦенаВР-цена по прайсу. Если бы знал как адаптировать код к форме списка то сделал бы это, но так как не знаю поэтому обратился
#49 by Lexey_
"ТекЦена - цена в тч документа" по какой из N строк?
#50 by ВРедная
Где у тебя в коде выбирается цена в ТЧ документа? Где вообще там обработка ТЧ документа в коде?
#51 by amadeus2010
имеете ввиду надо сделать запрос к ТЧ документа? и потом значение запроса подставить в ПолучитьЦенуНоменклатуры?
#52 by ВРедная
Я имею в виду, что нужно подумать, что и откуда ты хочешь получить, на бумажке схему нарисовать, потом уже писать запрос. Если для каждого документа в списке пробегать по его ТЧ и для каждой строки выполнять запрос на цену и сравнивать ее с ценой документа, у тебя список будет открываться по минуте.
#53 by ВРедная
Информацию о том, что цена была изменена в документе, лучше хранить в самом документе, в добавленном реквизите. Можно в реквизитах ТЧ тоже хранить эту информацию построчно. Тогда не придется заниматься вычислениями в списке.
#54 by amadeus2010
хорошо опустим окрашивание цвета, я пытался сделать дополнительный реквизит как реквизит ЦенаИзменена тип булево, работает но при восстановлении старой цены значение реквизита не меняется обратно на ложь
#55 by amadeus2010
что-то типа такого в процедуре товары при получении данных ЦенаВР = Ценообразование.ПолучитьЦенуНоменклатуры(ОформлениеСтроки.ДанныеСтроки.Номенклатура,,ТипЦен);
#56 by ВРедная
ну выкладывай код, что
#57 by amadeus2010
я уже выложил код
#58 by ВРедная
Давай подумаем вместе. У документа 10 строк. изменена цена в 5-й строке документа. Цикл 1-я строка. ДокументОбъект.ЦенаИзменена = ложь 2-я строка - аналогично --- 5-я строка ДокументОбъект.ЦенаИзменена = истина. (ура) 6-я строка ДокументОбъект.ЦенаИзменена = ложь ( : 7-я и до конца документа - ДокументОбъект.ЦенаИзменена = ложь В конец твоей процедуры цена изменена в документе будет ложь для всех документов, кроме тех, у которых изменена последняя строка. Это было первое. Теперь второе. Твой код выполняется при получении данных, т.е. намного чаще, чем происходит изменение строк. Зачем? Тебе нужно знать, что цена в какой либо строке была изменена только перед записью, чтобы зафиксировать последний результат.
#59 by ВедущийП
это бесполезно, в данном случае надо начинать с азов...
#60 by ВРедная
Учитывая его полоску, вероятно, азы тоже не дадут результата.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С