Подскажите пожалуйста, написал обработку для сверки ндс 62 счета и 76.АВ, но по некоторым контрагентам почему то не сходятся общие итоги по ОСВ

1. user973528 22.04.19 09:32 Сейчас в теме
Написал обработку для сравнения суммы ндс 62.02 с 76.АВ, но столкнулся с проблемой. Итоги в моей таблице не сходятся с итогами в оборотно-сальдовой ведомости, что может быть не так в моих вычислениях?

&НаСервере
Процедура ПолучитьДебетПоСчетам()
	
	ЭтотОбъект.Отчет.Очистить();
	
	//Запрос для счета 62.02
	
	Состояние("Анализируем счет 62.02");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ХозрасчетныйОбороты.СуммаОборотДт,
	               |	ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
	               |	ХозрасчетныйОбороты.Субконто2 КАК Договор,
	               |	ХозрасчетныйОбороты.Субконто3 КАК ДокументРасчетов
	               |ИЗ
	               |	РегистрБухгалтерии.Хозрасчетный.Обороты(&Дата1, &Дата2, ,Счет =&Счет, , , , ) КАК ХозрасчетныйОбороты				   
				   |ГДЕ 
				   |	ХозрасчетныйОбороты.СуммаОборотДт > 0";

	Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
		 Запрос.Текст = Запрос.Текст + "
		 |И ХозрасчетныйОбороты.Субконто1 = &Субконто1";
		 Запрос.УстановитьПараметр("Субконто1", ЭтотОбъект.Контрагент);
		 
	Если ЗначениеЗаполнено(ЭтотОбъект.ДоговорКонтрагента) Тогда
			Запрос.Текст = Запрос.Текст + "
			|И ХозрасчетныйОбороты.Субконто2 = &Субконто2";
			Запрос.УстановитьПараметр("Субконто2", ЭтотОбъект.ДоговорКонтрагента);
		КонецЕсли;
	КонецЕсли;
	
	Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02"));
	Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭтотОбъект.НачалоПериода));
	Запрос.УстановитьПараметр("Дата2", КонецДня(ЭтотОБъект.КонецПериода));

	
 	ТаблицаЗначенийПоСчету6202 = Запрос.Выполнить().Выгрузить();
	
	Для Каждого Стр Из ТаблицаЗначенийПоСчету6202 Цикл
		
	//Найдем документы поступления по 62.02
		
		Если Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0 Тогда
					
			А = ЭтотОбъект.Отчет.Добавить();
				
		    А.Контрагент       = Стр.Контрагент;
			А.Договор          = Стр.Договор;
		    А.СуммаДокумента   = Стр.СуммаОборотДт;
			А.ДокументРасчетов = Стр.ДокументРасчетов;
					
		КонецЕсли;
	 			
						
	//Найдем документы корректировки по 62.02
			
	
		Если Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
				
			А = ЭтотОбъект.Отчет.Добавить();
			
			А.Контрагент       = Стр.Контрагент;
			А.СуммаДокумента   = Стр.СуммаОборотДт;
			А.ДокументРасчетов = Стр.ДокументРасчетов;
			
		КонецЕсли;
		
	КонецЦикла;

	//Запрос для счета 62.32
	
	Состояние("Анализируем счет 62.32");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ХозрасчетныйОстаткиИОбороты.СуммаОборотДт,
	               |	ХозрасчетныйОстаткиИОбороты.СуммаОборотКт,
	               |	ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
	               |	ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
	               |	ХозрасчетныйОстаткиИОбороты.Субконто3 КАК ДокументРасчетов
	               |ИЗ
	               |	РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , , , ) КАК ХозрасчетныйОстаткиИОбороты
	               |ГДЕ
	               |	ХозрасчетныйОстаткиИОбороты.Счет = &Cчет2";
	
	Если ЗначениеЗаполнено(ЭтотОбъект.Контрагент) Тогда
		 Запрос.Текст = Запрос.Текст + "
		 |	И ХозрасчетныйОстаткиИОбороты.Субконто1 = &Субконто1";
		 Запрос.УстановитьПараметр("Субконто1", ЭтотОбъект.Контрагент);
		 
	Если ЗначениеЗаполнено(ЭтотОбъект.ДоговорКонтрагента) Тогда
		 Запрос.Текст = Запрос.Текст + "
		 |	И ХозрасчетныйОстаткиИОбороты.Субконто2 = &Субконто2";
		 Запрос.УстановитьПараметр("Субконто2", ЭтотОбъект.ДоговорКонтрагента);
	КонецЕсли;
		
	КонецЕсли;
	
	Запрос.УстановитьПараметр("Cчет2",ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.32"));
	Запрос.УстановитьПараметр("НачалоПериода", ЭтотОбъект.НачалоПериода);
	Запрос.УстановитьПараметр("КонецПериода", ЭтотОБъект.КонецПериода);
	
	ТаблицаЗначенийПоСчету6232 = Запрос.Выполнить().Выгрузить();
	
	Для Каждого Стр Из ТаблицаЗначенийПоСчету6232 Цикл
		
		//Найдем документы поступления по счету 62.32
		
	Если (Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0) И Стр.СуммаОборотДТ > 0 Тогда
				
				А = ЭтотОбъект.Отчет.Добавить();
				А.Контрагент = Стр.Контрагент;
				А.Договор    = Стр.Договор;
				А.СуммаДокумента = Стр.СуммаОборотДт;
				А.ДокументРасчетов = Стр.ДокументРасчетов;
						
	КонецЕсли;
	
		//Найдем документы корректировки по счету 62.32
	
	Если Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
							
				А = ЭтотОбъект.Отчет.Добавить();
				А.Контрагент = Стр.Контрагент;
				А.СуммаДокумента = Стр.СуммаОборотДт;
				А.ДокументРасчетов = Стр.ДокументРасчетов;
			
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать


&НаСервере
Процедура ПолучитьЗаписиКнигиПокупокКредит()
	
	Состояние("Анализируем счет 76.АВ");
	
	Запрос = Новый Запрос;
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	НДСЗаписиКнигиПокупок.СчетФактура КАК ДокументРасчетов,
	               |	НДСЗаписиКнигиПокупок.СтавкаНДС,
	               |	НДСЗаписиКнигиПокупок.ДоговорКонтрагента,
	               |	НДСЗаписиКнигиПокупок.СуммаБезНДС КАК СуммаБезНДС,
	               |	НДСЗаписиКнигиПокупок.НДС КАК НДС,
	               |	НДСЗаписиКнигиПокупок.Поставщик КАК Контрагент,
	               |	НДСЗаписиКнигиПокупок.ДатаСобытия
	               |ИЗ
	               |	РегистрНакопления.НДСЗаписиКнигиПокупок КАК НДСЗаписиКнигиПокупок
	               |ГДЕ
	               |	НДСЗаписиКнигиПокупок.Период МЕЖДУ &Дата1 И &Дата2";
	
	Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭтотОбъект.НачалоПериода));
	Запрос.УстановитьПараметр("Дата2", КонецДня(ЭтотОбъект.КонецПериода));
	
	ТЗПокупок = Запрос.Выполнить().Выгрузить();
	
	//Установим НДС по документам из книги покупок
	
	Для Каждого Струк из ЭтотОбъект.Отчет Цикл
		ОтборНДС = Новый Структура;
		ОтборНДС.Вставить("ДокументРасчетов",Струк.ДокументРасчетов);
		ОтборНДС.Вставить("Контрагент",Струк.Контрагент);
		ОтборНДС.Вставить("ДоговорКонтрагента",Струк.Договор);
		
		МассНДС = ТЗПОкупок.НайтиСтроки(ОтборНДС);
		Отб1 = 0;
		Для Каждого Стр1 из МассНДС Цикл
			Отб1 = Отб1 + Стр1.НДС;	
		КонецЦикла;
		
		Если МассНДС.Количество() > 0 Тогда
			
			СтрМас1 = МассНДС.Получить(0);
			Струк.СтавкаНДС = СтрМас1.СтавкаНДС;				
					
			Если (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС18) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118) Тогда
				Струк.СуммаНДС   = Окр(Струк.СуммаДокумента / 118 * 18, 2, 1);
			ИначеЕсли (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС20) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120) Тогда
				Струк.СуммаНДС   = Окр(Струк.СуммаДокумента / 120 * 20, 2, 1);
			ИначеЕсли (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС10) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110) Тогда
				Струк.СуммаНДС   = Окр(Струк.СуммаДокумента / 110 * 10, 2, 1);
			ИначеЕсли (Струк.СтавкаНДС = Перечисления.СтавкиНДС.НДС0) или (Струк.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС) Тогда
				Струк.СуммаНДС   = 0;
			Иначе
				Струк.СуммаНДС = 0;
			КонецЕсли;
			
			Струк.СуммаНДС76счет = Отб1;
			
			КонецЕсли;
			
			Если Струк.СуммаНДС <> Струк.СуммаНДС76счет Тогда
				Струк.Признак = Струк.СуммаНДС - Струк.СуммаНДС76счет;
			КонецЕсли;		
		КонецЕсли;	
	КонецЦикла;
	
		//Для Каждого Строки Из ЭтотОбъект.Отчет Цикл
		//		Если Найти(Строки.ДокументРасчетов, "долга") Тогда
		//			Если Строки.ДокументРасчетов.Дата < Дата("20190101") Тогда  
		//				
		//				Строки.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118;
		//			 	Строки.СуммаНДС  = Строки.СуммаДокумента / 118 * 18;
		//				Строки.СуммаНДС76счет = Строки.СуммаНДС;
		//			Иначе
		//				Строки.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
		//			 	Строки.СуммаНДС  = Строки.СуммаДокумента / 120 * 20;
		//				Строки.СуммаНДС76счет = Строки.СуммаНДС;
		//			КонецЕсли;
		//		КонецЕсли;
		//	КонецЦикла;
	            
КонецПроцедуры
Показать
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
18. fenixnow 269 23.04.19 17:48 Сейчас в теме
(1)
Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0)

замени в дальнейших своих разработках "Найти" на проверку типов
ТипЗнч(Стр.ДокументРасчетов) = Тип("ДокументСсылка.ПоступлениеНаРасчетныСчет")
19. user973528 23.04.19 17:58 Сейчас в теме
(18) Не подскажите, а что это даёт? Большая разница при поиске по строке?
2. Oldsad 22.04.19 10:31 Сейчас в теме
 //Найдем документы поступления по 62.02
        
        Если Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0 Тогда
                    
            А = ЭтотОбъект.Отчет.Добавить();
                
            А.Контрагент       = Стр.Контрагент;
            А.Договор          = Стр.Договор;
            А.СуммаДокумента   = Стр.СуммаОборотДт;
            А.ДокументРасчетов = Стр.ДокументРасчетов;
                    
        КонецЕсли;
                 
                        
    //Найдем документы корректировки по 62.02
            
    
        Если Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
                
            А = ЭтотОбъект.Отчет.Добавить();
            
            А.Контрагент       = Стр.Контрагент;
            А.СуммаДокумента   = Стр.СуммаОборотДт;
            А.ДокументРасчетов = Стр.ДокументРасчетов;
            
        КонецЕсли;
