6-НДФЛ из ЗУП 2.5 без проблем. Специальная обработка проведения документов. Методика

19.10.16

Разработка - Механизмы типовых конфигураций

Сдача 6-НДФЛ из ЗУП 2.5 с минимальными временными затратами. Специальная обработка проведения документов.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Отдельно обработка проведения
.epf 9,46Kb
56
56
1 SM
Скачать Купить за 1 850 руб.

Все, кто пытался сформировать отчет 6-НДФЛ сталкивался с трудностями, возникающими в ЗУП 2.5 со снятой галкой в учетной политике "При начислении НДФЛ принимать удержанный как исчисленный":

  • Запрет на перепроведение выплат сотрудникам, если позже уже есть выплаты. Например нашли ошибку: не верно стоит дата получения дохода в отпуске или больничном, после исправления на верную нужно провести выплаты, что не представляется возможным.
  • При проведении выплаты межрасчетных начислений НДФЛ зачастую удерживается не этой выплаты, а с предыдущей. Например если человек уходит в отпуск в начале месяца и получет отпускные до зарплаты за предудущий месяц, то программа удерживает НДФЛ не с отпускных а с невыплаченной зарплаты, и 6-НДФЛ заполняется при этом не корректно.

Получается что 6-НДФЛ не получается сформировать в ЗУП 2.5 в общем случае без привлечения программистов.

Для решения указанных проблем предлагается следующая методика формирования отчета.

Во вложении обработка проведения документов, которую можно открыть в 1С ЗУП 2.5 через меню Файл-Открыть (или зарегистрировать во внешних обработках). Суть обработки в том, чтобы перепроводить документы не в хронологическом порядке:

  • Распроводятся документы по организации за указанный период. Для корректной работы обработки необходимо указывать период от начала квартала до последнего документа введенного в базу.
  • Проводятся сначала документы созданные в первом месяца квартала, но относящиеся к предудущему расчетному периоду в хронологической последовательности. Например выплаты за прошлый месяц.
  • Проводятся документы созданные в первом месяце квартала и относящиеся к расчетному периоду этого же месяца  в хронологической последовательности
  • Проводятся документы созданные в первом месяце квартала и относящиеся к расчетному периоду следующего месяца (если такие имеются)  в хронологической последовательности
  • Далее  второй месяц квартала, и так далее

Для такого метода существует требование, чтобы начиления были раньше выплат. Например если отпуск выплачивается 22.06, то дата документа начисления отпуска была 21.06, если выплата расчетных человеку при увольнении 22.06, то документ начисления зарплаты по нему, в котором расчитывается НДФЛ, был проведен 21.06, не смотря на то что программа предлагает провести его в конце месяца.

Поскольку документы проводятся в обработке с нарушение хронологи выплат, то чтобы программа давала возможноть запуска обработки необходимо в конфигурацию внести определенные изменения:

  • Снять с полной поддержки и сделать возможноть добавления новых объектов.
  • В параметры сеанса добавить НеПроверятьХронологиюУчетаУдержанногоНДФЛ тип Булево.
  • Включить редактирование Общих модулей:
    • ЗарплатаКВыплатеОрганизацийПереопределяемый
    • ПроведениеРасчетов
    • СтандартныеПодсистемыСервер
  • Внести изменения в модуль ЗарплатаКВыплатеОрганизацийПереопределяемый
