Добавить реквизит на форму списка и заполнить

1. user824140 24.11.21 20:03 Сейчас в теме
Обычные формы. УПП. Нужно добавить на форму списка документа реквизит (тип "строка") и заполнять его данными из разных строковых реквизитов тч этого же документа.
(Выборку данных для выведение в реквизит формы списка сделал)

Вопрос: как производить заполнение такого реквизита? В какой момент? Посоветуйте варианты решения. Возможно ли это?

P.S. Создать реквизит документа, заполнять его нужными данными при записи, а потом просто вывести на форму списка - не вариант. Так как нужна данная "доработка" и для документов из закрытого периода.
P.S.S. Да, задача "немного не очень", но не я ее постановщик.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. user790708 25.11.21 16:12 Сейчас в теме
(1)В Форме списка в обработке события "При получении данных" можно заполнить добавленный на форму реквизит
Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)

	//тут можно добавить проверку на видимость добавленной вами колонки и елси она не отображается, то не выполнять доп обработку
	
	Соответствие = Новый Соответствие;
	СсылкиМассив = Новый Массив;
	Для каждого Стр Из ОформленияСтрок Цикл
		
		// тут получаете выводимые строки, в простейших случаях можно сразу устанвоить необходимое значение реквизита или оформление
		СсылкиМассив.Добавить(Стр.ДанныеСтроки.Ссылка);
		Соответствие.Вставить(Стр.ДанныеСтроки.Ссылка,Стр);
		
	КонецЦикла; 
	
	// тут определяете какие ссылки списка обрабатывать и получаете данные которые хотите вывести
	
	Пока Выборка.Следующий() Цикл		
		ТекСтр = Соответствие.Получить(Выборка.Ссылка);
		Если ТекСтр <> Неопределено Тогда
			ТекСтр.Ячейки.<ИмяДобавленнойКолонки>.ОтображатьТекст = Истина;
			ТекСтр.Ячейки.<ИмяДобавленнойКолонки>.Текст = Выборка.Коментарий;
		КонецЕсли;
	КонецЦикла; 	
	
КонецПроцедуры
Показать


Еще можно в обработке события "При выводе строки" - но это будет медленее работать
6. GetNight 46 26.11.21 08:38 Сейчас в теме
Всем, кто предложил делать "через вывод или оформление": человек же сказал: нужен РЕКВИЗИТ
(1)
заполнять его данными из разных строковых реквизитов тч этого же документа

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

И так, что делать?

1. добавляем реквизит, допустим, Описание
2. добавляем процедуру в модуль объекта, допустим, ОбновитьОписание, где описываем правило его заполнения, (обязательно ставим в конце Экспорт - после выполнения нашей процедуры ниже это слово можно удалить). Так же можно просто содержимое перенести в обработку, и не использовать вызов этой процедуры, а саму процедуру расположить в модуле формы:

Процедура ОбновитьОписание() Экспорт
	Описание = Организация + ": " + Контрагент + " ( " + Договор + ")"; // это как пример
КонецПроцедуры


3. вешаем вызов процедуры на процедуру ПриИзменении каждого реквизита-донора (который влияет на его значение)

это даст возможность оперативно (во время редактирования документа видеть изменение нашего реквизита при изменении влияющих на него данных), изменение самого этого реквизита в документе лучше заблокировать, чтобы не иметь "сюрпризов", если кто-то его сотрёт или внесёт значение, не вписывающееся в его предназначение:
ТолькоПросмотр = Истина или Доступность = Ложь

4. далее, делаем и запускаем обработку, которая пробегается по старым документам и заполняет этот реквизит (напоминаю, вместо ДокОбъект.ОбновитьОписание() можно скопировать содержимое этой процедуры прямо в код обработки:

Запрос = Новый Запрос("ВЫБРАТЬ Документ.НашДокумент.Ссылка ГДЕ Дата < &Дата");
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Док = Запрос.Выполнить().Выбрать();
Пока Док.Следующий() Цикл
	ДокОбъект = Док.Ссылка.ПолучитьОбъект();
	ДокОбъект.ОбменДанными.Загрузка = Истина;
	ДокОбъект.ОбновитьОписание();
	ДокОбъект.Записать();
КонецЦикла;
Показать


5. Необязательный пункт (только, если предполагается изменение влияющих реквизитов через другие модули/обработки, скажем, изменяющие договор, который в нашем примере влияет на содержимое нашего реквизита. Тогда в модуле объекта добавляем:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	ОбновитьОписание();
КонецПроцедуры



Профит.
2. shurikvz 24.11.21 22:16 Сейчас в теме +0.2 $m
Что планируется еще делать с этим реквизитом на форме списка? Если просто визуально выводить - возможно проще сделать условным оформлением в процедуре списка ПриПолученииДанных не добавляя реквизит в документ.

Если же нужен именно как реквизит документа - добавить реквизит в документ, для новых документов заполнять в процедуре ПередЗаписью, для уже существующих документов заполнить обработкой в режиме ОбменДанными.Загрузка = Истина.
Fatenm; user1671936; Sashares; +3 Ответить
7. GetNight 46 26.11.21 08:58 Сейчас в теме
(3)
Создайте форму списка, добавьте новое поле и в процедуре ПриСозданииНаСервере или ПриОткрытии заполняйте нужными данными


ПриСозданииНаСервере реквизиты, на основании которых должен меняться "наш" реквизит, могут быть ещё пустыми
ПриОткрытии? Странное предложение... Смотрите, что получится по вашей схеме:

1. вы создали документ, наш реквизит заполнился по пустым данным - т.е. он "пустой" или "полупустой"
2. вы сделали изменения важных реквизитов, которые должны влиять на содержимое нашего реквизита - но он уже "заполнен" из п.1.
3. вы нажали записать/провести

Итак? Мне нужно теперь снова его открыть (чтобы реквизит обновился) и потом снова его записать/провести? Лолшто? А если я этого не сделаю/забуду и вообще это двойная (мусорная) нагрузка и на сервер и на человека и на журнал событий и на историю изменений

ближе всего (2), но вариант ПередЗаписью - спорный, так как он не даёт визуального изменения во время редактирования документа
однако, у него есть тот плюс, что он позволяет делать необходимые изменения при изменении документа через другие модули / обработки. в таком случае лучше использовать его вместе с процедурой обновления реквизита в самой форме
3. Cvetic 307 25.11.21 11:20 Сейчас в теме
Создайте форму списка, добавьте новое поле и в процедуре ПриСозданииНаСервере или ПриОткрытии заполняйте нужными данными.
5. smirnova_a 25.11.21 17:12 Сейчас в теме
Проще всего в процедуру ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) добавлять
Оставьте свое сообщение

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