@SteepNET

1С УТ 11.4 Основной договор контрагента в документах?

Управление торговлей, редакция 11 (11.4.14.140)

Так как в УТ 11.4 механизм договоров по умолчанию какой то не обычный и не явный ,пытаюсь допилить ее что бы он был принудительным!

1.Для этого в Справочник.ДоговорыКонтрагентов добавил реквизит "ОсновнойДоговор" , добавил его на формы и.т.д, теперь у договора есть признак "ОсновнойДоговор = Истина"

2.В документе "Заказ Клиента" есть "Процедура ЗаполнитьДоговорПоУмолчанию" Которая ссылается на главный модуль ПродажиСервер.ПолучитьДоговорПоУмолчанию()

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


Прошу помочь дописать данный запрос, нужно добавить условие что бы выбирал ДоговорыКонтрагентов.Контрагент = ОсновнойДоговор = Истина

Планирую данный модуль добавить в расширение &Вместо
  • Вопрос задан
  • 1098 просмотров
Пригласить эксперта
Ответы на вопрос 1
@VitalyChaikin
// в двух местах сразу после ГДЕ
|ГДЕ (ДоговорыКонтрагентов.ОсновнойДоговор) И
| (НЕ ДоговорыКонтрагентов.ПометкаУдаления)

Задача описана не вполне понятно ... совершенно не ясно зачем это нужно ?!
Обрати внимание, что функция ищет среди ДЕЙСТВУЮЩИХ договоров ... А это значит, что сегодня действующий договор с нашей галочкой - возвращается функцией, а завтра он уже НЕ ДЕЙСТВУЮЩИЙ - и не возвращается ...
Понятно что такое решение будет только плодить проблемы, и лучше от этого отказаться пока не поздно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы