Консультация № 104218
03.10.2007, 23:32
0.00 руб.
0 3 3
Здравствуйте уважаемые эксперты! 1С:Предприниматель. Скажите пожалуйста, как в форме списка справочника Контрагенты можно сделать чтобы сразу был виден долг. Я имею ввиду через Текст на форме. Функцию написала. А дальше пробовала сделать как в ТиС Обработка.ПоказатьОстаткиВзаиморасчетов. Как сделать правильно?

Обсуждение

Неизвестный
04.10.2007, 01:10
общий
это ответ
Здравствуйте, Darina!

В модуле формы списка пишете функцию, возвращающую остаток (я так понял, Вы уже это сделали). В таблицу диалога вставляете поле <b>Текст</b> и на закладке <b>Дополнительно</b> в строке <b>Формула</b> пишете вызов этой функции.
Т.е. если в модуле описана функция
<i>Функция ОстатокВзаиморасчетов()
...
КонецФункции</i>
то в графе Формула Вы указываете вызов этой функции:
<i>ОстатокВзаиморасчетов()</i>
Неизвестный
04.10.2007, 07:47
общий
это ответ
Здравствуйте, Darina!

Я хочу добавить к ответу, который дал Elric. В функции нужно сделать проверку "элемент - это группа?" Если группа - возврат пустой строки, если нет, то расчет долга. Иначе в строке группы справочника у Вас будут нули.

Приведённый вариант у меня работает.
Обработка.ПоказатьОстаткиВзаиморасчетов вызывается из документа, где уже выбрана фирма, поэтому если Вы ведёте учёт по нескольким фирмам в одной конфигурации, добавьте на форму элемент типа Справочник.Фирмы, наример, ВыбФирма, или используйте константу ОсновнаяФирма (или ФирмаПоУмолчанию). В своей процедуре я использовал константу ОсновнаяФирма, у нас она одна, для нескольких фирм нужно будет вставить имя реквизита, например, ВыбФирма. И ещё: у меня регистры Взаиморасчетов имеют 5 измерений, поэтому я добавил запятые, где их не использовал, а ресурс называется Долг. Структура Ваших регистров может отличаться от моей.
Формирование строки Результат я упростил для наглядности. Вы по своему усмотрению можете добавлять условия, чтобы, например, не выводилось "Мы должны 0. Нам должны 0", а просто "Долгов нет" или вариации.

Также для нескольких фирм можно добавить на форму таблицу значений и её заполнять несколькими строчками, по одной для каждой фирмы.

Метод выведения долгов в столбик списка очень хороший, и сразу видно нужную информацию, как в справочнике товаров при подборе. Но если Вам понадобится выводить результаты не в колонку на таблице, а текстовой меткой где-то на форме, то к метке нужно обращаться по идентификатору, предварительно объявив его в модуле формы как переменную, или функцией в формуле метки ТекущийЭлемент(), например, ОстатокВзаиморасчетов(ТекущийЭлемент()).

Надеюсь, помог.
С уважением, Владимир.

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

В процедуре ПриОткрытии() рассчитываешь бух.итоги для счетов Контрагентов. В форму вставляешь текстовую колонку с формулой Долг(). Далее приложение. Все. Удачи

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