Процедура ПровестиВзаиморасчеты(Документ, Отказ, Заголовок, РегистрироватьТолькоНДФЛ = Ложь) Экспорт
	
	Если Не РегистрироватьТолькоНДФЛ Тогда
		
		ПроведениеРасчетов.ПроверитьХронологиюУчетаУдержанногоНДФЛ(Документ.Организация, Документ.Зарплата.ВыгрузитьКолонку("ФизЛицо"), Документ.Дата, Отказ, Заголовок);
		Если Отказ Тогда
			Возврат
		КонецЕсли;
		
		Для Каждого СтрокаЗарплаты Из Документ.Зарплата Цикл
				
			СтрокаДвижения = Документ.Движения.ВзаиморасчетыСРаботникамиОрганизаций.ДобавитьРасход();
			
			СтрокаДвижения.Период       		= Документ.Дата;
			
			СтрокаДвижения.Организация			= Документ.Организация;
			СтрокаДвижения.Физлицо		 		= СтрокаЗарплаты.Физлицо;
			СтрокаДвижения.ПериодВзаиморасчетов	= Документ.ПериодРегистрации;
			
			СтрокаДвижения.СуммаВзаиморасчетов	= СтрокаЗарплаты.Сумма;
			
			СтрокаДвижения.ХарактерВыплаты		= Документ.ХарактерВыплаты;
			СтрокаДвижения.Ведомость     		= Документ.Ссылка;
			СтрокаДвижения.СпособВыплаты		= Документ.СпособВыплаты; 
			
			Если Документ.СпособВыплаты = Перечисления.СпособыВыплатыЗарплаты.ЧерезКассу И СтрокаЗарплаты.ВыплаченностьЗарплаты = Перечисления.ВыплаченностьЗарплаты.Задепонировано Тогда
				
				СтрокаДвижения = Документ.Движения.ВзаиморасчетыСДепонентамиОрганизаций.ДобавитьПриход();
				
				СтрокаДвижения.Период				= Документ.Дата;
				
				СтрокаДвижения.Организация			= Документ.Организация;
				СтрокаДвижения.Физлицо		 		= СтрокаЗарплаты.Физлицо;
				СтрокаДвижения.Ведомость			= Документ.Ссылка;
				
				// Ресурсы
				СтрокаДвижения.Сумма				= СтрокаЗарплаты.Сумма + СтрокаЗарплаты.КомпенсацияЗаЗадержкуЗарплаты; 
				
			КонецЕсли;	
			
			СтрокаДвижения = Документ.Движения.СведенияОВыплатахРаботникамОрганизацийПоПлатежнымВедомостям.Добавить();
			
			СтрокаДвижения.ФизЛицо   = СтрокаЗарплаты.ФизЛицо;
			СтрокаДвижения.Ведомость = Документ.Ссылка;

		КонецЦикла;	
		
	КонецЕсли;
	
	// По регистру расчетов с бюджетом по НДФЛ
	ГоловнаяОрганизация = ОбщегоНазначенияЗК.ГоловнаяОрганизация(Документ.Организация);
// сергей (	
	//Если Документ.ХарактерВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата Тогда
	//	ДатаНДФЛ = Макс(Документ.Дата, КонецМесяца(Документ.ПериодРегистрации));
	//Иначе
	//	ДатаНДФЛ = Документ.Дата;
	//КонецЕсли;
	Если ПараметрыСеанса.НеПроверятьХронологиюУчетаУдержанногоНДФЛ Тогда
        ДатаНДФЛ = Макс(Документ.Дата, КонецМесяца(Документ.ПериодРегистрации));
	Иначе	
		Если Документ.ХарактерВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата Тогда
			ДатаНДФЛ = Макс(Документ.Дата, КонецМесяца(Документ.ПериодРегистрации));
		Иначе
			ДатаНДФЛ = Документ.Дата;
		КонецЕсли;
	КонецЕсли;	
// сергей )	
	
	СтруктураДокумента = Новый Структура;
	СтруктураДокумента.Вставить("ДатаНДФЛ", КонецДня(ДатаНДФЛ));
	СтруктураДокумента.Вставить("Ссылка", Документ.Ссылка);
	СтруктураДокумента.Вставить("Период", Документ.Дата);
	СтруктураДокумента.Вставить("ОбособленноеПодразделение", Документ.Организация);
	СтруктураДокумента.Вставить("Организация", ГоловнаяОрганизация);
	СтруктураДокумента.Вставить("ХарактерВыплаты", Документ.ХарактерВыплаты);
	
	ТекстТаблицыВыплаты = 
	"ВЫБРАТЬ
	|	ЗарплатаКВыплате.Физлицо КАК ФизЛицо,
	|	СУММА(ЗарплатаКВыплате.Сумма) КАК Сумма
	|ПОМЕСТИТЬ ВТВыплатыФизлицам
	|ИЗ
	|	Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплате
	|ГДЕ
	|	ЗарплатаКВыплате.Ссылка = &ДокументСсылка
	|	И (ЗарплатаКВыплате.Ссылка.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезБанк)
	|			ИЛИ ЗарплатаКВыплате.ВыплаченностьЗарплаты = ЗНАЧЕНИЕ(Перечисление.ВыплаченностьЗарплаты.Выплачено)
	|			ИЛИ ЗарплатаКВыплате.ВыплаченностьЗарплаты = ЗНАЧЕНИЕ(Перечисление.ВыплаченностьЗарплаты.Задепонировано))
	|
	|СГРУППИРОВАТЬ ПО
	|	ЗарплатаКВыплате.Физлицо
	|
	|ИМЕЮЩИЕ
	|	СУММА(ЗарплатаКВыплате.Сумма) <> 0
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ФизЛицо";
	
	ПроведениеРасчетовПереопределяемый.СформироватьРасчетыПоНДФЛПриВыплате(СтруктураДокумента, ТекстТаблицыВыплаты, Документ.Движения.НДФЛРасчетыСБюджетом, Документ.Движения.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ);
	
