SelectSalaryDepartaments это то что нужно или нет?

Контур "Управление персоналом"

Модератор: Sparrow

Ответить
gavrilyukmg
заказчик
Сообщения: 87
Зарегистрирован: Пт, 14/03/2008 11:15
Имя Фамилия: Марина Гаврилюк
Откуда: КЧХК
Контактная информация:

SelectSalaryDepartaments это то что нужно или нет?

Сообщение gavrilyukmg »

Здравствуйте!
Такая проблема: есть настройка прав пользователей к подразделениям в модуле зарплата (таблица UserRight) и есть отчет, который работает с использованием интерфейса getAnyPodr (выбор подразделений, по работникам которых выдает разную информацию ). Но нужно чтобы пользователь при вызове отчета (ard) имел доступ только к подразделениям доступным ему по
таблице UserRight.
Сейчас он может получить информацию по всем подразделениям , какие есть в каталоге подразделений.
:-?

если интерфейс SelectSalaryDepartaments - это то что нужно, то можно а нем поподробнее: параметры, куда складываются значения множественного выбора:
1) если в Pick, то wTable -&
2) если в Mаркер, то имя маркера.

Хорошо бы исходник, если можно :shuffle:
Спасибо.
AlPatsino
топ-софт
Сообщения: 1
Зарегистрирован: Пт, 18/04/2008 16:29
Имя Фамилия: Александр Пацино
Откуда: ТопСофт
Контактная информация:

Сообщение AlPatsino »

Полагаю, что SelectSalaryDepartaments не совсем то что Вам нужно.

В Зарплате есть очень удобный интерфейс пометки доступных подразделений и лицевых счетов, который позволяет скрыть множество низкоуровневых операций, которые придется реализовывать используя SelectSalaryDepartaments. Такой интерфейс называется TraditionalPersonalAccountFilter(исходник: PAFilter.vip). Он предоставляет пользователю выбор подразделений в соответствии с разрешениями, прописанными в таблице UserRights. Автоматически перечитывает доступные лицевые счета после выбора подразделений (таблица CURLSCHET). Для него написан пакет утилит PAFilter.vpp, который значительно облегчает встраивание интерфейса в прикладной код.

Если Вас интересуют детали, то помеченные с помощью него подразделения для каждого пользователя хранятся в таблице APPLDOCS, где APPLDOCS.WTABLE = 1( константа: xrtCurrentDepartments в money.ccm ) и APPLDOCS.CREC = UserId. Ссылка на подразделение хранится в поле: APPLDOCS.CTIPDOC. Для извлечения списка ссылок помеченных подразделений для низкоуровневых операций удобно использовать: IAdjacentRefsIterator (SecondaryRefsIterator ) (исходник: XRefs.vip). Например:

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

var SRI:  IAdjacentRefsIterator;
LoadVipRef(SRI, 'SecondaryRefsIterator');	

var CurrentDepartmentList: longint;
CurrentDepartmentList := InitMarker('', 8, 200, 100, true);

// Закачка в маркер списка текущих подразделений:
// xrtCurrentDepartments = 1
if ( SRI.First(xrtCurrentDepartments, UserId) )
{
     do 
     {
          InsertMarker(CurrentDepartmentList, SRI.GetAdjacent);
     } while SRI.Next;
}
Последний раз редактировалось AlPatsino Пн, 21/04/2008 12:17, всего редактировалось 1 раз.
Аватара пользователя
Screw
топ-софт
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Сообщение Screw »

Можно использовать
  • интерфейс Z_KATPODR::GetPodalN - для выбора подразделений с учетом разграничения прав доступа
  • метод Z_LSCHET::ICurLsFunctions.LoadFullCurrentDepartmentList: longint - для доступа к списку текущих подразделений (по окончании работы с возвращаемым маркером обязательно уничтожьте его).
На всякий случай вот описание Z_LSCHET::ICurLsFunctions (CLSFuncs.vih):

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

//
//                      (c) 1994, 2008 корпорация ГАЛАКТИКА                      
//  Проект        : ГАЛАКТИКА                                                 
//  Система       : Заработная плата                                          
//  Назначение    : obj-интерфейс "Ф-ии пересканирования тек. лицевых счетов" 
//  Параметры     : нет                                                       
//
#ifndef _CLSFUNCS_INCLUDED_
#define _CLSFUNCS_INCLUDED_

#ifdef ComponentVersion
  #component "Z_Lschet"
#end

