Заказ поставщику / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область Проведение

// Описывает учетные механизмы используемые в документе для регистрации в механизме проведения.
//
// Параметры:
//  МеханизмыДокумента - Массив - список имен учетных механизмов, для которых будет выполнена
//              регистрация в механизме проведения.
//
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
	
	МеханизмыДокумента.Добавить("Взаиморасчеты");
	МеханизмыДокумента.Добавить("Закупки");
	МеханизмыДокумента.Добавить("Обеспечение");
	МеханизмыДокумента.Добавить("РеестрДокументов");
	МеханизмыДокумента.Добавить("АдресныйСклад");
	МеханизмыДокумента.Добавить("ЦеныИСкидки");
	МеханизмыДокумента.Добавить("СуммыДокументовВВалютахУчета");
	
КонецПроцедуры

#КонецОбласти

// Формирует описание реквизитов объекта, заполняемых по статистике их использования.
//
// Параметры:
//  ОписаниеРеквизитов - Структура - описание реквизитов, для которых необходимо получить значения по статистике
//
//
Процедура ЗадатьОписаниеЗаполняемыхРеквизитовПоСтатистике(ОписаниеРеквизитов) Экспорт
	
	Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
	Параметры.РазрезыСбораСтатистики.ИспользоватьВсегда = "Автор";
	Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "Партнер, Соглашение";
	Параметры.ЗаполнятьПриУсловии.ПоляОбъектаЗаполнены = "Автор";
	ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов,
		"Организация", Параметры);

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

// Функция возвращает текст запроса получения товаров к доставке по распоряжению
//
// Возвращаемое значение:
//  Строка - текст запроса
//
Функция ТекстЗапросаТоварыКДоставке() Экспорт
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	Т.Ссылка,
	|	Т.Склад,
	|	Т.Номенклатура,
	|	Т.Характеристика,
	|	ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КАК Серия,
	|	Т.Назначение,
	|	СУММА(Т.Количество) КАК Количество
	|ИЗ
	|	Документ.ЗаказПоставщику.Товары КАК Т
	|ГДЕ
	|	Т.Ссылка В(&Ссылки)
	|
	|СГРУППИРОВАТЬ ПО
	|	Т.Ссылка,
	|	Т.Склад,
	|	Т.Номенклатура,
	|	Т.Характеристика,
	|	Т.Назначение";
	
	Возврат ТекстЗапроса;
	
КонецФункции

#Область СозданиеНаОсновании

// Определяет список команд создания на основании.
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//  Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
	Документы.ДоверенностьВыданная.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Документы.ЗаявкаНаРасходованиеДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Документы.ПриобретениеТоваровУслуг.ДобавитьКомандуСоздатьНаОснованииЗаказа(КомандыСозданияНаОсновании);
	
	Документы.РасходныйКассовыйОрдер.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	КомандаСоздатьНаОсновании = Документы.РегистрацияЦенНоменклатурыПоставщика.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	Если КомандаСоздатьНаОсновании <> Неопределено Тогда
		КомандаСоздатьНаОсновании.Представление = НСтр("ru = 'Регистрация цен поставщика'");
	КонецЕсли; 
	
	Документы.СписаниеБезналичныхДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Документы.УстановкаЦенНоменклатуры.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Если ПравоДоступа("Добавление", Метаданные.БизнесПроцессы.СогласованиеЗакупки) Тогда
		
		КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Менеджер = Метаданные.БизнесПроцессы.СогласованиеЗакупки.ПолноеИмя();
		КомандаСоздатьНаОсновании.Представление = НСтр("ru = 'Согласование заказа поставщику'");
		КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
		КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьСогласованиеЗаказовПоставщикам";
	   
	КонецЕсли;
	
	Документы.ПоручениеЭкспедитору.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	Документы.ПриемкаТоваровНаХранение.ДобавитьКомандуСоздатьНаОснованииЗаказа(КомандыСозданияНаОсновании);
	Документы.УпаковочныйЛист.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	Документы.ПоступлениеУслугВПодразделение.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	Справочники.Претензии.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
	
	// ЭлектронноеВзаимодействие.ТорговыеПредложения
	ТорговыеПредложенияПереопределяемый.ДобавитьКомандуПоискаТорговыхПредложений(КомандыСозданияНаОсновании);
	// Конец ЭлектронноеВзаимодействие.ТорговыеПредложения
	
	// ЭлектронноеВзаимодействие.СервисДоставки
	СервисДоставкиПереопределяемый.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании, Параметры);
	// Конец ЭлектронноеВзаимодействие.СервисДоставки
	
КонецПроцедуры

// Добавляет команду создания документа "Заказ поставщику".
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//
// Возвращаемое значение:
//	ТаблицаЗначений, Неопределено - сформированные команды для вывода в подменю.
//
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
	Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаказПоставщику) Тогда
		КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ЗаказПоставщику.ПолноеИмя();
		КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ЗаказПоставщику);
		КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
		КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьЗаказыПоставщикам";
	

		Возврат КомандаСоздатьНаОсновании;
	КонецЕсли;

	Возврат Неопределено;
КонецФункции

// Добавляет команду создания документа "Заказ поставщику".
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//
// Возвращаемое значение:
//	ТаблицаЗначений, Неопределено - сформированные команды для вывода в подменю.
//
Функция ДобавитьКомандуСоздатьНаОснованииЗаказыПоставщикам(КомандыСозданияНаОсновании) Экспорт
	Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаказПоставщику) Тогда
		КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
		КомандаСоздатьНаОсновании.Обработчик = "СозданиеНаОснованииУТКлиент.СозданиеЗаказовПоставщикамНаОсновании";
		КомандаСоздатьНаОсновании.Идентификатор = "СозданиеЗаказовПоставщикамНаОсновании";
		КомандаСоздатьНаОсновании.Представление = НСтр("ru = 'Заказы поставщикам'");
		КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
		КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьЗаказыПоставщикам";
		
		Возврат КомандаСоздатьНаОсновании;
		
	КонецЕсли;
	
	Возврат Неопределено;
КонецФункции

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

// Параметры создания на основании обеспечивающего заказа.
// Возвращаемое значение:
// см. ОбеспечениеВДокументахСервер.ПараметрыОтбораТоваровДляСозданияОбеспечивающиегоЗаказа
Функция ПараметрыСозданияНаОснованииОбеспечивающегоЗаказа() Экспорт
	
	ПараметрыТаблицыТовары = ОбеспечениеВДокументахСервер.ПараметрыОтбораТоваровДляСозданияОбеспечивающиегоЗаказа();
	ПараметрыТаблицыТовары.ТипыНоменклатуры.Добавить(Перечисления.ТипыНоменклатуры.Товар);
	ПараметрыТаблицыТовары.ТипыНоменклатуры.Добавить(Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
	ПараметрыТаблицыТовары.ТипыНоменклатуры.Добавить(Перечисления.ТипыНоменклатуры.Работа);
	ПараметрыТаблицыТовары.ТипыНоменклатуры.Добавить(Перечисления.ТипыНоменклатуры.Услуга);
	ПараметрыТаблицыТовары.ОдинСклад = Истина;
	Возврат ПараметрыТаблицыТовары;
	
КонецФункции

#КонецОбласти

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
//   Параметры - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	КомандаОтчет = Отчеты.АнализПричинОтменыЗаказовПоставщикамПоДокументу.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,СписокДокументов";
	КонецЕсли;
	
	КомандаОтчет = Отчеты.АнализЦенПоставщиков.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,СписокДокументов";
	КонецЕсли;
	
	КомандаОтчет = ВзаиморасчетыСервер.КарточкаРасчетовСПоставщиком_ДобавитьКомандуОтчетаПоДокументам(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,СписокДокументов";
	КонецЕсли;
	
	КомандаОтчет = Отчеты.ОтклоненияОтУсловийЗакупок.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,СписокДокументов";
	КонецЕсли;
	
	Отчеты.РезультатыСогласованияЗакупки.ДобавитьКомандуОтчетаПоДокументу(КомандыОтчетов);
	
	КомандаОтчет = Отчеты.СостояниеВыполненияДокументов.ДобавитьКомандуСостояниеВыполненияДокументЗакупки(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.Порядок = 1;
		КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,СписокДокументов";
	КонецЕсли;
	
	КомандаОтчет = ВзаиморасчетыСервер.ЗадолженностьПоставщикам_ДобавитьКомандуОтчетаПоДокументам(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаДокумента,СписокДокументов";
	КонецЕсли;
	
	// ФормаСпискаДокументов
	КомандаОтчет = Отчеты.СостояниеВыполненияДокументов.ДобавитьКомандуСостояниеВыполненияДокументЗакупки(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаСпискаДокументов";
		КомандаОтчет.Порядок = 1;
	КонецЕсли;
	
	КомандаОтчет = ВзаиморасчетыСервер.ЗадолженностьПоставщикам_ДобавитьКомандуОтчетаПоДокументам(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаСпискаДокументов";
		КомандаОтчет.Важность = "Обычное";
		КомандаОтчет.Порядок = 1;
	КонецЕсли;
	
	КомандаОтчет = ВзаиморасчетыСервер.КарточкаРасчетовСПоставщиком_ДобавитьКомандуОтчетаПоДокументам(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаСпискаДокументов";
		КомандаОтчет.Важность = "Обычное";
		КомандаОтчет.Порядок = 2;
	КонецЕсли;
	
	КомандаОтчет = Отчеты.ОтклоненияОтУсловийЗакупок.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаСпискаДокументов";
		КомандаОтчет.Важность = "СмТакже";
		КомандаОтчет.Порядок = 1;
	КонецЕсли;
	
	КомандаОтчет = Отчеты.АнализПричинОтменыЗаказовПоставщикамПоДокументу.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаСпискаДокументов";
		КомандаОтчет.Важность = "СмТакже";
		КомандаОтчет.Порядок = 2;
	КонецЕсли;
	
	КомандаОтчет = Отчеты.АнализЦенПоставщиков.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.ВидимостьВФормах = "ФормаСпискаДокументов";
		КомандаОтчет.Важность = "СмТакже";
		КомандаОтчет.Порядок = 3;
	КонецЕсли;
	
КонецПроцедуры

// Определяет список команд заполнения.
//
// Параметры:
//   КомандыЗаполнения - См. ЗаполнениеОбъектовПереопределяемый.ПередДобавлениемКомандЗаполнения.КомандыЗаполнения
//   Параметры - См. ЗаполнениеОбъектовПереопределяемый.ПередДобавлениемКомандЗаполнения.Параметры
//
Процедура ДобавитьКомандыЗаполнения(КомандыЗаполнения, Параметры) Экспорт
	
КонецПроцедуры

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

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

КонецФункции

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

// Возвращает результат проверки при смене статуса документа
//
// Параметры:
//	ВыборкаПроверки - ВыборкаИзРезультатаЗапроса - Текущая строка выборки
//	НовыйСтатус - ПеречислениеСсылка - Новый статус
//	ДополнительныеПараметры - Структура - Структура дополнительных параметров.
//
// Возвращаемое значение:
//	Булево - Истина, в случае успешного завершения проверки.
//
Функция ПроверкаПередСменойСтатуса(ВыборкаПроверки, НовыйСтатус, ДополнительныеПараметры) Экспорт
	
	Отказ = Ложь;
	
	Если ДополнительныеПараметры = Неопределено Тогда
		Возврат Не Отказ;
	КонецЕсли;
	
	Если ДополнительныеПараметры.Свойство("КонтрольВыполненияЗаказа")
		И ВыборкаПроверки.ЕстьОстаткиПоЗаказу Тогда
		
		ТекстОшибки = НСтр("ru='У документа %Документ% статус ""%Статус%"" не установлен, т.к. заказ поставлен не полностью'");
		ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ВыборкаПроверки.Ссылка);
		ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Статус%", ВыборкаПроверки.ПредставлениеНовогоСтатуса);
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ВыборкаПроверки.Ссылка);
		Отказ = Истина;
		
	КонецЕсли;
	
	// ЭлектронноеВзаимодействие.СервисEDI
	СервисEDIУТ.ПроверитьКорректностьСтатусовСтатусамEDI(ВыборкаПроверки, НовыйСтатус, Отказ);
	// Конец ЭлектронноеВзаимодействие.СервисEDI
	
	Возврат Не Отказ;
	
КонецФункции

// Определяет право доступа на добавление документов типа Заказ поставщику
//
// Возвращаемое значение:
// Булево - Истина если право есть.
Функция ПравоДоступаДобавление() Экспорт
	
	Возврат ПравоДоступа("Добавление", Метаданные.Документы.ЗаказПоставщику);
	
КонецФункции

#Область РасчетСостояний

// Осуществляет вычисление текущего состояния заказа поставщику
//
// Параметры:
//	ЗаказПоставщику         - ДокументСсылка.ЗаказПоставщику - Документ, состояние которого необходимо вычислить
//	Договор                 - СправочникСсылка.ДоговорыКонтрагентов    - Договор с клиентом
//	СостояниеРасчетов       - ФормаКлиентскогоПриложения - Форма, в реквизиты которой будет помещено рассчитанное состояние.
//  ПроверитьЗаданияКОтражениюСостоянияЗаказов - Булево - признак проверки наличие задания
//	                                                      в регистре ЗаданияКОтражениюСостоянияЗаказов.
//
Процедура РассчитатьСостояние(
			Знач ЗаказПоставщику,
			Знач Договор,
			СостояниеРасчетов,
			ПроверитьЗаданияКОтражениюСостоянияЗаказов = Ложь) Экспорт
	
	ЗаполнитьЗначенияСвойств(СостояниеРасчетов, ВзаиморасчетыКлиентСервер.СтруктураСостоянияРасчетов(Ложь));
	
	Если НЕ ЗначениеЗаполнено(ЗаказПоставщику) Тогда
		Возврат;
	КонецЕсли;

	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ВТ.Ссылка КАК Ссылка,
	|	ВТ.Проведен КАК Проведен,
	|	ВТ.Статус КАК Статус,
	|	ВТ.СуммаДокумента КАК СуммаДокумента,
	|	ВТ.ПорядокРасчетов КАК ПорядокРасчетов,
	|	ВТ.ОбъектРасчетов КАК ОбъектРасчетов
	|ПОМЕСТИТЬ ВТ_ДокументЗаказ
	|ИЗ
	|	Документ.ЗаказПоставщику КАК ВТ
	|ГДЕ
	|	ВТ.Ссылка = &ЗаказПоставщику
	|;
	|/////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВЫБОР
	|		КОГДА (НЕ ДокументЗаказ.Проведен)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовПоставщикам.ПустаяСсылка)
	|		ИНАЧЕ
	|			ЕСТЬNULL(СостоянияЗаказовПоставщикам.Состояние, ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовПоставщикам.Закрыт))
	|	КОНЕЦ КАК Состояние,
	|	ВЫБОР
	|		КОГДА (НЕ ДокументЗаказ.Проведен)
	|			ТОГДА ЛОЖЬ
	|		КОГДА (ДокументЗаказ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПоставщикам.Закрыт) И &ИспользоватьСтатусы)
	|			ТОГДА ЛОЖЬ
	|		КОГДА СостоянияЗаказовПоставщикам.ДатаСобытия <> ДАТАВРЕМЯ(1, 1, 1)
	|				И &ТекущаяДата > СостоянияЗаказовПоставщикам.ДатаСобытия 
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК СостояниеПросрочено,
	|	ЕСТЬNULL(СостоянияЗаказовПоставщикам.СуммаОплаты,0) КАК СуммаОплаты,
	|	ЕСТЬNULL(СостоянияЗаказовПоставщикам.ПроцентОплаты,0) КАК ПроцентОплаты,
	|	ЕСТЬNULL(СостоянияЗаказовПоставщикам.СуммаПоступления,0) КАК СуммаПоступления,
	|	ЕСТЬNULL(СостоянияЗаказовПоставщикам.ПроцентПоступления,0) КАК ПроцентПоступления,
	|	ЕСТЬNULL(СостоянияЗаказовПоставщикам.ЕстьРасхожденияОрдерНакладная, ЛОЖЬ) КАК ЕстьРасхожденияОрдерНакладная,
	|	ЕСТЬNULL(СостоянияЗаказовПоставщикам.ПроцентДолга,0) КАК ПроцентДолга
	|	,&ПолеЕстьЗаданияКОтражениюСостоянияЗаказов
	|ИЗ
	|	ВТ_ДокументЗаказ КАК ДокументЗаказ
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрСведений.СостоянияЗаказовПоставщикам КАК СостоянияЗаказовПоставщикам
	|ПО
	|	СостоянияЗаказовПоставщикам.Заказ = ДокументЗаказ.Ссылка
	|ГДЕ
	|	&ПроверитьЗаданияКОтражениюСостоянияЗаказов
	|";
		
	ТекстЗапросаЕстьЗадания = "ВЫБРАТЬ ЛОЖЬ КАК ЕстьЗаданияКОтражениюСостоянияЗаказов";
	Если ПроверитьЗаданияКОтражениюСостоянияЗаказов Тогда
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
									",&ПолеЕстьЗаданияКОтражениюСостоянияЗаказов",
									",	ЛОЖЬ КАК ЕстьЗаданияКОтражениюСостоянияЗаказов");
		
		ТекстЗапросаЕстьЗадания = СостоянияДокументов.ТекстЗапросаЕстьЗаданияКОтражениюСостоянияЗаказов("&ЗаказПоставщику");
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
									"&ПроверитьЗаданияКОтражениюСостоянияЗаказов",
									СтрШаблон("НЕ ИСТИНА В 
											  |		(%1)", ТекстЗапросаЕстьЗадания));
	
	Иначе
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ПолеЕстьЗаданияКОтражениюСостоянияЗаказов", "");
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПроверитьЗаданияКОтражениюСостоянияЗаказов", "ИСТИНА");
		
	КонецЕсли;
	
	ТекстЗапросаРасчеты = "ВЫБРАТЬ 0 КАК СуммаДолга, 0 КАК СуммаКОплате";
	Если ПравоДоступа("Чтение", Метаданные.РегистрыНакопления.РасчетыСКлиентами) Тогда
		
		ТекстЗапросаРасчеты = "
		|ВЫБРАТЬ // ДОЛГ (+ НАМ ДОЛЖНЫ, - МЫ ДОЛЖНЫ)
		|	ВЫБОР
		|		КОГДА
		|			ДокументЗаказ.Проведен И
		|			((ДокументЗаказ.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПоставщикам.НеСогласован) И ДокументЗаказ.СуммаДокумента > 0)
		|			ИЛИ НЕ (ДокументЗаказ.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоЗаказам)
		|					ИЛИ ДокументЗаказ.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоЗаказамНакладным)))
		|		ТОГДА
		|			ВЫРАЗИТЬ (ЕСТЬNULL(РасчетыСПоставщикамиОстатки.СуммаОстаток, 0) КАК ЧИСЛО(31,2))
		|		ИНАЧЕ
		|			0
		|	КОНЕЦ КАК СуммаДолга,
		|	ВЫБОР
		|		КОГДА
		|			ДокументЗаказ.Проведен
		|			И (ДокументЗаказ.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоДоговорамКонтрагентов)
		|				ИЛИ ДокументЗаказ.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоДоговорамНакладным))
		|		ТОГДА
		|			ЕСТЬNULL(-РасчетыСПоставщикамиОстатки.КОплатеОстаток,0)
		|		ИНАЧЕ
		|			0
		|	КОНЕЦ КАК СуммаКОплате
		|ИЗ
		|	ВТ_ДокументЗаказ КАК ДокументЗаказ
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	РегистрНакопления.РасчетыСКлиентами.Остатки(,
		|			ОбъектРасчетов В (ВЫБРАТЬ ВТ.ОбъектРасчетов ИЗ ВТ_ДокументЗаказ КАК ВТ)
		|	) КАК РасчетыСПоставщикамиОстатки
		|ПО
		|	ДокументЗаказ.ОбъектРасчетов = РасчетыСПоставщикамиОстатки.ОбъектРасчетов
		|";
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	ТекстыЗапроса = Новый Массив;
	ТекстыЗапроса.Добавить(ТекстЗапроса);
	ТекстыЗапроса.Добавить(ТекстЗапросаРасчеты);
	ТекстыЗапроса.Добавить(ТекстЗапросаЕстьЗадания);
	ТекстЗапроса = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());

	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	
	Запрос.УстановитьПараметр("ЗаказПоставщику", ЗаказПоставщику);
	Запрос.УстановитьПараметр("ТекущаяДата",  НачалоДня(ТекущаяДатаСеанса()));
	Запрос.УстановитьПараметр("ИспользоватьСтатусы", ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПоставщикам"));
	
	РезультатыЗапроса = Запрос.ВыполнитьПакет();
	РезультатСостояний = РезультатыЗапроса[1];
	Если НЕ РезультатСостояний.Пустой() Тогда
		
		ВыборкаСостояний = РезультатСостояний.Выбрать();
		Если ВыборкаСостояний.Следующий() Тогда
			ЗаполнитьЗначенияСвойств(СостояниеРасчетов, ВыборкаСостояний);
		КонецЕсли;
	
		ВыборкаРасчетов = РезультатыЗапроса[2].Выбрать();
		Если ВыборкаРасчетов.Следующий() Тогда
			ЗаполнитьЗначенияСвойств(СостояниеРасчетов, ВыборкаРасчетов);
		КонецЕсли;
		
	ИначеЕсли ПроверитьЗаданияКОтражениюСостоянияЗаказов Тогда
	
		ВыборкаЕстьЗадания = РезультатыЗапроса[3].Выбрать();	
		Если ВыборкаЕстьЗадания.Следующий() Тогда
			ЗаполнитьЗначенияСвойств(СостояниеРасчетов, ВыборкаЕстьЗадания);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

#КонецОбласти

// Осуществляет инициализацию структуры состояния выполнения документа
//
// Возвращаемое значение:
//  Структура - структура с необходимыми полями.
//
Функция СтруктураСостояниеВыполненияДокумента() Экспорт
	
	СтруктураСостояние = Отчеты.СостояниеВыполненияДокументов.ИнициализироватьСтруктуруСостояниеВыполненияДокумента();
	
	СтруктураСостояние.Вставить("ВыводитьТаблицуРасчетыСПоставщиками", 1);
	СтруктураСостояние.Вставить("ВыводитьТаблицуЗаказано", 2);
	СтруктураСостояние.Вставить("ВыводитьТаблицыПоступление", 3);
	СтруктураСостояние.Вставить("ВыводитьТаблицыОтмененоПоступление", 4);
	СтруктураСостояние.Вставить("ЭтоЗаказ", Истина);
	СтруктураСостояние.Вставить("ЕстьСуммовыеПоказателиПоступления", Истина);
	СтруктураСостояние.Вставить("ЕстьПричиныОтменыПоступления", ПолучитьФункциональнуюОпцию("ИспользоватьПричиныОтменыЗаказовПоставщикам"));
	
	Возврат СтруктураСостояние
	
КонецФункции

// Порядок обработки документа при изменении направления деятельности.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
// 
// Возвращаемое значение:
// см. НаправленияДеятельностиСервер.ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности
Функция ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности(Форма) Экспорт
	
	ПорядокОбработкиДокумента = НаправленияДеятельностиСервер.ПорядокОбработкиДокументаПриИзмененииНаправленияДеятельности();
	ПорядокОбработкиДокумента.ИменаТабличныхЧастейДляОчисткиНекорректныхНазначений = "Товары";
	ТаблицаУсловий = НаправленияДеятельностиСервер.УсловияОбработкиНазначенийВСтроках("ТипНоменклатуры");
	ПорядокОбработкиДокумента.УсловияОбработкиСтрок.Вставить("Товары", ТаблицаУсловий);
	
	Возврат ПорядокОбработкиДокумента;
	
КонецФункции

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

// Определяет перечень хозяйственных операций, которые можно указывать в документах типа "Заказ поставщику".
//
//  Параметры:
//   ПроверятьФункциональныеОпции - Булево - Истина, если нужно получить только операции,
//                                           которые допустимо указывать в документе при текущих значениях
//                                           функциональных опций. Ложь, если нужно получить все операции документов
//                                           данного типа.
//  Возвращаемое значение:
//   Массив - Массив - Массив значений типа ПеречислениеСсылка.ХозяйственныеОперации.
Функция ХозяйственныеОперацииДокумента(ПроверятьФункциональныеОпции) Экспорт
	
	ИспользоватьКомиссиюПриЗакупках       = Истина;
	ИспользоватьТоварыВПутиОтПоставщиков  = Истина;
	ИспользоватьИмпортныеЗакупки          = Истина;
	ИспользоватьВвозТоваровИзТаможенногоСоюза = Истина;
	ИспользоватьНеотфактурованныеПоставки = Истина;
	ИспользоватьОтветственноеХранениеВПроцессеЗакупки = Ложь;
	ИспользоватьОтветственноеХранениеВПроцессеЗакупки = Истина;
	
	Если ПроверятьФункциональныеОпции Тогда
		
		ИспользоватьКомиссиюПриЗакупках       = ПолучитьФункциональнуюОпцию("ИспользоватьКомиссиюПриЗакупках");
		ИспользоватьТоварыВПутиОтПоставщиков  = ПолучитьФункциональнуюОпцию("ИспользоватьТоварыВПутиОтПоставщиков");
		ИспользоватьИмпортныеЗакупки          = ПолучитьФункциональнуюОпцию("ИспользоватьИмпортныеЗакупки");
		ИспользоватьВвозТоваровИзТаможенногоСоюза = ПолучитьФункциональнуюОпцию("ИспользоватьВвозТоваровИзТаможенногоСоюза");
		ИспользоватьНеотфактурованныеПоставки     = ПолучитьФункциональнуюОпцию("ИспользоватьНеотфактурованныеПоставки");
		ИспользоватьОтветственноеХранениеВПроцессеЗакупки = Ложь;
		ИспользоватьОтветственноеХранениеВПроцессеЗакупки = ПолучитьФункциональнуюОпцию(
			"ИспользоватьОтветственноеХранениеВПроцессеЗакупки");
		
	КонецЕсли;
	
	Операции = Новый Массив();
	
	Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика);
	Если ИспользоватьТоварыВПутиОтПоставщиков Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути);
	КонецЕсли;
	Если ИспользоватьНеотфактурованныеПоставки Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки);
	КонецЕсли;
	
	Если ИспользоватьИмпортныеЗакупки Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту);
	КонецЕсли;
	Если ИспользоватьИмпортныеЗакупки
		И ИспользоватьТоварыВПутиОтПоставщиков Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути);
	КонецЕсли;
	
	Если ИспользоватьВвозТоваровИзТаможенногоСоюза Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС);
	КонецЕсли;
	Если ИспользоватьВвозТоваровИзТаможенногоСоюза
		И ИспользоватьТоварыВПутиОтПоставщиков Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути);
	КонецЕсли;
	Если ИспользоватьВвозТоваровИзТаможенногоСоюза
		И ИспользоватьНеотфактурованныеПоставки Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки);
	КонецЕсли;
	
	Если ИспользоватьКомиссиюПриЗакупках Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ПриемНаКомиссию);
	КонецЕсли;
	
	Если ИспользоватьОтветственноеХранениеВПроцессеЗакупки Тогда
		Операции.Добавить(Перечисления.ХозяйственныеОперации.ПриемНаХранениеСПравомПродажи);
	КонецЕсли;
	
	Возврат Операции;
	
КонецФункции

// Возвращает структуру параметров для заполнения налогообложения НДС закупки.
//
// Параметры:
//  Объект - ДокументОбъект.ЗаказПоставщику - документ, по которому необходимо сформировать параметры.
//
// Возвращаемое значение:
//  См. УчетНДСУПКлиентСервер.ПараметрыЗаполненияНалогообложенияНДСЗакупки
//
Функция ПараметрыЗаполненияНалогообложенияНДСЗакупки(Объект) Экспорт

	ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияНалогообложенияНДСЗакупки();
	
	ПараметрыЗаполнения.Контрагент = Объект.Контрагент;
	ПараметрыЗаполнения.Договор = Объект.Договор;
	ПараметрыЗаполнения.Период =  Объект.Дата; 
	
	ХозОперацииЗакупкаУПоставщика = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
		Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика);
	
	ХозОперацииЗакупкаВСтранахЕАЭС = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
		Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС);
	
	ХозОперацииЗакупкаПоИмпорту = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
		Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту);
		
	Если ХозОперацииЗакупкаУПоставщика.Найти(Объект.ХозяйственнаяОперация) <> Неопределено Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		ПараметрыЗаполнения.ПриобретениеРабот = Истина;
		ПараметрыЗаполнения.ПриобретениеНаСтатьи = Истина;
		
	ИначеЕсли ХозОперацииЗакупкаВСтранахЕАЭС.Найти(Объект.ХозяйственнаяОперация) <> Неопределено Тогда
		
		ПараметрыЗаполнения.ВвозТоваровИзТаможенногоСоюза = Истина;
		
	ИначеЕсли ХозОперацииЗакупкаПоИмпорту.Найти(Объект.ХозяйственнаяОперация) <> Неопределено Тогда
		
		ПараметрыЗаполнения.ИмпортТоваров = Истина;
		
	ИначеЕсли  Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаХранениеСПравомПродажи Тогда
		
		ПараметрыЗаполнения.ПриемНаХранение = Истина;
		
	ИначеЕсли Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию Тогда
		
		ПараметрыЗаполнения.ПриемНаКомиссию = Истина;
		
	КонецЕсли;
	
	Возврат ПараметрыЗаполнения;
	
