Разрешение на редактирование накладной
Модераторы: m0p3e, edward_K, Модераторы
Разрешение на редактирование накладной
Добрый день!
У кого есть исходники? Какой функцией, переменной или еще как-нибудь задается право на редактирование накладной?
Если в настройках поставить, чтобы редактировать проведенные накладные можно было только с подтверждением, то система сначала задает вопрос, а потом уже меняй что хочешь. То есть где-то есть признак разрешения редактировать этот документ. А вот где он, и как им управлять?
Хочу сделать, чтобы при открытии документ был недоступен для изменение, а разрешение его менять управлялось бы через кнопку. И, если меняли - перепроводить.
У кого есть исходники? Какой функцией, переменной или еще как-нибудь задается право на редактирование накладной?
Если в настройках поставить, чтобы редактировать проведенные накладные можно было только с подтверждением, то система сначала задает вопрос, а потом уже меняй что хочешь. То есть где-то есть признак разрешения редактировать этот документ. А вот где он, и как им управлять?
Хочу сделать, чтобы при открытии документ был недоступен для изменение, а разрешение его менять управлялось бы через кнопку. И, если меняли - перепроводить.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Разрешение на редактирование накладной
Код: Выделить всё
Function CheckTXO(): boolean;
По кнопке взведете переменную.
и аналог
Код: Выделить всё
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;
Re: Разрешение на редактирование накладной
edward_K писал(а):Если вернете в ней False документ будет заблокирован.Код: Выделить всё
Function CheckTXO(): boolean;
По кнопке взведете переменную.
и аналог- тут есть флаг - с сообщением или без.Код: Выделить всё
Function CheckTXOeX(mess : boolean): boolean;
Вызовете ее с false - получите всегда запрет для Fin.User.ModHaveProvod >0, если есть проводки.
Но тогда настройку Fin.User.ModHaveProvod =1 вам нужно обработать самостоятельно.
Так доступ нигде не хранится - для быстроты запоминается последнее обращение к текущему документу. Документ сменился - новая проверка.
Сама проверка выполняется такно если вы будете ее дергать каждый раз, будет тормозить.Код: Выделить всё
oSDfuns.CanModifyDocument(KatSopr.NRec, KatSopr.VidSopr, mess)
Ну там правда еще до этого есть проверки по ордерам и может что то специфичное для типа документа.
Полная здесьВезде true - разрешено.Код: Выделить всё
function OtkatToOldSttate(NeedMsg: boolean = true): boolean;
Как все сложно... А что с этим всем делать?
Что значит "Function CheckTXO(): boolean; Если вернете в ней False"? Как я в ней верну false? Ее можно переопределить/расширить в своей докомпиляции?
Спасибо за такой подробный ответ!
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Разрешение на редактирование накладной
Ищите overload, inherited
Объяснять все очень долго
Объяснять все очень долго
Re: Разрешение на редактирование накладной
Думаю разберусь. Спасибо!edward_K писал(а):Ищите overload, inherited
Объяснять все очень долго
Re: Разрешение на редактирование накладной
Что-то не получается... Сделал вот так: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
} ;
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Разрешение на редактирование накладной
FIN.USER.MODHAVEPROVOD - это код Настройки. Поиск в настройках по alt-2, просмотр alt-1
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка
Re: Разрешение на редактирование накладной
Да, я про настройку и говорил. Я ее установил в 1. То есть "с подтверждением".edward_K писал(а):FIN.USER.MODHAVEPROVOD - это код Настройки. Поиск в настройках по alt-2, просмотр alt-1
Про wgettune надеюсь знаете.
Ex вызывается местами в паре интерфейсов, перекройте обе чтобы наверняка
Пробовал обе перекрывать. Правда по отдельности. Ничего не происходит. Но по исходнику я правильно понял что нужно сделать?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Разрешение на редактирование накладной
В обеих функциях должно быть так
Result := inherited::CheckTXOeX(false);
if not Result .....
Лучше вызвать именно CheckTXOeX, поскольку CheckTXO при настройке в 1 всегда будет спрашивать.
У вас CheckTXOeX вызывалась без параметров - возможно была ошибка компиляции.
И научитесь использовать sil log - Сервис - утилиты - Система логирования - включить лог/выключить.
В настройки логирования либо вообще не заходите, либо помечаете все. Запуск и завершение нужно использовать максимально близко к интересующему событию.
Смотреть SmartInspectConsole.exe ( на форуме мож ссылки найдете , или ищите в инете).
И для начала добейтесь сообщения что у документа есть проводки без своего реса. До вызова этой еще парочка проверок есть - но там вроде как без вопросов - либо да, либо нет.
Result := inherited::CheckTXOeX(false);
if not Result .....
Лучше вызвать именно CheckTXOeX, поскольку CheckTXO при настройке в 1 всегда будет спрашивать.
У вас CheckTXOeX вызывалась без параметров - возможно была ошибка компиляции.
И научитесь использовать sil log - Сервис - утилиты - Система логирования - включить лог/выключить.
В настройки логирования либо вообще не заходите, либо помечаете все. Запуск и завершение нужно использовать максимально близко к интересующему событию.
Смотреть SmartInspectConsole.exe ( на форуме мож ссылки найдете , или ищите в инете).
И для начала добейтесь сообщения что у документа есть проводки без своего реса. До вызова этой еще парочка проверок есть - но там вроде как без вопросов - либо да, либо нет.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Разрешение на редактирование накладной
Скорее всего нужно 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.
Но это навскидку. Нужно пробовать. ибо нюансы разные кнч могут быть в реализации стандартного функционала.
Именно его паблик 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.
Но это навскидку. Нужно пробовать. ибо нюансы разные кнч могут быть в реализации стандартного функционала.