Многие, кто еще не касался СКД или касался поверхностно, высказывают - СКД сырая приблуда, на которой можно рисовать простенькие отчеты, типа вывода на печать справочника номенклатуры!
Так вот, на самом деле СКД очень мощный и гибкий инструмент, позволяющий на несколько минут создать хороший и многофункциональный отчет!
Этим примером я хочу Вам это показать!
Цель:
Необходимо для проверки сдаваемой отчетности создать в ЗУПе отчет, выводящий по Организации Налогооблагаемые базы: ОБЩАЯ, БАЗА ПФР, БАЗА ФОМС, БАЗА ФСС, БАЗА ФСС от НС, БАЗА не облагаемая и Скидка.
В отчете Нужна разбивка по месяцам, Видам Дохода, Видам расчета входящих в выше указанный Вид дохода,
Сумму представленную по Виду расчета, необходимо развернуть по ФизЛицу с указанием документа начисления!
Создание:
И так начнем:
1. Создаем отчет и Открываем Схему Компоновки Данных
2. В Наборах Данных -> Добавляем Набор данных - Запрос
Создаем не сложный запрос, собирающий доходы с регистра накопления СтраховыеВзносыСведенияОДоходах и по условиям распределяющий суммы в разные базы:
Код 1C v 8.х
ВЫБРАТЬ
СтраховыеВзносыСведенияОДоходах. Организация КАК Организация,
НАЧАЛОПЕРИОДА( СтраховыеВзносыСведенияОДоходах. Период, МЕСЯЦ) КАК Месяц,
СтраховыеВзносыСведенияОДоходах. ВидДохода КАК ВидДохода,
СтраховыеВзносыСведенияОДоходах. ВидРасчета КАК ВидРасчета,
СтраховыеВзносыСведенияОДоходах. Результат КАК ОБЩАЯ,
ВЫБОР
КОГДА СтраховыеВзносыСведенияОДоходах. ВидДохода. ВходитВБазуФСС
ТОГДА СтраховыеВзносыСведенияОДоходах. Результат
ИНАЧЕ 0
КОНЕЦ КАК БАЗА_ФСС,
ВЫБОР
КОГДА СтраховыеВзносыСведенияОДоходах. ВидДохода. ВходитВБазуФОМС
ТОГДА СтраховыеВзносыСведенияОДоходах. Результат
ИНАЧЕ 0
КОНЕЦ КАК БАЗА_ФОМС,
ВЫБОР
КОГДА СтраховыеВзносыСведенияОДоходах. ВидДохода. ВходитВБазуПФР
ТОГДА СтраховыеВзносыСведенияОДоходах. Результат
ИНАЧЕ 0
КОНЕЦ КАК БАЗА_ПФР,
ВЫБОР
КОГДА СтраховыеВзносыСведенияОДоходах. ВидРасчета. КодДоходаФСС_НС < > &НеОблагается
ИЛИ СтраховыеВзносыСведенияОДоходах. ВидРасчета. КодДоходаФСС_НС ЕСТЬ NULL
ТОГДА СтраховыеВзносыСведенияОДоходах. Результат
ИНАЧЕ 0
КОНЕЦ КАК БАЗА_ФСС_от_НС,
ВЫБОР
КОГДА СтраховыеВзносыСведенияОДоходах. ВидРасчета. КодДоходаФСС_НС = &НеОблагается
ТОГДА СтраховыеВзносыСведенияОДоходах. Результат
ИНАЧЕ 0
КОНЕЦ КАК БАЗА_Не_Облагаемая,
СтраховыеВзносыСведенияОДоходах. Скидка КАК Скидка,
СтраховыеВзносыСведенияОДоходах. Регистратор,
СтраховыеВзносыСведенияОДоходах. ФизЛицо,
СтраховыеВзносыСведенияОДоходах. ВидРасчета. КодДоходаФСС_НС
ИЗ
РегистрНакопления. СтраховыеВзносыСведенияОДоходах КАК СтраховыеВзносыСведенияОДоходах
Закладка - Набор данных:
3. Так как у нас только один набор данных, закладку Связи Наборов Данных пропускаем.
Вычисляемые поля, тоже нам не нужны - пропускаем.
4. Для расчета итогов по группировкам на закладке Ресурсы добавляем:
5. В запросе я использовал Параметры, теперь на Закладке Параметры их нужно указать:
6. Закладки Макет и Вложенные Запросы пропускаем, переходим на Закладку Настройки
В верхней части формы необходимо указать выводимые данные отчета - воспользуемся Конструктором Настроек..
Далее комментировать не буду, смотрите по картинкам:
После нажатия на ОК получаем:
7. При формировании отчет будет выводить группировку месяц как дату 01.01.2010, сделаем же ее вида Январь 2010
Для этого в нижней части перейдем на Закладку Условное оформление и добавим строку:
В колонке область выберем Месяц, а в колонке Оформление зададим формат вывода:
Все, сохраняем, запускаем, формируем, получаем:
Вот так, за 5 минут был создан удобный отчет
(Скачать его можете здесь) !
Автор:
Мигачев Евгений Код 1C v 7.x Перем ИмяПути, ИмяФайла;
Перем xmlParser;
Функция УстановитьКомпоненту()
Если ЗагрузитьВнешнююКомпоненту( КаталогИБ( ) + "ExtFormsv7plus.dll" ) = 0 Тогда
Если ЗагрузитьВнешнююКомпоненту( "v7plus.dll" ) = 0 Тогда
Сообщить( "Не удалось обнаружить компоненту V7Plus.dll!" ) ;
Возврат 0 ;
КонецЕсли ;
КонецЕсли ;
Попытка
xmlParser = СоздатьОбъект( "Addin.XmlParser" ) ;
Исключение
Сообщить( "Не удалось создать объект Addin.XmlParser!" ) ;
Возврат 0 ;
КонецПопытки ;
Возврат 1 ;
КонецФункции
Процедура Выполнить()
стрИмяФайла= ИмяПути+ ИмяФайла;
таб= СоздатьОбъект( "ТаблицаЗначений" ) ;
таб. НоваяКолонка( "Ф" , "Строка" , 50 , 0 ) ;
таб. НоваяКолонка( "И" , "Строка" , 50 , 0 ) ;
таб. НоваяКолонка( "О" , "Строка" , 50 , 0 ) ;
таб. НоваяКолонка( "ДатаР" , "Дата" ) ;
таб. НоваяКолонка( "_01" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_02" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_03" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_04" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_05" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_06" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_07" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_08" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_09" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_10" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_11" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "_12" , "Число" , 16 , 2 ) ;
таб. НоваяКолонка( "СумГод" , "Число" , 18 , 2 ) ;
таб. НоваяКолонка( "ОблГод" , "Число" , 18 , 2 ) ;
таб. НоваяКолонка( "УдерГод" , "Число" , 18 , 2 ) ;
таб. НоваяКолонка( "Индекс" , "Строка" , 6 , 0 ) ;
таб. НоваяКолонка( "Регион" , "Строка" , 2 , 0 ) ;
таб. НоваяКолонка( "Город" , "Строка" , 20 , 0 ) ;
таб. НоваяКолонка( "Улица" , "Строка" , 20 , 0 ) ;
таб. НоваяКолонка( "Дом" , "Строка" , 5 , 0 ) ;
таб. НоваяКолонка( "Корпус" , "Строка" , 5 , 0 ) ;
таб. НоваяКолонка( "Квартира" , "Строка" , 5 , 0 ) ;
Документ= xmlParser. СоздатьДокумент( ) ;
Документ. Загрузить( стрИмяФайла) ;
Данные= Документ. ПолучитьПодчиненныйПоНомеру( 2 ) ;
Для Сч= 1 По Данные. КоличествоПодчиненных( ) Цикл
таб. НоваяСтрока( ) ;
Элем= Данные. ПолучитьПодчиненныйПоНомеру( Сч) ;
УзелПолучДох= Элем. ВыбратьУзлы( "ПолучДох" ) ;
Для Сч3 = 0 По УзелПолучДох. КоличествоУзлов- 1 Цикл
ФИО= УзелПолучДох. ПолучитьУзел( Сч3 ) . ПолучитьПодчиненныйПоНомеру( 1 ) ;
таб. Ф= ФИО. ПолучитьПодчиненныйПоНомеру( 1 ) . Текст;
таб. И = ФИО. ПолучитьПодчиненныйПоНомеру( 2 ) . Текст;
таб. О= ФИО. ПолучитьПодчиненныйПоНомеру( 3 ) . Текст;
таб. ДатаР= УзелПолучДох. ПолучитьУзел( Сч3 ) . ПолучитьПодчиненныйПоНомеру( 3 ) . Значение;
адр= УзелПолучДох. ПолучитьУзел( Сч3 ) . ПолучитьПодчиненныйПоНомеру( 6 ) ;
Для Сч4 = 1 По адр. КоличествоПодчиненных( ) Цикл
Если адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "Индекс" Тогда
таб. Индекс= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
ИначеЕсли адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "КодРегион" Тогда
таб. Регион= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
ИначеЕсли адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "Город" Тогда
таб. Город= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
ИначеЕсли адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "Улица" Тогда
таб. Улица= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
ИначеЕсли адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "Дом" Тогда
таб. Дом= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
ИначеЕсли адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "Корпус" Тогда
таб. Корпус= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
ИначеЕсли адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Наименование= "Кварт" Тогда
таб. Квартира= адр. ПолучитьПодчиненныйПоНомеру( Сч4 ) . Текст;
Иначе
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
УзелСвДохСтав= Элем. ВыбратьУзлы( "СвДохСтав" ) ;
Для Сч3 = 0 По УзелСвДохСтав. КоличествоУзлов- 1 Цикл
УзелДохВыч= УзелСвДохСтав. ПолучитьУзел( Сч3 ) . ВыбратьУзлы( "ДохВыч" ) ;
Для Сч4 = 0 По УзелДохВыч. КоличествоУзлов- 1 Цикл
МесДоход= УзелДохВыч. ПолучитьУзел( Сч4 ) ;
ИмяМес= "" ;
СумМес= 0 ;
Если МесДоход. ПолучитьПодчиненныйПоНомеру( 1 ) . Наименование= "НомМес" Тогда
ИмяМес= МесДоход. ПолучитьПодчиненныйПоНомеру( 1 ) . Текст;
КонецЕсли ;
Если МесДоход. ПолучитьПодчиненныйПоНомеру( 3 ) . Наименование= "СумДоход" Тогда
СумМес= МесДоход. ПолучитьПодчиненныйПоНомеру( 3 ) . Значение;
КонецЕсли ;
Если ПустоеЗначение( ИмяМес) = 0 Тогда
Если ИмяМес= "01" Тогда
таб. _01= СумМес;
ИначеЕсли ИмяМес= "02" Тогда
таб. _02= СумМес;
ИначеЕсли ИмяМес= "03" Тогда
таб. _03= СумМес;
ИначеЕсли ИмяМес= "04" Тогда
таб. _04= СумМес;
ИначеЕсли ИмяМес= "05" Тогда
таб. _05= СумМес;
ИначеЕсли ИмяМес= "06" Тогда
таб. _06= СумМес;
ИначеЕсли ИмяМес= "07" Тогда
таб. _07= СумМес;
ИначеЕсли ИмяМес= "08" Тогда
таб. _08= СумМес;
ИначеЕсли ИмяМес= "09" Тогда
таб. _09= СумМес;
ИначеЕсли ИмяМес= "10" Тогда
таб. _10= СумМес;
ИначеЕсли ИмяМес= "11" Тогда
таб. _11= СумМес;
ИначеЕсли ИмяМес= "12" Тогда
таб. _12= СумМес;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
УзелНалПер= УзелСвДохСтав. ПолучитьУзел( Сч3 ) . ВыбратьУзлы( "СГДНалПер" ) ;
НалПер= УзелНалПер. ПолучитьУзел( 0 ) ;
Если НалПер. Наименование= "СГДНалПер" Тогда
таб. СумГод= НалПер. ПолучитьПодчиненныйПоНомеру( 1 ) . Значение;
таб. ОблГод= НалПер. ПолучитьПодчиненныйПоНомеру( 2 ) . Значение;
таб. УдерГод= НалПер. ПолучитьПодчиненныйПоНомеру( 3 ) . Значение;
КонецЕсли ;
КонецЦикла ;
Состояние( Сч) ;
КонецЦикла ;
Т= СоздатьОбъект( "Таблица" ) ;
Т. ИсходнаяТаблица( "Таблица" ) ;
таб. выбратьСтроки( ) ;
Т. ВывестиСекцию( "Шапка" ) ;
нпп= 1 ;
Пока таб. ПолучитьСтроку( ) = 1 Цикл
Т. ВывестиСекцию( "Текст" ) ;
нпп= нпп+ 1 ;
КонецЦикла ;
Т. ТолькоПросмотр( 1 ) ;
Т. Опции( 0 , 0 , 1 , 0 ) ;
Т. ПараметрыСтраницы( 2 , , , 5 , 5 , 5 , 5 , , , 1 ) ;
Т. Показать( "Прочитали из XML" ) ;
КонецПроцедуры
Процедура Выбрать()
ФС. ВыбратьФайл( 0 , ИмяФайла, ИмяПути, "Выберите файл" , "xml файлы (*.xml) |*.xml|Все файлы (*.*) |*.*" , "xml" , ) ;
Если ПустоеЗначение( ИмяФайла) = 0 Тогда
PathSbitn= ИмяПути+ ИмяФайла;
КонецЕсли ;
КонецПроцедуры
Процедура ПриОткрытии()
ИмяФайла = "" ;
ИмяПути = "P:" ;
res= УстановитьКомпоненту( ) ;
КонецПроцедуры
Пример файла XML :
Код
<?xml version="1.0" encoding="windows-1251"?>
<НДФЛ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсФорм="4.00001" ВерсПрог="НП 10.31" ИдФайл="ДОХОД_2НДФЛ">
<Справка>
<ОбщСвИЧ>
<ГодДох>2006</ГодДох>
<НомСпр>1</НомСпр>
<ДатаСпр>26.03.2007</ДатаСпр>
<ИФНСНА>7777</ИФНСНА>
</ОбщСвИЧ>
<ИстДох>
<СвНАЮЛ>
<ИННЮЛ>1234567890</ИННЮЛ>
<КПП>12345678</КПП>
<НаимОрг>ООО Рога и Копыта</НаимОрг>
<ОКАТО>12345678901</ОКАТО>
</СвНАЮЛ>
</ИстДох>
<ПолучДох>
<ФИО>
<Фамилия>Иванов</Фамилия>
<Имя>Иван</Имя>
<Отчество>Иванович</Отчество>
</ФИО>
<Статус>1</Статус>
<ДатаРожд>24.01.1973</ДатаРожд>
<Гражданство>643</Гражданство>
<УдЛичн>
<КодУдЛичн>21</КодУдЛичн>
<СерНомДок>12 01 012345</СерНомДок>
</УдЛичн>
<АдрМЖРФ>
<Индекс>123456</Индекс>
<КодРегион>77</КодРегион>
<Город>Энн г</Город>
<Улица>Ленина ул</Улица>
<Дом>99</Дом>
<Корпус>5</Корпус>
<Кварт>12</Кварт>
</АдрМЖРФ>
</ПолучДох>
<СвДохСтав>
<Ставка>35</Ставка>
<ДохВыч>
<НомМес>02</НомМес>
<КодДоход>2610</КодДоход>
<СумДоход>252.15</СумДоход>
</ДохВыч>
<ДохВыч>
<НомМес>07</НомМес>
<КодДоход>2760</КодДоход>
<СумДоход>100.00</СумДоход>
<КодВычет>503</КодВычет>
<СумВычет>100.00</СумВычет>
</ДохВыч>
<ДохВыч>
<НомМес>10</НомМес>
<КодДоход>2760</КодДоход>
<СумДоход>100.00</СумДоход>
<КодВычет>503</КодВычет>
<СумВычет>100.00</СумВычет>
</ДохВыч>
<СГДНалПер>
<СГДСумм>252.15</СГДСумм>
<ОблСумм>252.15</ОблСумм>
<НИОблСумм>88</НИОблСумм>
<НУОблСумм>88</НУОблСумм>
<ВозврСуммПЛ>0</ВозврСуммПЛ>
<ЗачСуммПЛ>0</ЗачСуммПЛ>
<УдСуммПЛ>0</УдСуммПЛ>
<ДолгНП>0</ДолгНП>
<ДолгНА>0</ДолгНА>
<ВзыскИФНС>0</ВзыскИФНС>
</СГДНалПер>
</СвДохСтав>
</Справка>
</НДФЛ2>