Инвентаризация НМА / Модуль менеджера

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

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

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

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

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

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

#Область Команды

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Пока Выборка.Следующий() Цикл
		
		ДанныеУчета = Новый Структура;
		ДанныеУчета.Вставить("Организация", Выборка.Организация);
		ДанныеУчета.Вставить("Подразделение", Выборка.Подразделение);
		ДанныеУчета.Вставить("Состояние", Выборка.Состояние);
		ДанныеУчета.Вставить("НаличиеПоДаннымУчета", Выборка.НаличиеПоДаннымУчета);
		ДанныеУчета.Вставить("СтоимостьПоДаннымУчета", Выборка.СтоимостьПоДаннымУчета);
		
		Взаимосвязана = (Выборка.Организация = Организация ИЛИ ВзаимосвязанныеОрганизации.Найти(Выборка.Организация) <> Неопределено);
		ДанныеУчета.Вставить("Взаимосвязана", Взаимосвязана);
		
		ТекущиеДанныеУчета.Вставить(Выборка.НематериальныйАктив, ДанныеУчета);
	
	КонецЦикла;

	Возврат ТекущиеДанныеУчета;
	
КонецФункции

Функция ЗаполнитьДанныеУчета(Объект, КоллекцияСтрок, ЗаполнитьСлужебныеРеквизиты = Ложь) Экспорт

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

	Возврат ДанныеУчетаПоСтрокам;
	
КонецФункции

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

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// ИНВ-1а (Инвентаризационная опись)
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ИНВ1а";
	КомандаПечати.Представление = НСтр("ru = 'ИНВ-1а (Инвентаризационная опись)'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт

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

	Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
	Результат.ЗначенияПараметров = ЗначенияПараметров;
	Результат.ТекстЗапроса = ТекстЗапроса;
	
	Возврат Результат;
	
КонецФункции

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

Функция ЗначенияПараметровПроведения(Реквизиты = Неопределено)

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

	Если Реквизиты <> Неопределено Тогда
		ЗначенияПараметровПроведения.Вставить("НомерНаПечать", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Реквизиты.Номер));
	КонецЕсли; 
	
	Возврат ЗначенияПараметровПроведения;
	
КонецФункции

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

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

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

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

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

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

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

#КонецЕсли

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