Примеры функций

Navigation:  Для разработчиков >

Примеры функций

Previous pageReturn to chapter overviewNext page

Содержание:

 

Функции сортировки FIFO

 

 

Функции сортировки FIFO

 

 При настройке генерации проводок к документу - для алгоритма списания по 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