КонецФункции

// Возвращает структуру параметров для заполнения вида дятельности НДС.
//
// Параметры:
//  Объект - ДокументОбъект.ЗаказПоставщику - 
//
// Возвращаемое значение:
//  См. УчетНДСУПКлиентСервер.ПараметрыЗаполненияВидаДеятельностиНДС
//
Функция ПараметрыЗаполненияВидаДеятельностиНДС(Объект) Экспорт

	ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияВидаДеятельностиНДС();
	ПараметрыЗаполнения.Организация = Объект.Организация;
	ПараметрыЗаполнения.Склад = Объект.Склад;
	ПараметрыЗаполнения.Договор = Объект.Договор;
	ПараметрыЗаполнения.Дата = Объект.Дата;
	ПараметрыЗаполнения.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
	ПараметрыЗаполнения.Подразделение = Объект.Подразделение;
	
	ХозОперацииЗакупкаУПоставщика = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
		Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика);
	
	ХозОперацииЗакупкаВСтранахЕАЭС = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
		Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС);
	
	ХозОперацииЗакупкаПоИмпорту = ЗакупкиСервер.ХозяйственныеОперацииПоОсновной(
		Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту);
		
	Если ХозОперацииЗакупкаУПоставщика.Найти(Объект.ХозяйственнаяОперация) <> Неопределено Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		ПараметрыЗаполнения.ПриобретениеРабот = Истина;
		ПараметрыЗаполнения.ПриобретениеНаСтатьи = Истина;
		
	ИначеЕсли ХозОперацииЗакупкаВСтранахЕАЭС.Найти(Объект.ХозяйственнаяОперация) <> Неопределено
		Или ХозОперацииЗакупкаПоИмпорту.Найти(Объект.ХозяйственнаяОперация) <> Неопределено Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		
	КонецЕсли;
	
	Возврат ПараметрыЗаполнения;

КонецФункции

// Возвращает параметры выбора статей в документе.
// 
// Параметры:
// 	ХозяйственнаяОперация - ПеречислениеСсылка.ХозяйственныеОперации - Хозяйственная операция документа.
// 
// Возвращаемое значение:
// 	Массив - Массив параметров настройки счетов учета (См. ДоходыИРасходыСервер.ПараметрыВыбораСтатьиИАналитики)
//
Функция ПараметрыВыбораСтатейИАналитик(ХозяйственнаяОперация) Экспорт
	
	МассивПаметровВыбора = Новый Массив;
	
	#Область ТоварыСтатьяРасходов
	ПараметрыВыбора = ДоходыИРасходыСервер.ПараметрыВыбораСтатьиИАналитики();
	ПараметрыВыбора.ПутьКДанным =    "Объект.Товары";
	ПараметрыВыбора.Статья = "СтатьяРасходов";
	
	Если НоменклатураСервер.СписокХозяйственныхОперацийИсключающихУслугиИРаботы().НайтиПоЗначению(ХозяйственнаяОперация) <> Неопределено Тогда
		ПараметрыВыбора.ДоступностьПоОперации = Ложь;
	КонецЕсли;
	
	ПараметрыВыбора.ВыборСтатьиРасходов = Истина;
	ПараметрыВыбора.АналитикаРасходов = "АналитикаРасходов";
	
	ПараметрыВыбора.ЭлементыФормы.Статья.Добавить("ТоварыСтатьяРасходов");
	
	ПараметрыВыбора.ЭлементыФормы.АналитикаРасходов.Добавить("ТоварыАналитикаРасходов");
	
	ПараметрыВыбора.УсловияДоступностиСтатьиВСтроках.Вставить("СписатьНаРасходы", Истина);
	
	МассивПаметровВыбора.Добавить(ПараметрыВыбора);
	#КонецОбласти
	
	Возврат МассивПаметровВыбора;
	
КонецФункции

// Возвращает параметры механизма взаиморасчетов.
//
// Параметры:
// 	ДанныеЗаполнения - ДокументОбъект, СправочникОбъект, ДокументСсылка, СправочникСсылка, Структура, ДанныеФормыСтруктура - Объект или коллекция для
//              расчета параметров взаиморасчетов.
//
// Возвращаемое значение:
// 	См. ВзаиморасчетыСервер.ПараметрыМеханизма
//
Функция ПараметрыВзаиморасчеты(ДанныеЗаполнения = Неопределено) Экспорт
	
	Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеЗаполнения) Тогда
		СтруктураДанныеЗаполнения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
			ДанныеЗаполнения, 
			"ХозяйственнаяОперация");
		ХозяйственнаяОперация = СтруктураДанныеЗаполнения.ХозяйственнаяОперация;
	ИначеЕсли ДанныеЗаполнения = Неопределено Тогда
		ХозяйственнаяОперация = Неопределено;
	Иначе
		ХозяйственнаяОперация = ДанныеЗаполнения.ХозяйственнаяОперация;
	КонецЕсли;
	
	СтруктураПараметров = ВзаиморасчетыСервер.ПараметрыМеханизма();
	СтруктураПараметров.ЭтоЗаказ                         = Истина;
	СтруктураПараметров.ТипРасчетов                      = Перечисления.ТипыРасчетовСПартнерами.РасчетыСПоставщиком;

	СтруктураПараметров.ИзменяетПланОплаты               = ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки;
	СтруктураПараметров.ИзменяетПланОтгрузкиПоставки     = ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаТоварыВПути
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщикаФактуровкаПоставки
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпорту
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаПоИмпортуТоварыВПути
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭС
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСТоварыВПути
															ИЛИ ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаВСтранахЕАЭСФактуровкаПоставки;
	
	СтруктураПараметров.КурсЧислитель                    = "";
	СтруктураПараметров.КурсЗнаменатель                  = "";
	
	СтруктураПараметров.ПутьКДаннымТЧ                    = "Объект.Товары";
	
	СтруктураПараметров.ПутьКДаннымТЧЭтапыОплаты         = "Объект.ЭтапыГрафикаОплаты";
	СтруктураПараметров.НадписьЭтапыОплаты               = "Форма.НадписьЭтапыОплаты";
	СтруктураПараметров.ДатаСогласования                 = "Объект.ДатаСогласования";
	
	СтруктураПараметров.ДатаОтгрузки                     = "Объект.Товары.ДатаОтгрузки";
	СтруктураПараметров.ОтгружатьОднойДатой              = "Объект.ПоступлениеОднойДатой";
	
	СтруктураПараметров.БанковскийСчетОрганизации        = "Объект.БанковскийСчет";
	СтруктураПараметров.БанковскийСчетКонтрагента        = "";
	СтруктураПараметров.Менеджер                         = "Объект.Менеджер";
	
	СтруктураПараметров.СуммаДокументаФорма              = "Форма.СуммаЗаказаноСЗалоговойТарой";
	СтруктураПараметров.СуммаЗалогаЗаТаруФорма           = "Форма.СуммаЗалогаЗаТару";
	СтруктураПараметров.ИсточникСуммТабличнаяЧасть       = Истина;
	
	СтруктураПараметров.ЭлементыФормы.НадписьЭтапы       = "ДекорацияЭтапыОплаты";
	СтруктураПараметров.ЭлементыФормы.НадписьРасчеты     = "ДекорацияСостояниеРасчетов";
	СтруктураПараметров.ЭлементыФормы.ЗачетОплаты        = "ЗачетОплатыФорма";
	СтруктураПараметров.ЭлементыФормы.ГруппаФинансовогоУчета = "ГруппаФинансовогоУчета";
	СтруктураПараметров.ЭлементыФормы.НаправлениеДеятельности = "НаправлениеДеятельности";
	СтруктураПараметров.НомерВходящегоДокумента          = "Объект.НомерПоДаннымПоставщика";
	СтруктураПараметров.ДатаВходящегоДокумента           = "Объект.ДатаПоДаннымПоставщика";
	
	СтруктураПараметров.ОбъектРасчетов                   = "Объект.ОбъектРасчетов";
	СтруктураПараметров.ВернутьМногооборотнуюТару        = "Объект.ВернутьМногооборотнуюТару";
	СтруктураПараметров.ТребуетсяЗалогЗаТару             = "Объект.ТребуетсяЗалогЗаТару";
	
	СтруктураПараметров.ОперацияССамозанятым             = "Объект.ОперацияССамозанятым";
	
	Возврат СтруктураПараметров;
	
КонецФункции

// Заполняет адрес доставки по складу.
//
// Параметры:
// 	АдресДоставкиДляПоставщика - Строка - адрес доставки;
// 	ДоступныеСклады - массив из СправочникСсылка.Склады - Склады документа;
// 	ДатаПереодаС - Дата - дата начала действия адреса.
//
Процедура ЗаполнитьАдресДоставкиДляПоставщика(АдресДоставкиДляПоставщика, ДоступныеСклады, Знач ДатаПереодаС = Неопределено) Экспорт
	
	СписокВыбораАдреса = АдресаСкладов(ДоступныеСклады, ДатаПереодаС);
	
	Если СписокВыбораАдреса.Количество() = 1 Тогда
		АдресДоставкиДляПоставщика = СписокВыбораАдреса[0].Значение;
	КонецЕсли;
	
КонецПроцедуры

// Получает список адресов по складам для документа.
//
// Параметры:
// 	ДоступныеСклады - массив из СправочникСсылка.Склады - Склады документа;
// 	ДатаПереодаС - Дата - дата начала действия адреса.
//
// Возвращаемое значение:
//	СписокЗначений из Строка - данные адресов доставки.
//
Функция АдресаСкладов(ДоступныеСклады, Знач ДатаПереодаС = Неопределено) Экспорт
	
	СписокВыбораАдреса = Новый СписокЗначений;
	ДатаПереодаС = ?(ЗначениеЗаполнено(ДатаПереодаС), ДатаПереодаС, ТекущаяДатаСеанса());
	
	ТипыКонтактнойИнформации= Новый Массив;
	ТипыКонтактнойИнформации.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес);
	
	Если ДоступныеСклады.Количество() > 0 Тогда
		АдресаСкладов = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(ДоступныеСклады,
																					ТипыКонтактнойИнформации,
																					Неопределено,
																					ДатаПереодаС);
		Для Каждого Адрес Из АдресаСкладов Цикл
			
			Если ЗначениеЗаполнено(Адрес.Представление)
				И СписокВыбораАдреса.НайтиПоЗначению(Адрес.Представление) = Неопределено Тогда
				
				СписокВыбораАдреса.Добавить(Адрес.Представление, Строка(Адрес.Вид) + ": " + Адрес.Представление);
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат СписокВыбораАдреса;
	
КонецФункции

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// Позволяет указать объекты метаданных, для которых задана логика ограничения доступа к данным.
//
// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И ЗначениеРазрешено(Партнер)
	|	И ЗначениеРазрешено(Склад)
	|	И ЗначениеРазрешено(Подразделение)";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

// ЭлектронноеВзаимодействие.СервисEDI

// Определение того, какие реквизиты формы документа будут заблокированы в зависимости от доступности реквизитов документа EDI
//
// Параметры:
//  ТаблицаПараметров - см. СервисEDIПереопределяемый.ЗаполнитьПараметрыЗапретаРедактированияРеквизитовEDI.ТаблицаПараметров
//
Процедура ЗаполнитьТаблицуПараметровБлокировкиРеквизитовEDI(ТаблицаПараметров) Экспорт
	
	Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
		
		БлокируемыеЭлементы = Новый СписокЗначений;
		
		Если СтрокаТаблицы.ИмяРеквизита = "Покупатель" Тогда
			
			БлокируемыеЭлементы.Добавить("Партнер");
			БлокируемыеЭлементы.Добавить("Контрагент");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Поставщик" Тогда
			
			БлокируемыеЭлементы.Добавить("Организация");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ПоставщикБанковскийСчет" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ВариантУказанияНоменклатурыВЗаказе" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Валюта" Тогда
			
			БлокируемыеЭлементы.Добавить("Валюта");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЦенаВключаетНДС" Тогда
			
			БлокируемыеЭлементы.Добавить("ЦенаВключаетНДС");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "СуммаДокумента" Тогда
			
			БлокируемыеЭлементы.Добавить("ЗакрытьЗаказ");
			БлокируемыеЭлементы.Добавить("Соглашение");
			БлокируемыеЭлементы.Добавить("Договор");
			БлокируемыеЭлементы.Добавить("ТоварыВставитьСтроки");
			БлокируемыеЭлементы.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
			БлокируемыеЭлементы.Добавить("ТоварыПоискПоШтрихкоду");
			БлокируемыеЭлементы.Добавить("ТоварыЗагрузитьДанныеИзТСД");
			БлокируемыеЭлементы.Добавить("ТоварыПодобратьНоменклатуру");
			БлокируемыеЭлементы.Добавить("ТоварыДополнитьМногооборотнойТарой");
			БлокируемыеЭлементы.Добавить("ТоварыЗагрузитьИзВнешнегоФайла");
			БлокируемыеЭлементы.Добавить("ТоварыОтменитьВыделенныеСтроки");
			БлокируемыеЭлементы.Добавить("ТоварыОтменитьНепоставленныеСтроки");
			БлокируемыеЭлементы.Добавить("ТоварыЗаполнитьЦеныПоСоглашению");
			БлокируемыеЭлементы.Добавить("ТоварыЗаполнитьЦеныВыделенныхСтрокПоВидуЦеныПоставщика");
			БлокируемыеЭлементы.Добавить("ТоварыСкорректироватьЦеныПоПоступлениям");
			БлокируемыеЭлементы.Добавить("ТоварыНазначитьРучнуюСкидкуВыделенныхСтрок");
			БлокируемыеЭлементы.Добавить("ТоварыОтменитьРучныеСкидки");
			БлокируемыеЭлементы.Добавить("ТоварыОтменено");
			БлокируемыеЭлементы.Добавить("ХозяйственнаяОперация");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ОтгружатьЗаказЦеликом" Тогда
			
			БлокируемыеЭлементы.Добавить("ПоступлениеОднойДатой");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ПлановаяДатаПоставки" Тогда
			
			БлокируемыеЭлементы.Добавить("ДатаПоступления");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары" Тогда
			
			БлокируемыеЭлементы.Добавить("Товары");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "СпособДоставки" Тогда
			
			БлокируемыеЭлементы.Добавить("СпособДоставки");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "АдресДоставки" Тогда
			
			БлокируемыеЭлементы.Добавить("ПеревозчикПартнер");
			БлокируемыеЭлементы.Добавить("АдресДоставкиДляПоставщика");
			БлокируемыеЭлементы.Добавить("АдресДоставкиПеревозчика");
			БлокируемыеЭлементы.Добавить("АдресПоставщика");
			БлокируемыеЭлементы.Добавить("ЗонаДоставки");
			БлокируемыеЭлементы.Добавить("ВремяДоставкиС");
			БлокируемыеЭлементы.Добавить("ВремяДоставкиПо");
			БлокируемыеЭлементы.Добавить("ДополнительнаяИнформацияПоДоставке");
			БлокируемыеЭлементы.Добавить("ДополнитьИнформациюПоДоставкеКонтактами");
			БлокируемыеЭлементы.Добавить("ОсобыеУсловияПеревозки");
			БлокируемыеЭлементы.Добавить("ОсобыеУсловияПеревозкиОписание");
			БлокируемыеЭлементы.Добавить("АдресДоставкиДляПоставщика2");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "НалогообложениеНДС" Тогда
			
			БлокируемыеЭлементы.Добавить("НалогообложениеНДС");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПокупательНоменклатура" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыЗаполнитьНоменклатуруПоНоменклатуреПартнера");
			БлокируемыеЭлементы.Добавить("ТоварыНоменклатура");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПокупательУпаковка" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыУпаковка"); 
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПокупательКоличество" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПокупательКоличествоУпаковок" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыКоличествоУпаковок");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПоставщикНоменклатура" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыНоменклатураПартнера");
			БлокируемыеЭлементы.Добавить("ТоварыХарактеристика");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПоставщикУпаковка" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПоставщикКоличество" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.ПоставщикКоличествоУпаковок" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.Цена" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыВидЦеныПоставщика");
			БлокируемыеЭлементы.Добавить("ТоварыЦена");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.Сумма" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыСумма");
			БлокируемыеЭлементы.Добавить("ТоварыСуммаСНДС");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.СуммаСкидки" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыПроцентРучнойСкидки");
			БлокируемыеЭлементы.Добавить("ТоварыСуммаРучнойСкидки");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.СтавкаНДС" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыСтавкаНДС");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.СуммаНДС" Тогда
			
			БлокируемыеЭлементы.Добавить("ТоварыСуммаНДС");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "Товары.СрокПоставки" Тогда
			
			БлокируемыеЭлементы.Добавить("ЗаполнитьДатуПоступленияДляВыделенныхСтрок");
			БлокируемыеЭлементы.Добавить("ТоварыДатаПоступления");
			БлокируемыеЭлементы.Добавить("ЖелаемаяДатаПоступления");
			БлокируемыеЭлементы.Добавить("ПоступлениеОднойДатой");
			БлокируемыеЭлементы.Добавить("ДатаПоступления");
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЭтапыГрафикаОплаты.ВариантОплаты" Тогда
			
			// Блокировка выполняется в форме, установкой признака "Только просмотр" когда документ на стороне контрагента.
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЭтапыГрафикаОплаты.ФормаОплаты" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЭтапыГрафикаОплаты.ДатаПлатежа" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЭтапыГрафикаОплаты.ПроцентПлатежа" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЭтапыГрафикаОплаты.СуммаПлатежа" Тогда
			
		ИначеЕсли СтрокаТаблицы.ИмяРеквизита = "ЭтапыГрафикаОплаты.Сдвиг" Тогда
			
		КонецЕсли;
		
		СтрокаТаблицы.БлокируемыеЭлементы = БлокируемыеЭлементы;
		
	КонецЦикла;

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

// Конец ЭлектронноеВзаимодействие.СервисEDI

#КонецОбласти

#КонецОбласти

#КонецЕсли

#Область ОбработчикиСобытий

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

#КонецОбласти

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныеПроцедурыИФункции

#Область Проведение

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;

	Возврат ИсточникиДанных; 

КонецФункции

