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