Добрый день, друзья.
Хотел бы у вас спросить, в какой части кода у меня допущена ошибка. При нажатии на кнопку, таблица значений не отображает никаких данных, и ошибка об уникальности.
Цель обработки, показать в каких документах имеются данные по контрагенту.
Конечно это можно сделать через объект конфигурации "Отбор".
Заказчик хочет видеть ссылки на документы по конкретному контрагенту.
Всем заранее спасибо.

```1c
    &НаКлиенте
    Процедура ПолучитьИнфо(Команда)
    СоздатьТаблицуНаФормеСервера();
    Объект.СуммаДолга = ПолучитьДолгКлиента(Объект.Клиент);

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

    &НаСервере
    Процедура ВывестиТаблицуЗначенийВКодеВТаблицуНаФорме(ТабВКоде,ТабРеквизит,ТабНаФорме)

    // реквизит ТабРеквизит и соответствующий
    // ему элемент формы ТабНаФорме уже созданы
    // нами в визуальном режиме

    // 1. добавляем колонки из ТабВкоде в реквизит ТабРеквизит

    НовыеРеквизиты = Новый Массив;

    Для Каждого Колонка Из ТабВКоде.Колонки Цикл
    НовыеРеквизиты.Добавить(
    Новый РеквизитФормы(
    Колонка.Имя, Колонка.ТипЗначения,
    ТабРеквизит
    )
    );
    КонецЦикла;

    ИзменитьРеквизиты(НовыеРеквизиты);

    // 2. добавляем колонки из ТабВКоде в элемент ТабНаФорме

    Для Каждого Колонка Из ТабВКоде.Колонки Цикл

    НовыйЭлемент = Элементы.Добавить(
    ТабРеквизит + "_" + Колонка.Имя, Тип("ПолеФормы"), Элементы[ТабНаФорме]
    );
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = ТабРеквизит + "." + Колонка.Имя;
    КонецЦикла;

    // 3. наконец, передаём данные из ТабВКоде в ТабРеквизит

    ЗначениеВРеквизитФормы(ТабВКоде, ТабРеквизит);

    // готово!

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

    &НаСервере
    Процедура СоздатьТаблицуНаФормеСервера()
    ДатаНачала = Объект.ДатаВыборка;
    Выборка = Документы.РеализацияПродукции.Выбрать();

    ТабВКоде = Новый ТаблицаЗначений;
    ОписаниеСтрока = Новый ОписаниеТипов("Строка");
    ОписаниеЧисло = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,3));
    ОписаниеДата = Новый ОписаниеТипов("Дата");

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

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

    ВывестиТаблицуЗначенийВКодеВТаблицуНаФорме(ТабВКоде,"ТабРеквизит1","ТабНаФорме1");

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

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

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

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

    &НаКлиенте
    Процедура Очистить(Команда)
    ТабРеквизит1.Очистить();
    Объект.ДатаВыборка = ";
    Объект.Клиент = ";
    Объект.СуммаДолга = ";
    КонецПроцедуры
```
---
В процедуру команды просто добавь в начало...

&НаКлиенте
Процедура ПолучитьИнфо(Команда)
ТабРеквизит.Очистить();

    СоздатьТаблицуНаФормеСервера();
    Объект.СуммаДолга = ПолучитьДолгКлиента(Объект.Клиент);

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

У меня была абсолютно такая же ошибка.....
---
Нуууу - это совсем другая история ....
К пуговицам претензии есть? (то есть к неуникальности реквизита? )

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

&НаКлиенте
Процедура ПолучитьИнфо(Команда)
ТабРеквизит.Очистить();

    СоздатьТаблицуНаФормеСервера();
    Объект.СуммаДолга = ПолучитьДолгКлиента(Объект.Клиент);

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

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

На это стал ругаться
---
А мы должны фантазировать ? Как оно у вас ругается...?
---
И я не совсем понимаю, зачем вы умея пользоваться запросами используете подобный отбор...
Запросы то быстрее...
---
Нуууу - это совсем другая история ....
К пуговицам претензии есть? (то есть к неуникальности реквизита? )

И что значит ваше "Не помогло" , или вы хотите одну таблетку и от головной боли и от поноса?
---
Мне посоветовали сделать отбор по контрагенту. Вот и делаю.
---
Отбор по контрагенту надо делать в запросе
---
неверное значение параметра
---
Ну мы же не знаем вашей конфигурации...
И ясно не знаем всех реквизитов документа РеализацияПродукции...
Проверяйте!

Но по любому рекомендую запрос а не отбор
---
Спасибо, сделал запрос работает. Благодарен за вашу критику по делу!)
Теперь есть одно "но", новая ошибка.
{Обработка.ПолучитьДолгКлиентов.Форма.Форма.Форма(30)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
 ИзменитьРеквизиты(НовыеРеквизиты);
по причине:
Неуникальное имя реквизита. Имя: "Ссылка"
Ниже предоставил скрин.
---
что-то скрин с текстом совсем не сходится....
Лучше весь текст программы и скрин ошибки
---
Вот пожалуйста
---
Получить исправить ошибку!) в запросе была ошибка)
user614822, спасибо за советы и критику)
---
"Клиент" - это должно быть Имя реквизита документа РеализацияПродукции.
А Объект.Клиент должен быть заполнен соответственно ссылкой на тот справочник, который указан в данных этого реквизита в Документе РеализацияПродукции
---
Проверьте все в отладке и вам все сразу стане ясно
---
У кого нибудь была такая ошибка:
{Обработка.ЗагрузкаНоменклатуры.Форма.Форма.Форма(105)}: Ошибка при вызове метода контекста (ЗначениеЗаполнено)
    Если Товар.Пустая() И ЗначениеЗаполнено(НаименованиеТовара) И ЗначениеЗаполнено(КодТовара)И ЗначениеЗаполнено(Фирма) И ЗначениеЗаполнено(Type_of_production)
по причине:
Проверка мутабельных значений на заполненность не поддерживается
---
Переменная с типом Булево бывает только Истина или Ложь, проверять переменную на заполненность некорректно, о чем платформа вам и говорит. Проверять можно только как

```1c
    Если Type_of_production Тогда
    ...
    Иначе
    ...
    КонецЕсли;
```
---
Смотрю у вас был отдельный диалог по ошибке, все немного запутаннее вышло)