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

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

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

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

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


Еще можно в обработке события "При выводе строки" - но это будет медленее работать
6. GetNight 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 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 Сейчас в теме
Проще всего в процедуру ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) добавлять
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Руководитель отдела разработки
Москва
зарплата от 200 000 руб. до 230 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 120 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Тестировщик 1С
Санкт-Петербург
зарплата от 60 000 руб. до 120 000 руб.
Полный день