Добавление в ТЧ на форме элемента с заполнением его в зависимости от значения другого элемента

1. Valerianich 6 29.06.23 12:11 Сейчас в теме
Всем добрый день.

На форме документа есть ТЧ. Необходимо программно добавить в ТЧ новый элемент (это знаю как сделать).
Подскажите пожалуйста, как реализовать заполнение нового элемента, в зависимости от значения другого.
Например в строке есть поле Сотрудник. Если дата рождения <1980г., то в новый элемент необходимо писать "старый", иначе "молодой". И ещё момент, в какой процедуре корректнее это делать, ПриСозданииНаСервере?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
23. 603692 3 29.06.23 14:18 Сейчас в теме +0.35 $m
(1) Нужно создать реквизит Возраст в ТЧ на форме (строка или перечисление старый/молодой)
Затем прописать два условия:
1) в модуле формы процедура ПриОткрытии()
Для каждого ТекСтр из ТЧ Цикл

Если ТекСтр .Сотрудник.ФизическоеЛицо.ДатаРождения < Дата("19800101") Тогда
ТекСтр .Возраст = "Старый";
Иначе
ТекСтр .Возраст = "Молодой";
КонецЕсли;

КонецЦикла;
2) в модуле формы процедура СотрудникПриИзменении(ТекущиеДанные)
Если ТекущиеДанные .Сотрудник.ФизическоеЛицо.ДатаРождения < Дата("19800101") Тогда
ТекущиеДанные.Возраст = "Старый";
Иначе
ТекущиеДанные.Возраст = "Молодой";
КонецЕсли;
Valerianich; +1 1 Ответить
24. Valerianich 6 29.06.23 14:39 Сейчас в теме
Программно добавил реквизит и Новый элемент. В коде прописал обработчики.
Всем спасибо.
25. PLAstic 295 30.06.23 10:50 Сейчас в теме
(24) Ну и молодец. А надо было делать без кода, условным оформлением.
2. Скиминок 29.06.23 12:28 Сейчас в теме
Да, в при создании на сервере можно. На основании чего заполняется табличная часть?

Как вариант - ТЧ ссылается не на реквизит документа, а на отдельный реквизит формы.

При создании на сервере - получаем таблицу, добавляем туда колонку и заполняем ее.
5. Valerianich 6 29.06.23 12:38 Сейчас в теме
(2) ТЧ ссылается на объект.ТЧ.
3. soft_wind 29.06.23 12:30 Сейчас в теме
Необходимо программно добавить в ТЧ новый элемент (это знаю как сделать).

так там же и проверяйте ДР сотрудника и заполняйте чем надо.
4. Valerianich 6 29.06.23 12:36 Сейчас в теме
(3) А в какое поле вписывать значение? Если в "ПутьКДанным" - выдаёт ошибку.
6. user1312100 206 29.06.23 12:42 Сейчас в теме
Новый элемент - это новая строка или новая колонка?

Если колонка, то в базу она не запишется, ее нужно будет всегда рассчитывать при открытии документа или при создании на сервере, так как она создается динамически (Вы так ставите задачу) и не привязана к данным документа. И не забудьте, в этом случае, повторить перерасчет этой колонки не только при открытии, но и при добавлении\удалении строк в ТЧ
9. Valerianich 6 29.06.23 12:53 Сейчас в теме
(6) Новый элемент - это колонка ТЧ.
7. VmvLer 29.06.23 12:44 Сейчас в теме
я так понял речь о некой "вычисляемой" колонке в ТЧ, которая не хранит данные физически, а отображет некторую справочную инофрмацию "старый/молодой"

Если речь об управляемой форме, то проще всего это сделать в условном оформлении формы:
1. добавляем новую колонку в форме (в реквизитах ТЧ на форме добавить новый реквизит строка)
2. открываем условное оформление формы и создаем условие:
дата рождения < 01.01.1980 для новой колонки ставим значение "старый" в свойство "текст"
3. создаем второе условие для "молодой"
8. Valerianich 6 29.06.23 12:53 Сейчас в теме
(7) Необходимо добавить новую колонку и заполнить в неё значение программно.
10. VmvLer 29.06.23 12:56 Сейчас в теме
(8) если ставят требование добавить программно - делайте программно.

можно добавлять программно как новые реквизиты в форму, так и элементы УО.
причем, никие стандартные обработчики типа присоздании... трогать вообще не нужно.

вернеее, в при создании, добавить реквизит и УО, а пересчеты и пр. от лукавого уже.
11. Valerianich 6 29.06.23 13:05 Сейчас в теме
(10) А можно пожалуйста поподробнее, как программно настроить УО? И в какой процедуре/функции это лучше сделать?
12. usershmuser 29.06.23 13:11 Сейчас в теме
14. Valerianich 6 29.06.23 13:13 Сейчас в теме
(12) Номенклатура - типовой, Показатель - добавляемый.
16. usershmuser 29.06.23 13:14 Сейчас в теме
(14)А в самой номенклатуре (в справочнике) этот год?
17. Valerianich 6 29.06.23 13:15 Сейчас в теме
(16)Пример из заголовка абстрактный.
18. usershmuser 29.06.23 13:15 Сейчас в теме
(17)вся работа, условие и заполнение происходит в табличной части документа?
19. Briss 29.06.23 13:16 Сейчас в теме
(17) используйте событие "ПриИзменении", привязанное к реквизиту, который будет заполняться.
Как только он изменится, второй реквизит будете заполнять программно, как писал выше через ТекущиеДанные.
21. usershmuser 29.06.23 13:27 Сейчас в теме +0.34 $m
(13) В форме документа на столбце номенклатуры открываешь поллитру свойств и в событии "при изменении" жмешь лупу и создаешь процедуру "на клиенте" (это все в форме документа). Далее из этой процедуры ссылаешмя на серверную (которую сам создаешь)

Для каждого СтрокаДокумента из Объект."название таблицы" Цикл   
		
		Если СтрокаДокумента.Номенклатура.Возраст < "Дата" Тогда
                      СтрокаДокумента.Возраст = "Старый";
               Иначе 
                      СтрокаДокумента.Возраст = "Молодой";
               КонецЕсли;
		
	КонецЦикла;
Показать


Только как правильно работать с датами пока сам не разобрался
Valerianich; +1 Ответить
22. Briss 29.06.23 13:36 Сейчас в теме
(21) Если дата будет "статична", то просто объявляете её ДатаСравнения = '19800101';


ДатаСравнения = '19800101';

Для каждого СтрокаТаблицы из Объект.Таблица Цикл   
        
        СтрокаТаблицы.НовыйРеквизит = ?(СтрокаТаблицы.Номенклатура.Возраст < ДатаСравнения, "Старый", "Молодой");
        
КонецЦикла;

Показать


Знак вопроса в данном случае заменяет "Если", где в первом параметре пишется условие, второй параметр - значение, если условие выполняется, и третий параметр - значение, если условие не выполняется.
15. Briss 29.06.23 13:14 Сейчас в теме
Приветствую.
Если добавили новую колонку и вам необходимо её заполнять по значению другой колонки, которая будет изменяться на форме, то можно использовать событие ПриИзменении "ДатаРождения", если дату рождения не заполняют на в данной ТЧ, а заполняют сотрудника, то при ПриИзмении "Сотрудника".

ТекущиеДанные = Элементы.ТЧ.ТекущиеДанные;

ТекущиеДанные.НовыйРеквизит = И тут прописываете условие, в зависимости от нужного реквизита.
20. Briss 29.06.23 13:22 Сейчас в теме
(15) При этом, если у вас уже готовая таблица и перезаполнять её не будут, соответственно не будет вызываться событие ПриИзменении, тогда можете в "ПриСозданииНаСервере" обойти таблицу построчно и заполнить новый реквизит. Грубо, но будет работать.

Для Каждого СтрокаТаблицы из Объект.Таблица Цикл
      СтрокаТаблицы.НовыйРеквизит = здесь прописываете условие.
КонецЦикла;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот