Доработка сверки по головным подразделениям для Розницы

Клиенту нужна была сверка с контрагентом по всем его подразделениям (обособленным).
Добавил галочку «С обособленными» в сверку контрагентов, она влияет на список договоров, по которым составляется сверка.

&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)      
	
	Реквизит = Новый РеквизитФормы("дор_СОбособленными", Новый ОписаниеТипов("Булево"));
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(Реквизит);
	ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
	
	Привязка = Элементы.ШапкаДополнительно;
	Элемент = ЭтаФорма.Элементы.Вставить("дор_СОбособленными", Тип("ПолеФормы"), Привязка);
	Элемент.Вид = ВидПоляФормы.ПолеФлажка;
	Элемент.Заголовок = "С обособленными";
	Элемент.ПутьКДанным = "дор_СОбособленными";
	Элемент.УстановитьДействие("ПриИзменении", "дор_СОбособленными_ПриИзменении");
	
КонецПроцедуры        

&НаКлиенте
Процедура дор_СОбособленными_ПриИзменении(Элемент)      
	//Отрабатываем изменение контрагента
	КонтрагентПриИзменении(Неопределено);
КонецПроцедуры

&НаСервере
&ИзменениеИКонтроль("ПолучитьДанныеКонтрагента")
Процедура дор_ПолучитьДанныеКонтрагента(ДанныеКонтрагента)

	ДанныеКонтрагента = Новый Структура;
	ДанныеКонтрагента.Вставить("КонтактноеЛицо", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Контрагент, "КонтактноеЛицоПодписант"));

	// Если контрагент поменялся, повторим заполнение договоров
	ЗаполнитьДанные = Истина;
	Если Объект.ДоговорыКонтрагентов.Количество() > 0 Тогда

		Если Объект.ДоговорыКонтрагентов[0].Договор.Владелец = Объект.Контрагент И УчетПоКомпании Тогда

			ЗаполнитьДанные = Ложь;

		Иначе

			Объект.ДоговорыКонтрагентов.Очистить();
			Объект.ДанныеОрганизации.Очистить();
			Объект.ДанныеКонтрагента.Очистить();

		КонецЕсли;

	КонецЕсли;

	ДанныеКонтрагента.Вставить("ВестиРасчетыПоДоговорам", Объект.Контрагент.ВестиРасчетыПоДоговорам);
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОписаниеВыбораДоговоров", "Доступность", Объект.Контрагент.ВестиРасчетыПоДоговорам);

	Если ЗаполнитьДанные Тогда

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

#Вставка
		Запрос.Параметры.Вставить("дор_СОбособленными", ЭтаФорма.дор_СОбособленными);
#КонецВставки
		Объект.ДоговорыКонтрагентов.Загрузить(Запрос.Выполнить().Выгрузить());
		ОписаниеВыбораДоговоров = НСтр("ru = 'Выбраны все договоры контрагента'");

		Если ПолучитьФункциональнуюОпцию("ПередачаТоваровМеждуОрганизациями") Тогда

			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ РАЗРЕШЕННЫЕ
			|	ИСТИНА КАК Отметка,
			|	СправочникДоговорыКонтрагентов.Ссылка КАК Договор,
			|	СправочникДоговорыКонтрагентов.ВалютаРасчетов КАК ВалютаДоговора
			|ИЗ
			|	Справочник.ДоговорыКонтрагентов КАК СправочникДоговорыКонтрагентов
			|ГДЕ
			|	СправочникДоговорыКонтрагентов.ЭтоДоговорПередачиТоваровМеждуОрганизациями
			|	И (СправочникДоговорыКонтрагентов.Владелец, СправочникДоговорыКонтрагентов.Организация) В
			|			(ВЫБРАТЬ
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец КАК ОрганизацияВладелец,
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец КАК ОрганизацияПродавец
			|			ИЗ
			|				РегистрСведений.НастройкаПередачиТоваровМеждуОрганизациями КАК НастройкаПередачиТоваровМеждуОрганизациями
			|			ГДЕ
			|				НастройкаПередачиТоваровМеждуОрганизациями.КонтрагентПродавец = &Контрагент
			|				И НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец = &Организация
			|		
			|			ОБЪЕДИНИТЬ ВСЕ
			|		
			|			ВЫБРАТЬ
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец,
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец
			|			ИЗ
			|				РегистрСведений.НастройкаПередачиТоваровМеждуОрганизациями КАК НастройкаПередачиТоваровМеждуОрганизациями
			|			ГДЕ
			|				НастройкаПередачиТоваровМеждуОрганизациями.КонтрагентПродавец = &Контрагент
			|				И НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец = &Организация
			|		
			|			ОБЪЕДИНИТЬ ВСЕ
			|		
			|			ВЫБРАТЬ
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец,
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец
			|			ИЗ
			|				РегистрСведений.НастройкаПередачиТоваровМеждуОрганизациями КАК НастройкаПередачиТоваровМеждуОрганизациями
			|			ГДЕ
			|				НастройкаПередачиТоваровМеждуОрганизациями.КонтрагентВладельца = &Контрагент
			|				И НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец = &Организация
			|		
			|			ОБЪЕДИНИТЬ ВСЕ
			|		
			|			ВЫБРАТЬ
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец,
			|				НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияВладелец
			|			ИЗ
			|				РегистрСведений.НастройкаПередачиТоваровМеждуОрганизациями КАК НастройкаПередачиТоваровМеждуОрганизациями
			|			ГДЕ
			|				НастройкаПередачиТоваровМеждуОрганизациями.КонтрагентВладельца = &Контрагент
			|				И НастройкаПередачиТоваровМеждуОрганизациями.ОрганизацияПродавец = &Организация)";

			Запрос.УстановитьПараметр("Контрагент",  Объект.Контрагент);
			Запрос.УстановитьПараметр("Организация",  Объект.Организация);

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

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

			Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
				НоваяСтрокаДоговора = Объект.ДоговорыКонтрагентов.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаДоговора, ВыборкаДетальныеЗаписи);
			КонецЦикла;

		КонецЕсли;

		ДоговорыКонтрагентов = Объект.ДоговорыКонтрагентов.Выгрузить(,"Договор");

		НачальноеСальдоПоДоговорам(Объект.Организация, Объект.НачалоПериода, ДоговорыКонтрагентов, Объект.ВалютаДокумента, Объект.СальдоНачалоПериода);

	КонецЕсли;

КонецПроцедуры

Может 1С когда-нибудь доработает документ сверки?

Среда: Розница 3.0.12.237. Объем: 1 час.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *