НДФЛ-2, файл обмена в налоговую — кто как делает?

Автор Сообщение
Удалён
Гость

Добавлено: 20.03.2006 08:48 Заголовок сообщения: НДФЛ-2, файл обмена в налоговую — кто как делает?
«Стряпаю на коленке» отчет в налоговую (в формате XML)….
Народ, а как Вы в налоговую по физ.лицам отчитываетесь?
Неужели СКАЛа на выдает этот XML-файлик и каждый «на коленке его ваяет»?
Игорь Голиков
Главный форумщик

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

Добавлено: 20.03.2006 10:16 Заголовок сообщения:
Горячая линия Скалы выдает отчет, получающий XML файл. У нее есть два варианта этого отчета: для 5.1 и для 2.2. Информация из базы данных Скалы, получаемая этим отчетом, достаточно полно и точно отражает сведения о доходах (по видам и месяцам) и отчислениях НДФЛ. Но есть и трудности:
— Главная — адреса сотрудников: во-первых, в прошлом году адреса требовались только, если не было ИНН (а значит — почти не требовались), во-вторых, в Скале адреса и другие анкетные данные ведутся без КЛАДРа и часто в произвольном формате.
— Другие трудности:
* отсутствие контроля правильности серии и номера паспорта, а также ИНН,
* неполнота сведений об имущественном вычете,
* отсутствия вывода в отчете сведений о материальной выгоде, дивидендах и т.п.

Все эти моменты решаются с помощью «Налогоплательщик 2005» (я использовал версию 9.54 с январским КЛАДРом) путем загрузки в него полученного из Скалы XML файла. После загрузки некорректные даннные исправляются в НП2005, и они добавляются недостающими сведениями. Готовый XML файл выгружается уже из НР2005.

В НП2005 и КЛАДР тоже есть свои трудности:
— НП2005 не приемлет отрицательных чисел (приходится все исправления типа снятия неверно начисленных сумм дохода править вручную в НП2005 путем удаления первичной ошибки),
— выводимый XML файл для больших предприятий разбивается на независимые части по примерно 500 человек, что связано с размером дискеты (1.4М), приходится составлять отдельные реестры и протоколы,
— КЛАДР содержит много ошибок.

В целом работа по настройке отчета в Скале и загрузки его в НП2005 занимает от 1 до 2 часов рабочего времени. Время уходит только на адаптацию отчета к кастомизированной карточке сотрудника и используемым типам зарплат.

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

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

Добавлено: 20.03.2006 13:45 Заголовок сообщения: Новая эпоха: XML, XSD, XSLT и т.д.
Собственно, речь пойдет не о подготовке файла XML, а о том, что с ним дальше можно сделать.
Инструкция Горячей Линии Скала от 10.02.2006 по настройке формы 2-НДФЛ
(как есть с сохранением орфографии)
*** начало инструкции ***
Инстр для отладки 2-НДФЛ не существует
Тк для каждой компании требуется выполнить различные действия
Поставляется комплект из 5 фалов
Отчет 056 – бумажная форма 13% и 30%
Отчет 157 – файл 13 и 30%, формирует файл на диске С:.
Отчет 057 – бумажная форма 35%
Отчет 157 – файл 35% формирует файл на диске С:
А такжке pascc053 один для всех отчетов .
Дивиденды можно сделать по аналогии с 35%.
Что обязательно надо сделать:
1 lan/pa/ pa0401 в строку 5 (последняя) вместо 350(450) записать 2048 (без вариантов )
2 для iScala правильно настроить канал вывода отчета (возможно несколько вариантов)
3 скорректировать файл pas01056 в соответствии с вашим набором ТЗ (индивидуальная кастомизация)
4 устранение неточностей в исходной таблице РА06**00 (SQL база) (устр возможн. ошибок расчетов в 2005 г)
5 в названии последнего поля стандартных параметров (<81:605>) в первых трех позициях проставить “<> ( без вариантов )
6 назначить 3 накопителя для стыковки бумажн. и Эл отчета , номера накопителей указаны в блоке Сear-List в отчете рарсс056(но можно любые свободн. номера )
7 всегда надо выполнить отчет рарсс056 на вопрос *обновлять* ответить *да*
после этого можно выполнить отчет рарсс156 с выборкой по нак. 91 (04:150) для 13% и 90 (04:149) – для 35%
8 для scala5-1 XML файл нужно сконвертировать в 1251(ansi) , для iScala после названия файла в ddf поставить пробел /1
9 прочая экзотика , нестыковки… например При открытии RTF появляется сообщение о повреждении таблицы, Word 2000 может аварийно закрыться. С MS Word 2003 аварийного закрытия не происходит
Обычно окончательную отладку такого рода отчетов выполняет консультант
Одновременно с отладкой отчета 2-НДФЛл консультант выполнит и настройку Эл.формы отчета и проведет тренинг по работе с отчетами
*** конец инструкции ***

в принципе, я согласен, что для настройки этих отчетов достаточно указать правильные для конкретной компании номера полей в карточке сотрудника и нужные типы зарплат. Правда, при испытании присланных отчетов оказалось, что цифры доходов дублируются в одном месте в таблице доходов по видам и месяцам, сами доходы идут не в рекомендованном порядке, но это мелочи. Будем считать, что нужный нам XML-файл таким образом сформировать вполне реально. К тому времени, когда из Скалы прислали файл, мы уже использовали «наколенный» способ подготовки XML-файла с использованием DTS (SQL) и доступные бесплатные программы для работы с 2-НДФЛ, поэтому практическая ценность данных отчетов для нас была не очень велика. Однако, как доброжелатель, не могу не заметить, что лепить так называемые «бумажные формы» старорежимным способом, т.е. в формате RTF, открывая в Word, в данном случае не совсем идеологически правильно. К тому же, в самой инструкции прямо говорится о нестабильности Word при работе таким методом. Имея на руках полученный любым доступным способом XML-файл, можно применить, например, и технологии, использованные в том же «Налогоплательщик-2005», доступном для бесплатной загрузки с сайта http://www.gnivc.ru
В заголовке XML-файла есть следующие строки (2-я и 3-я) примерно следующего вида:
<?xml-stylesheet type=»text/xsl» href=»2ndfl.xsl»?>
<НДФЛ2 xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:noNamespaceSchemaLocation=»ДОХОД_2НДФЛ_01.XSD»>
Я уже подставил имя файла 2ndfl.xsl, отвечающего за отображение XML-файла в программе просмотра (Internet Explorer и др.). Файл ДОХОД_2НДФЛ_01.XSD служит для проверки содержимого и находится в корневом каталоге установленной программы «Налогоплательщик-2005». Файл 2ndfl.xsl можно получить оттуда же, т.к. он создается при работе программы в каталоге %TEMP% (C:\TEMP, C:\WINDOWS\TEMP, C:\WINNT\TEMP, точное название каталога можно получить, выполнив из командной строки команду SET) под именем tm01.tmp. Скопировать в другую папку этот файл можно командой COPY %TEMP%\tm01.tmp C:\2NDFL\2ndfl.xsl, т.е. из папки временных файлов в папку C:\2NDFL. Если в нашей папке C:\2NDFL будут находиться файлы XML, XSD и XSL, а в заголовке файла XML правильно указаны ссылки на файлы XSL и XSD, то при открытии файла XML в Internet Explorer мы увидим форму 2-НДФЛ именно в том виде, в каком ее показывает «Налогоплательщик-2005». Если имеющийся файл XML не структурирован с помощью знаков табуляции или пробелов, т.е. при открытии его как текстового файла содержимое просматривается без отступов как непрерывный массив текста, то при выполнении данного XSLT-преобразования будут видны некоторые недочеты, например, ФИО без пробелов. Чтобы избежать этого эффекта, нужно структурировать уже созданный XML-файл (скальский вариант как раз имеет структуру, речь идет о других способах и программах), например, с помощью какой-нибудь программы просмотра XML. Так, бесплатная программа XML Viewer http://www.mindfusion.org/product1.html при открытии XML-файла показывает в окне «XML Source» этот файл в структурированном виде и позволяет в таком виде файл сохранять через меню File — Save. Также в этой программе есть функция File — Apply XSLT, что позволяет, имея файлы XML и XSL, получить файл HTML, который уже будет просто отдельным файлом без всяких внешних связей для просмотра практически в любом броузере Интернет справок 2-НДФЛ со страничной разбивкой при печати из броузера. Кстати, и в Word его можно открыть потом.
Преобразование XML + XSL = HTML можно выполнить и из командной строки, например, как показал мне мой коллега с помощью программы на C#:
// begin MyXslt.cs
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

public class MyXslt
{
public static int Main(string[] args)
{

if (args.Length < 1)
{
Console.WriteLine(«MyXslt takes a well-formed XML from the file specified as 1st argument and transforms it using an XSL transformation file specified as the 2nd argument. Sends the result of the transformation to the standard output.»);
Console.WriteLine(«Usage:»);
Console.WriteLine(» myxslt datafile.xml transform.xsl»);
return 1;
}

//Load the XML data file.
XPathDocument doc = new XPathDocument(args[0]);

//Create the XslTransform and load the stylesheet.
XslTransform xsl = new XslTransform();
xsl.Load(args[1]);

//Transform the file.
xsl.Transform(doc, null, Console.Out);

return 0;
}
}
// end MyXslt.cs
EXE-файл компилируется из командной строки (только подставить нужную версию .NET) командой
%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\csc /r:System.dll /r:System.Xml.dll /r:Microsoft.VisualBasic.dll /r:Mscorlib.dll myxslt.cs
Скомпилированный файл запускается как myxslt datafile.xml transform.xsl > 2ndfl.htm
В общем, для затравки достаточно, а дальше уже каждый может автоматизироваться как считает нужным.

Удалён
Гость

Добавлено: 20.03.2006 14:49 Заголовок сообщения:
А вот как получить XML-файлик из DTS?
Я SQL-запрос написал (пример ниже привел), а в файлик на диск выгружаю из Делфи-программы. Может, есть более «умный» способ?

Код:
declare @Fl varchar(8000)
set @Offset = char(10)+char(9)+char(9)+char(9)