#include DepTree.vih

#doc
  Объектный интерфейс для работы со списком текущих лицевых счетов и
  подразделений.
#end
objinterface ICurLSFunctions;
  #doc
    Возвращает маркер со списком текущих подразделений.
  #end
  function LoadCurrentDepartmentList: longint;
  #doc
    Возвращает маркер с полным списком текущих подразделений (если фильтр по
    подразделениям не установлен, в маркер будут помещены nrec-и всех доступных
    подразделений).
  #end
  function LoadFullCurrentDepartmentList: longint;
  #doc
    Возввращает 32-х битную контрольную сумму содержимого маркера
    (предполагаемый размер элемента = 8 байт).
  #end
  function GetDepartmentsCheckSum(Departments: longint): longint;
  #doc
    Обновляет список текущих лицевых счетов. Возвращает true в случае успеха
    или false - в противном случае.
  #end
  function ReScan: boolean;
  #doc
    Устанавливает фильтр по подразделениям, ссылки на которые переданы в
    маркере Departments, и, если необходимо, обновляет список текущих лицевых
    счетов. Возвращает true в случае успеха или false - в противном случае.
  #end
  function ReScanIfNecessary(Departments: longint): boolean;
  #doc
    Возвращает строку с информацией о текущем фильтре по подразделениям.
  #end
  function GetDepartmentFilterStr: string;
end;

#doc
  Объектный интерфейс индикатора состояния фильтра по подразделениям.
#end
objinterface IDepartmentFilterStateDetector;
  #doc
    Возвращает true, если установлен фильтр по одному или нескольким (но не по
    всем доступным) подразделениям. В противном случае возвращает false.
  #end
  function IsDepartmentFilterSet: boolean;
end;

#doc
  Объектный интерфейс для управления флагом пересканирования текущих лицевых
  счетов.
#end
objinterface ICurLSFunctions1;
  #doc
    Устанввливает значение флага необходимости пересканирования текущих лицевых
    счетов для всех пользователей.
  #end
  procedure SetRescanNecessary4AllUsers(Value: boolean);
  #doc
    Устанавливает значение флага необходимости пересканирования текущих лицевых
    счетов для текущего пользователя.
  #end
  procedure SetRescanNecessary(Value: boolean);
end;

#doc
  Объектный интерфейс для управления периодом выборки информации о текущих
  лицевых счетах.
#end
objinterface IPeriodForScanFuncs;
  #doc
    Устанавливает месяц для пересканирования (описывается датой dValue).
  #end
  procedure SetPeriodViewBeginning(dValue: date);
  #doc
    Возвращает месяц для пересканирования (описывается датой).
  #end
  function GetPeriodViewBeginning: date;
end;

#doc
  Объектный интерфейс для инициализации фильтра по цеху учета (обычный)
#end
objinterface ICurLSFunctions2;
  #doc
    Инициализирует фильтр по цеху учета (обычный фильтр лицевых счетов по подразделению) </brief>
  #end
  function InitCommonFilter: boolean;
end;

#doc
  Объектный интерфейс настройки фильтра по цеху отнесения затрат
#end
objinterface ICexozFilter;
  #doc
    Инициализирует фильтр по цеху отнесения затрат </brief>
    Метод позволяет задать период сканирования. Под периодом сканирования понимается
    период в который попадают суммы из таблиц SumVidOp, Nachisl, Nenach с указанным
    в фильтре цехом отнесения затрат.
    Параметры:
      yearParam      - год
      monthBeginning - месяц начала периода сканирования
      monthEnding    - месяц конца периода сканирования
  #end
  procedure InitCexozFilter(yearParam: word; monthBeginning: byte; monthEnding: byte);
end;

#doc
  Объектный интерфейс определения доступности подразделения
#end
objinterface IDepartmentAvailability;
  #doc
    Возвращает true, если подразделение доступно
  #end
  function IsAvailable(Department: comp): boolean;
end;

//******************************************************************************
// Декларация стандартной реализации функционала работы со списком текущих
// лицевых счетов и подразделений
//******************************************************************************
vipInterface CurLSFunctions
  implements
    ICurLSFunctions,
    IDepartmentValidatorEquipped,
    IDepartmentFilterStateDetector,
    ICurLSFunctions1,
    IPeriodForScanFuncs,
    ICexozFilter,
    IDepartmentAvailability,
    ICurLSFunctions2
#ifdef ATL51
Licensed(Free)
#end
;

#end
Ответить