Приведение взаиморасчетов к одному договору и правильный зачет авансов

Обработки - Обработка документов

Обработка полезна, когда образовалась "фиктивная" задолженность контрагентов на 60 и 62 счетах из-за неверного закрытия долгов в Бухгалтерии 3.0. Это когда на контрагента заводились различные договоры (или документы взаиморасчетов для оплат по банку), но разнести все документы по ним ровно не представилось возможным. и образовались сальдо на счетах авансов и взаиморасчетов (которые должны взаимоперекрываться). Обработка приводит все документы контрагентов к одному договору (своего вида) и поправляет счет авансов для сворачивания задолженности в один разрез по счету.

Обработка выбирает все документы по счетам 60.х, затем по 62.х. В найденных документах проверяется реквизит ДоговорКонтрагента и СчетУчетаРасчетовПоАвансам и, если необходимо, меняет эти реквизиты.

Договор берется типовой для контрагента, если типового нет, - то первый попавшийся (и делает его основным). Счет авансов устанавливается типовой из плана счетов. Для Поступления и Списания с расчетного счета так же выбирается способ погашения задолженности - Автоматически.

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

Обработка протестирована на типовой бухгалтерии 3.0, на приходных, расходных накладных, списаниях и поступлениях расчетного счета.

Скачать файлы

Наименование Файл Версия Размер
Обработка приведения взаиморасчетов к одному договору и правильному зачету авансов:
.epf 8,70Kb
16.03.17
17
.epf 8,70Kb 17 Скачать

См. также

Комментарии
1. Фаниль Хасанов (Fanil) 27.03.17 10:25 Сейчас в теме
Будет работать в 1С:Предприятие 8.3 (8.3.5.1486) Бухгалтерия предприятия КОРП, редакция 2.0 (2.0.35.5) ?
2. Артем (user712781) 3 27.03.17 13:06 Сейчас в теме
Не могу знать,
смотрите
	СчетУчета = ПланыСчетов.Хозрасчетный[ИмяСчета];
	Запрос = Новый Запрос;
	Запрос.Текст = 
	  "ВЫБРАТЬ
	  |	ХозрасчетныйОборотыДтКт.Регистратор,
	  |	ХозрасчетныйОборотыДтКт.Период,
	  |	ТИПЗНАЧЕНИЯ(ХозрасчетныйОборотыДтКт.Регистратор) КАК ВидДок
	  |ИЗ
	  |	РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Нач, &Кон, Регистратор, , , , , ) КАК ХозрасчетныйОборотыДтКт
	  |ГДЕ
	  |	(ХозрасчетныйОборотыДтКт.СчетДт В ИЕРАРХИИ (&Счета)
	  |			ИЛИ ХозрасчетныйОборотыДтКт.СчетКт В ИЕРАРХИИ (&Счета))";
	Если ЗначениеЗаполнено(Контрагент) Тогда
	  Запрос.Текст = Запрос.Текст + "
	  |И (ХозрасчетныйОборотыДтКт.СубконтоКт1 В ИЕРАРХИИ (&Контрагент)
	  |	ИЛИ ХозрасчетныйОборотыДтКт.СубконтоДт1 В ИЕРАРХИИ (&Контрагент))";
	  Запрос.УстановитьПараметр("Контрагент", Контрагент);
	КонецЕсли;
	  Запрос.Текст = Запрос.Текст + "
	  |СГРУППИРОВАТЬ ПО
	  |	ХозрасчетныйОборотыДтКт.Период,
	  |	ХозрасчетныйОборотыДтКт.Регистратор
	  |
	  |УПОРЯДОЧИТЬ ПО
	  |	ХозрасчетныйОборотыДтКт.Период,
	  |	ХозрасчетныйОборотыДтКт.Регистратор
	  |АВТОУПОРЯДОЧИВАНИЕ";
	  	  
	Запрос.УстановитьПараметр("Нач", Нач);
	Запрос.УстановитьПараметр("Кон", ?(ЗначениеЗаполнено(Кон), КонецДня(Кон), Кон));
	
	Счета = Новый Массив;
	Счета.Добавить(СчетУчета);
	Запрос.УстановитьПараметр("Счета", Счета);
