Здравствуйте, пытаюсь сделать чтобы ячейка "Объект" заполнялась автоматически после заполнения Материала:

```1c
    &НаСервере
    Функция МатериалыПриИзмененииНаСервере()
    Возврат Объект.Склад.ПодразделениеЗатрат;
    Возврат Объект.Объект.Наименование;
    КонецФункции

    &НаКлиенте
    Процедура МатериалыПриИзменении(Элемент)

    Элемент.ТекущиеДанные.ПодразделениеЗатрат = МатериалыПриИзмененииНаСервере();
    Элемент.ТекущиеДанные.НоменклатурнаяГруппа = МатериалыПриИзмененииНаСервере();
    //УправлениеФормой(ЭтаФорма);

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

Данные не подтягиваются. Идея в том, чтобы заполнять её из поля объект в шапке. В чём может быть дело?
---
Полагаю что вот так:

```1c
    Возврат Объект.Объект;
```

Таким образом вернется ссылка на реквизит шапки Объект, тип которого, судя по скринам НоменклатурнаяГруппа.
---
```1c
    &НаСервере
    Функция МатериалыПриИзмененииНаСервере()
    Возврат Новый Структура("ПодразделениеЗатрат, НоменклатурнаяГруппа", Объект.Склад.ПодразделениеЗатрат, Объект.Объект);
    КонецФункции

    &НаКлиенте
    Процедура МатериалыПриИзменении(Элемент)

    ЗаполнитьЗначенияСвойств(Элемент.ТекущиеДанные, МатериалыПриИзмененииНаСервере());

    КонецПроцедуры
```
---
Ну, лезь в отладчик, смотри что в строке

```1c
    ЗаполнитьЗначенияСвойств(ТекущиеДанные, ДанныеСтрокиТаблицы);
```

сидит в переменной ДанныеСтрокиТаблицы. Такое ощущение, что здесь затирается. Или попробуй строчку

```1c
    ЗаполнитьЗначенияСвойств(Элементы.Материалы.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());
```

запихнуть в самый конец процедуры.
---
лучше переименовать "Объект" в "ОбъектСтроительства" как это сделано в УСО для УП2.
---
Функция возвращает только одно значение, первый Возврат.
---
Попробовал закоментировать 1 возврат

```1c
    &НаСервере
    Функция МатериалыПриИзмененииНаСервере()
    //Возврат Объект.Склад.ПодразделениеЗатрат;
    Возврат Объект.Объект.Наименование;
    КонецФункции

    &НаКлиенте
    Процедура МатериалыПриИзменении(Элемент)

    Элемент.ТекущиеДанные.ПодразделениеЗатрат = МатериалыПриИзмененииНаСервере();
    Элемент.ТекущиеДанные.НоменклатурнаяГруппа = МатериалыПриИзмененииНаСервере();
    //УправлениеФормой(ЭтаФорма);

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

Результата нет, может есть ещё идеи?
---
Объект.Объект.Наименование - это текст, строка
Элемент.ТекущиеДанные.НоменклатурнаяГруппа = тип справочник номенклатурные группы
не соответствие типов
---
Подскажите пожалуйста как исправить.
---
Полагаю что вот так:

```1c
    Возврат Объект.Объект;
```

Таким образом вернется ссылка на реквизит шапки Объект, тип которого, судя по скринам НоменклатурнаяГруппа.
---
Спасибо огромное! Заполнилось!

```1c
    &НаСервере
    Функция МатериалыПриИзмененииНаСервере()
    //Возврат Объект.Склад.ПодразделениеЗатрат;
    Возврат Объект.Объект;
    КонецФункции

    &НаКлиенте
    Процедура МатериалыПриИзменении(Элемент)

    //Элемент.ТекущиеДанные.ПодразделениеЗатрат = МатериалыПриИзмененииНаСервере();
    Элемент.ТекущиеДанные.НоменклатурнаяГруппа = МатериалыПриИзмененииНаСервере();
    //УправлениеФормой(ЭтаФорма);

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

Вот как бы ещё сделать чтобы оба возврата работали.
---
```1c
    &НаСервере
    Функция МатериалыПриИзмененииНаСервере()
    Возврат Новый Структура("ПодразделениеЗатрат, НоменклатурнаяГруппа", Объект.Склад.ПодразделениеЗатрат, Объект.Объект);
    КонецФункции

    &НаКлиенте
    Процедура МатериалыПриИзменении(Элемент)

    ЗаполнитьЗначенияСвойств(Элемент.ТекущиеДанные, МатериалыПриИзмененииНаСервере());

    КонецПроцедуры
```
---
ЗаполнитьЗначенияСвойств(Элемент.ТекущиеДанные, МатериалыПриИзмененииНаСервере());

Работает отлично! Только эти колонки теперь не возможно отредактировать, как добавить возможность редактирования для заполненных через
```1c
    ЗаполнитьЗначенияСвойств(Элемент.ТекущиеДанные, МатериалыПриИзмененииНаСервере());
```

ячеек?
---
Повесить обработчик события не на всю табличную часть, а только на колонку "Материал".
---
на колонку "Материал"
Здравствуйте antz, пытался сам разобратся как это сделать, пытался найти как повесить только на колонку "Материал" в инете, безуспешно, наверное не правильно ставлю вопрос. Подскажите пожалуйста.
---
Сделал так:

```1c
    &НаСервере
    Функция МатериалыНоменклатураПриИзмененииНаСервере()
    //Возврат Объект.Склад.ПодразделениеЗатрат;
    //Возврат Объект.Объект;
    Возврат Новый Структура("ПодразделениеЗатрат, НоменклатурнаяГруппа", Объект.Склад.ПодразделениеЗатрат, Объект.Объект);
    КонецФункции

    &НаКлиенте
    Процедура МатериалыНоменклатураПриИзменении(Элемент)

    ЗаполнитьЗначенияСвойств(Элемент.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());

    ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;

    ДанныеСтрокиТаблицы = Новый Структура(
    "Номенклатура, ЕдиницаИзмерения, Коэффициент, Количество,
    |Счет, ОтражениеВУСН, СпособУчетаНДС,
    |НомерГТД, СтранаПроисхождения,
    |НоменклатурнаяГруппа, СчетЗатрат, СтатьяЗатрат, ПодразделениеЗатрат,
    |ПодразделениеЗатратДоступность, НоменклатурнаяГруппаВыделятьНезаполненное");

    ЗаполнитьЗначенияСвойств(ДанныеСтрокиТаблицы, ТекущиеДанные);

    ДанныеОбъекта = Новый Структура("Дата, Организация, Склад, ПодразделениеОрганизации, СчетаУчетаЗатратВТаблице");
    ЗаполнитьЗначенияСвойств(ДанныеОбъекта, Объект);

    МатериалПриИзмененииНаСервере(ДанныеСтрокиТаблицы, ДанныеОбъекта);

    ЗаполнитьЗначенияСвойств(ТекущиеДанные, ДанныеСтрокиТаблицы);
    //тек_стр = ЭтаФорма.Элементы.Материалы.ТекущиеДанные;

    Если ТекущиеДанные.ПодразделениеЗатрат = ПолучитьПодразделение() Тогда
    Элементы.Материалы.ПодчиненныеЭлементы.МатериалыМатЗатраты.Видимость=Истина;
    Иначе
    Элементы.Материалы.ПодчиненныеЭлементы.МатериалыМатЗатраты.Видимость=ложь;
    КонецЕсли;

    КонецПроцедуры
```
и получил: "Поле объекта не обнаружено (Текущие данные)"
---
в обработчик изменения колонки передается не вся таблица, а только поле формы, которое изменялось. У него свойства ТекущиеДанные нет. Так что или

```1c
    &НаКлиенте
    Процедура МатериалыНоменклатураПриИзменении(Элемент)

    ЗаполнитьЗначенияСвойств(Элемент.Родитель.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());
```

или

```1c
    &НаКлиенте
    Процедура МатериалыНоменклатураПриИзменении(Элемент)

    ЗаполнитьЗначенияСвойств(Элементы.Материалы.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());
```
---
ЗаполнитьЗначенияСвойств(Элементы.Материалы.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());

Здравствуйте. Второй вариант:

```1c
    &НаКлиенте
    Процедура МатериалыНоменклатураПриИзменении(Элемент)

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

Надо, чтобы типы совпадали.
---
Всю голову уже сломал как это сделать. Знаний не хватает.
---
Такой же скриншот покажи как в (24). Разверни Объект и ТЧ Материалы.
---
Какой такой?
---
У твоего документа есть реквизит с именем "Объект", правильно? У этого реквизита есть тип - строка или число или справочникссылка.
А еще у твоего документа есть табличная часть под названием "Материалы", верно? А у этой табличной части есть реквизит "НоменклатурнаяГруппа", ага? А у этого реквизита тоже есть тип.

Так вот что это за типы? Оба?

Подсмотреть все это можно в дереве конфигурации, забудь про форму пока.
---
У реквизита "Объект" тип:
"СправочникСсылка.ОсновныеСредства, СправочникСсылка.НоменклатурныеГруппы"
у "Номенклатурной группы" табличной части тип:
"СправочникСсылка.НоменклатурныеГруппы"
---
Ну, если в реквизите "объект" не сидит основное средство, то должно работать, ниче не знаю)
---
Вот и я думаю, что должно, только вот почему-то "Подразделение затрат" заполняет нормально, а с объектом ни в какую.

