Имя: Пароль:
1C
1С v8
УТ 11.5. Заказ клиента. Запретить создавать пко, эквайринговую операцию
0 sanyaka
 
29.06.23
06:55
Всем привет.

Подскажите, как скрыть из верхнего меню документа заказ клиента некоторые пункты (пко, эквайринговая операция). Чтобы пользователь не мог создать данные документы на основании заказа клиента.

Достаточно ли в конфигураторе открыть документ заказ клиента и в мастере снять соответствующие галочки с нужных документов. Или нужно в функциях в документах пко/экв.операция которые вызываются анализировать что это документ заказ клиента и ругаться например. Как правильно реализовать, чтобы потом при обновлении меньше проблем было.
1 PuhUfa
 
29.06.23
06:59
(0) убрать у пользователя права на эти документы не предлагать?
2 sanyaka
 
29.06.23
07:12
(1) Мысль с правами тож была. Нужно чтобы данные документы пользователь мог создавать на основании РТУ. Правами так можно разрулить?
3 PuhUfa
 
29.06.23
07:43
(2) тогда лучше делай расширение и в нем регулируй данный момент
4 sanyaka
 
29.06.23
09:41
(3) В любом случае и для расширения нужно найти место где данный список формируется. Там глубоко запрятано, где-то в общих модулях. Скорее всего этот метод для всех документов вызывается чтобы сформировать список. Быстро не получилось найти. Мож кто знает носом ткнет. А так буду продолжать искать в отладке.
5 sanyaka
 
29.06.23
09:47
Ну или в модуле документа Заказ клиента можно ли отловить начало выполнения этих команд...
6 Мультук
 
29.06.23
10:02
(5)

Как запретить открывание формы нового ПКО в зависимости от основания:


Начало этих команд нужно ловить при создании формы эквайринговой операции и далее смотреть по стеку кто и что вызывает.

В УТ создание формы документа ВСЕГДА прилетит вот сюда

МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)


Ставим точку останова в этой функции, создаем ПКО на основании заказа и смотрим в отладчике на

Форма.Имя
Форма.Основание
Форма.Объект.Ссылка

Нужно уметь пользоваться функциями ТипЗнч(), Тип(), ЗначениеЗаполнено()
Понимать что такое переменная Отказ и зачем она нужна
7 PuhUfa
 
29.06.23
10:11
(4) все гораздо ближе чем ты думаешь. Идешь в ММ своего ЗаказКлиента и там есть:

// Определяет список команд создания на основании.
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//  Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
8 sanyaka
 
29.06.23
13:58
(6) Спасибо большое! Получилось вот так:

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
    
    попытка    
        Если(ТипЗнч(Форма.Основание) = Тип("ДокументСсылка.ЗаказКлиента")) тогда    
         Если (Форма.ИмяФормы = "Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента" или
            Форма.ИмяФормы = "Документ.РасходныйКассовыйОрдер.Форма.ФормаДокумента" или
            //Форма.ИмяФормы = "Документ.ОперацияПоПлатежнойКарте.Форма.ФормаДокумента" или
            Форма.ИмяФормы = "Документ.ОперацияПоПлатежнойКарте.Форма.ФормаДокумента") тогда
             Отказ = Истина;        
             Сообщить("Нельзя создать "+Форма.ИмяФормы+" на основании ЗаказКлиента");        
         конецесли;  
        конецесли;
     исключение    
    конецпопытки;
    
КонецПроцедуры

Единственное не понял как правильно проверить что существует свойство основание в Форма.Основание пока обернул в попытку/исключение иначе падало если открыть журнал заказов.

Также для возврата эквайринга почему-то не заполнено основание... не понятно как проверить для этого случая.

----

Отладка по стеку показало, что в модуле документа заказ клиента выполняется сначала
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
9 sanyaka
 
29.06.23
14:00
(7) Нет там процедуры "ДобавитьКомандыСозданияНаОсновании". Скорее всего версия у Вас более старая.

Есть тут методы которые видимо и используются для наполнения меню командами:

Процедура Подключаемый_ОбновитьКоманды()
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры

Процедура ИнициироватьПолучениеДокументовНаОсновании()    
    ДанныеПоФоновомуЗаданиюПолучениеДокументовНаОсновании = ПродажиСервер.ПолучениеДокументовНаОснованиивФоне(ЭтотОбъект, Объект);
КонецПроцедуры
10 PuhUfa
 
29.06.23
14:07
(7) так и ты не указал версию, поэтому это может просто у тебя их еще нет -)
11 Мультук
 
29.06.23
14:08
(8)

1) Наверное сначала стоит проверить имя формы
         Если (Форма.ИмяФормы = "Документ.ПриходныйКассовыйОрдер.Форма.ФормаДокумента" или
            Форма.ИмяФормы = "Документ.РасходныйКассовыйОрдер.Форма.ФормаДокумента" или
            Форма.ИмяФормы = "Документ.ОперацияПоПлатежнойКарте.Форма.ФормаДокумента") тогда
               Если(ТипЗнч(Форма.Основание) = Тип("ДокументСсылка.ЗаказКлиента")) тогда    

2) Наверное всё же стоит проверять на
не ЗначениеЗаполнено(Форма.Объект.Ссылка)

иначе это будет срабатывать и уже на существующие документы

3) Приучите себя писать функции и процедуры. Таких вставочек из 5-6 строк будет много и вы несколько позже будете в них тонуть

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт

    //Задача 12345 Постановщик: Иванов А.А., Выполнил:sanyaka 28.06.2023
    ОграничениеСозданияПлатежныхДокументов(Форма, Отказ, СтандартнаяОбработка);

КонецПроцедуры
12 sanyaka
 
29.06.23
14:47
(10) 11.5.12.73
13 sanyaka
 
29.06.23
14:50
(11) Спасибо за подсказки. Чувствую себя студентом перед преподавателем )