Банковские счета / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Ограничение.Текст =
	"ПрисоединитьДополнительныеТаблицы
	|ЭтотСписок КАК Т
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК Т2 
	|	ПО Т2.Родитель = Т.Владелец.Партнер
	|;
	|РазрешитьЧтение
	|ГДЕ
	|	( ТипЗначения(Т.Владелец) = Тип(Справочник.Контрагенты)
	|	И ЗначениеРазрешено(Т2.Партнер)
	|	)ИЛИ( ТипЗначения(Т.Владелец) = Тип(Справочник.ФизическиеЛица)
	|	И ЧтениеОбъектаРазрешено(Т.Владелец)
	|	И ЗначениеРазрешено(Т.Владелец)
	|	) 
	|;
	|РазрешитьИзменениеЕслиРазрешеноЧтение
	|ГДЕ
	|	( ТипЗначения(Владелец) = Тип(Справочник.Контрагенты)
	|	И ЗначениеРазрешено(Владелец.Партнер)
	|	)ИЛИ( ТипЗначения(Владелец) = Тип(Справочник.ФизическиеЛица)
	|	И( ИзменениеОбъектаРазрешено(Владелец)
	|	))";
	
	Ограничение.ТекстДляВнешнихПользователей =
	"ПрисоединитьДополнительныеТаблицы
	|ЭтотСписок КАК ЭтотСписок
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияПартнеров КАК ИерархияПартнеров 
	|	ПО ИерархияПартнеров.Родитель = ЭтотСписок.Владелец.Партнер
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиПартнеры
	|	ПО ВнешниеПользователиПартнеры.ОбъектАвторизации = ИерархияПартнеров.Партнер
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров 
	|	ПО КонтактныеЛицаПартнеров.Владелец = ЭтотСписок.Владелец.Партнер
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиКонтактныеЛица 
	|	ПО ВнешниеПользователиКонтактныеЛица.ОбъектАвторизации = КонтактныеЛицаПартнеров.Ссылка
	|;
	|РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(ВнешниеПользователиПартнеры.Ссылка)
	|	ИЛИ ЗначениеРазрешено(ВнешниеПользователиКонтактныеЛица.Ссылка)";

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

// СтандартныеПодсистемы.Печать

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

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов - см. УправлениеПечатьюПереопределяемый.ПриПечати.МассивОбъектов
//  ПараметрыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыПечати
//  КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм
//  ОбъектыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати
//  ПараметрыВывода - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыВывода
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеквизитыБанковскогоСчета") Тогда
		ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "РеквизитыБанковскогоСчета");
		Если ПечатнаяФорма <> Неопределено Тогда
			ПечатнаяФорма.ТабличныйДокумент = ПечатьРеквизитовСчета(МассивОбъектов, ОбъектыПечати);
			ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Реквизиты банковского счета'");
			ПечатнаяФорма.ПолныйПутьКМакету = "ОбщийМакет.ПФ_MXL_РеквизитыСчета";
		КонецЕсли;
	КонецЕсли;

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

// Конец СтандартныеПодсистемы.Печать

#Область ОбновлениеИнформационнойБазы

// См. ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы.
Функция ДанныеОбновленыНаНовуюВерсиюПрограммы(МетаданныеИОтбор) Экспорт
	
	Возврат ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы(МетаданныеИОтбор);
	
КонецФункции

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

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

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

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

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

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

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

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

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

		Если Выборка.ЭтоIBAN Тогда
			ВывестиРеквизитыIBAN(Выборка, Макет, ТабличныйДокумент);
		Иначе
			ВывестиРеквизиты(Выборка, Макет, ТабличныйДокумент);
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

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

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

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

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

Процедура ЗаполнитьНациональныеРеквизиты(ИспользуетсяБанкДляРасчетов, Макет, Выборка, ТабличныйДокумент)

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

Процедура ВывестиРеквизитыIBAN(Выборка, Макет, ТабличныйДокумент)
	
	CAC = Сред(Выборка.НомерСчета, 5);
	IBANPaper = "IBAN";
	НомерСчета = Выборка.НомерСчета;
	Пока СтрДлина(НомерСчета) > 0 Цикл
		IBANPaper = IBANPaper + " " + Сред(НомерСчета, 1, 4);
		НомерСчета = Сред(НомерСчета, 5);
	КонецЦикла;
	
	Если Выборка.РучноеИзменениеРеквизитовБанка Тогда
		SWIFT = Выборка.СВИФТБанка
	Иначе
		SWIFT = Выборка.БанкСВИФТБИК
	КонецЕсли;
		
	Область = Макет.ПолучитьОбласть("IBAN");
	
	Область.Параметры.CAC = CAC;
	Область.Параметры.IBAN = Выборка.НомерСчета;
	Область.Параметры.IBANPaper = IBANPaper;
	Область.Параметры.SWIFT = SWIFT;
	
	ТабличныйДокумент.Вывести(Область);
	
КонецПроцедуры

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

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

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

#КонецЕсли

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