КонецПроцедуры
  • Внести изменения в модуль ПроведениеРасчетов
Процедура ПроверитьХронологиюУчетаУдержанногоНДФЛ(Организация, Сотрудники, ДатаРегистрации, Отказ, Заголовок) Экспорт
// Сергей (
	Если ПараметрыСеанса.НеПроверятьХронологиюУчетаУдержанногоНДФЛ Тогда
		Возврат;
    КонецЕсли;
// Сергей )
	
	УпрощенныйУчетНДФЛ = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "УпрощенныйУчетНДФЛ");
	Если УпрощенныйУчетНДФЛ Тогда
		Возврат
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ДатаРегистрации", КонецДня(ДатаРегистрации));
	Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
	Запрос.УстановитьПараметр("ОбособленноеПодразделение", Организация);
	Запрос.УстановитьПараметр("Организация", ОбщегоНазначенияЗК.ГоловнаяОрганизация(Организация));
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	НДФЛРасчетыСБюджетом.Регистратор,
	|	ПРЕДСТАВЛЕНИЕССЫЛКИ(НДФЛРасчетыСБюджетом.Регистратор) КАК Описание
	|ИЗ
	|	РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
	|ГДЕ
	|	НДФЛРасчетыСБюджетом.ФизЛицо В(&Сотрудники)
	|	И НДФЛРасчетыСБюджетом.Организация = &Организация
	|	И НДФЛРасчетыСБюджетом.ОбособленноеПодразделение = &ОбособленноеПодразделение
	|	И НДФЛРасчетыСБюджетом.Период > &ДатаРегистрации
	|	И НДФЛРасчетыСБюджетом.ВидСтроки = ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.Удержание)
	|	И НДФЛРасчетыСБюджетом.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)";
	Результат = Запрос.Выполнить();
	
	Если Результат.Пустой() Тогда
		Возврат
	КонецЕсли;
	
	Выборка = Результат.Выбрать();
	ОбщегоНазначенияЗК.ВывестиИнформациюОбОшибке("Выявлено нарушение хронологии в учете удержанного НДФЛ: в данных присутствуют будущие записи, произведенные документом(ами)", Отказ, Заголовок);		
	Пока Выборка.Следующий() Цикл
		ОбщегоНазначенияЗК.ВывестиИнформациюОбОшибке("", Отказ, Заголовок, Перечисления.ВидыСообщений.Информация, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Новый Структура("Представление,Расшифровка", Выборка.Описание, Выборка.Регистратор)));		
	КонецЦикла;
	ОбщегоНазначенияЗК.ВывестиИнформациюОбОшибке("Чтобы провести текущий документ, необходимо отменить проведение указанных документов.", Отказ, Заголовок, Перечисления.ВидыСообщений.Информация);		

КонецПроцедуры
  • Внести изменения в модуль СтандартныеПодсистемыСервер
Функция УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт
	
	Перем ТекстСообщения;
	
	// Параметры сеанса, инициализация которых требует обращения к одним и тем же данным
	// следует инициализировать сразу группой. Для того, чтобы избежать их повторной инициализации,
	// имена уже установленных параметров сеанса сохраняются в массиве УстановленныеПараметры
	УстановленныеПараметры = Новый Массив;
	
	Если ИменаПараметровСеанса = Неопределено Тогда
		ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(Новый Соответствие);
		
		// Начальное выполнение на сервере перед запуском программы.
		ПередЗапускомПрограммы();
		Возврат УстановленныеПараметры;
		
	ИначеЕсли ИменаПараметровСеанса.Найти("ПараметрыКлиентаНаСервере") <> Неопределено Тогда
		
		ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(Новый Соответствие);
		УстановленныеПараметры.Добавить("ПараметрыКлиентаНаСервере");
