04.10.2007, 07:47
общий
это ответ
Здравствуйте, Darina!
Я хочу добавить к ответу, который дал Elric. В функции нужно сделать проверку "элемент - это группа?" Если группа - возврат пустой строки, если нет, то расчет долга. Иначе в строке группы справочника у Вас будут нули.
Приведённый вариант у меня работает.
Обработка.ПоказатьОстаткиВзаиморасчетов вызывается из документа, где уже выбрана фирма, поэтому если Вы ведёте учёт по нескольким фирмам в одной конфигурации, добавьте на форму элемент типа Справочник.Фирмы, наример, ВыбФирма, или используйте константу ОсновнаяФирма (или ФирмаПоУмолчанию). В своей процедуре я использовал константу ОсновнаяФирма, у нас она одна, для нескольких фирм нужно будет вставить имя реквизита, например, ВыбФирма. И ещё: у меня регистры Взаиморасчетов имеют 5 измерений, поэтому я добавил запятые, где их не использовал, а ресурс называется Долг. Структура Ваших регистров может отличаться от моей.
Формирование строки Результат я упростил для наглядности. Вы по своему усмотрению можете добавлять условия, чтобы, например, не выводилось "Мы должны 0. Нам должны 0", а просто "Долгов нет" или вариации.
Также для нескольких фирм можно добавить на форму таблицу значений и её заполнять несколькими строчками, по одной для каждой фирмы.
Метод выведения долгов в столбик списка очень хороший, и сразу видно нужную информацию, как в справочнике товаров при подборе. Но если Вам понадобится выводить результаты не в колонку на таблице, а текстовой меткой где-то на форме, то к метке нужно обращаться по идентификатору, предварительно объявив его в модуле формы как переменную, или функцией в формуле метки ТекущийЭлемент(), например, ОстатокВзаиморасчетов(ТекущийЭлемент()).
Надеюсь, помог.
С уважением, Владимир.
Приложение:
Функция ОстатокВзаиморасчетов(ТекКонтрагент); Если ТекКонтрагент.ЭтоГруппа() = 1 Тогда Возврат ""; // иначе на форме для группы показывает нули КонецЕсли;..... далее по тексту Вашей функции Возврат Результат;КонецФункцииМой вариант для компоненты Оперативный Учет:В переменных модуля добавьте:Перем ОстДолгаНам, ОстДолгаМы, ВремРегистры;В процедуре ПриОткрытии:Процедура ПриОткрытии() ВремРегистры = СоздатьОбъект("Регистры"); ОстДолгаНам = ВремРегистры.ВзаиморасчетыПокупателей; ОстДолгаМы = ВремРегистры.ВзаиморасчетыПоставщиков; ....КонецПроцедурыФункция ОстатокВзаиморасчетов(ТекКонтрагент); Если ТекКонтрагент.ЭтоГруппа() = 1 Тогда Возврат ""; // Иначе для групп будут выводиться нули КонецЕсли; ВремДолгНам = ОстДолгаНам.СводныйОстаток(Константа.ОсновнаяФирма,ТекКонтрагент,,,,"Долг"); ВремДолгМы = ОстДолгаМы.СводныйОстаток(Константа.ОсновнаяФирма,ТекКонтрагент,,,,"Долг"); Результат = "Нам должны: "+СокрЛП(Формат(ВремДолгНам,глФорматКоличестваВформах))+ ". Мы должны: "+СокрЛП(Формат(ВремДолгМы,глФорматКоличестваВформах)); Возврат Результат;КонецФункции