// Возвращает таблицы для движений, необходимые для проведения документа по регистрам учетных механизмов.
//
// Параметры:
//  Документ - ДокументОбъект.ЗаказПоставщику, ДокументСсылка.ЗаказПоставщику - ссылка на документ или объект, по которому необходимо получить данные
//  Регистры - Структура - список имен регистров, для которых необходимо получить таблицы
//  ДопПараметры - Структура - дополнительные параметры для получения данных, определяющие контекст проведения.
//
// Возвращаемое значение:
//  Структура - коллекция элементов - таблиц значений - данных для отражения в регистр.
//
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
	
	Если ДопПараметры = Неопределено Тогда
		ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
	КонецЕсли;

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

Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
	
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ЗаказПоставщику.Дата                         КАК Период,
	|	ЗаказПоставщику.Валюта                       КАК Валюта,
	|	ЗаказПоставщику.ВалютаСоглашения             КАК ВалютаСоглашения,
	|	ЗаказПоставщику.ЦенаВключаетНДС              КАК ЦенаВключаетНДС,
	|	ЗаказПоставщику.ЦенаВключаетНДССоглашения    КАК ЦенаВключаетНДССоглашения,
	|	ЗаказПоставщику.Статус                       КАК Статус,
	|	ЗаказПоставщику.Партнер                      КАК Партнер,
	|	ЗаказПоставщику.Контрагент                   КАК Контрагент,
	|	ЗаказПоставщику.Организация                  КАК Организация,
	|	ЗаказПоставщику.ХозяйственнаяОперация        КАК ХозяйственнаяОперация,
	|	ЗаказПоставщику.Соглашение                   КАК Соглашение,
	|	ЗаказПоставщику.РегистрироватьЦеныПоставщика КАК РегистрироватьЦеныПоставщика,
	|	ЗаказПоставщику.ВариантПриемкиТоваров        КАК ВариантПриемкиТоваров,
	|	ЗаказПоставщику.Договор                      КАК Договор,
	|	ЗаказПоставщику.ДоговорПредставление         КАК ДоговорПредставление,
	|	ЗаказПоставщику.ВернутьМногооборотнуюТару    КАК ВернутьМногооборотнуюТару,
	|	ЗаказПоставщику.ТребуетсяЗалогЗаТару         КАК ТребуетсяЗалогЗаТару,
	|	ЗаказПоставщику.НаправлениеДеятельности      КАК НаправлениеДеятельности,
	|	ЗаказПоставщику.Склад                        КАК Склад,
	|	ЗаказПоставщику.Номер                        КАК Номер,
	|	ЗаказПоставщику.Менеджер                     КАК Менеджер,
	|	ЗаказПоставщику.Автор                        КАК Автор,
	|	ЗаказПоставщику.Комментарий                  КАК Комментарий,
	|	ЗаказПоставщику.СуммаДокумента               КАК СуммаДокумента,
	|	ЗаказПоставщику.Проведен                     КАК Проведен,
	|	ЗаказПоставщику.ПометкаУдаления              КАК ПометкаУдаления,
	|	ЗаказПоставщику.ДатаПоДаннымПоставщика       КАК ДатаПоДаннымПоставщика,
	|	ЗаказПоставщику.НомерПоДаннымПоставщика      КАК НомерПоДаннымПоставщика,
	|	ЗаказПоставщику.Подразделение                КАК Подразделение,
	|	ЗаказПоставщику.Приоритет                    КАК Приоритет
	|
	|ИЗ	ДанныеДокументаШапка КАК ЗаказПоставщику";
	Реквизиты = Запрос.Выполнить().Выбрать();
	Реквизиты.Следующий();
	
	Запрос.УстановитьПараметр("Период",                       Реквизиты.Период);
	Запрос.УстановитьПараметр("Валюта",                       Реквизиты.Валюта);
	Запрос.УстановитьПараметр("Статус",                       Реквизиты.Статус);
	Запрос.УстановитьПараметр("ЗаказПоставщику",              ДокументСсылка);
	Запрос.УстановитьПараметр("Организация",                  Реквизиты.Организация);
	Запрос.УстановитьПараметр("ЦенаВключаетНДС",              Реквизиты.ЦенаВключаетНДС);
	Запрос.УстановитьПараметр("ХозяйственнаяОперация",        Реквизиты.ХозяйственнаяОперация);
	Запрос.УстановитьПараметр("РегистрироватьЦеныПоставщика", Реквизиты.РегистрироватьЦеныПоставщика);
	Запрос.УстановитьПараметр("Валюта",                       Реквизиты.Валюта);
	Запрос.УстановитьПараметр("ВалютаСоглашения",             Реквизиты.ВалютаСоглашения);
	Запрос.УстановитьПараметр("Соглашение",                   Реквизиты.Соглашение);
	Запрос.УстановитьПараметр("Договор",                      Реквизиты.Договор);
	Запрос.УстановитьПараметр("ЦенаВключаетНДССоглашения",    Реквизиты.ЦенаВключаетНДССоглашения);
	Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару",    Реквизиты.ВернутьМногооборотнуюТару);
	Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару",         Реквизиты.ТребуетсяЗалогЗаТару);
	Запрос.УстановитьПараметр("Партнер",                      Реквизиты.Партнер);
	Запрос.УстановитьПараметр("Приоритет",                    Реквизиты.Приоритет);
	Запрос.УстановитьПараметр("Автор",                        Реквизиты.Автор);
	Запрос.УстановитьПараметр("Склад",                        Реквизиты.Склад);
	Запрос.УстановитьПараметр("Номер",                        Реквизиты.Номер);
	Запрос.УстановитьПараметр("Менеджер",                     Реквизиты.Менеджер);
	Запрос.УстановитьПараметр("Комментарий",                  Реквизиты.Комментарий);
	Запрос.УстановитьПараметр("СуммаДокумента",               Реквизиты.СуммаДокумента);
	Запрос.УстановитьПараметр("НаправлениеДеятельности",      Реквизиты.НаправлениеДеятельности);
	Запрос.УстановитьПараметр("Проведен",                     Реквизиты.Проведен);
	Запрос.УстановитьПараметр("ПометкаУдаления",              Реквизиты.ПометкаУдаления);
	Запрос.УстановитьПараметр("ДатаПоДаннымПоставщика",       Реквизиты.ДатаПоДаннымПоставщика);
	Запрос.УстановитьПараметр("НомерПоДаннымПоставщика",      Реквизиты.НомерПоДаннымПоставщика);
	Запрос.УстановитьПараметр("Подразделение",                Реквизиты.Подразделение);
	Запрос.УстановитьПараметр("Контрагент",                   Реквизиты.Контрагент);
	
	Запрос.УстановитьПараметр("ИдентификаторМетаданных", ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(ДокументСсылка)));
	
	Если ЗначениеЗаполнено(Реквизиты.Договор) Тогда
		ШаблонСтроки = "ru = 'По договору ""%1""'"; // @НСтр
		ИнформацияПоДоговору = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, Реквизиты.ДоговорПредставление);
	КонецЕсли;
	Запрос.УстановитьПараметр("ИнформацияПоДоговору",  ИнформацияПоДоговору);
	Запрос.УстановитьПараметр("ВариантПриемкиТоваров", Реквизиты.ВариантПриемкиТоваров);
	
КонецПроцедуры

Процедура ПолучитьДанныеДокумента(Запрос, ДокументСсылка)

	СписокЗапросов = Новый Массив;

	ТекстЗапросаДанныеДокументаШапка(СписокЗапросов);
	ТекстЗапросаДанныеДокументаТаблицаТовары(СписокЗапросов);
	ТекстЗапросаДанныеДокументаТаблицаЭтапыГрафикаОплаты(СписокЗапросов);

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

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

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

Процедура ТекстЗапросаДанныеДокументаТаблицаЭтапыГрафикаОплаты(СписокЗапросов)

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

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

Процедура СформироватьСуммыДокументаВВалютахУчета(Запрос, ТекстыЗапроса, Регистры = Неопределено, ДокументОбъект = Неопределено) Экспорт
	

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

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

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

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

Функция ТекстЗапросаВременнаяТаблицаТовары(Запрос, ТекстыЗапроса)
	
	ИмяРегистра = "ВременнаяТаблицаТовары";
	
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	Товары.НоменклатураПартнера КАК НоменклатураПартнера,
	|	Товары.Номенклатура           КАК Номенклатура,
	|	Товары.Характеристика         КАК Характеристика,
	|	Товары.ВидЦеныПоставщика      КАК ВидЦеныПоставщика,
	|	Товары.Упаковка               КАК Упаковка,
	|	Товары.СтавкаНДС              КАК СтавкаНДС,
	|	Товары.Цена                   КАК Цена
	|ПОМЕСТИТЬ
	|	ВременнаяТаблицаТовары
	|ИЗ
	|	ДанныеДокументаТаблицаТовары КАК Товары
	|ГДЕ
	|	&РегистрироватьЦеныПоставщика
	|";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	Возврат ТекстЗапроса;
	
КонецФункции

Функция ТекстЗапросаТоварыСРазличнымиУпаковкамиЦенами(Запрос, ТекстыЗапроса)
	
	ИмяРегистра = "ТоварыСРазличнымиУпаковкамиЦенами";
	
	Если НЕ ПроведениеДокументов.ЕстьТаблицаЗапроса("ВременнаяТаблицаТовары", ТекстыЗапроса) Тогда
		ТекстЗапросаВременнаяТаблицаТовары(Запрос, ТекстыЗапроса);
	КонецЕсли; 
	
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	Товары.Номенклатура                     КАК Номенклатура,
	|	Товары.Характеристика                   КАК Характеристика,
	|	Товары.ВидЦеныПоставщика                КАК ВидЦеныПоставщика,
	|	СРЕДНЕЕ(
	|		Товары.Цена / ВЫБОР
	|				КОГДА
	|					Товары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
	|				ТОГДА
	|					&ТекстЗапросаКоэффициентУпаковки
	|				ИНАЧЕ
	|					1
	|			КОНЕЦ
	|	) КАК ЦенаЗаБазовуюЕдиницу,
	|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Товары.Упаковка)  КАК КоличествоРазличныхУпаковок
	|ПОМЕСТИТЬ
	|	ТоварыСРазличнымиУпаковкамиЦенами
	|ИЗ
	|	ВременнаяТаблицаТовары КАК Товары
	|СГРУППИРОВАТЬ ПО
	|	Номенклатура,
	|	Характеристика,
	|	ВидЦеныПоставщика
	|";
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
		"&ТекстЗапросаКоэффициентУпаковки",
		Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
		"Товары.Упаковка",
		"Товары.Номенклатура"));
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	Возврат ТекстЗапроса;
	
КонецФункции

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

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

Функция ТекстЗапросаТаблицаРеестрДокументов(Запрос, ТекстыЗапроса, Регистры)
	
	ИмяРегистра = "РеестрДокументов";
	
	Если НЕ ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
		Возврат "";
	КонецЕсли;
	
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	&Ссылка                                 КАК Ссылка,
	|	&Период                                 КАК ДатаДокументаИБ,
	|	&Номер                                  КАК НомерДокументаИБ,
	|	&ИдентификаторМетаданных                КАК ТипСсылки,
	|	&Организация                            КАК Организация,
	|	&ХозяйственнаяОперация                  КАК ХозяйственнаяОперация,
	|	&Партнер                                КАК Партнер,
	|	&Контрагент                             КАК Контрагент,
	|	&Договор                                КАК Договор,
	|	&НаправлениеДеятельности                КАК НаправлениеДеятельности,
	|	&Склад                                  КАК МестоХранения,
	|	&Подразделение                          КАК Подразделение,
	|	&Менеджер                               КАК Ответственный,
	|	&Автор                                  КАК Автор,
	|	&Комментарий                            КАК Комментарий,
	|	&Валюта                                 КАК Валюта,
	|	&СуммаДокумента                         КАК Сумма,
	|	&Статус                                 КАК Статус,
	|	&Проведен                               КАК Проведен,
	|	&ПометкаУдаления                        КАК ПометкаУдаления,
	|	ЛОЖЬ                                    КАК ДополнительнаяЗапись,
	|	&ИнформацияПоДоговору                   КАК Дополнительно,
	|	&ДатаПоДаннымПоставщика                 КАК ДатаПервичногоДокумента,
	|	ЛОЖЬ                                    КАК СторноИсправление,
	|	НЕОПРЕДЕЛЕНО                            КАК СторнируемыйДокумент,
	|	НЕОПРЕДЕЛЕНО                            КАК ИсправляемыйДокумент,
	|	&НомерПоДаннымПоставщика                КАК НомерПервичногоДокумента,
	|	&Период                                 	КАК ДатаОтраженияВУчете,
	|	&Приоритет                              КАК Приоритет";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
	
КонецФункции

Процедура ДобавитьТекстыОтраженияВзаиморасчетов(Запрос, ТекстыЗапроса, Регистры, ДокументОбъект)

	#Область НаправленияДеятельности
	
	ИмяРегистра = "ВременнаяТаблицаНаправленияДеятельности";
	
	ТекстЗапросаНаправленияДеятельности = 
		"ВЫБРАТЬ
		|	ДанныеДокументаШапка.ОбъектРасчетов КАК ОбъектРасчетов
		|ИЗ
		|	ДанныеДокументаШапка КАК ДанныеДокументаШапка";
		
	ТекстЗапросаНаправленияДеятельности = ВзаиморасчетыСервер.ПолучитьТаблицуНаправленийДеятельности(ТекстЗапросаНаправленияДеятельности);

	ТекстыЗапроса.Добавить(ТекстЗапросаНаправленияДеятельности, ИмяРегистра);
	
	#КонецОбласти
	
	Если ДокументОбъект = Неопределено
		Или НЕ (ДокументОбъект.Статус <> Перечисления.СтатусыЗаказовПоставщикам.НеСогласован
		И НЕ(ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию
			ИЛИ ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаХранениеСПравомПродажи)) Тогда

		ТекстПланыОплат = "";

	Иначе

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

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

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

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

#КонецОбласти

#Область Печать

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

	// Заказ поставщику
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.МенеджерПечати = "Обработка.ПечатьЗаказовНаТоварыУслуги";
	КомандаПечати.Идентификатор = "ЗаказПоставщику";
	КомандаПечати.Представление = НСтр("ru = 'Заказ поставщику'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	КомандаПечати.ДополнительныеПараметры.Вставить("Тип", "ЗаказПоставщику");

	Если ПолучитьФункциональнуюОпцию("ИспользоватьНоменклатуруПартнеров") Тогда
		 
		 // Заказ поставщику по данным поставщика
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.МенеджерПечати = "Обработка.ПечатьЗаказовНаТоварыУслуги";
		КомандаПечати.Идентификатор = "ЗаказПоставщику";
		КомандаПечати.Представление = НСтр("ru = 'Заказ поставщику по данным поставщика'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("Тип", "ЗаказПоставщикуПоДаннымПоставщика");
		
	КонецЕсли;

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

// Возвращает данные, необходимые для печатной формы "Заказ на товары и услуги".
// 
// Параметры:
// 	МассивОбъектов  - Массив    - ссылки на объекты, которые нужно распечатать
// 	ПараметрыПечати - Структура - дополнительные настройки печати
//  КодЯзыка - Строка - язык, на котором будет выводиться печатная форма.
//                         Состоит из кода языка по ISO 639-1 и, опционально, кода страны по ISO 3166-1, разделенных
//                         символом подчеркивания. Примеры: "en", "en_US", "en_GB", "ru", "ru_RU".
// 	
// Возвращаемое значение:
// 	Структура - Содержит в себе данные по шапке документа, табличной части и этапам оплаты:
// 	* РезультатПоШапке          - РезультатЗапроса - 
// 	* РезультатПоТабличнойЧасти - РезультатЗапроса - 
// 	* РезультатПоЭтапамОплаты   - РезультатЗапроса - 
//
Функция ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги(МассивОбъектов, ПараметрыПечати, КодЯзыка = Неопределено) Экспорт
	
	Запрос = Новый Запрос();
	ТекстЗапроса =  
	"ВЫБРАТЬ
	|	Документы.Ссылка										КАК Ссылка,
	|	Документы.Номер											КАК Номер,
	|	Документы.Дата											КАК Дата,
	|	Документы.Организация									КАК Организация,
	|	Документы.Организация									КАК Заказчик,
	|
	|	ВЫБОР КОГДА
	|		Документы.НалогообложениеНДС В (ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС),
	|										ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ЭлектронныеУслуги))
	|	ТОГДА
	|		ИСТИНА
	|	ИНАЧЕ
	|		ЛОЖЬ
	|	КОНЕЦ													КАК УчитыватьНДС,
	|	Документы.ЦенаВключаетНДС								КАК ЦенаВключаетНДС,
	|	Документы.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ОблагаетсяНДСУПокупателя) КАК ОперацияОблагаетсяНДСУПокупателя,
	|
	|	Документы.Организация.Префикс							КАК Префикс,
	|	Документы.Контрагент									КАК Контрагент,
	|	Документы.Контрагент									КАК Исполнитель,
	|	Документы.БанковскийСчет								КАК БанковскийСчет,
	|	Документы.БанковскийСчет.ТекстКорреспондента			КАК БанковскийСчетТекстКорреспондента,
	|	Документы.Валюта										КАК Валюта,
	|	Документы.Менеджер.ФизическоеЛицо						КАК Менеджер,
	|	Документы.ДополнительнаяИнформация						КАК ДополнительнаяИнформация,
	|
	|	ВЫБОР Документы.СпособДоставки
	|		КОГДА ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПоставщикаДоНашегоСклада) ТОГДА
	|			Документы.АдресДоставкиДляПоставщика
	|		КОГДА ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчикаДоНашегоСклада) ТОГДА
	|			Документы.АдресДоставкиДляПоставщика
	|		КОГДА ЗНАЧЕНИЕ(Перечисление.СпособыДоставки.СиламиПеревозчикаДоПунктаПередачи) ТОГДА
	|			Документы.АдресДоставкиПеревозчика
	|		ИНАЧЕ
	|			""""
	|	КОНЕЦ													КАК АдресДоставки,
	|
	|	НЕОПРЕДЕЛЕНО											КАК Грузоотправитель,
	|	НЕОПРЕДЕЛЕНО											КАК Грузополучатель,
	// Параметры для выбора областей макета отчета
	|	ЛОЖЬ													КАК ПоказыватьНДСВСтроках,
	|	ИСТИНА													КАК ИспользоватьАвтоСкидки,
	|	&Тип													КАК Тип,
	|	&ПредставлениеДокумента									КАК ПредставлениеДокумента,
	|	&ПредставлениеВОшибке									КАК ПредставлениеВОшибке
	|
	|ИЗ
	|	Документ.ЗаказПоставщику КАК Документы
	|
	|ГДЕ
	|	Документы.Ссылка В(&МассивОбъектов)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Документы.МоментВремени
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	НЕОПРЕДЕЛЕНО КАК Ссылка,
	|	НЕОПРЕДЕЛЕНО КАК НомерСтроки,
	|	НЕОПРЕДЕЛЕНО КАК ДатаПлатежа,
	|	НЕОПРЕДЕЛЕНО КАК ВариантОплаты,
	|	НЕОПРЕДЕЛЕНО КАК ПроцентПлатежа,
	|	НЕОПРЕДЕЛЕНО КАК СуммаПлатежа
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.Ссылка											КАК Ссылка,
	|	Товары.НомерСтроки										КАК НомерСтроки,
	|	Товары.НоменклатураПартнера.Наименование				КАК НаименованиеНоменклатурыИсполнителя,
	|	Товары.НоменклатураПартнера.Код						КАК КодИсполнителя,
	|	Товары.НоменклатураПартнера.Артикул					КАК АртикулИсполнителя,
	|	Товары.ВидЦеныПоставщика								КАК ВидЦеныИсполнителя,
	|	Товары.Номенклатура										КАК Номенклатура,
	|	Товары.Номенклатура.Код									КАК Код,
	|	Товары.Номенклатура.Артикул								КАК Артикул,
	|	ЕСТЬNULL(НоменклатураПредставления.НаименованиеПолное, Товары.Номенклатура.НаименованиеПолное) КАК НаименованиеПолное,
	|	Товары.ДатаПоступления									КАК ДатаПоступления,
	|	ЕСТЬNULL(ХарактеристикиНоменклатурыПредставления.НаименованиеПолное, ЕСТЬNULL(Товары.Характеристика.НаименованиеПолное, """")) КАК Характеристика,
	|	""""													КАК Содержание,
	|
	|	Товары.КоличествоУпаковок								КАК Количество,
	|
	|	Товары.Цена												КАК Цена,
	|	Товары.СуммаРучнойСкидки								КАК СуммаСкидки,
	|	Товары.Сумма + Товары.СуммаРучнойСкидки					КАК СуммаБезСкидки,
	|	Товары.Сумма											КАК Сумма,
	|	Товары.СтавкаНДС										КАК СтавкаНДС,
	|	Товары.СуммаНДС											КАК СуммаНДС,
	|
	|	ВЫБОР
	|		КОГДА Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
	|			ТОГДА 
	|				ВЫБОР 
	|					КОГДА &ЭтоОсновнойЯзыкСистемы ТОГДА
	|						ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура.ЕдиницаИзмерения)
	|					ИНАЧЕ Товары.Номенклатура.ЕдиницаИзмерения.МеждународноеСокращение
	|				КОНЕЦ
	|		ИНАЧЕ 
	|				ВЫБОР 
	|					КОГДА &ЭтоОсновнойЯзыкСистемы ТОГДА
	|						ПРЕДСТАВЛЕНИЕ(Товары.Упаковка)
	|					ИНАЧЕ Товары.Упаковка.МеждународноеСокращение
	|				КОНЕЦ
	|	КОНЕЦ КАК ЕдиницаИзмерения,
	|
	|	ВЫБОР КОГДА ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) = 1 ТОГДА
	|		НЕОПРЕДЕЛЕНО
	|	ИНАЧЕ
	|		Товары.Упаковка.Наименование
	|	КОНЕЦ													КАК Упаковка,
	|
	|	ВЫБОР КОГДА Товары.Ссылка.ВернутьМногооборотнуюТару
	|			  И Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) ТОГДА
	|		ИСТИНА
	|	ИНАЧЕ
	|		ЛОЖЬ
	|	КОНЕЦ													КАК ЭтоВозвратнаяТара
	|
	|ИЗ
	|	Документ.ЗаказПоставщику.Товары КАК Товары
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.Представления КАК НоменклатураПредставления
	|	ПО (Товары.Номенклатура = НоменклатураПредставления.Ссылка
	|			И НоменклатураПредставления.КодЯзыка = &КодЯзыка)
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры.Представления КАК ХарактеристикиНоменклатурыПредставления
	|	ПО (Товары.Характеристика = ХарактеристикиНоменклатурыПредставления.Ссылка
	|			И ХарактеристикиНоменклатурыПредставления.КодЯзыка = &КодЯзыка)
	|
	|ГДЕ
	|	Товары.Ссылка В(&МассивОбъектов)
	|	И Товары.Отменено = ЛОЖЬ
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
		"&ТекстЗапросаКоэффициентУпаковки",
		Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
		"Товары.Упаковка",
		"Товары.Номенклатура"));
		
	Запрос.Текст = ТекстЗапроса;
		
	Запрос.УстановитьПараметр("МассивОбъектов",			МассивОбъектов);
	Запрос.УстановитьПараметр("Тип",					ПараметрыПечати["Тип"]);
	Запрос.УстановитьПараметр("ПредставлениеДокумента",	НСтр("ru = 'Заказ поставщику'", ОбщегоНазначения.КодОсновногоЯзыка()));
	Запрос.УстановитьПараметр("ПредставлениеВОшибке",	Метаданные.Документы.ЗаказПоставщику.Представление());
	Запрос.УстановитьПараметр("КодЯзыка", КодЯзыка);
	Запрос.УстановитьПараметр("ЭтоОсновнойЯзыкСистемы", КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка() Или КодЯзыка = Неопределено);
	
	ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет();
	
	СтруктураДанныхДляПечати = Новый Структура;
	СтруктураДанныхДляПечати.Вставить("РезультатПоШапке",			ПакетРезультатовЗапроса[0]);
	СтруктураДанныхДляПечати.Вставить("РезультатПоЭтапамОплаты",	ПакетРезультатовЗапроса[1]);
	СтруктураДанныхДляПечати.Вставить("РезультатПоТабличнойЧасти",	ПакетРезультатовЗапроса[2]);
	
	Возврат СтруктураДанныхДляПечати;
	
КонецФункции

// Заполняет структуру данными о получателях печатных форм.
// Параметры:
// 	СтруктураДанныхОбъектаПечати - см. ФормированиеПечатныхФорм.ЗаполнитьДанныеСтруктурыПолучателяПоТипуОбъекта.СтруктураДанныхОбъектаПечати
// 
Процедура ЗаполнитьСтруктуруПолучателейПечатныхФорм(СтруктураДанныхОбъектаПечати) Экспорт
	
	СтруктураДанныхОбъектаПечати.ОсновнойПолучатель = "Партнер";
	
	СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Партнер");
	Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровИКонтрагентов") Тогда 
		СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Контрагент");
	КонецЕсли;
	СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("КонтактноеЛицо");
	
КонецПроцедуры

#КонецОбласти

#Область ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
// Параметры:
//  Реквизиты               - ДеревоЗначений - список реквизитов шаблона:
//         * Имя            - Строка - Уникальное имя общего реквизита.
//         * Представление  - Строка - Представление общего реквизита.
//         * Тип            - Тип    - Тип реквизита. По умолчанию строка.
//         * Формат         - Строка - Формат вывода значения для чисел, дат, строк и булевых значений.
//  Вложения                - ТаблицаЗначений - печатные формы и вложения:
//         * Имя            - Строка - Уникальное имя вложения.
//         * Представление  - Строка - Представление варианта.
//         * ТипФайла       - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl"
//                                      и др.
//  ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//
// Параметры:
//  Сообщение - Структура - структура с ключами:
//    * ЗначенияРеквизитов - Соответствие из КлючИЗначение- список используемых в шаблоне реквизитов:
//      * Ключ     - Строка - имя реквизита в шаблоне;
//      * Значение - Строка - значение заполнения в шаблоне.
//    * ЗначенияОбщихРеквизитов - Соответствие из КлючИЗначение - список используемых в шаблоне общих реквизитов:
//      * Ключ     - Строка - имя реквизита в шаблоне;
//      * Значение - Строка - значение заполнения в шаблоне.
//    * Вложения - Соответствие из КлючИЗначение - значения реквизитов
//      * Ключ     - Строка - имя вложения в шаблоне;
//      * Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//  ДополнительныеПараметры - Структура -  Дополнительная информация о шаблоне сообщения.
//
Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиSMS - ТаблицаЗначений - список получается SMS:
//     * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS.
//     * Представление - Строка - представление получателя сообщения SMS.
//     * Контакт       - СправочникСсылка - контакт, которому принадлежит номер телефона.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Заполняет список получателей письма при отправки сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиПисьма - ТаблицаЗначений - список получается письма:
//     * Адрес           - Строка - адрес электронной почты получателя.
//     * Представление   - Строка - представление получается письма.
//     * ВариантОтправки - Строка - Варианты отправки письма: "Кому", "Копия", "СкрытаяКопия", "ОбратныйАдреса";
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

Функция ТекстЗапросаТоварыДокумента(Отбор) Экспорт

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

КонецФункции

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

#КонецОбласти

#Область ТекущиеДела

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

// Проверяет, что заказ является распоряжением на приемку товаров
//
// Параметры:
//  ЗаказПоставщику	 - ДокументСсылка.ЗаказПоставщику - Проверяемый заказ.
//
// Возвращаемое значение:
//  Булево - Результат проверки
//
Функция ЗаказЯвляетсяРаспоряжениемНаПриемкуТоваров(ЗаказПоставщику) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	ВариантПриемкиТоваровЗаказа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаказПоставщику, "ВариантПриемкиТоваров");
	
	Результат = Ложь;
	Если Не ЗначениеЗаполнено(ВариантПриемкиТоваровЗаказа) Тогда
		Результат = Константы.ВариантПриемкиТоваров.Получить() = Перечисления.ВариантыПриемкиТоваров.РазделенаПоЗаказамИНакладным;
	ИначеЕсли ВариантПриемкиТоваровЗаказа = Перечисления.ВариантыПриемкиТоваров.РазделенаПоЗаказамИНакладным Тогда
		Результат = Истина;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

#КонецОбласти

#Область ФормированиеГиперссылкиВЖурналеЗакупок

Функция ТекстЗапросаЗаказыПоставщикуВРаботе()

	ТекстЗапроса = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
	|	СостоянияЗаказовПоставщикам.Заказ,
	|	СостоянияЗаказовПоставщикам.Состояние
	|ИЗ
	|	РегистрСведений.СостоянияЗаказовПоставщикам КАК СостоянияЗаказовПоставщикам
	|ГДЕ
	|	СостоянияЗаказовПоставщикам.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовПоставщикам.Закрыт)";
	
	Возврат ТекстЗапроса
	
КонецФункции

Функция СформироватьГиперссылкуСмТакжеВРаботе(Параметры) Экспорт
	
	Если Не (ПравоДоступа("Чтение", Метаданные.РегистрыСведений.СостоянияЗаказовПоставщикам)
			И ПравоДоступа("Изменение", Метаданные.Документы.ЗаказПоставщику)
			И ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам")) Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ТекстГиперссылки = НСтр("ru = 'Заказы поставщикам'");
	Запрос = Новый Запрос(ТекстЗапросаЗаказыПоставщикуВРаботе());
	
	ИмяФормыРабочееМестоЗаказПоставщику = "Документ.ЗаказПоставщику.Форма.ФормаСпискаДокументов";
	Если Запрос.Выполнить().Пустой() Тогда
		Возврат Новый ФорматированнаяСтрока(ТекстГиперссылки,,ЦветаСтиля.НезаполненноеПолеТаблицы,,
			ИмяФормыРабочееМестоЗаказПоставщику);
	Иначе
		Возврат Новый ФорматированнаяСтрока(ТекстГиперссылки,,,,
			ИмяФормыРабочееМестоЗаказПоставщику);
	КонецЕсли;
	
КонецФункции

#КонецОбласти

#КонецОбласти

#КонецЕсли

Связанные материалы