8.х Создание Вычисляемого Стобца в Табличном поле

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Greck, 20 дек 2006.

  1. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Создание Вычисляемого Стобца в Табличном поле. Есть табличное поле - Состав учредителей Организации, у каждого из них есть реквизит - "размер доли", так вот мне нужно сделать автоматически вычисляемый столбец "Процент" - это процентное выражение показывающее вес "размера доли" отдельного участника от ОбщейСуммы. Сейчас в моей таблице на форме есть столбцы:

    Номер | Участник | Размер доли | Процент|

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

    Код:
    Процедура ПодсчетОбщейСуммы()
    //Вычисление общей суммы УставногоКапитала по Участникам и %часть каждого
    
    ОбщаяСумма=0;
    Для каждого СтрТабличнойЧасти из Участники Цикл
    ОбщаяСумма = ОбщаяСумма + СтрТабличнойЧасти.РазмерДоли;
    КонецЦикла;
    //КОНЕЦ Вычисление общей суммы УставногоКапитала по Участникам и %часть каждого
    
    Для каждого СтрТабличнойЧасти из Участники Цикл
    СтрТабличнойЧасти.Процент = (СтрТабличнойЧасти.РазмерДоли * 100)/ОбщаяСумма;
    КонецЦикла;
    
    КонецПроцедуры
    
  2. Pilgrim
    Offline

    Pilgrim Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    242
    Симпатии:
    0
    Баллы:
    26
    При открытии посчитал общую сумму - это хорошо. А потом все просто. У табличного поля есть событие ПриВыводеСтроки, посредством которого и реализуются все вычисляемые поля, еще посмотри как выводятся данные с помощью ОформлениеСтроки в какую-то колонку, тоже понядобятся.
  3. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Да я так и думал! - но табличка заполняется значениями уже после отображения формы, то есть форма открылась а потом юзер выбирает Организацию и по ней в документ вставляются старые данные из РегистраСведений, как в этом случае будет работать событие "ПриВыводеСтроки", и еще допустим юзер взял и добавил нового "Участника" и мне нужно заного запустить продцедуру подсчета ОбщейСуммы и процентной доли каждого... будет ли работать корректно все это если Общая сумма вычисляется отдельной продцедурой а процент для каждого вычисляется при событии "ПриВыводеСтроки"??


    МОжет можно пойти по пути обращения к элементам формы типа ЭтаФорма.ЭлементыФормы.Участники ... ???
  4. Pilgrim
    Offline

    Pilgrim Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    242
    Симпатии:
    0
    Баллы:
    26
    Все будет работать нормально, если у тебя общая сумма отдельной процедурой, процент должен вычисляться нормально, и при добавлении новых и при выводе старых.
    Посмотри у Радченко в "Практическом пособии" по-моему это описано в специальных приемах разработки.
  5. TopicStarter Overlay
    Greck
    Offline

    Greck Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    26
    Вот собсно Результат:
    Так как у меня заполнение строк идет после открытия формы, то необходимо было определить тип переменной ОбщаяСумма при открытии, и тогда после открытия срабаьывает событие ПриВыводеСтроки и так как строк у меня еще нет, оно будет срабатывать только если ОбщаяСумма больше 0. Вот вобщем и все вроде. Спсибо :)

    Код:
    Перем ОбщаяСумма;
    
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ОбщаяСумма=0;
    КонецПроцедуры
    
    Процедура УчастникиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    Если ОбщаяСумма > 0 Тогда
    ОформлениеСтроки.Ячейки.Процент.Значение = (ОформлениеСтроки.Ячейки.РазмерДоли.Значение * 100)/ОбщаяСумма;
    КонецЕсли;
    
    КонецПроцедуры
    

Поделиться этой страницей