Показать

всместо этого как минимум надо писать что то типа:
 //Найдем документы поступления по 62.02
        
        Если Найти(Стр.ДокументРасчетов, "Поступление на расч") > 0 Тогда
                    
            А = ЭтотОбъект.Отчет.Добавить();
                
            А.Контрагент       = Стр.Контрагент;
            А.Договор          = Стр.Договор;
            А.СуммаДокумента   = Стр.СуммаОборотДт;
            А.ДокументРасчетов = Стр.ДокументРасчетов;
                    
      ИначеЕсли Найти(Стр.ДокументРасчетов, "Коррект") > 0 Тогда
                
            А = ЭтотОбъект.Отчет.Добавить();
            
            А.Контрагент       = Стр.Контрагент;
            А.СуммаДокумента   = Стр.СуммаОборотДт;
            А.ДокументРасчетов = Стр.ДокументРасчетов;

      Иначе
            Сообщить ("Неизвестная операция: " + Стр.ДокументРасчетов);
        КонецЕсли;
Показать

и лучше напрямую типы документов сравнивать, а не делать поиск по строке
3. Oldsad 22.04.19 10:34 Сейчас в теме
"костыль" это вообще финиш, надо удалить его и разобраться что не так с проводками
4. Oldsad 22.04.19 10:41 Сейчас в теме
непонятно зачем второй раз формируешь текст запроса,
можно просто поменять параметр счет на "62.32" в первом запросе и еще раз его выполнить
5. user973528 22.04.19 10:59 Сейчас в теме
(4)
Костыль убрал, у меня проблема в том что у некоторых контрагентов всё копеечка в копеечку, а у кого-то суммы очень внушительные, на 76.АВ одна сумма, в моей таблице другая. Такое чувство что по моему отбору по 76.АВ попросту откидывает документы которые на 76.АВ. Вот как их заставить чтобы они тоже участвовали в расчете, понятия не имею...
6. user973528 22.04.19 11:00 Сейчас в теме
(4) То есть в запросе по 76.АВ эти "откинутые" суммы есть, но вот когда я отбор делаю по 62.02, то он их попросту не выводит.
7. user973528 22.04.19 11:02 Сейчас в теме
(4) И вот как закрывать корректировки долгов, тоже понятия не имею.
8. Oldsad 22.04.19 11:18 Сейчас в теме
(7)
все замечания по коду которые видны невооруженным взглядом я сказал
нужна более детальная информация что с чем не сходится,
но возможно проблема в постановке задачи а не в коде

