Отсутствующие проводки ГК для «аналитики» КЗ

Автор Сообщение
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 19.05.2016 21:37 Заголовок сообщения: Отсутствующие проводки ГК для "аналитики" КЗ
Коллеги, добрый вечер Very Happy

Делаю отчёт для проверки соответствия Главной Книги и Книги Закупок. Применил немного иной алгоритм, чем обычно. Речь в данном случае только о проверке наличия во всех возможных журналах (включая и те, что ещё не попали в Главную Книгу) проводок к счетам-фактурам и платежам Книги Закупок. Запустил на клиентских данных, получил несколько тысяч записей. Странно как-то… Но, на мой взгляд, алгоритм правильный. Выборочно проверил несколько записей, всё верно, они попали в результирующий набор данных законно Very Happy

Хотите проверить свои данные? Только не забудьте написать, работает ли это у Вас. Запрос сделан под современные версии SQL сервера, на старых, возможно придётся сделать изменения в части создания временной таблицы. А более всего меня интересует, правильно ли он покажет результат "по смыслу" Very Happy Very Happy

Тогда вот Вам:

Код:
CREATE procedure usr_RS_DifferenceBetweenPLandGL_by_TransactionNumber_SupplierCode_InvoiceNumber
@CC nchar(2)=’01’
as
CREATE TABLE #TransactionNumbers(
   [TransactionNumber] [nvarchar](9) NOT NULL,
   [SupplierCode] [nvarchar](15) NOT NULL,
   [InvoiceNumber] [nvarchar](25) NOT NULL,
   [TableName] [nchar](8) NOT NULL,
   [FinYear] [nchar](4) NOT NULL,

 CONSTRAINT [SYFF02161] PRIMARY KEY CLUSTERED
(
   [TransactionNumber] ASC,
   [SupplierCode] ASC,
   [InvoiceNumber] ASC,
   [TableName] ASC,
   [FinYear] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

declare @FinYear nchar(4)
declare @sql nvarchar(1500)

DECLARE CC_cursor CURSOR FOR
SELECT
[Year]
FROM [ScaCompanyYear] (nolock)
where CompanyCode=@CC
OPEN CC_cursor
FETCH NEXT FROM CC_cursor INTO
@FinYear
IF @@FETCH_STATUS <> 0
PRINT ‘         <<None>>’     

WHILE @@FETCH_STATUS = 0
BEGIN
set @sql=’select distinct rtrim(GL06002), rtrim(GL06006), rtrim(GL06007), »GL06’+@CC+right(@FinYear,2)+»’, »’+@FinYear+»’ from GL06’+@CC+right(@FinYear,2)+’ (nolock) where char(GL06012) in(»0»,»5»,»6»)’
insert into #TransactionNumbers
exec(@sql)
set @sql=’select distinct rtrim(GL07002), rtrim(GL07012), rtrim(GL07013), »GL07’+@CC+right(@FinYear,2)+»’, »’+@FinYear+»’ from GL07’+@CC+right(@FinYear,2)+’ (nolock) where GL07021 in(»0»,»6»)’
insert into #TransactionNumbers
exec(@sql)
set @sql=’select distinct rtrim(PL04002), rtrim(PL04012), rtrim(PL04013), »PL04’+@CC+right(@FinYear,2)+»’, »’+@FinYear+»’ from PL04’+@CC+right(@FinYear,2)+’ (nolock)’
insert into #TransactionNumbers
exec(@sql)
set @sql=’select distinct rtrim(PL05002), rtrim(PL05012), rtrim(PL05013), »PL05’+@CC+right(@FinYear,2)+»’, »’+@FinYear+»’ from PL05’+@CC+right(@FinYear,2)+’ (nolock)’
insert into #TransactionNumbers
exec(@sql)
FETCH NEXT FROM CC_cursor INTO
@FinYear
END

CLOSE CC_cursor
DEALLOCATE CC_cursor

set @sql=’select
»Invoice» as RecordType,
PL03001 as SupplierCode,
PL03002 as InvoiceNumber,
PL03003 as TransactionNumber,
PL03005 as BE_Date,
PL03014 as InvoiceAmount,
SYCD009 as CurrencyCode,
PL03024 as Text
from PL03’+@CC+’00 (nolock)
join SYCD’+@CC+’00 (nolock)
on SYCD001=PL03015
left join #TransactionNumbers
on rtrim(PL03003)=[TransactionNumber] COLLATE DATABASE_DEFAULT
and rtrim(PL03001)=[SupplierCode] COLLATE DATABASE_DEFAULT
and rtrim(PL03002)=[InvoiceNumber] COLLATE DATABASE_DEFAULT
where [TransactionNumber] is null and PL03014<>0

union all

select
»Payment» as RecordType,
PL21001 as SupplierCode,
PL21002 as InvoiceNumber,
PL21005 as TransactionNumber,
PL21007 as BE_Date,
PL21009 as InvoiceAmount,
SYCD009 as CurrencyCode,
PL21020 as Text
from PL21’+@CC+’00 (nolock)
join SYCD’+@CC+’00 (nolock)
on SYCD001=PL21015
left join #TransactionNumbers
on rtrim(PL21005)=[TransactionNumber] COLLATE DATABASE_DEFAULT
and rtrim(PL21001)=[SupplierCode] COLLATE DATABASE_DEFAULT
and rtrim(PL21002)=[InvoiceNumber] COLLATE DATABASE_DEFAULT
where [TransactionNumber] is null
Order by SupplierCode, BE_Date, InvoiceNumber, RecordType’

exec(@sql)

drop table #TransactionNumbers

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 25.08.2016 15:53 Заголовок сообщения: Re: Отсутствующие проводки ГК для "аналитики" КЗ
Похоже, что процедура работает. Я бы только добавил в начале процедуры

Код:
SET NOCOUNT ON


Кроме того, таблица SYCD{CC}00, откуда берётся код валюты, может использоваться от другой компании, часто это будет ’01’, даже если код компании @CC другой. Поэтому лучше взять код компании с валютным справочником из параметра текущей компании:

Код:
declare @VC nchar(2) /* код компании справочника валют */
SELECT @VC=[Value]
  FROM [ScaCompanyProperty]
  WHERE [CompanyCode] = @CC
  AND [PropertyID] = ‘100’


Остаётся добавить полученный код @VC в результирующий запрос:

Код:
join SYCD’+@VC+’00 (nolock)

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 25.08.2016 16:11 Заголовок сообщения: Re: Отсутствующие проводки ГК для "аналитики" КЗ

Jugulator писал(а):

Остаётся добавить полученный код @VC в результирующий запрос …

Спасибо! Ценное замечание!
Кстати, недавно я столкнулся с противоположной проблемой: проводки в Главной Книге, поступившие из журнала счетов-фактур Книги Закупок имеются, а сами счета-фактуры в Книге Закупок отсутствуют. Долго не мог понять, как такое в принципе возможно, но потом сумел воспроизвести подобную ситуацию: При импорте счетов-фактур готовятся 2 файла, один для импорта "аналитики" — самих счетов-фактур, второй — проводок к ним. Если нарушена процедура, например, первый файл проимпортирован с ошибкой, которую пользователь проигнорировал, а затем сделан импорт с параметром «Import transactions for nonexistent invoices» = "Yes" мы получим проводки для отсутствующих счетов. Я всегда против инструкций типа "три раза нажмите Enter, затем 2 раза Esc" всегда нужно думать, что делаешь и читать сообщения, которые выдаёт система! Very Happy