Кассы / Модуль менеджера

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

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

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

	Если ВыборкаПоФизлицу.Количество() = 1 И ВыборкаПоФизлицу.Следующий() Тогда
		Касса = ВыборкаПоФизлицу.Касса;
	ИначеЕсли ВыборкаПоНаправлению.Количество() = 1 И ВыборкаПоНаправлению.Следующий() Тогда
		Касса = ВыборкаПоНаправлению.Касса;
	ИначеЕсли ВыборкаОбщая.Количество() = 1 И ВыборкаОбщая.Количество() = 0 Тогда
		Касса = ВыборкаОбщая.Касса;
	ИначеЕсли ЭтоБазовая И ВыборкаОбщая.Количество() = 0 Тогда
		Касса = СоздатьПредопределеннуюКассу();
	Иначе
		Касса = Справочники.Кассы.ПустаяСсылка();
	КонецЕсли;
	
	Возврат Касса;

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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