// Сергей (
	ИначеЕсли ИменаПараметровСеанса.Найти("НеПроверятьХронологиюУчетаУдержанногоНДФЛ") <> Неопределено Тогда
		
		ПараметрыСеанса.НеПроверятьХронологиюУчетаУдержанногоНДФЛ = Ложь;
		УстановленныеПараметры.Добавить("НеПроверятьХронологиюУчетаУдержанногоНДФЛ");
// Сергей )
	КонецЕсли;
	
	Обработчики = Новый Соответствие;
	ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия(
		"СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииОбработчиковУстановкиПараметровСеанса");
	
	Для каждого Обработчик Из ОбработчикиСобытия Цикл
		Обработчик.Модуль.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики);
	КонецЦикла;
	
	ОбработчикиСобственные = ОбщегоНазначенияПереопределяемый.ОбработчикиИнициализацииПараметровСеанса();
	
	Для Каждого Запись Из ОбработчикиСобственные Цикл
		Обработчики.Вставить(Запись.Ключ, Запись.Значение);
	КонецЦикла;
	
	// массив с ключами параметров сеанса
	// задаются начальным словом в имени параметра сеанса и символом "*"
	ПараметрыСеансаКлючи = Новый Массив;
	
	Для Каждого Запись Из Обработчики Цикл
		Если Найти(Запись.Ключ, "*") > 0 Тогда
			КлючПараметра = СокрЛП(Запись.Ключ);
			ПараметрыСеансаКлючи.Добавить(Лев(КлючПараметра, СтрДлина(КлючПараметра)-1));
		КонецЕсли;
	КонецЦикла;
	
	Для каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
		Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Обработчик = Обработчики.Получить(ИмяПараметра);
		Если Обработчик <> Неопределено Тогда
			Если Не ОбщегоНазначения.ПроверитьИмяЭкспортнойПроцедуры(Обработчик, ТекстСообщения) Тогда
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;
			
			Выполнить Обработчик + "(ИмяПараметра, УстановленныеПараметры)";
			Продолжить;
		КонецЕсли;
		Для Каждого ИмяКлючаПараметра Из ПараметрыСеансаКлючи Цикл
			Если Лев(ИмяПараметра, СтрДлина(ИмяКлючаПараметра)) = ИмяКлючаПараметра Тогда
				Обработчик = Обработчики.Получить(ИмяКлючаПараметра+"*");
				Если Не ОбщегоНазначения.ПроверитьИмяЭкспортнойПроцедуры(Обработчик, ТекстСообщения) Тогда
					ВызватьИсключение ТекстСообщения;
				КонецЕсли;
				Выполнить Обработчик + "(ИмяПараметра, УстановленныеПараметры)";
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат УстановленныеПараметры;
	
КонецФункции

Все изменения помечены как "\\ Сергей".

Обработка 6-НДФЛ методика

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    856    Vidz    0    

6

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    666    olja-ljaaa    0    

2

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    2971    Serg2000mr    29    

100

Механизмы типовых конфигураций Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    780    tango    5    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    657    tango    5    

4

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    962    tango    0    

2

Ценообразование, анализ цен Механизмы типовых конфигураций Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    959    tango    12    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Anesk 17 05.10.16 20:36 Сейчас в теме
Создал аналогичную для себя. Но сейчас новый релиз вышел, который учитывает взаиморасчеты
2. webester 26 06.10.16 09:29 Сейчас в теме
Это че серьезно за 1$m можно скачать актуальный cf ЗУП? Как мило ;)
3. oksja 8 19.10.16 05:38 Сейчас в теме
Огромный респект за идею!!! Вот уж действительно всё гениальное просто. Предложенный в статье способ проведения документов наиболее приближен к естественной хронологии учета и поэтому 2й раздел приобретает более правильный вид. Я бы сказала что это одна из немногих действительно ценных публикаций по теме 6ндфл на инфостарте. С разрешения автора могу опубликовать адаптированную мной обработку для бюджетной зарплаты с небольшими улучшениями. Ещё раз спасибо!
4. diolkost 30.01.17 19:44 Сейчас в теме
Здравствуйте, у меня не работает обработка.
5. vlaskin 82 31.01.17 10:42 Сейчас в теме
(4) Здравствуйте, можете написать более конкретно?
6. diolkost 31.01.17 14:23 Сейчас в теме
Здравствуйте, при запуске "все документы" ничего не происходит.
Прикрепленные файлы:
7. diolkost 27.02.17 13:11 Сейчас в теме
Здравствуйте, я так и не получила ответ на свой вопрос, что не работает обработка.
Оставьте свое сообщение