Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 03:56

Математическая формула в ТабЧасти

Автор gemsbird, 12 сен 2014, 00:31

0 Пользователей и 1 гость просматривают эту тему.

gemsbird

Добрый вечер форумчанам, такой вопрос:
Есть Табличная Часть (допустим название "Учет") в ней есть 4 столбца.
1 столбец - номер строки
2 столбец - обозначим "а"
3 столбец - обозначим "b"
4 столбец - собственно вопрос: как в четвертом стоблце получить сумму (разницу, умножение, деление) 2 и 3 столбца. Наподобие как в Excel формула ячеек.

P.S. Для наглядности приложу схемку

GRADUS

По-моему, дольше рисовать схему, чем это реализовывать.

Если ты этого не можешь понять - бросай 1с.

has

gemsbird, 1С то как изучаете? В литературе это есть.

LexaK

все элементарно, хотя ни в одной типовой конфигурации не встрачал такого!
суть в следующем, делаете:
еще один скрытый столбец в этой таблице значения, Называете Действие, тип строка
в этой колонке в каждой строке пишите ТекСтрока.А + ТекСтрока.Б
собственно - это ТекСтрока.А + ТекСтрока.Б и есть ваша фармула,
она может быть:
ТекСтрока.А * ТекСтрока.Б
(ТекСтрока.А + 5) * ТекСтрока.Б - 7
и т.д. в принципе, может быть любой выполняемый код 1С, Только настраивать эти колонки должен очень ответственный человек, или при настройке ставить фильтры для контроля правильности формулы(и допустимости кода) здесь потенциальная дырка для безопасности базы, вообще можно(нужно) явно задать небольшую длину этого поля действия например 20 символов. 

далее в форме, где у вас эта табличная часть, на событие табличной части ПриОкончанииРедактирования
выполнить следующий код

Процедура ТЗтестПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекСтрока = Элемент.ТекущиеДанные;
Если ЗначениеЗаполнено(ТекСтрока.Действие) Тогда  //здесь можно дополнить проверку
Попытка
ТекСтрока.с = вычислить(ТекСтрока.Действие);
Исключение
Сообщить(ОписаниеОшибки());
ТекСтрока.с = 0;
КонецПопытки;
КонецЕсли;
КонецПроцедуры

в итоге у вас получается "как в экселе" для каждой строки своя формула,
формулы можнов оформить в виде списка, и при заведении новой строки, не задавать каждый раз новую формулу, а выбирать из списка!
ради интереса я создал обработку и проверил, все отлично работает!
если помогло нажмите: Спасибо!

gemsbird

благодарю за помощь, такой вопрос у меня книга "Практическое пособие разхработчика" Радченко и Хрусталева но для версии 8.2, а я учусь на платформе 8.3.5 критичино ли что книжка для предыдущей версии?

LexaK

лучше конечно найти книжку с учетом новой платформы,
но по крайней мере то что написано для платформы 8.2 в большинстве случаев будет работать и в 8.3
а еще лучше, все проверяйте на практике, в конфигураторе под отладкой, не ленитесь, по любому вопросу пишите тестовые обработки, документы, отчеты и т.д., и смотрите под отладчиком как это все работает.
читайте в конфигураторе синтаксис помощник по любому поводу, смотрите примеры кода баз 1С, типовых, тестовых, примерных.
если помогло нажмите: Спасибо!

Migel86

Если актуально вот пример кода:
&НаКлиенте
Процедура УчетКолонка2ПриИзменении(Элемент)
СтрокаТЧ = Элементы.Учет.ТекущиеДанные;
СтрокаТЧ.Колонка4 = СтрокаТЧ.Колонка2 (+;-;*;/) СтрокаТЧ.Колонка3;
КонецПроцедуры

&НаКлиенте
Процедура УчетКолонка3ПриИзменении(Элемент)
СтрокаТЧ = Элементы.Учет.ТекущиеДанные;
СтрокаТЧ.Колонка4 = СтрокаТЧ.Колонка2 (+;-;*;/) СтрокаТЧ.Колонка3;
КонецПроцедуры


Код вставляй в модуль ФормыДркумента (в свойствах найди пункт ПриИзмененнии)

cska-fanat-kz

Migel86, это что за синтаксис такой диковинный?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Migel86

Цитата: cska-fanat-kz от 22 окт 2014, 11:47
Migel86, это что за синтаксис такой диковинный?

Это всмысле поставь любой и будет тебе СЧАСТЬЕ.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск