Примеры функций
Содержание:
При настройке генерации проводок к документу - для алгоритма списания по FIFO - указывается сортировка для аналитики "Документ", "Договор", "Партия ТМЦ". Это позволяет скорректировать последовательность списания аналитических позиций сальдо с учетом особенностей объектов аналитики.
Например, если в аналитике используется договора, то можно применить сортировку "+Договор.Дата,+Договор.Номер". В этом случае перед стандартной сортировкой "[Тип субконто],[Субконто]" добавится "Договор.Дата, Договор.Номер".
Стандартного набора сортировок обычно достаточно для организации нужного варианта FIFO. Однако бывают случаи, когда приоритет получают объекты по "совокупности параметров". В таком случае в сортировку можно добавить функцию, которая будет формировать значение "для сортировки", позволяющее более гибко учесть заданные условия.
Например, функция приведенная ниже, дает более высокий приоритет сальдо по подразделению, совпадающему с поставщиком генерируемого документа:
CREATE Function [dbo].[_Приоритет сальдо по Док.Поставщик]
(@SubType Varchar(3), @SubId INT, @DocId INT, @SpecID INT)
Returns Varchar(30)
AS
BEGIN
Declare @RetStr Varchar(30)
Declare @DocPost INT
if @SubType='Под'
begin
Set @DocPost=Isnull((Select Поставщик From Документ with(Nolock) Where Ключ = @DocID),0)
Set @RetStr=Case When @SubId=@DocPost Then '00' Else '01' End
end
else
Set @RetStr='02'
RETURN @RetStr
END
А следующая функция обеспечивает приоритет договорам, в которых получатель совпадает с поставщиком генерируемого документа. При этом дата и номер договора также участвуют в сортировке. Основная сложность для разработчика заключается в том, что "сортируемое" значение - строка - может включать эквивалент нескольких полей - в данном случае 3-х. Поэтому нужно обеспечить фиксированное расположение эквивалентов полей в возвращаемой строке. В данном случае строка формируется следующим образом:
2 знака - приоритет по значению поля получатель
8 знаков - дата в формате YYYYMMDD
номер не форматируется, сортируется как строка.
Create Function dbo.[_СортДог_Получ=ДокПост_Дата_Номер]
(@SubType Varchar(3), @SubId INT, @DocId INT, @SpecID INT)
Returns Varchar(30)
AS
BEGIN
Declare @RetStr Varchar(30)
Declare @DocPost INT
if @SubType='Дог'
begin
Set @DocPost=Isnull((Select Поставщик From Документ with(Nolock) Where Ключ = @DocID),0)
Select @RetStr=Case When Договор.Получатель=@DocPost Then '00' Else '01' End +
Convert(Varchar(8),Договор.Дата,112) + Договор.Номер
From Договор with(Nolock) where Ключ=@SubId
end
else
Set @RetStr='02'
RETURN @RetStr
END