Как в 1С спозиционироваться в форме списка (в форме выбора) на документе, если есть ссылка на него, т.е. как программно указать позицию конкретного документа (спозиционировать курсор) в списке документов (1С: Программисту: Списки документов)

Вопрос Как в 1С спозиционироваться в форме списка (в форме выбора) на документе, если есть ссылка на него, т.е. как программно указать позицию конкретного документа (спозиционировать курсор) в списке документов (например, при вызове формы выбора из поля ввода какой-либо диалоговой формы по кнопке выбора).
Ответ Делается это примерно так:
текФорма.ЭлементыФормы.ДокументСписок.ТекущаяСтрока = СсылкаНаДокумент;
Приведем небольшой пример использования этого метода. Допустим, нужно дать пользователю возможность выбрать документ из списка документов, открыв форму выбора спозиционированной на конкретном документе. Причем, допустим, выбор документа определяется значением реквизита, которое указал пользователь в поле «НомерЗаказаПоставщику» (это реквизит документа, не его номер).
Рисунок, демонстрирующий задачу:
1 — поле ввода «НомерЗаказаПоставщику» диалоговой формы отчета с кнопкой выбора;
2 — надпись «СообщитьНомерЗаказа» (а это номер самого документа, выводится информационно);
3 — форма выбора, открывшаяся спозиционированной на нужной строке
Как в форме выбора документа спозиционироваться на конкретном документе
Код процедуры, решающей задачу:

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *