Страница 1 из 1

Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 14:05
spark
Добрый день!

У кого есть исходники? Какой функцией, переменной или еще как-нибудь задается право на редактирование накладной?
Если в настройках поставить, чтобы редактировать проведенные накладные можно было только с подтверждением, то система сначала задает вопрос, а потом уже меняй что хочешь. То есть где-то есть признак разрешения редактировать этот документ. А вот где он, и как им управлять?

Хочу сделать, чтобы при открытии документ был недоступен для изменение, а разрешение его менять управлялось бы через кнопку. И, если меняли - перепроводить.

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 18:12
edward_K

Код: Выделить всё

Function CheckTXO(): boolean;
Если вернете в ней False документ будет заблокирован.
По кнопке взведете переменную.
и аналог

Код: Выделить всё

Function CheckTXOeX(mess : boolean): boolean;
- тут есть флаг - с сообщением или без.
Вызовете ее с false - получите всегда запрет для Fin.User.ModHaveProvod >0, если есть проводки.
Но тогда настройку Fin.User.ModHaveProvod =1 вам нужно обработать самостоятельно.
Так доступ нигде не хранится - для быстроты запоминается последнее обращение к текущему документу. Документ сменился - новая проверка.
Сама проверка выполняется так

Код: Выделить всё

oSDfuns.CanModifyDocument(KatSopr.NRec, KatSopr.VidSopr, mess)
но если вы будете ее дергать каждый раз, будет тормозить.
Ну там правда еще до этого есть проверки по ордерам и может что то специфичное для типа документа.
Полная здесь

Код: Выделить всё

function OtkatToOldSttate(NeedMsg: boolean = true): boolean;
Везде true - разрешено.

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 18:20
spark
edward_K писал(а):

Код: Выделить всё

Function CheckTXO(): boolean;
Если вернете в ней False документ будет заблокирован.
По кнопке взведете переменную.
и аналог

Код: Выделить всё

Function CheckTXOeX(mess : boolean): boolean;
- тут есть флаг - с сообщением или без.
Вызовете ее с false - получите всегда запрет для Fin.User.ModHaveProvod >0, если есть проводки.
Но тогда настройку Fin.User.ModHaveProvod =1 вам нужно обработать самостоятельно.
Так доступ нигде не хранится - для быстроты запоминается последнее обращение к текущему документу. Документ сменился - новая проверка.
Сама проверка выполняется так

Код: Выделить всё

oSDfuns.CanModifyDocument(KatSopr.NRec, KatSopr.VidSopr, mess)
но если вы будете ее дергать каждый раз, будет тормозить.
Ну там правда еще до этого есть проверки по ордерам и может что то специфичное для типа документа.
Полная здесь

Код: Выделить всё

function OtkatToOldSttate(NeedMsg: boolean = true): boolean;
Везде true - разрешено.
:???:
Как все сложно... А что с этим всем делать?
Что значит "Function CheckTXO(): boolean; Если вернете в ней False"? Как я в ней верну false? Ее можно переопределить/расширить в своей докомпиляции?

Спасибо за такой подробный ответ!

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 18:58
edward_K
Ищите overload, inherited
Объяснять все очень долго

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 19:14
spark
edward_K писал(а):Ищите overload, inherited
Объяснять все очень долго
Думаю разберусь. Спасибо!

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 19:40
spark
edward_K писал(а):Ищите overload, inherited
Объяснять все очень долго
Что-то не получается... Сделал вот так:

Код: Выделить всё

alter interface SOPRDOC;

overload
Function CheckTXOeX(mess : boolean): boolean;
end;

Function CheckTXOeX(mess : boolean): boolean;
  {
     inherited::CheckTXOeX;
     if Message('Редактируем?', yesNo+Confirmation) = cmYes
      result:=true
      else
      result:=false
  } ;
Ничего не происходит. Как работало, так и работает. Настройка при этом FIN.USER.MODHAVEPROVOD = 1. Что-то я неправильно понял? =(

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 19:46
edward_K
FIN.USER.MODHAVEPROVOD - это код Настройки. Поиск в настройках по alt-2, просмотр alt-1
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка

Re: Разрешение на редактирование накладной

Добавлено: 27 мар 2020, 19:49
spark
edward_K писал(а):FIN.USER.MODHAVEPROVOD - это код Настройки. Поиск в настройках по alt-2, просмотр alt-1
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка
Да, я про настройку и говорил. Я ее установил в 1. То есть "с подтверждением".
Пробовал обе перекрывать. Правда по отдельности. Ничего не происходит. Но по исходнику я правильно понял что нужно сделать?

Re: Разрешение на редактирование накладной

Добавлено: 28 мар 2020, 14:08
edward_K
В обеих функциях должно быть так
Result := inherited::CheckTXOeX(false);
if not Result .....
Лучше вызвать именно CheckTXOeX, поскольку CheckTXO при настройке в 1 всегда будет спрашивать.
У вас CheckTXOeX вызывалась без параметров - возможно была ошибка компиляции.
И научитесь использовать sil log - Сервис - утилиты - Система логирования - включить лог/выключить.
В настройки логирования либо вообще не заходите, либо помечаете все. Запуск и завершение нужно использовать максимально близко к интересующему событию.
Смотреть SmartInspectConsole.exe ( на форуме мож ссылки найдете , или ищите в инете).
И для начала добейтесь сообщения что у документа есть проводки без своего реса. До вызова этой еще парочка проверок есть - но там вроде как без вопросов - либо да, либо нет.

Re: Разрешение на редактирование накладной

Добавлено: 01 апр 2020, 17:28
Den
Скорее всего нужно Alter-ить VipInterface iOtkatToOldState (OtkatToOldState.vih) кроме самого Soprdoc
Именно его паблик OtkatToOldState отрабатывает при всяких действиях в окне накладной.
И там есть метод CheckTXO как раз (если вас интересует действительно только настройка FIN.USER.MODHAVEPROVOD)
Т.е. примерная схема такая :
1. В soprdoc добавляется кнопка, которая по смыслу включает/отключает обратно действие настройки FIN.USER.MODHAVEPROVOD
По факту , нужно будет реализовать объект(ну или не объект а другой способ...) некий между Soprdoc и iOtkatToOldState, который сигнализирует iOtkatToOldState по поводу "меня запустили из накладной на отпуск с флагом не учитывать настройку FIN.USER.MODHAVEPROVOD" или (если кнопку отработали взад) "меня запустили из накладной на отпуск, но стандартно учитываем FIN.USER.MODHAVEPROVOD".

2. В iOtkatToOldState смотрим в методе CheckTXO запустили его из 201 накладной и с флагом "не учитывать FIN.USER.MODHAVEPROVOD" или обычно. И делаем нужные действие ,в зависимости от этого в CheckTXO.

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