Каталог решений - Перезаполнение ставки НДС

Перезаполнение ставки НДС

Перезаполнение ставки НДС

В наличии

Обработка умеет перезаполнять ставку НДС в табличных частях документов.
На странице «Заказы клиентов» можно вывести список заказов с незаполненным НДС и перезаполнить.
На Странице «Общее заполнение», выводится список всех документов и табличных частей с типом реквизита «СправочникСсылка.СтавкиНДС», здесь также можно перезаполнить ставку НДС.

Категория:

Описание

После не совсем удачного перехода с КА 2.4 на КА 2.5 было обнаружено, что у некоторых документов в табличных частях не заполнена Ставка НДС.

В КА 2.4 реквизит Ставка НДС это перечисление, а в КА 2.5 это уже справочник, реквизит с типом перечисление был переименован в "УдалитьСтавкаНДС", и добавлен реквизит "СтавкаНДС" с типом справочник.

 

Страница "Заказы клиентов":

По кнопке "найти заказы клиентов с пустым НДС", показывает проведенные заказы, у которых реквизит ставка НДС не заполнен с налогообложением: ПродажаОблагаетсяНДС и ПродажаНаЭкспорт.

По кнопке "Заполнить НДС В заказах Клиентов" в отмеченных заказах проставляется НДС через обработку табличных частей из общего модуля.

Можно указать количество обрабатываемых документов, которые будут обработаны.

 

Страница "Общее заполнение":

При открытии формы на странице заполняется список документов, у которых есть реквизит с типом "СправочникСсылка.СтавкиНДС" и реквизит "СуммаНДС" в табличной части.

По нажатии кнопки "Найти документы с пустым НДС" показывает количество документов с незаполненной ставкой НДС и реквизитом Сумма НДС > 0.

По нажатию кнопки "Заполнить НДС" заполняет НДС в отмеченных документах.

При заполнении нужно выбрать источник заполнения: Справочник "Номенклатура", Реквизит "УдалитьСтавкаНДС" или фиксированное значение.

 

Исходный код:


&НаСервере
Процедура НайтиДокументыСПустымНДСНаСервере()
	
	Для Каждого СтрТаблицы Из Объект.ОбрабатываемыеДокументы Цикл
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Документ.Ссылка КАК Ссылка
		|ИЗ
		|	[Таблица] КАК Документ
		|ГДЕ
		|	(Документ.СтавкаНДС = ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) ИЛИ Документ.СтавкаНДС = НЕОПРЕДЕЛЕНО)
		|	И Документ.СуммаНДС > 0
		|	И Документ.Ссылка.Проведен";		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "[Таблица]", "Документ." + СтрТаблицы.Документ + "." + СтрТаблицы.ТабличнаяЧасть); 		
		СтрТаблицы.Найдено = Запрос.Выполнить().Выбрать().Количество();
		СтрТаблицы.Пометка = ?(СтрТаблицы.Найдено > 0, Истина, Ложь);
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура НайтиДокументыСПустымНДС(Команда)
	
	НайтиДокументыСПустымНДСНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
	
	Для Каждого ДокументИмя Из Метаданные.Документы Цикл
		Для Каждого ТабличнаяЧастьИмя Из ДокументИмя.ТабличныеЧасти Цикл
			Для Каждого РеквизитИмя Из ТабличнаяЧастьИмя.Реквизиты Цикл
				Если РеквизитИмя.Тип = Новый ОписаниеТипов("СправочникСсылка.СтавкиНДС") И ТабличнаяЧастьИмя.Реквизиты.Найти("СуммаНДС") <> Неопределено Тогда
					НовыйДокумент = Объект.ОбрабатываемыеДокументы.Добавить();
					НовыйДокумент.Документ = ДокументИмя.Имя;
					НовыйДокумент.ТабличнаяЧасть = ТабличнаяЧастьИмя.Имя;					
				КонецЕсли;				
			КонецЦикла;
		КонецЦикла;		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПриОткрытииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьНДС(Команда)
	
	Если ЗначениеЗаполнено(Объект.БратьНДСИз) Или ЗначениеЗаполнено(Объект.СтавкаНДС) Тогда 
		ЗаполнитьНДСНаСервере();
	Иначе 
		Сообщить("Необходимо выбрать источник заполнения НДС или фиксированную ставку!");
	КонецЕсли;
	
КонецПроцедуры

//-----------------Заказы клиентов------------------//

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

&НаКлиенте
Процедура ЗаполнитьНДСВзаказахКлиентов(Команда)
	
	ЗаполнитьНДСВзаказахКлиентовНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура НайтиЗаказыКлиентовСПустымНДС(Команда)
	
	НайтиЗаказыКлиентовСПустымНДСНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ДокументыЗаказыКлиентовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Поле.Имя = "ДокументыЗаказыКлиентовДокумент" Тогда
		СтандартнаяОбработка = Ложь;
		ПоказатьЗначение(,Элемент.ТекущиеДанные.Документ);
	КонецЕсли;	
	
КонецПроцедуры

//-----------------*------------------//

 

Протестировано на платформе: 1С:Предприятие 8.3 (8.3.20.1674).

Протестировано в конфигурациях: 1С:Комплексная автоматизация 2 (2.5.7.402).

has been added to your cart:
Оформление заказа