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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

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

Сообщение spark »

Добрый день!

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

Хочу сделать, чтобы при открытии документ был недоступен для изменение, а разрешение его менять управлялось бы через кнопку. И, если меняли - перепроводить.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение 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 - разрешено.
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

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

Сообщение 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? Ее можно переопределить/расширить в своей докомпиляции?

Спасибо за такой подробный ответ!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

Ищите overload, inherited
Объяснять все очень долго
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

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

Сообщение spark »

edward_K писал(а):Ищите overload, inherited
Объяснять все очень долго
Думаю разберусь. Спасибо!
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

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

Сообщение 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. Что-то я неправильно понял? =(
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

FIN.USER.MODHAVEPROVOD - это код Настройки. Поиск в настройках по alt-2, просмотр alt-1
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

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

Сообщение spark »

edward_K писал(а):FIN.USER.MODHAVEPROVOD - это код Настройки. Поиск в настройках по alt-2, просмотр alt-1
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка
Да, я про настройку и говорил. Я ее установил в 1. То есть "с подтверждением".
Пробовал обе перекрывать. Правда по отдельности. Ничего не происходит. Но по исходнику я правильно понял что нужно сделать?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

В обеих функциях должно быть так
Result := inherited::CheckTXOeX(false);
if not Result .....
Лучше вызвать именно CheckTXOeX, поскольку CheckTXO при настройке в 1 всегда будет спрашивать.
У вас CheckTXOeX вызывалась без параметров - возможно была ошибка компиляции.
И научитесь использовать sil log - Сервис - утилиты - Система логирования - включить лог/выключить.
В настройки логирования либо вообще не заходите, либо помечаете все. Запуск и завершение нужно использовать максимально близко к интересующему событию.
Смотреть SmartInspectConsole.exe ( на форуме мож ссылки найдете , или ищите в инете).
И для начала добейтесь сообщения что у документа есть проводки без своего реса. До вызова этой еще парочка проверок есть - но там вроде как без вопросов - либо да, либо нет.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение 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.

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