set @Fl = (select »
+ @Offset + dbo.[udf_2ndflMakeTag1Upp](’ИННФЛ’, InnFl)
+ @Offset + ‘<ФИО>’
+ @Offset + char(9) + dbo.[udf_2ndflMakeTag1Upp](’Фамилия’, F)
+ @Offset + char(9) + dbo.[udf_2ndflMakeTag1Upp](’Имя’, I)
+ @Offset + char(9) + dbo.[udf_2ndflMakeTag1Upp](’Отчество’, O)
+ @Offset + ‘</ФИО>’
+ @Offset + case
    when @Is35 = 2 then dbo.[udf_2ndflMakeTag1Upp](’Статус’, ‘2’)
    else                dbo.[udf_2ndflMakeTag1Upp](’Статус’, ‘1’)
  end
+ @Offset + dbo.[udf_2ndflMakeTag1Upp](’Пол’, Sex)
+ @Offset + ‘<УдЛичн>’
+ @Offset + char(9) + dbo.[udf_2ndflMakeTag1Upp](’КодУдЛичн’, @PasportType)
+ @Offset + char(9) + ‘<СерНом>’ + Upper(isnull(@Pasport, ‘ ‘))+'</СерНом>’
      —+ @Offset + char(9) + dbo.[udf_2ndflMakeTag1Upp](’СерНом’, @Pasport)
+ @Offset + ‘</УдЛичн>’
+ @Offset + dbo.[udf_2ndflMakeTag1Upp](’ДатаРожд’, left(BData, 10))
+ @Offset + dbo.[udf_2ndflMakeTag1Upp](’Гражданство’, @KodStrany )
from #HeadSpr)

— п.3. Коды дохода
declare @Doh varchar(8000)
set @Offset = char(10)+char(9)+char(9)+char(9)

set @Doh = »
—select * from #PA06

select @Doh = @Doh
+@Offset+ ‘<ДохВыч>’
+@Offset+ char(9)+ ‘<НомМес>’ + right(’0’+ltrim(str(m)), 2) + ‘</НомМес>’
+@Offset+ char(9)+ ‘<КодДоход>’ + ltrim(str(kd)) +'</КодДоход>’
+@Offset+ char(9)+ ‘<СумДоход>’ + ltrim(str(sd, 10, 2)) +'</СумДоход>’
+case when sv > 0 then @Offset+ char(9)+ ‘<КодВычет>’+kv+'</КодВычет>’
  else » end
+case when sv > 0 then @Offset+ char(9)+ ‘<СумВычет>’ + ltrim(str(sv, 10, 2)) +'</СумВычет>’
  else » end
+@Offset+ ‘</ДохВыч>’
from #PA06
order by npp

— п.4 Стандартные и имущественные вычеты
declare @Vich varchar(8000)
set @Offset = char(10)+char(9)+char(9)+char(9)
set @Vich = char(10)+char(9)+char(9) + ‘<СтандИмущВычет>’

select @Vich = @Vich    —sum(s)
+@Offset+'<ПравоВыч>’
+@Offset+char(9)+'<КодВыч>’+ ltrim(str(kod))+'</КодВыч>’
+@Offset+char(9)+'<СумВычет>’ + ltrim(str(s, 10, 2))+'</СумВычет>’
+@Offset+'</ПравоВыч>’
+case when kod = ‘0311’ then ( select
   @Offset+'<НомерУвед>’+rtrim(ltrim(isnull(nDocUved, »)))+'</НомерУвед>’
  +@Offset+'<ДатаУвед>’ +rtrim(ltrim(isnull(dUved, »)))+'</ДатаУвед>’
  +@Offset+'<ИФНС>’     +rtrim(ltrim(isnull(nnalogUved, »)))+'</ИФНС>’
  from #HeadSpr)
—   nDocUved = substring(PA11004, 33, 50)
— , dUved = substring(PA11005, 17, 8)
— , nnalogUved = substring(PA11005, 43, 4)
  else » end
from #Vich
—where IsStd = 1
order by kod

select @Vich = @Vich
+@Offset+'<СумСтНалВыч>’+ltrim(str(TotalVichStd, 10, 2))+'</СумСтНалВыч>’
+@Offset+'<СумИмуВыч>’+ltrim(str(TotalVichIm, 10, 2))+'</СумИмуВыч>’
from #Total

set @Vich = @Vich + char(10)+char(9)+char(9) + ‘</СтандИмущВычет>’

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

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

Добавлено: 21.03.2006 11:52 Заголовок сообщения:
На всякий случай, уточнение: строка <?xml-stylesheet type=»text/xsl» href=»2ndfl.xsl»?> с указанием файла преобразования нужна только для «бумажной» формы, просматриваемой в броузере. Тестирование формы 2-НДФЛ в формате XML нужно производить без этой строки в заголовке файла, иначе тестирующие программы, например, Tester 1.08 в составе пакета «Налогоплательщик ЮЛ», будут выдавать сообщение об ошибке, ожидая на входе только <?xml …> в первой строке и вторую строку <НДФЛ2 …> с указанием файла XSD.
Для информации статья о формате XML
http://ru.wikipedia.org/wiki/Xml#.D0.9E.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0_XML-.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2
Список редакторов XML из статьи http://www.xml-dev.com/xml/editors.html
Jugulator
Главный форумщик

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

Добавлено: 21.03.2006 19:36 Заголовок сообщения: Про XLS, HTML и DTS
Чтобы ФИО сотрудника показывались всегда через пробел, замените в файле xsl почти в самом конце файла строки
<span style=»text-decoration:underline»>
<xsl:value-of select=»ФизЛицо/ФИО»/>
</span>
на следующий фрагмент обязательно с пробелом между <xsl:text> и </xsl:text>:
<span style=»text-decoration:underline»>
<xsl:value-of select=»ФизЛицо/ФИО/Фамилия»/>
<xsl:text> </xsl:text>
<xsl:value-of select=»ФизЛицо/ФИО/Имя»/>
<xsl:text> </xsl:text>
<xsl:value-of select=»ФизЛицо/ФИО/Отчество»/>
</span>
Справочник по XSL-преобразованиям на английском языке в формате PDF http://www.topxml.com/xsl/DOMXSLTXPathRef.zip

Новый вариант преобразования XML + XSL = HTML с использованием C# позволяет выводить данные в указанный файл, что гораздо быстрее, чем на экран, и в кодировке ANSI вместо DOS (OEM):
// begin myxslt.cs
using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

public class MyXslt
{
public static int Main(string[] args)
{

if (args.Length < 1)
{
Console.WriteLine(«MyXslt takes a well-formed XML from the file specified as 1st argument»);
Console.WriteLine(«and transforms it using an XSL transformation file specified as the 2nd

argument.»);
Console.WriteLine(«Sends the result of the transformation to the file or uses standard output.»);
Console.WriteLine(«Usage:»);
Console.WriteLine(» myxslt datafile.xml transform.xsl [outputfile]»);
return 1;
}

//Load the XML data file.
XPathDocument doc = new XPathDocument(args[0]);

//Create the XslTransform and load the stylesheet.
XslTransform xsl = new XslTransform();
xsl.Load(args[1]);

//Transform the file.
if (args.Length > 1) // no 3rd argument
{
// Encoding enc = (Encoding) new UnicodeEncoding();
// Encoding enc = (Encoding) new UTF8Encoding();
Encoding enc = Encoding.Default;
//Create an XmlTextWriter to output to the console.
XmlTextWriter writer = new XmlTextWriter(args[2], enc);
writer.Formatting = Formatting.Indented;
xsl.Transform(doc, null, writer, null);
writer.Close();
}
else
{
xsl.Transform(doc, null, Console.Out, null);
}
return 0;
}
}
// end myxslt.cs

Компиляция исполняемого EXE-файла из командной строки:
%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\csc /r:System.dll /r:System.Xml.dll /r:Microsoft.VisualBasic.dll
/r:Mscorlib.dll myxslt.cs
Пример аналогичного преобразования в статье на английском языке на сайте Microsoft http://support.microsoft.com/kb/307322/EN-US/

Коротко о DTS-пакете, который можно использовать для получения исходного файла справок 2-НДФЛ в формате XML:
1. Сформировать исходную таблицу из трех текстовых полей формата XML в кодировке ANSI: первое поле — это заголовок записи
сотрудника, второе — секция «ДохВыч» переменной длины, третья — сведения об уплате в конце записи сотрудника. Секцию «ДохВыч»
можно сразу объявить максимальной длины типа varchar(8000), чтобы DTS не пытался потом обрезать при выводе. Формирование
таблицы можно также сделать частью DTS-пакета.
2. Для этой исходной таблицы создается DTS-пакет для вывода в текстовый файл на диске с определенным именем в формате ANSI и
разделителями TAB — знаками табуляции между полями, покольку XML допускает использование такого разделителя.
3. DTS-пакет вызывается из скрипта VBS и формирует текстовый файл, далее к нему дописываются заголовок <?xml …> и <НДФЛ2
…> и в конец файла помещается строка </НДФЛ2>.
Вот, собственно, и весь «наколенный» способ.