Задача:
Согласование нужно только для определенных контрагентов.
Возможно условия согласования потом еще добавятся.
Хочет просто - пользователь с правами "ОтделР" и полными правами видит флажок "согласован" в заказе покупателя, если контрагент избран для согласования.
Он может установить галочку, что будет означать что заказ согласован.
Хочет потом отчет в котором отобразятся согласованные и не согласованные заказы покупателя.
Реализация:
добавляем в объект «заказКлиента» реквизит заказСогласован = булево
и вытаскиваем на форму.
Док «заказКлиента» модуль формы «при открытии» меняем на
&наСервере
функция рольОтделРдоступна()
если РольДоступна("ОтделР") тогда возврат истина иначе возврат ложь; конецЕсли;
конецфункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
МенеджерОборудованияКлиент.ПодключитьОборудованиеПриОткрытииФормы(ЭтаФорма, "СканерШтрихкода");
// если роль отделР доступна то показываем "согласован"
если рольОтделРдоступна()тогда Элементы.ЗаказСогласован.Видимость=истина
иначе
Элементы.ЗаказСогласован.Видимость=ложь;
конецЕсли;
Создаем регстр сведений «согласование документов»
измерение — партнер («справочники.партнеры»)
реквизит СогласовыватьЗаказПокупателя — («булево») по умолчанию истина.
Подсистемы — управления торговлей и продажи — проведение сделок
Права:
базовые права ут, бухгалтер, нач смены, нач производства — чтение, просмотр
отделР, полныеПрава — все права
Документ «заказКлиента» - приИзмененииПартнера меняем на
&насервере
Процедура требуетсяСогласованиеЗаказа()
запрос=новый запрос;
запрос.Текст= "ВЫБРАТЬ
| согласованиеДокументов.СогласовыватьЗаказПокупателя
|ИЗ
| РегистрСведений.согласованиеДокументов КАК согласованиеДокументов
|ГДЕ
| согласованиеДокументов.Партнер = &партнер" ;
запрос.УстановитьПараметр("партнер",объект.Партнер);
если запрос.Выполнить().Пустой() тогда Объект.заказСогласован=истина; возврат; конецЕсли;
рез=запрос.Выполнить().Выбрать();
рез.Следующий();
если рез.согласовыватьЗаказПокупателя тогда Объект.заказСогласован=ложь;
иначе
Объект.заказСогласован=истина;
конецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
Если Не ЗначениеЗаполнено (Объект.Партнер) Тогда
ДоставкаТоваровКлиентСервер.ОчиститьРеквизитыДоставки(Элементы,Объект);
Возврат;
КонецЕсли;
ПриИзмененииПартнераСервер();
СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма);
Если ЗначениеЗаполнено(Объект.Соглашение) И ИспользоватьСоглашенияСКлиентами Тогда
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию();
КонецЕсли;
// согласование заказа
// проверяем нужно ли согласование заказа покупателя с этим партнером
требуетсяСогласованиеЗаказа();
КонецПроцедуры
Если заказ клиента сделан методом копирования или менеджеры хотят подредактировать старый док, то будет проблема т. к. галочка «заказСогласован» ставится только при выборе партнера поэтому нужно:
1 в процедуру ПередЗаписью в самое начало добавить строчку вызова проц СогласованиеЗаказаПриЗаписиДокумента();
&насервере
Процедура СогласованиеЗаказаПриЗаписиДокумента()
запрос=новый запрос;
запрос.Текст= "ВЫБРАТЬ
| согласованиеДокументов.СогласовыватьЗаказПокупателя
|ИЗ
| РегистрСведений.согласованиеДокументов КАК согласованиеДокументов
|ГДЕ
| согласованиеДокументов.Партнер = &партнер" ;
запрос.УстановитьПараметр("партнер",объект.Партнер);
если запрос.Выполнить().Пустой() тогда Объект.заказСогласован=истина; возврат; конецЕсли;
рез=запрос.Выполнить().Выбрать();
рез.Следующий();
если рез.согласовыватьЗаказПокупателя тогда
иначе
Объект.заказСогласован=истина;
конецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
// согласование заказа Дмитрий
СогласованиеЗаказаПриЗаписиДокумента();
// конец согласование заказа Дмитрий
док. «заказКлиента» - модуль объекта — при проведении
в самое начало добавляем.
// если не согласован - отказ
если НЕ ЗаказСогласован тогда сообщить("необходимо согласовать документ"); отказ=истина; возврат; конецЕсли;
в заказеКлиента-права. Для роли ОтделР добавить изменение, проведение, редактирование, интерактивное проведение оперативное и не оперативное, интерактивная отмена проведения.
в результате получаем:
вот так согласование выглядит в заказе покупателя