План счетов бухгалтерского учета / Форма счета / Модуль формы

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	УправлениеФормой();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

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

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

&НаКлиенте
Процедура РодительПриИзменении(Элемент)
	
	УправлениеФормой(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ВалютныйПриИзменении(Элемент)
	
	ВалютныйПриИзмененииСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура КоличественныйПриИзменении(Элемент)
	
	Элементы.ВидыСубконтоКоличественный.Видимость = Объект.Количественный;
	
КонецПроцедуры

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


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

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

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

&НаКлиенте
Процедура ВидыСубконтоПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Если НоваяСтрока Тогда
		Элемент.ТекущиеДанные.Суммовой       = Истина;
		Элемент.ТекущиеДанные.Валютный       = Истина;
		Элемент.ТекущиеДанные.Количественный = Истина;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ БСП

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры

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

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

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

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

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

&НаСервереБезКонтекста
Функция НайтиРодителя(КодРодителя)
	
	Возврат ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодРодителя);
	
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьЗапрещенныеСчета()
	
	ЗапрещенныеСчета = Новый Массив;
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ОборудованиеКУстановке);              // 07
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ПриобретениеОбъектовОсновныхСредств); // 08.04
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.Полуфабрикаты);                       // 10.02
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.Товары);                              // 41
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ГотоваяПродукция);                    // 43
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.Материалы);                           // 10
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ТоварыОтгруженные);                   // 45
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ТоварыПринятыеНаКомиссию);            // 004
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда);     // 70
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоДепонированнымСуммам);       // 76.04
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.РасходыНаОплатуТрудаБудущихПериодов); // 97.01
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.Касса);                               // 50
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизации);                    // 50.01
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ОперационнаяКасса);                   // 50.02
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.КассаОрганизацииВал);                 // 50.21
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.РасчетныеСчета);                      // 51
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ВалютныеСчета);                       // 52
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.СпециальныеСчета);                    // 55
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.Аккредитивы);                         // 55.01
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ЧековыеКнижки);                       // 55.02
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ДепозитныеСчета);                     // 55.03
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеСпециальныеСчета);              // 55.04
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.АккредитивыВал);                      // 55.21
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ДепозитныеСчетаВал);                  // 55.23
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеСпециальныеСчетаВал);           // 55.24
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ПереводыВПути);                       // 57.01
	ЗапрещенныеСчета.Добавить(ПланыСчетов.Хозрасчетный.ПереводыВПутиВал);                    // 57.21
	
	Возврат Новый ФиксированныйМассив(ЗапрещенныеСчета);
	
КонецФункции

&НаКлиенте
Процедура ПредупреждениеОНевозможностиИзмененияСоставаВидовСубконто(Отказ)
	
	ПоказатьПредупреждение( , НСтр("ru = 'Состав видов субконто на этом счете определяется настройкой параметров учета.'"));
	Отказ = Истина;
	
КонецПроцедуры // ПредупреждениеОНевозможностиИзмененияСоставаВидовСубконто()

&НаСервереБезКонтекста
Функция ЭтоЗапрещенныйСчет(Счет)

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

КонецФункции // ЭтоЗапрещенныйСчет()

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

&НаСервере
Процедура ВалютныйПриИзмененииСервер()
	
	Если Не Объект.Валютный Тогда
		Объект.ИсключитьСуммуБУИзПереоценкиПоПлануСчетов = Ложь;
		Объект.ИсключитьСуммуУУИзПереоценкиПоПлануСчетов = Ложь;
	КонецЕсли;
	
	УправлениеФормой();
	
КонецПроцедуры

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

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