например ты все время пишешь "76.АВ" то, "76.АВ" сё, и комментарии/имена переменных соответсвующие
но на самом деле это не так от слова совсем
ты анализируешь регистр НДС книги покупок, а не обороты по счету 76.АВ и это далеко не одно и тоже
9. user973528 22.04.19 11:24 Сейчас в теме
(8) Да я вот тоже думаю что в постановке задачи, мне в кратце обрисовали что нужно сделать, а толком никто и не пояснил как должно работать
10. user973528 22.04.19 11:24 Сейчас в теме
(8) Сказали сравнить 62.02/62.32 счета с 76, для сверки правильности НДС там и там
11. user973528 22.04.19 11:32 Сейчас в теме
(8) А как анализировать обороты по 76? Так же через ХозрасчетныйОбороты?
13. user973528 22.04.19 12:26 Сейчас в теме
(8) В оборотке 3 строки, в моей таблице 2, соответственно и сумма ндс не сходится
Прикрепленные файлы:
14. vadim1011985 100 23.04.19 10:29 Сейчас в теме
(13) и это логично , так как ты смотришь ОБОРОТЫ за указанный период , а не попадает строка по которой есть остаток , а оборотов нет
15. vadim1011985 100 23.04.19 10:37 Сейчас в теме
(13) поэтому тебе нужно собрать остатки по счетам 62.02 и 62.32 , и остатки по счету 76.ав , и соединить левым соединением
16. user973528 23.04.19 10:49 Сейчас в теме
(15) То есть, не сумма оборот должно быть, а сумма остаток?
12. zayden 17 22.04.19 11:42 Сейчас в теме
есть она тут - точно видел
17. vadim1011985 100 23.04.19 10:58 Сейчас в теме
Многие бухгалтера проверяют именно по остаткам - остаток на авансовых счетах * ставку НДС = остаток на 76.АВ

Если проверяешь обороты , то тогда нужно смотреть обороты счетов Дт-51 Кт 62.02 (62.22 , 62.32) Поступившие авансы и обороты счетов дт 76 АВ кт 68.02 НДС с поступивших авансов
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот