Счета, план счетов
Получить свойства счёта
&НаСервере
Функция ПолучитьСвойстваСчета(Знач Счет)
ДанныеСчета = Новый Структура;
ДанныеСчета.Вставить("Ссылка" , ПланыСчетов.Хозрасчетный.ПустаяСсылка());
ДанныеСчета.Вставить("Наименование" , "");
ДанныеСчета.Вставить("Код" , "");
ДанныеСчета.Вставить("Родитель" , ПланыСчетов.Хозрасчетный.ПустаяСсылка());
ДанныеСчета.Вставить("Вид" , Неопределено);
ДанныеСчета.Вставить("Забалансовый" , Ложь);
ДанныеСчета.Вставить("ЗапретитьИспользоватьВПроводках", Ложь);
ДанныеСчета.Вставить("Валютный" , Ложь);
ДанныеСчета.Вставить("Количественный" , Ложь);
ДанныеСчета.Вставить("УчетПоПодразделениям" , Ложь);
ДанныеСчета.Вставить("НалоговыйУчет" , Ложь);
ДанныеСчета.Вставить("КоличествоСубконто" , 0);
МаксКоличествоСубконто = ПолучитьМаксКоличествоСубконто();
Для ИндексСубконто = 1 По МаксКоличествоСубконто Цикл
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто, Неопределено);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "Наименование", Неопределено);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "ТипЗначения", Неопределено);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "Суммовой", Ложь);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "ТолькоОбороты", Ложь);
КонецЦикла;
Если НЕ ЗначениеЗаполнено(Счет) Тогда
Возврат ДанныеСчета;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Счет", Счет);
Запрос.Текст =
//Виртуальная таблица сведений о самом счете
"ВЫБРАТЬ
| Хозрасчетный.Ссылка,
| Хозрасчетный.Родитель,
| Хозрасчетный.Код,
| Хозрасчетный.Наименование,
| Хозрасчетный.Вид,
| Хозрасчетный.Забалансовый,
| Хозрасчетный.ЗапретитьИспользоватьВПроводках,
| Хозрасчетный.Валютный,
| Хозрасчетный.Количественный,
| Хозрасчетный.УчетПоПодразделениям,
| Хозрасчетный.НалоговыйУчет
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Ссылка = &Счет
|;
|
|////////////////////////////////////////////////////////////////////////////////
//Виртуальная таблица сведений о субконтах счета
|ВЫБРАТЬ
| ХозрасчетныйВидыСубконто.НомерСтроки КАК НомерСтроки,
| ХозрасчетныйВидыСубконто.ВидСубконто КАК ВидСубконто,
| ХозрасчетныйВидыСубконто.ВидСубконто.Наименование КАК Наименование,
| ХозрасчетныйВидыСубконто.ВидСубконто.ТипЗначения КАК ТипЗначения,
| ХозрасчетныйВидыСубконто.ТолькоОбороты КАК ТолькоОбороты,
| ХозрасчетныйВидыСубконто.Суммовой КАК Суммовой
|ИЗ
| ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
|ГДЕ
| ХозрасчетныйВидыСубконто.Ссылка = &Счет
|
|УПОРЯДОЧИТЬ ПО
| ХозрасчетныйВидыСубконто.НомерСтроки";
МассивРезультатов = Запрос.ВыполнитьПакет();
Выборка = МассивРезультатов[0].Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(ДанныеСчета, Выборка);
КонецЕсли;
ВыборкаВидыСубконто = МассивРезультатов[1].Выбрать();
ДанныеСчета.КоличествоСубконто = ВыборкаВидыСубконто.Количество();
ИндексСубконто = 0;
Пока ВыборкаВидыСубконто.Следующий() Цикл
ИндексСубконто = ИндексСубконто + 1;
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто, ВыборкаВидыСубконто.ВидСубконто);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "Наименование", ВыборкаВидыСубконто.Наименование);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "ТипЗначения", ВыборкаВидыСубконто.ТипЗначения);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "Суммовой", ВыборкаВидыСубконто.Суммовой);
ДанныеСчета.Вставить("ВидСубконто" + ИндексСубконто + "ТолькоОбороты", ВыборкаВидыСубконто.ТолькоОбороты);
КонецЦикла;
Возврат ДанныеСчета;
КонецФункции
Описание субконто
ОписанияТиповВидовСубконто = Новый Структура;
ОписанияТиповВидовСубконто.Вставить("Номенклатура" , ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура.ТипЗначения);
ОписанияТиповВидовСубконто.Вставить("Склад" , ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады.ТипЗначения);
ОписанияТиповВидовСубконто.Вставить("Контрагент" , ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты.ТипЗначения);
ОписанияТиповВидовСубконто.Вставить("ДоговорКонтрагента" , ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры.ТипЗначения);
ОписанияТиповВидовСубконто.Вставить("Партия" , ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии.ТипЗначения);
ОписанияТиповВидовСубконто.Вставить("ДокументРасчетовСКонтрагентами", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами.ТипЗначения);
Управление Видимостью полей субконто на форме
&НаКлиенте
Процедура СчетИнтернетПродажПриИзменении(Элемент)
//Предварительно инициализировать данные
Элементы.СубконтоИ1.ОграничениеТипа = Новый ОписаниеТипов("Неопределено"); Элементы.СубконтоИ1.Заголовок = "Субконто 1"; Элементы.СубконтоИ1.Видимость = Истина;
Элементы.СубконтоИ2.ОграничениеТипа = Новый ОписаниеТипов("Неопределено"); Элементы.СубконтоИ2.Заголовок = "Субконто 2"; Элементы.СубконтоИ2.Видимость = Истина;
Элементы.СубконтоИ3.ОграничениеТипа = Новый ОписаниеТипов("Неопределено"); Элементы.СубконтоИ3.Заголовок = "Субконто 3"; Элементы.СубконтоИ3.Видимость = Истина;
ОбновитьОтображениеДанных(); // Обновить форму
Если СокрЛП(СчетИнтернетПродаж) <> "" Тогда
// Получить сведения о счете и привезать типы полей к типам субконто
ПоляФормы = Новый Структура;
ПоляФормы.Вставить("Субконто1", Элементы.СубконтоИ1.Имя);
ПоляФормы.Вставить("Субконто2", Элементы.СубконтоИ2.Имя);
ПоляФормы.Вставить("Субконто3", Элементы.СубконтоИ3.Имя);
ДанныеСчета = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Счет);
//Обход полей субконто
Для Индекс = 1 По 3 Цикл
Если Индекс <= ДанныеСчета.КоличествоСубконто Тогда
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].ОграничениеТипа = ДанныеСчета["ВидСубконто" + Индекс + "ТипЗначения"]; //ограничить тип данных
Форма.Элементы[ПоляФормы["Субконто" + Индекс]].ПодсказкаВвода = ДанныеСчета["ВидСубконто" + Индекс + "Наименование"];
КонецЕсли;
КонецЦикла;
//Инициализировать по результатам обхода
Если НЕ(СокрЛП(Элементы.СубконтоИ1.ОграничениеТипа)= "") Тогда
Элементы.СубконтоИ1.Заголовок = Лев(СокрЛП(Элементы.СубконтоИ1.ПодсказкаВвода),30);
Иначе
Элементы.СубконтоИ1.Заголовок = "Субконто 1"; Элементы.СубконтоИ1.Видимость = Ложь;
КонецЕсли;
Если НЕ(СокрЛП(Элементы.СубконтоИ2.ОграничениеТипа)= "") Тогда
Элементы.СубконтоИ2.Заголовок = Лев(СокрЛП(Элементы.СубконтоИ2.ПодсказкаВвода),30);
Иначе
Элементы.СубконтоИ2.Заголовок = "Субконто 2"; Элементы.СубконтоИ2.Видимость = Ложь;
КонецЕсли;
Если НЕ(СокрЛП(Элементы.СубконтоИ3.ОграничениеТипа)= "") Тогда
Элементы.СубконтоИ3.Заголовок = Лев(СокрЛП(Элементы.СубконтоИ3.ПодсказкаВвода),30);
Иначе
Элементы.СубконтоИ3.Заголовок = "Субконто 3"; Элементы.СубконтоИ3.Видимость = Ложь;
КонецЕсли;
КонецЕсли;
ОбновитьОтображениеДанных(); // Обновить форму
КонецПроцедуры