Здравствуйте! Назрел вопрос: почему в данном кусочке кода структура не заполняет табличную часть дока? Запрос возвращает необходимые мне значения, все имена совпадают (в таб. части документа тоже). Подскажите, пожалуйста, где моя ошибка.

```1c
    &НаСервереБезКонтекста
    Функция ТоварыНоменклатураАвтоПодборНаСервере(СсылкаНом)

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

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

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

    Возврат ДанныеОстатки;
    КонецФункции

    &НаКлиенте
    Процедура ТоварыНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

    ТекДанные = Элементы.Товары.ТекущиеДанные;
    ДанныеОстатки = ТоварыНоменклатураАвтоПодборНаСервере(ТекДанные.Номенклатура);
    ЗаполнитьЗначенияСвойств(Элементы.ОстаткиНаСкладах, ДанныеОстатки);

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

```1c
    ТекДанные = Элементы.Товары.ТекущиеДанные;
    ДанныеОстатки = ТоварыНоменклатураАвтоПодборНаСервере(ТекДанные.Номенклатура);
    НоваяСтр = ОстаткиНаСкладах.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтр, ДанныеОстатки);
```
.
Если ОстаткиНаСкладах это конечно таблица значений.
Если в ОстаткиНаСкладах всегда должна быть только одна строка, то перед этим все ее очищаем
---
Нужно заполнять построчно:

```1c
    Пока ТЗ.Следующий() Цикл
    НоваяСтр = ДанныеОстатки.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтр , ТЗ);
    КонецЦикла;
```

Либо попробовать через Запрос.Выполнить().Выгрузить()
---
кек, чуток опередил меня))))
---
Стоп. Тут проблема совсем в другом.
У вас же ДанныеОстатки это пустая структура. без полей. Поэтому ничего и не заполняется.
Нужно создать структуру с соответствующими полями. Тогда заполнится и всё будет работать.
---
Боже, кажется понял, в чём проблема.
---
Либо попробовать через Запрос.Выполнить().Выгрузить()

это боль) не делайте так
---
Я вижу что заполнить значения свойств есть, но не хватает цикла для обхода....

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

 Пока ТЗ.Следующий() Цикл
  НоваяСтрока = ДанныеОстатки.Добавить();
  ЗаполнитьЗначенияСвойств(НоваяСтр,ТЗ);
 КонецЦикла;
---
Метод объекта не обнаружен (Добавить())...

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

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

```1c
    ТекДанные = Элементы.Товары.ТекущиеДанные;
    ДанныеОстатки = ТоварыНоменклатураАвтоПодборНаСервере(ТекДанные.Номенклатура);
    ЗаполнитьЗначенияСвойств(ТекДанные , ДанныеОстатки);
```
---
Откуда ж я знаю, вам должно быть виднее. В свойствах этого элемента смотрите, какая ТЧ является источником данных.
---
Эту ТЧ заводил собственноручно, она пустая, играет роль только приёмника данных.
---
Если это реквизит формы, то обращайтесь напрямую по его имени.
---
```1c
    &НаСервереБезКонтекста
    Функция ТоварыНоменклатураАвтоПодборНаСервере(СсылкаНом)

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

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

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

    Возврат ДанныеОстатки;
    КонецФункции

    &НаКлиенте
    Процедура ТоварыНоменклатураАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

    ТекДанные = Элементы.Товары.ТекущиеДанные;
    ДанныеОстатки = ТоварыНоменклатураАвтоПодборНаСервере(ТекДанные.Номенклатура);
    Если ДанныеОстатки.Количество() = 0 Тогда
    Сообщить("Нет данных по остаткам выбранной номенклатуры на складе");
    Возврат;
    КонецЕсли;
    Для Д = 0 По ДанныеОстатки.ВГраница() Цикл
    ЗаполнитьЗначенияСвойств(ОстаткиНаСкладах.Добавить(), ДанныеОстатки[Д]);
    КонецЦикла

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

Где то приблизительно так можно было бы получить остатки и заполнить их на форме (если таблица ОстаткиНаСкладах так и называется. Не смотрел в отладчике. Но вроде должно работать.
---
```1c
    &НаСервереБезКонтекста
    Функция ТоварыНоменклатураАвтоПодборНаСервере(СсылкаНом)

    ДанныеОстатки = Новый Структура;
    Запрос = Новый Запрос("ВЫБРАТЬ
    | ТоварыНаСкладахОстатки.Склад КАК Склад,
    | ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ОстатокНаСкладе,
    | ТоварыНаСкладахОстатки.КОтгрузкеОстаток КАК РезервНаСкладе
    |ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки");
    Запрос.УстановитьПараметр("Номенклатура", СсылкаНом);

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

    ТЗ = Результат.Выбрать();
    Счетчик = 1;
    Если ТЗ.Следующий() Тогда
    СтруктураМассива = Новый Структура("Склад,ОстатокНаСкладе,РезервНаСкладе");
    ЗаполнитьЗначенияСвойств(СтруктураМассива, ТЗ);
    ДанныеОстатки.Вставить("КлючСтруктуры"+ СтрЗаменить(Строка(Счетчик), Символы.НПП, "), СтруктураМассива);
    Счетчик = Счетчик + 1;
    КонецЕсли;

    Возврат ДанныеОстатки;

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

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

    ОстаткиНаСкладах.Очистить();
    ТекДанные = Элементы.Товары.ТекущиеДанные;
    ДанныеОстатки = ТоварыНоменклатураАвтоПодборНаСервере(ТекДанные.Номенклатура);
    Если ДанныеОстатки.Количество() = 0 Тогда
    Сообщить("Нет данных по остаткам выбранной номенклатуры на складе");
    Возврат;
    КонецЕсли;
    Для Каждого КлючСтруктуры Из ДанныеОстатки Цикл
    ЗаполнитьЗначенияСвойств(ОстаткиНаСкладах.Добавить(), ДанныеОстатки[КлючСтруктуры.Ключ]);
    КонецЦикла;

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

Где то приблизительно так можно было бы получить остатки и заполнить их на форме (если таблица ОстаткиНаСкладах так и называется и у таблицы есть такие же реквизиты "Склад,ОстатокНаСкладе,РезервНаСкладе" с таким же типом значения как и в регистре накопления ТоварыНаСкладах. Не смотрел в отладчике. Но вроде должно работать.
---
В отладчике правил некоторые моменты (относительно синтаксиса), но саму процедуру не запускал.
---
Спасибо. Мне помогло!