//	Запрос.УстановитьПараметр("Организация", Организация);

	РезультатЗапроса = Запрос.Выполнить();

	ВидыДокум = РезультатЗапроса.Выгрузить();
	ВидыДокум.Свернуть("ВидДок");
    Сообщить("=== Список найденных видов документов по счету учета "+СчетУчета+" ===");
	Для Каждого Стр Из ВидыДокум Цикл
        Сообщить(Стр.ВидДок);
	КонецЦикла;
    Сообщить("=====================================================");
 	//Возврат;
...Показать Скрыть


ТекВидДоговора = ?(ИмяСчета = "РасчетыСПоставщикамиИПодрядчиками", Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком,
?(ИмяСчета = "РасчетыСПокупателямиИЗаказчиками", Перечисления.ВидыДоговоровКонтрагентов.СПокупателем,
Перечисления.ВидыДоговоровКонтрагентов.Прочее));
ТекСчетАвансов = ?(ИмяСчета = "РасчетыСПоставщикамиИПодрядчиками", ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданным,
?(ИмяСчета = "РасчетыСПокупателямиИЗаказчиками", ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным,
ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами));

Выборка = РезультатЗапроса.Выбрать();
	Пока Выборка.Следующий() Цикл
		
		Регистратор = Выборка.Регистратор;
		МетаданныеДокумента = Регистратор.Метаданные();
		Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ДоговорКонтрагента", МетаданныеДокумента) Тогда
			ТекДоговор = Регистратор.ДоговорКонтрагента;
			ОтборОснДоговора = Новый Структура;
			ОтборОснДоговора.Вставить("Организация", ТекДоговор.Организация);
			ОтборОснДоговора.Вставить("Контрагент", ТекДоговор.Владелец);
			ОтборОснДоговора.Вставить("ВидДоговора", ТекВидДоговора);
			ОсновнойДоговор = РегистрыСведений.ОсновныеДоговорыКонтрагента.Получить(ОтборОснДоговора).Договор;
			Документ = Регистратор.ПолучитьОбъект();
			Изменен = Ложь;
// Попытка
			Если НЕ ЗначениеЗаполнено(ОсновнойДоговор) Тогда
				МенеджерЗаписи = РегистрыСведений.ОсновныеДоговорыКонтрагента.СоздатьМенеджерЗаписи();
				МенеджерЗаписи.Организация = ТекДоговор.Организация;
				МенеджерЗаписи.Контрагент = ТекДоговор.Владелец;
				МенеджерЗаписи.ВидДоговора = ТекВидДоговора;
				МенеджерЗаписи.Договор = ТекДоговор;
				МенеджерЗаписи.Записать();
				ОсновнойДоговор = ТекДоговор;
			ИначеЕсли ОсновнойДоговор <> ТекДоговор и ЗначениеЗаполнено(ТекДоговор) Тогда
				Документ.ДоговорКонтрагента = ОсновнойДоговор;
				Изменен = Истина;
			КонецЕсли;
			
			Если ОбщегоНазначения.ЕстьРеквизитОбъекта("СчетУчетаРасчетовПоАвансам", МетаданныеДокумента) Тогда
				Если Регистратор.СчетУчетаРасчетовПоАвансам <> ТекСчетАвансов Тогда
					Документ.СчетУчетаРасчетовПоАвансам = ТекСчетАвансов;
					Изменен = Истина;
				КонецЕсли;
			КонецЕсли;
			
			Если МетаданныеДокумента.Имя = "СписаниеСРасчетногоСчета" Тогда
				Если Документ.ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ОплатаПоставщику Тогда
					Для Каждого ТекущаяСтрока Из Документ.РасшифровкаПлатежа Цикл
						Если Сред(Строка(ТекущаяСтрока.СчетУчетаРасчетовСКонтрагентом),1,2) = Сред(Строка(СчетУчета),1,2) Тогда
							Если ТекущаяСтрока.СпособПогашенияЗадолженности <> Перечисления.СпособыПогашенияЗадолженности.Автоматически Тогда
								Изменен = Истина;
								ТекущаяСтрока.СпособПогашенияЗадолженности = Перечисления.СпособыПогашенияЗадолженности.Автоматически;
							КонецЕсли;	
							Если ТекущаяСтрока.ДоговорКонтрагента <> ОсновнойДоговор Тогда
								ТекущаяСтрока.ДоговорКонтрагента = ОсновнойДоговор;
								Изменен = Истина;
							КОнецЕсли;
							Если ТекущаяСтрока.СчетУчетаРасчетовПоАвансам <> ТекСчетАвансов Тогда
								Изменен = Истина;
								ТекущаяСтрока.СчетУчетаРасчетовПоАвансам = ТекСчетАвансов;
							КонецЕсли;
						Иначе
							Сообщить("! У регистратора: "+Регистратор+" попался левый счет: "+ТекущаяСтрока.СчетУчетаРасчетовСКонтрагентом, СтатусСообщения.Информация);
						КонецЕсли;
					КонецЦикла; 						
				Иначе
					Сообщить("/ По сч. 60.х у регистратора: "+Регистратор+" иной вид операции: "+Документ.ВидОперации, СтатусСообщения.Информация);
				КонецЕсли;
			ИначеЕсли МетаданныеДокумента.Имя = "ПоступлениеНаРасчетныйСчет" Тогда
				Если Документ.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ОплатаПокупателя Тогда
					Для Каждого ТекущаяСтрока Из Документ.РасшифровкаПлатежа Цикл
						Если Сред(Строка(ТекущаяСтрока.СчетУчетаРасчетовСКонтрагентом),1,2) = Сред(Строка(СчетУчета),1,2) Тогда
							Если ТекущаяСтрока.СпособПогашенияЗадолженности <> Перечисления.СпособыПогашенияЗадолженности.Автоматически Тогда
								Изменен = Истина;
								ТекущаяСтрока.СпособПогашенияЗадолженности = Перечисления.СпособыПогашенияЗадолженности.Автоматически;
							КонецЕсли;	
							Если ТекущаяСтрока.ДоговорКонтрагента <> ОсновнойДоговор Тогда
								ТекущаяСтрока.ДоговорКонтрагента = ОсновнойДоговор;
								Изменен = Истина;
							КОнецЕсли;
							Если ТекущаяСтрока.СчетУчетаРасчетовПоАвансам <> ТекСчетАвансов Тогда
								Изменен = Истина;
								ТекущаяСтрока.СчетУчетаРасчетовПоАвансам = ТекСчетАвансов;
							КонецЕсли;
						Иначе
							Сообщить("! У регистратора: "+Регистратор+" попался левый счет: "+ТекущаяСтрока.СчетУчетаРасчетовСКонтрагентом, СтатусСообщения.Информация);
						КонецЕсли;
					КонецЦикла; 						
				Иначе
					Сообщить("/ По сч. 62.х у регистратора: "+Регистратор+" иной вид операции: "+Документ.ВидОперации, СтатусСообщения.Информация);
				КонецЕсли;
			КОнецЕсли;
			
			Если Изменен Тогда
				Документ.Записать(РежимЗаписиДокумента.Проведение);
				Сообщить("= Изменен = "+Документ);
			КонецЕсли;
 //Исключение
 //    ТекстОшибки = ""+ ОписаниеОшибки() + " = "+Регистратор;
 //    Сообщить(ТекстОшибки);
 //КонецПопытки
		Иначе
			Сообщить("~ У регистратора проводок "+Регистратор+" нет реквизита ""ДоговорКонтрагента""", СтатусСообщения.Важное);
		КонецЕсли;
 		
	КонецЦикла
...Показать Скрыть
Оставьте свое сообщение