```1c
    &НаСервере
    Функция МатериалыНоменклатураПриИзмененииНаСервере()
    //Возврат Объект.Склад.ПодразделениеЗатрат;
    //Возврат Объект.Объект;
    Возврат Новый Структура("ПодразделениеЗатрат, НоменклатурнаяГруппа", Объект.Склад.ПодразделениеЗатрат, Объект.Объект);
    КонецФункции

    &НаКлиенте
    Процедура МатериалыНоменклатураПриИзменении(Элемент)

    ЗаполнитьЗначенияСвойств(Элементы.Материалы.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());

    ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;

    ДанныеСтрокиТаблицы = Новый Структура(
    "Номенклатура, ЕдиницаИзмерения, Коэффициент, Количество,
    |Счет, ОтражениеВУСН, СпособУчетаНДС,
    |НомерГТД, СтранаПроисхождения,
    |НоменклатурнаяГруппа, СчетЗатрат, СтатьяЗатрат, ПодразделениеЗатрат,
    |ПодразделениеЗатратДоступность, НоменклатурнаяГруппаВыделятьНезаполненное");

    ЗаполнитьЗначенияСвойств(ДанныеСтрокиТаблицы, ТекущиеДанные);

    ДанныеОбъекта = Новый Структура("Дата, Организация, Склад, ПодразделениеОрганизации, СчетаУчетаЗатратВТаблице");
    ЗаполнитьЗначенияСвойств(ДанныеОбъекта, Объект);

    МатериалПриИзмененииНаСервере(ДанныеСтрокиТаблицы, ДанныеОбъекта);

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

    КонецПроцедуры
```
---
Ну, лезь в отладчик, смотри что в строке

```1c
    ЗаполнитьЗначенияСвойств(ТекущиеДанные, ДанныеСтрокиТаблицы);
```

сидит в переменной ДанныеСтрокиТаблицы. Такое ощущение, что здесь затирается. Или попробуй строчку

```1c
    ЗаполнитьЗначенияСвойств(Элементы.Материалы.ТекущиеДанные, МатериалыНоменклатураПриИзмененииНаСервере());
```

запихнуть в самый конец процедуры.
---
Как Вы сказали перекинул в конец процедуры и всё заработало!
Спасибо! Вы настоящий Программист!
---
Лучше, конечно, не городить еще одну процедуру, а дописать в уже имеющуюся МатериалПриИзмененииНаСервере необходимый код, а вообще, конструкция Объект.Объект доступна и на клиенте, так что вообще можно было написать
```1c
    Элементы.Материалы.ТекущиеДанные.НоменклатурнаяГруппа = Объект.Объект
```
---
Здравствуйте, отлично всё конечно работает, но сразу не попробовал заполнять табличную часть через "Подбор", через него по прежнему не заполняются колонки.
Попробовал в Обработке "ПодборНоменклатурыМОЛ" поковырятся, но думаю это не то, обработка относится и к другим документам...
Не подскажете?
Заранее благодарю.
---
в подборе номенклатуры не надо ковыряться, она тут ни при чем. посмотри в форме процедуры типа ОбработкаПодбораНоменклатуры
---
Здравствуйте, нашёл только это:

