14.11.2007, 19:12
общий
это ответ
Здравствуйте, Артем Олександрович!
Есть такое решение, могу поделиться.
В справочнике КатегорииЦен добавил реквизит ИспользоватьПродавцам тип Перечисление.ДаНет. В режиме Предприятия типу цен Закупочная определил значение этого реквизита как "Нет".
Далее. В справочнике пользователей продавцам установлен тип цен по умолчанию, отличный от Закупочной. Все документы при изменении типа цен используют обработку ИнформацияОЦенах, а обработку ГрупповоеИзменениеТоварногСоставаДокумента тоже можно использовать, чтобы неявно установить в документе закупочные цены. Чтобы это предотвратить, в указанные обработки я добавил код, который в приложении. Т.е. если пользователю по его набору прав не положено использовать какой-либо тип цен, он его использовать не может.
В форме справочника Товары для продавцов недоступны кнопки "Информация" и "Печать прайса".
<b>следующая часть перенесена в ответ из мини-форума</b>
Возможно, я не понял Вас - если Вы хотите видеть в списке товаров одновременно несколько столбцов с разными ценами, то их (столбцы) нужно просто добавить в форму списка и прописать формулу ЦенаТовара(ТекущийЭлемент(), ТипЦены), а в модуле формы добавить функцию, параметры которой текущий элемент списка и название цены, которую нужно отображать (для каждого типа цен своя колонка):
Функция ЦенаТовара(ТекТовар, ТипЦены)
КатегорияЦен = СоздатьОбъект(Справочник.КатегорииЦен");
КатегорияЦен.НайтиПоНаименованию(ТипЦены);
Если ПустоеЗначение(КатегорияЦен)=0 Тогда
ЭлЦена = глВернутьЦену(ТекТовар, КатегорияЦен);
Если ПустоеЗначение(ЭлЦена)=0 Тогда
Попытка
ВремЕдиница = ЭлЦена.Единица.Получить(ВнКонтекст.ДатаДок);
ВремЦена = ЭлЦена.Цена.Получить(внКонтекст.ДатаДок);
Если ВремЕдиница<>ТекТовар.ЕдиницаПоУмолчанию Тогда
ВремЦена = ?(ВремЕдиница.Коэффициент=0,ВремЦена*ТекТовар.ЕдиницаПоУмолчанию.Коэффициент/1,ВремЦена*ТекТовар.ЕдиницаПоУмолчанию.Коэффициент/ВремЕдиница.Коэффициент);
КонецЕсли;
Возврат СокрЛП(Формат(ВремЦена,глФорматСуммы));
Исключение
Сообщить(ОписаниеОшибки());
Возврат "";
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецФункции
Успехов!
С уважением, Владимир.<p><fieldset style=‘background-color:#EFEFEF; width:80%; border:#777777 1px solid; padding:10px;‘ class=fieldset><font color=#777777><i>ответ дополнен из мини-форума</i>
-----
</font><font color=#777777 size=1><b>• Отредактировал: <a href=/info/user/10794 target=_blank>Сергей Максименко [Elric]</a></b> (Профессионал)
<b>• Дата редактирования:</b> 19.11.2007, 12:20</font></fieldset>
Приложение:
в обработке Информация о ценах на форме в свойствах поля КатегорияЦен дописал формулу ИзмКатегорияЦен(), в модуле добавил эту процедуру:
Процедура ИзмКатегорияЦен()
Если НазваниеНабораПрав() = "Продавец" Тогда
Если КатегорияЦен.ИспользоватьПродавцам = Нет Тогда
КатегорияЦен = "";
Спр = СоздатьОбъект("Справочник.КатегорииЦен");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если Спр.ИспользоватьПродавцам = Да Тогда
КатегорияЦен = Спр.ТекущийЭлемент();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
т.е. при выборе "запрещенной" цены, ищется и подставляется ближайшая "разрешенная" цена. Аналогично и в обработке ГрупповоеИзменениетоварногоСоставаДокумента:
В процедуре ВыборЗначения() найдите фрагмет обработки выбора типа цен:
ИначеЕсли Действие.ТекущаяСтрока()=НомерДействияЗаполнЦеныИзСпр Тогда // ("Заполнить из прайса");
ВыбЗначение = СоздатьОбъект("Справочник.КатегорииЦен");
Если ВыбЗначение.Выбрать("Тип цены",)=1 Тогда
ЗначениеВВидеСтроки = ВыбЗначение.Наименование;
Значение= ВыбЗначение.ТекущийЭлемент();
Если НазваниеНабораПрав() = "Продавец" Тогда
Если ВыбЗначение.ИспользоватьПродавцам = Перечисление.ДаНет.Нет Тогда
Предупреждение("У Вас нет прав использовать этот тип цен!");
ВыбЗначение = "";
Возврат;
КонецЕсли;
КонецЕсли;
... далее по тексту