Добавление в ТЧ на форме элемента с заполнением его в зависимости от значения другого элемента
Всем добрый день.
На форме документа есть ТЧ. Необходимо программно добавить в ТЧ новый элемент (это знаю как сделать).
Подскажите пожалуйста, как реализовать заполнение нового элемента, в зависимости от значения другого.
Например в строке есть поле Сотрудник. Если дата рождения <1980г., то в новый элемент необходимо писать "старый", иначе "молодой". И ещё момент, в какой процедуре корректнее это делать, ПриСозданииНаСервере?
На форме документа есть ТЧ. Необходимо программно добавить в ТЧ новый элемент (это знаю как сделать).
Подскажите пожалуйста, как реализовать заполнение нового элемента, в зависимости от значения другого.
Например в строке есть поле Сотрудник. Если дата рождения <1980г., то в новый элемент необходимо писать "старый", иначе "молодой". И ещё момент, в какой процедуре корректнее это делать, ПриСозданииНаСервере?
По теме из базы знаний
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Концепция автоматизации многопрофильного Холдинга в системе АУБ на платформе 1С
- Как сдать экзамен 1С:Специалист по платформе?
- Распространенные ошибки разработчиков, приводящие к проблемам производительности
- Автоматизация импорта значений в отбор типовых отчетов конфигурации 1С: Бухгалтерия предприятия 3.0
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Нужно создать реквизит Возраст в ТЧ на форме (строка или перечисление старый/молодой)
Затем прописать два условия:
1) в модуле формы процедура ПриОткрытии()
Для каждого ТекСтр из ТЧ Цикл
Если ТекСтр .Сотрудник.ФизическоеЛицо.ДатаРождения < Дата("19800101") Тогда
ТекСтр .Возраст = "Старый";
Иначе
ТекСтр .Возраст = "Молодой";
КонецЕсли;
КонецЦикла;
2) в модуле формы процедура СотрудникПриИзменении(ТекущиеДанные)
Если ТекущиеДанные .Сотрудник.ФизическоеЛицо.ДатаРождения < Дата("19800101") Тогда
ТекущиеДанные.Возраст = "Старый";
Иначе
ТекущиеДанные.Возраст = "Молодой";
КонецЕсли;
Затем прописать два условия:
1) в модуле формы процедура ПриОткрытии()
Для каждого ТекСтр из ТЧ Цикл
Если ТекСтр .Сотрудник.ФизическоеЛицо.ДатаРождения < Дата("19800101") Тогда
ТекСтр .Возраст = "Старый";
Иначе
ТекСтр .Возраст = "Молодой";
КонецЕсли;
КонецЦикла;
2) в модуле формы процедура СотрудникПриИзменении(ТекущиеДанные)
Если ТекущиеДанные .Сотрудник.ФизическоеЛицо.ДатаРождения < Дата("19800101") Тогда
ТекущиеДанные.Возраст = "Старый";
Иначе
ТекущиеДанные.Возраст = "Молодой";
КонецЕсли;
Да, в при создании на сервере можно. На основании чего заполняется табличная часть?
Как вариант - ТЧ ссылается не на реквизит документа, а на отдельный реквизит формы.
При создании на сервере - получаем таблицу, добавляем туда колонку и заполняем ее.
Как вариант - ТЧ ссылается не на реквизит документа, а на отдельный реквизит формы.
При создании на сервере - получаем таблицу, добавляем туда колонку и заполняем ее.
Новый элемент - это новая строка или новая колонка?
Если колонка, то в базу она не запишется, ее нужно будет всегда рассчитывать при открытии документа или при создании на сервере, так как она создается динамически (Вы так ставите задачу) и не привязана к данным документа. И не забудьте, в этом случае, повторить перерасчет этой колонки не только при открытии, но и при добавлении\удалении строк в ТЧ
Если колонка, то в базу она не запишется, ее нужно будет всегда рассчитывать при открытии документа или при создании на сервере, так как она создается динамически (Вы так ставите задачу) и не привязана к данным документа. И не забудьте, в этом случае, повторить перерасчет этой колонки не только при открытии, но и при добавлении\удалении строк в ТЧ
я так понял речь о некой "вычисляемой" колонке в ТЧ, которая не хранит данные физически, а отображет некторую справочную инофрмацию "старый/молодой"
Если речь об управляемой форме, то проще всего это сделать в условном оформлении формы:
1. добавляем новую колонку в форме (в реквизитах ТЧ на форме добавить новый реквизит строка)
2. открываем условное оформление формы и создаем условие:
дата рождения < 01.01.1980 для новой колонки ставим значение "старый" в свойство "текст"
3. создаем второе условие для "молодой"
Если речь об управляемой форме, то проще всего это сделать в условном оформлении формы:
1. добавляем новую колонку в форме (в реквизитах ТЧ на форме добавить новый реквизит строка)
2. открываем условное оформление формы и создаем условие:
дата рождения < 01.01.1980 для новой колонки ставим значение "старый" в свойство "текст"
3. создаем второе условие для "молодой"
(8) если ставят требование добавить программно - делайте программно.
можно добавлять программно как новые реквизиты в форму, так и элементы УО.
причем, никие стандартные обработчики типа присоздании... трогать вообще не нужно.
вернеее, в при создании, добавить реквизит и УО, а пересчеты и пр. от лукавого уже.
можно добавлять программно как новые реквизиты в форму, так и элементы УО.
причем, никие стандартные обработчики типа присоздании... трогать вообще не нужно.
вернеее, в при создании, добавить реквизит и УО, а пересчеты и пр. от лукавого уже.
(13) В форме документа на столбце номенклатуры открываешь поллитру свойств и в событии "при изменении" жмешь лупу и создаешь процедуру "на клиенте" (это все в форме документа). Далее из этой процедуры ссылаешмя на серверную (которую сам создаешь)
Только как правильно работать с датами пока сам не разобрался
Для каждого СтрокаДокумента из Объект."название таблицы" Цикл
Если СтрокаДокумента.Номенклатура.Возраст < "Дата" Тогда
СтрокаДокумента.Возраст = "Старый";
Иначе
СтрокаДокумента.Возраст = "Молодой";
КонецЕсли;
КонецЦикла;
ПоказатьТолько как правильно работать с датами пока сам не разобрался
(21) Если дата будет "статична", то просто объявляете её ДатаСравнения = '19800101';
Знак вопроса в данном случае заменяет "Если", где в первом параметре пишется условие, второй параметр - значение, если условие выполняется, и третий параметр - значение, если условие не выполняется.
ДатаСравнения = '19800101';
Для каждого СтрокаТаблицы из Объект.Таблица Цикл
СтрокаТаблицы.НовыйРеквизит = ?(СтрокаТаблицы.Номенклатура.Возраст < ДатаСравнения, "Старый", "Молодой");
КонецЦикла;
ПоказатьЗнак вопроса в данном случае заменяет "Если", где в первом параметре пишется условие, второй параметр - значение, если условие выполняется, и третий параметр - значение, если условие не выполняется.
Приветствую.
Если добавили новую колонку и вам необходимо её заполнять по значению другой колонки, которая будет изменяться на форме, то можно использовать событие ПриИзменении "ДатаРождения", если дату рождения не заполняют на в данной ТЧ, а заполняют сотрудника, то при ПриИзмении "Сотрудника".
Если добавили новую колонку и вам необходимо её заполнять по значению другой колонки, которая будет изменяться на форме, то можно использовать событие ПриИзменении "ДатаРождения", если дату рождения не заполняют на в данной ТЧ, а заполняют сотрудника, то при ПриИзмении "Сотрудника".
ТекущиеДанные = Элементы.ТЧ.ТекущиеДанные;
ТекущиеДанные.НовыйРеквизит = И тут прописываете условие, в зависимости от нужного реквизита.
(15) При этом, если у вас уже готовая таблица и перезаполнять её не будут, соответственно не будет вызываться событие ПриИзменении, тогда можете в "ПриСозданииНаСервере" обойти таблицу построчно и заполнить новый реквизит. Грубо, но будет работать.
Для Каждого СтрокаТаблицы из Объект.Таблица Цикл
СтрокаТаблицы.НовыйРеквизит = здесь прописываете условие.
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот