В УПП есть справочник Основные средства и справочник Подразделения организаций так вот я хочу сделать так чтобы при выборе определенного подразделения у меня выходили в форме выбора только те основные средства которые находятся на этом подразделении. я создал свою форму выбора в справочнике Основные средства и добавил туда реквизит Подразделения хочу заполнить его при открытии но выходит ошибка: Итератор для значения не определен
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(58)}: Для Каждого СтрокаТЧ Из СправочникСписок Цикл
 подскажите пожалуйста это можно исправить

это в форме выбора:
```1c
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    Для Каждого СтрокаТЧ Из СправочникСписок Цикл
    СтрокаТЧ.Участок = ПолучитьУчасток(СтрокаТЧ.Наименование);
    КонецЦикла;

    КонецПроцедуры
```

это в документе делаю отбор по подразделениям:
```1c
    Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

    ТабЧасти = ЭлементыФормы.Заказы.ТекущиеДанные;

    ФормаПодбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора");
    ФормаПодбора.РежимВыбора = Истина;
    ФормаПодбора.ЗакрыватьПриВыборе = Истина;
    ФормаПодбора.МножественныйВыбор = Истина;
    ФормаПодбора.ВладелецФормы = Элемент;

    //ФормаПодбора.Отбор.Код.ВидСравнения = ВидСравнения.Равно;
    //ФормаПодбора.Отбор.Участок.Значение = ТабЧасти.Участок;
    //ФормаПодбора.Отбор.Код.Использование = Истина;
    ФормаПодбора.Открыть();

    СтандартнаяОбработка = Ложь

    КонецПроцедуры
```

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

```1c
    Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОсновныеСредства.Ссылка КАК ОсновноеСредство
    |ИЗ
    | РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОсновныеСредства
    | ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ОсновныеСредства.Ссылка
    |ГДЕ
    | МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", СсылкаУчасток);

    РезультатЗапроса = Запрос.Выполнить();

    Если не РезультатЗапроса.Пустой() Тогда
    нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора");
    нФормаВыбора.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    нФормаВыбора.Отбор.Ссылка.Значение = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство");
    нФормаВыбора.Отбор.Ссылка.Использование = Истина;
    нФормаВыбора.Открыть();
    Иначе
    // пока ничего
    КонецЕсли;

    КонецПроцедуры
```
 В СсылкаУчасток передавайте данные текущей строки Участок. Так же определите СтандартнаяОбработка = Ложь;
---
Добавить тогда вот так ещё, нужен список значений, это как пример

```1c
    СписокОС = Новый СписокЗначений;
    СписокОС.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство"));
    нФормаВыбора.Отбор.Ссылка.Значение = СписокОС;
```
---
Это не так работает. Если вы добавили реквизит в справочник, то чтобы заполнить этот реквизит, надо получить объект справочника, заполнить в нем реквизит и записать. И так во всех элементах справочника.

Но это возможно и без добавления реквизита в справочник.
Можно в таблицу СправочникСписок на форме добавить колонку и заполнить эту колонку в событии ПриВыводеСтроки или в событии ПриПолученииДанных элемента формы СправочникСписок.
---
использую событие ПриВыводеСтроки
```1c
    Функция ПолучитьУчасток(Наименование)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение
    |ИЗ
    | РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОсновныеСредства
    | ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ОсновныеСредства.Ссылка
    |ГДЕ
    | ОсновныеСредства.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", Наименование);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Возврат ВыборкаДетальныеЗаписи.Местонахождение;
    Иначе
    Возврат Неопределено;
    КонецЕсли;

    КонецФункции

    Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);
    КонецПроцедуры
```

выдает ошибку: Поле объекта недоступно для записи (СС_Участок)
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(68)}: ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);
---
типы совпадают
---
Обычные формы, вот пример

```1c
    нФормаВыбора = Справочники.ТестСправочник.ПолучитьФормуВыбора(, ЭлементыФормы.тестОбъект);
    нФормаВыбора.Отбор.ТестРеквизит.ВидСравнения = ВидСравнения.Равно;
    нФормаВыбора.Отбор.ТестРеквизит.Значение = "Тест1";
    нФормаВыбора.Отбор.ТестРеквизит.Использование = Истина;
    нФормаВыбора.Открыть();
```
---
ну отбор то у меня работает я проверял на других реквизитах. мне нужно в своей созданной форму заполнить колонку вот что я хочу. я не могу обратиться к тч формы перед открытием
---
Зачем её заполнять? Я так понимаю "ФормаПодбора.Отбор.Участок.Значение" - это подразделение, если нет ".Участок" подразделения - посмотрите доступно ли значение точкой останова, например "ФормаПодбора.Отбор.Участок.Значение.Подразделение"
---
вот
---
проблема еще в том что в справочнике основные средства реквизит Подразделения это реквизит формы элемента
---
Если это элемент формы так это не сработает. Нужно определить где хранится информация подразделения. Как вариант, перед открытием формы, с помощью запроса получить массив участков по условию и ФормаПодбора.Отбор.Участок.ВидСравнениния = ВидСравнения.ВСписке, а значение ФормаПодбора.Отбор.Участок.Значение = РезельтатЗапроса.Выгрузить("...")
---
Давайте так В УПП есть справочник Основные средства и справочник Подразделения организаций как связаны между собой справочники. В основных средствах есть реквизит ссылка Подразделения? Если да, то как он называется?
---
реквизита не было я сам его добавил
---
Хорошо, как оно заполняется? Это реквизит объекта, он заполнен?
---
вот я его пытаюсь заполнить но выдает ошибку:Поле объекта недоступно для записи (СС_Участок)
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(59)}: ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);

Поле объекта недоступно для записи (СС_Участок)
{Справочник.ОсновныеСредства.Форма.СС_ФормаВыбора.Форма(63)}: Элемент.ТекущиеДанные.СС_Участок = ПолучитьУчасток(Элемент.ТекущиеДанные.Ссылка);

```1c
    Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ДанныеСтроки.СС_Участок = ПолучитьУчасток(ДанныеСтроки.Ссылка);
    КонецПроцедуры

    Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Элемент.ТекущиеДанные.СС_Участок = ПолучитьУчасток(Элемент.ТекущиеДанные.Ссылка);
    КонецПроцедуры
```
---
вот
---
У вас перемешались "Люди - кони, кони - люди"!
Зачем при открытии вы пытаетесь заполнить и получить если у вас уже есть данные Элемент.ТекущиеДанные.Ссылка. Что у вас написано в ПолучитьУчасток(?
---
ну я это как пример кинул два события а так я использую только одно из них :
```1c
    Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Элемент.ТекущиеДанные.СС_Участок = ПолучитьУчасток(Элемент.ТекущиеДанные.Ссылка);
    КонецПроцедуры
```
---
Покажите тело функции ПолучитьУчасток(
---
```1c
    Функция ПолучитьУчасток(Наименование)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение
    |ИЗ
    | РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОсновныеСредства
    | ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ОсновныеСредства.Ссылка
    |ГДЕ
    | ОсновныеСредства.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", Наименование);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    Возврат ВыборкаДетальныеЗаписи.Местонахождение;
    Иначе
    Возврат Неопределено;
    КонецЕсли;

    КонецФункции
```
---
Попробуйте вот так

```1c
    Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОсновныеСредства.Ссылка КАК ОсновноеСредство
    |ИЗ
    | РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОсновныеСредства
    | ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ОсновныеСредства.Ссылка
    |ГДЕ
    | МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", СсылкаУчасток);

    РезультатЗапроса = Запрос.Выполнить();

    Если не РезультатЗапроса.Пустой() Тогда
    нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора");
    нФормаВыбора.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    нФормаВыбора.Отбор.Ссылка.Значение = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство");
    нФормаВыбора.Отбор.Ссылка.Использование = Истина;
    нФормаВыбора.Открыть();
    Иначе
    // пока ничего
    КонецЕсли;

    КонецПроцедуры
```
 В СсылкаУчасток передавайте данные текущей строки Участок. Так же определите СтандартнаяОбработка = Ложь;
---
ошибка Ошибка при установке значения атрибута контекста (Значение)
{Документ.СС_ТабельОС.Форма.ФормаДокумента.Форма(142)}: нФормаВыбора.Отбор.Ссылка.Значение = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство");
по причине:
Неверный тип значения
---
Проверьте нФормаВыбора.Отбор.Ссылка.Значение - это ОсновныеСредства.Ссылка ?
---
вот
---
Точку останова сделайте и проверьте сразу значения с запроса РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство") - должен быть список основных средств
---
вот
---
Добавить тогда вот так ещё, нужен список значений, это как пример

```1c
    СписокОС = Новый СписокЗначений;
    СписокОС.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство"));
    нФормаВыбора.Отбор.Ссылка.Значение = СписокОС;
```
---
проблема появилась я когда из формы выбора с отбором выбираю основное средство то оно почему то не встает в ТЧ документа
---
спасибо тебе большое за помощь! все заработало
---
Не за что, удачи!
---
проблема появилась я когда из формы выбора с отбором выбираю основное средство то оно почему то не встает в ТЧ документа
---
я еще в прицедуре Процедура ЗаказыОбъектОСНачалоВыбора в конце добавил

```1c
    СтандартнаяОбработка = Ложь;
```

а то у меня две формы выбора открывались
---
одна форма с отбором другая без отбора причем если выбираю ОС из формы без отбора то основное средство встает в ТЧ документа а если выбираю из формы с отбором то ОС не встает. ячейка просто пустой остается
---
СтандартнаяОбработка = Ложь отключает цепочку обработчиков следующих далее. Соответственно ОбработкаВыбора не вызывается для поля.
Просто открывается форму справочника, но никак не обрабатывается.
Как вариант, можно указать владельца формы выбора.

```1c
    нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора", Элемент);
```
---
СтандартнаяОбработка = Ложь; Это в начале нужно перед открытием, а лучше в условие, тогда будет отрабатывать условие, если запрос не пустой тогда открывать с отбором, иначе без отбора. В иначе можно ничего не писать, будет открыта форма без отбора

```1c
    Если не РезультатЗапроса.Пустой() Тогда
    СтандартнаяОбработка = Ложь;
    .....
```
---
что то не помогло
---
Код процедуры в студию!
---
извини у меня проблемы были с интернетом ща скину
---
```1c
    Процедура ЗаказыОбъектОСНачалоВыбора(Элемент, СтандартнаяОбработка)

    ТабЧасти = ЭлементыФормы.Заказы.ТекущиеДанные;

    Если ЗначениеЗаполнено(ТабЧасти.Участок) Тогда

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОсновныеСредства.Ссылка КАК ОсновноеСредство
    |ИЗ
    | РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОсновныеСредства КАК ОсновныеСредства
    | ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ОсновныеСредства.Ссылка
    |ГДЕ
    | МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", ТабЧасти.Участок);

    РезультатЗапроса = Запрос.Выполнить();

    СписокОС = Новый СписокЗначений;
    СписокОС.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ОсновноеСредство"));

    Если не РезультатЗапроса.Пустой() Тогда
    СтандартнаяОбработка = Ложь;
    нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("ФормаСписка");
    нФормаВыбора.РежимВыбора = Истина;
    нФормаВыбора.ЗакрыватьПриВыборе = Истина;
    нФормаВыбора.МножественныйВыбор = Истина;
    нФормаВыбора.ВладелецФормы = Элемент;

    нФормаВыбора.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    нФормаВыбора.Отбор.Ссылка.Значение = СписокОС;
    нФормаВыбора.Отбор.Ссылка.Использование = Истина;
    нФормаВыбора.Открыть();
    Иначе
    // пока ничего
    КонецЕсли;

    КонецЕсли;

    КонецПроцедуры
```
---
мне тут подсказали что нужно использовать форму выбора с оповещением при закрытии и в этом оповещении заполнять текущее поле
---
мне тут подсказали что нужно использовать форму выбора с оповещением при закрытии и в этом оповещении заполнять текущее поле - это для управляемых форм.

```1c
    нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("ФормаСписка");
```
 - во первых это не форма выбора, а форма списка. Можно тут не указывать имя формы, вызовется определенная
```1c
    ПолучитьФормуВыбора()
```

СтандартнаяОбработка = Ложь; - этот флаг отключает открытие стандартной формы выбора

И ещё раз, в чем сейчас проблема?
---
проблема в том что когда я выбираю основное средство в форме списка оно не переносится в форму документа. в ТЧ документа ОбъектОС остается пустым
---
прочитайте 36 сообщение. Там все описано.
---
нФормаВыбора = Справочники.ОсновныеСредства.ПолучитьФормуВыбора("СС_ФормаВыбора", Элемент);
добавил но че то все равно не встает значение в табличную часть документа
---
смотреть обработчик ОбработкаВыбора назначенный для поля. Посмотреть отладчиком, что он вызывается и что приходит.
---
исправил