```1c
    // ОБРАБОТЧИКИ КОМАНД ФОРМЫ

    &НаКлиенте
    Процедура ОбработкаПодбораМатериалы(Команда)

    //ПараметрыПодбора = ПолучитьПараметрыПодбора("Материалы");
    //Если ПараметрыПодбора <> Неопределено Тогда
    // ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма", ПараметрыПодбора,
    // ЭтаФорма, УникальныйИдентификатор);
    //КонецЕсли;
    //+++sus
    ПараметрыПодбора = ПолучитьПараметрыПодбора("Материалы");
    Если ПараметрыПодбора <> Неопределено Тогда
    Если ЗначениеЗаполнено(Объект.МОЛ) Тогда
    ОткрытьФорму("Обработка.ПодборНоменклатурыМОЛ.Форма.Форма", ПараметрыПодбора,
    ЭтаФорма, УникальныйИдентификатор);
    Иначе
    ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма", ПараметрыПодбора,
    ЭтаФорма, УникальныйИдентификатор);
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры
```
---
Ну, вроде оно. Наверняка где-то в процедуре ОбработкаВыбораПодборНаСервере есть что-то вроде

```1c
    ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные
```

Есть ведь, да?
---
Здравствуйте, процедура ОбработкаВыбораПодборНаСервере есть, но вот ТекущаяСтрока = Элементы.Материалы.ТекущиеДанные нет.

```1c
    &НаСервере
    Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение, ИмяТаблицы)

    ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресПодобраннойНоменклатурыВХранилище);

    ДанныеОбъекта = Новый Структура("Дата, Организация, Склад");
    ЗаполнитьЗначенияСвойств(ДанныеОбъекта, Объект);

    СоответствиеСведенийОНоменклатуре = БухгалтерскийУчетПереопределяемый.ПолучитьСведенияОСпискеНоменклатуры(
    ОбщегоНазначения.ВыгрузитьКолонку(ТаблицаТоваров, "Номенклатура", Истина), ДанныеОбъекта);

    Если Объект.СчетаУчетаЗатратВТаблице Тогда
    СчетЗатрат = ПланыСчетов.Хозрасчетный.ОсновноеПроизводство;
    ПодразделениеЗатрат = БухгалтерскийУчет.ПолучитьПодразделениеПоСчету(
    Справочники.ПодразделенияОрганизаций.ПустаяСсылка(),
    СчетЗатрат,
    Объект.Организация,
    Объект.ПодразделениеОрганизации);
    КонецЕсли;

    Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл

    СтрокаТабличнойЧасти = Объект[ИмяТаблицы].Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, СтрокаТовара);

    СведенияОНоменклатуре = СоответствиеСведенийОНоменклатуре.Получить(СтрокаТовара.Номенклатура);
    Если СведенияОНоменклатуре = Неопределено Тогда
    Продолжить;
    КонецЕсли;

    СтрокаТабличнойЧасти.ЕдиницаИзмерения = СведенияОНоменклатуре.ЕдиницаИзмерения;
    СтрокаТабличнойЧасти.Коэффициент = СведенияОНоменклатуре.Коэффициент;

    Если ИмяТаблицы = "Материалы" Тогда

    СтрокаТабличнойЧасти.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются;
    СтрокаТабличнойЧасти.НомерГТД = СведенияОНоменклатуре.НомерГТД;
    СтрокаТабличнойЧасти.СтранаПроисхождения = СведенияОНоменклатуре.СтранаПроисхождения;
    СтрокаТабличнойЧасти.НоменклатурнаяГруппа = СведенияОНоменклатуре.НоменклатурнаяГруппа;
    СтрокаТабличнойЧасти.СпособУчетаНДС = СведенияОНоменклатуре.СпособУчетаНДС;
    СтрокаТабличнойЧасти.СтатьяЗатрат = ?(ЗначениеЗаполнено(СведенияОНоменклатуре.СтатьяЗатрат),
    СведенияОНоменклатуре.СтатьяЗатрат,
    ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.СтатьиЗатрат.СписаниеМатериалов"));

    Если Объект.СчетаУчетаЗатратВТаблице Тогда
    СтрокаТабличнойЧасти.СчетЗатрат = СчетЗатрат;
    СтрокаТабличнойЧасти.ПодразделениеЗатрат = ПодразделениеЗатрат;
    КонецЕсли;

    ЗаполнитьДобавленныеКолонкиСтрокиМатериалы(СтрокаТабличнойЧасти);

    КонецЕсли;

    Документы.ТребованиеНакладная.ЗаполнитьСчетаУчетаВСтрокеТабличнойЧасти(
    ДанныеОбъекта, СтрокаТабличнойЧасти, ИмяТаблицы, СведенияОНоменклатуре);

    КонецЦикла;

    КонецПроцедуры
```
---
Ещё раз огромное спасибо!
---
Ну вот же

```1c
    СтрокаТабличнойЧасти = Объект[ИмяТаблицы].Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, СтрокаТовара);
```

СтрокаТабличнойЧасти.Объект = Объект.Объект
---
Здравствуйте, не получается так:

```1c
    СтрокаТабличнойЧасти = Объект[ИмяТаблицы].Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, СтрокаТовара);
    ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти.Объект = Объект.Объект);
    //СтрокаТабличнойЧасти.Объект = Объект.Объект;
```

При сохранении конфигурации ошибка:
{Документ.ТребованиеНакладная.Форма.ФормаДокумента.Форма(856,3)}: Недостаточно фактических параметров (ЗаполнитьЗначенияСвойств)
  <<?>>ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти.Объект = Объект.Объект); (Проверка: Сервер)
---
Не надо ЗаполнитьЗначенияСвойств. Просто

```1c
    СтрокаТабличнойЧасти.Объект = Объект.Объект
```
---
Здравствуйте antz, подскажите пожалуйста, больше и спросить не у кого.
---
Отладчик что говорит? ИмяТаблицы какое?
---
Отладчик ничего не говорит, нажимаю "Начать отладку" и просто запуск 1С.
---
таак,теперь поставь точку останова на строке

```1c
    СтрокаТабличнойЧасти = Объект[ИмяТаблицы].Добавить();
```

и посмотри что находится в переменной ИмяТаблицы
---
СтрокаТабличнойЧасти = Объект
Поставил точку останова на строке, но как посмотреть, что в переменной?
---
Из конфигуратора запускай 1С в режиме отладки (F5), запускай этот твой подбор, нажимай "перенести в документ" и когда выполнение остановится на твоей точке - вставай курсором на ИмяТаблицы и нажимай Shift+F9.
---
Должно работать, теперь покажи что в переменной СтрокаТабличнойЧасти (нажми на плюсик рядом с именем).
---
Здравствуйте antz. Я так уже пробовал:

```1c
    СтрокаТабличнойЧасти = Объект[ИмяТаблицы].Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти, СтрокаТовара);
    //ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти.Объект = Объект.Объект);
    СтрокаТабличнойЧасти.Объект = Объект.Объект;
```

При сохранении конфигурации ошибки нет, а в документе когда нажимаешь "Перенести в документ" вылетает окно "Поле объекта не обнаружено (Объект)"
Если нажму в этом окне кнопку "Подробно" то вижу: "{Документ.ТребованиеНакладная.Форма.ФормаДокумента.Форма(857)}: Поле объекта не обнаружено (Объект)
  СтрокаТабличнойЧасти.Объект = Объект.Объект;"
---
Здравствуйте antz, не было времени заниматься 1С, сейчас вернулся к этой теме, у Вас не появилось новых мыслей как реализовать заполнение из подбора?
Заранее благодарю за ответ.