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