Таможенная декларация на экспорт / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ЗначенияПараметровПроведения;
	
КонецФункции

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

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

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

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

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

Функция ИмяФормыТаможеннаяДекларацияЭкспорт() Экспорт
	
	Возврат "Документ.ТаможеннаяДекларацияЭкспорт.Форма.ФормаРабочееМесто";
	
КонецФункции

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

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

#КонецЕсли

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