Показать сообщение отдельно
Старый 28.03.2015, 17:24   #1  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
В Инкадее и в Брайт-авто используется следующая штука:
при логине в Нав, в первом кодъюните в таблицу User Session прописываются склад по умолчанию, (для юзера типа кладовщика, например, которого вообще не волнуют никакие склады, кроме того, где он работает), туда же запоминается логин юзера (чтобы потом прописываться в поле USer ID заказа продажи, например, который создает юзер) и т.п.


UserSession.RESET;
UserSession.INIT;
UserSession."Session ID" := Session."Connection ID";
IF NOT UserSession.GET(Session."Connection ID") THEN
UserSession.INSERT(TRUE);
UserSession."User ID" := User_ID;
UserSession."Location Code" := Locations.Code;

И прочая чепуха


Не знаю, каким хреном, но я такой не один (в смысле есть еще жертвы Инкадеи и Брайт-консалта, у которых данная проблема есть)
В момент создания документа (перемещение, заказ продажи, акт списания-оприходования) в этой самой таблице User Session в поле "Location Code" у рядового юзера вместо его правильно склада 'Правильный склад' оказывается значение 'совсем другой склада'
А дальше юзер смело учитывает документ и потом негодует, какого хрена движение получилось не со склада 'Правильный склад', а с какого-то совершенного непонятного для юзера 'совсем другой склад' (юзеру абсолютно не нужно знать, что есть в заказе продажи закладка "Поставка", на которой видно склад, с которого пойдет продажа, его волнуют совсем другие вещи, он кладовщик, например). Ну, или, бухгалтерия негодует. Или еще кто-нибудь, кого это касается.

Я, к сожалению, оказался в ситуации, когда проблема стояла в полный рост и в первую очередь нужно было проблему победить, а уже во-вторую понять, откуда у проблему растут ноги.

Я, в целом, очень ленив и предпочитаю смотреть котиков в интернетах, чем разбираться с какой-то неведомой непонятной хренью, которую и написал не я, и как она устроена, я не угу, и почему она глючит, хрен ее знает.
Поэтому проблему я решил примерно за 10 минут и забыл про нее.
Объявил в пользовательском диапазоне кодъюнит со свойством SingleInstance = Yes
Объявил в нем две функции - SetParams и GetParams, через которые пишутся и читаются необходимые параметры типа кода склада по умолчанию.
Изменил функцию GetLocation в таблице User Session, чтоб отдавала данные из моего кодъюнита, а не из этой самой неведомой таблицы
Ну и в 1-м кодъюните переписал вместо вставки

UserSession."Location Code" := Locations.Code;
UserSession.INSERT;

передачу кода склада в мой синглинстанс-кодъюнит
Т.е. что-то типа
Вместо UserSession."Location Code" := Locations.Code пишу
MybeautifulCodeunit.SetDefaultUserLocationCode('нужный код склада');

На всякий случай на первое время дописал еще ведение логов обращения к этому самому коду склада, что выдает мой вариант с синглинстансом, а что отдает User Session
Через два дня стало очевидно, что вариант с синглинстансом отрабатывает на 100% корректно.

А вот что там поломалось в этой гребанной User Session, я так и не знаю, котики прикольней.


Вот такая занимательная история произошла со мной пару лет назад.
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери