УТ11.1 УФ.
Ребята, подскажите пожалуйста - у меня вот такая загвоздка случилась. Уже всю голову сломал. Сделал документ, в табличной части которого есть динамические колонки, которые добавляются по количеству складов и контрагентов (этакая матрица для распределения товаров). Никак не получается вывести итог для динамически создаваемых колонок:

```1c
    Процедура СформироватьСеткуНаСервере()
    Если Объект.СписокИнвойсов.Количество()<1 Тогда
    Сообщить("Список документов для формирования сетки пуст! Формирование сетки невозможно!");
    Возврат;
    КонецЕсли;

    Если ДобавленныеЭлементы.Количество()>0 Тогда
    Для Каждого ДобЭлемент Из ДобавленныеЭлементы Цикл
    Элементы.Удалить(Элементы[ДобЭлемент.Значение]);
    КонецЦикла;
    ДобавленныеЭлементы.Очистить();
    КонецЕсли;

    Если ДобавленныеРеквизиты.Количество()>0 Тогда
    ИзменитьРеквизиты(,ДобавленныеРеквизиты.ВыгрузитьЗначения());
    ДобавленныеРеквизиты.Очистить();
    КонецЕсли;

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

    Для Каждого Стр Из Объект.СписокСкладов Цикл
    ИндМагазина = Стр.Склад.ДополнительныеРеквизиты[0].Значение;
    ИмяСклада = Стр.Склад.Наименование;
    нРеквизиты.Добавить(Новый РеквизитФормы(ИндМагазина,Новый ОписаниеТипов("Число"),"Объект.Товары", ИндМагазина,Истина));
    ДобавленныеРеквизиты.Добавить("Объект.Товары." + ИндМагазина);
    КонецЦикла;

    Для Каждого Стр1 Из Объект.СписокКонтрагентов Цикл
    ИндПартнера = Стр1.Партнер.ДополнительныеРеквизиты[0].Значение;
    ИмяПартнера = Стр1.Партнер.Наименование;
    нРеквизиты.Добавить(Новый РеквизитФормы(ИндПартнера,Новый ОписаниеТипов("Число"),"Объект.Товары", ИндПартнера,Истина));
    ДобавленныеРеквизиты.Добавить("Объект.Товары." + ИндПартнера);
    КонецЦикла;

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

    Для Каждого нРеквизит Из нРеквизиты Цикл
    нЭлемент = Элементы.Добавить(нРеквизит.Имя, Тип("ПолеФормы"),Элементы.Товары);
    нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    ПутьКОбъектуДляЭлемента = СокрЛП("Объект.Товары."+нРеквизит.Имя);
    нЭлемент.ПутьКДанным = ПутьКОбъектуДляЭлемента;
    нЭлемент.Доступность = Истина;
    нЭлемент.Ширина = 20;
    ЦветПоляТаблицы = Новый Цвет(0,255, 0);
    нЭлемент.ЦветФона = ЦветПоляТаблицы;
    нЭлемент.УстановитьДействие("ПриИзменении","ОбработчикПриИзмененииКолонкиКоличества");
    ДобавленныеЭлементы.Добавить(нРеквизит.Имя);
    КонецЦикла;

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

    &НаКлиенте
    Процедура СформироватьСетку()
    СформироватьСеткуНаСервере();
    КонецПроцедуры
```

Вот сама процедура. Отлично добавляет колонки (нюансы по изменению количества складов опустим, они учтены в дальнейшем при сохранении результатов)

Что-то ничего придумать не могу с итогом по добавляемом колонкам. Подскажите пожалуйста.
---
По поводу ИзменитьРеквизиты - я погорячился, простите. Не обратил внимание, что в этом участке вы очищаете старые колонки/реквизиты. У вас всё правильно написано.

Попробуйте такой вариант
```1c
    &НаСервере
    Процедура СоздатьДинамическуюКолонку(ИмяКолонки)

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

    нРеквизит = Новый РеквизитФормы(ИмяКолонки,Новый ОписаниеТипов("Число"),"Товары");
    ДобавленныеРеквизиты.Добавить("Товары."+нРеквизит.Имя);
    нРеквизиты.Добавить(нРеквизит);

    нРеквизит = Новый РеквизитФормы("Итого"+ИмяКолонки,Новый ОписаниеТипов("Число"),");
    ДобавленныеРеквизиты.Добавить(нРеквизит.Имя);
    нРеквизиты.Добавить(нРеквизит);

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

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

    &НаСервере
    Процедура СформироватьСеткуНаСервере()
    Если Объект.СписокИнвойсов.Количество()<1 Тогда
    Сообщить("Список документов для формирования сетки пуст! Формирование сетки невозможно!");
    Возврат;
    КонецЕсли;

    Если ДобавленныеЭлементы.Количество()>0 Тогда
    Для Каждого ДобЭлемент Из ДобавленныеЭлементы Цикл
    Элементы.Удалить(Элементы[ДобЭлемент.Значение]);
    КонецЦикла;
    ДобавленныеЭлементы.Очистить();
    КонецЕсли;

    Если ДобавленныеРеквизиты.Количество()>0 Тогда
    ИзменитьРеквизиты(,ДобавленныеРеквизиты.ВыгрузитьЗначения());
    ДобавленныеРеквизиты.Очистить();
    КонецЕсли;

    Для Каждого Стр Из Объект.СписокСкладов Цикл
    ИндМагазина = Стр.Склад.ДополнительныеРеквизиты[0].Значение;
    ИмяСклада = Стр.Склад.Наименование;
    СоздатьДинамическуюКолонку(ИндМагазина);
    КонецЦикла;

    Для Каждого Стр1 Из Объект.СписокКонтрагентов Цикл
    ИндПартнера = Стр1.Партнер.ДополнительныеРеквизиты[0].Значение;
    ИмяПартнера = Стр1.Партнер.Наименование;
    СоздатьДинамическуюКолонку(ИндПартнера);
    КонецЦикла;

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

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

    ТД = Элементы.Товары.ТекущиеДанные;
    Сверка = ТД.Количество;
    Сток = ТД.КоличествоСток;

    СверкаР = Сверка + Сток;

    ИмяРеквизита = Элемент.Имя;

    ЭтаФорма["Итого"+ИмяРеквизита] = Товары.Итог(ИмяРеквизита);

    Для каждого КлючЗначение Из ДобавленныеРеквизиты Цикл
    Если Найти(КлючЗначение.Значение,"Товары.") = 1 Тогда
    СверкаР = СверкаР - ТД[СтрЗаменить(КлючЗначение.Значение,"Товары.",")];
    КонецЕсли;
    КонецЦикла;

    ТД.КоличествоСверка = СверкаР;

    Если Элементы.Товары.ТекущиеДанные.КоличествоСверка<0 Тогда
    ЦветПоляТаблицы = Новый Цвет (255,0,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    Сообщить("Данные в поле 'Количество для сверки' не могут быть отрицательным числом");
    Возврат
    Иначе
    ЦветПоляТаблицы = Новый Цвет (0,255,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    КонецЕсли;

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

Тут Товары - это реквизит формы с типом "таблица значений". Этот вариант должен быть полностью рабочий.
---
А в таблице самой на форме подвал есть?
---
Да, там подвал есть - я добавил, чтобы общее количество распределяемого товара видно было
---
ДобавленныеЭлементы.Добавить(Новый РеквизитФормы("ИтогоСумма"));

Элементы.КолонкаТаблицы.ПутьКДаннымПодвала = "ИтогоСумма";
---
Прости, под вечер туплю уже - куда вставить эти строчки?
---
1. В Элемент.Таблица должна быть галочка "Подвал"
2. Программно создаешь реквизиты "Итого"+ИмяКолонки.
3. В каждой колонке пишешь

```1c
    нЭлемент.ПутьКДанным = ПутьКОбъектуДляЭлемента;
    нЭлемент.ПутьКДаннымПодвала = "Итого"+нРеквизит.Имя;
```

Далее при обновлении данных (при заполнении, при изменении) заполняешь эти реквизиты

```1c
    ЭтаФорма["Итого"+нРеквизит.Имя] = Таблица1.Итог(нРеквизит.Имя);
```

Как-то так
---
Спасибо дружище. Счас попробую
---
Вероятно для каждого нЭлемент требуется путь к данным подвала.
---
Вот описание обработчика события:

```1c
    &НаКлиенте
    Процедура ОбработчикПриИзмененииКолонкиКоличества(Элемент)

    ТД = Элементы.Товары.ТекущиеДанные;
    Сверка = ТД.Количество;
    Сток = ТД.КоличествоСток;

    СверкаР = Сверка;

    Для Сч = 1 По ДобавленныеРеквизиты.Количество() Цикл
    ИмяРеквизита = СтрЗаменить(ДобавленныеРеквизиты[Сч-1].Значение,"Объект.Товары.",");
    СверкаР = СверкаР + Сток - ТД[ИмяРеквизита];
    ЭтаФорма["Итого"+ИмяРеквизита] = ТД.Итог(ИмяРеквизита);
    КонецЦикла;

    ТД.КоличествоСверка = СверкаР;

    Если Элементы.Товары.ТекущиеДанные.КоличествоСверка<0 Тогда
    ЦветПоляТаблицы = Новый Цвет (255,0,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    Сообщить("Данные в поле 'Количество для сверки' не могут быть отрицательным числом");
    Возврат
    Иначе
    ЦветПоляТаблицы = Новый Цвет (0,255,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    КонецЕсли;
    КонецПроцедуры
```

А так исправил добавление реквизитов в массив:

```1c
    Для Каждого нРеквизит Из нРеквизиты Цикл
    нЭлемент = Элементы.Добавить(нРеквизит.Имя, Тип("ПолеФормы"),Элементы.Товары);
    нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    ПутьКОбъектуДляЭлемента = СокрЛП("Объект.Товары."+нРеквизит.Имя);
    нЭлемент.ПутьКДанным = ПутьКОбъектуДляЭлемента;
    нЭлемент.Доступность = Истина;
    нЭлемент.Ширина = 20;
    //zsv 30-10-2020
    нЭлемент.ПутьКДаннымПодвала = "Итого"+нРеквизит.Имя;
    //zsv 30-10-2020
    ЦветПоляТаблицы = Новый Цвет(0,255, 0);
    нЭлемент.ЦветФона = ЦветПоляТаблицы;
    нЭлемент.УстановитьДействие("ПриИзменении","ОбработчикПриИзмененииКолонкиКоличества");
    ДобавленныеЭлементы.Добавить(нРеквизит.Имя);
    КонецЦикла;
```
---
Выкинул ошибку зараза...
{Документ.zsv_РаспредСетка.Форма.ФормаДокумента.Форма(451)}: Ошибка при установке значения атрибута контекста (ПутьКДаннымПодвала)
  нЭлемент.ПутьКДаннымПодвала = "Итого"+нРеквизит.Имя;
по причине:
Недопустимое значение
---
Всё должно работать. Вот рабочий пример

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ИмяКолонки = "Колонка1";

    нРеквизиты = Новый Массив;
    нРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонки,Новый ОписаниеТипов("Число"),"Таблица1"));
    нРеквизиты.Добавить(Новый РеквизитФормы("Итого"+ИмяКолонки,Новый ОписаниеТипов("Число"),"));
    ИзменитьРеквизиты(нРеквизиты);

    нЭлемент = Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"),Элементы.Таблица1);
    нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    нЭлемент.ПутьКДанным = "Таблица1."+ИмяКолонки;
    нЭлемент.ПутьКДаннымПодвала = "Итого"+ИмяКолонки;
    нЭлемент.УстановитьДействие("ПриИзменении","ОбработчикПриИзмененииКолонкиКоличества");
    КонецПроцедуры

    &НаКЛиенте
    Процедура ОбработчикПриИзмененииКолонкиКоличества()
    ИмяКолонки = "Колонка1";

    ЭтаФорма["Итого"+ИмяКолонки] = Таблица1.Итог(ИмяКолонки);
    КонецПроцедуры
```
---
Спасибо огромное за помощь. Уже буду на работе и попробую
---
```1c
    нРеквизиты = Новый Массив;
    нРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонки,Новый ОписаниеТипов("Число"),"Таблица1"));
    нРеквизиты.Добавить(Новый РеквизитФормы("Итого"+ИмяКолонки,Новый ОписаниеТипов("Число"),"));
    ИзменитьРеквизиты(нРеквизиты);

    нЭлемент = Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"),Элементы.Таблица1);
    нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    нЭлемент.ПутьКДанным = "Таблица1."+ИмяКолонки;
    нЭлемент.ПутьКДаннымПодвала = "Итого"+ИмяКолонки;
    нЭлемент.УстановитьДействие("ПриИзменении","ОбработчикПриИзмененииКолонкиКоличества");
```

Точно "Итого" а не "Итог"? Ругается :
"по причине:
Недопустимое значение"

Вынес в отдельную процедуру добавление динамической колонки:

```1c
    &НаСервере
    Процедура СоздатьДинамическуюКолонку(ИмяКолонки)

    нРеквизиты = Новый Массив;
    нРеквизиты.Добавить(Новый РеквизитФормы(ИмяКолонки,Новый ОписаниеТипов("Число"),"Объект.Товары"));
    нРеквизиты.Добавить(Новый РеквизитФормы("Итого"+ИмяКолонки,Новый ОписаниеТипов("Число"),"));

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

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

    &НаСервере
    Процедура СформироватьСеткуНаСервере()
    Если Объект.СписокИнвойсов.Количество()<1 Тогда
    Сообщить("Список документов для формирования сетки пуст! Формирование сетки невозможно!");
    Возврат;
    КонецЕсли;

    Если ДобавленныеЭлементы.Количество()>0 Тогда
    Для Каждого ДобЭлемент Из ДобавленныеЭлементы Цикл
    Элементы.Удалить(Элементы[ДобЭлемент.Значение]);
    КонецЦикла;
    ДобавленныеЭлементы.Очистить();
    КонецЕсли;

    Если ДобавленныеРеквизиты.Количество()>0 Тогда
    ИзменитьРеквизиты(,ДобавленныеРеквизиты.ВыгрузитьЗначения());
    ДобавленныеРеквизиты.Очистить();
    КонецЕсли;

    Для Каждого Стр Из Объект.СписокСкладов Цикл
    ИндМагазина = Стр.Склад.ДополнительныеРеквизиты[0].Значение;
    ИмяСклада = Стр.Склад.Наименование;
    СоздатьДинамическуюКолонку(ИндМагазина);
    ДобавленныеРеквизиты.Добавить("Объект.Товары." + ИндМагазина);
    КонецЦикла;

    Для Каждого Стр1 Из Объект.СписокКонтрагентов Цикл
    ИндПартнера = Стр1.Партнер.ДополнительныеРеквизиты[0].Значение;
    ИмяПартнера = Стр1.Партнер.Наименование;
    СоздатьДинамическуюКолонку(ИндПартнера);
    ДобавленныеРеквизиты.Добавить("Объект.Товары." + ИндПартнера);
    КонецЦикла;

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

    &НаКлиенте
    Процедура ОбработчикПриИзмененииКолонкиКоличества(Элемент)

    ТД = Элементы.Товары.ТекущиеДанные;
    Сверка = ТД.Количество;
    Сток = ТД.КоличествоСток;

    СверкаР = Сверка + Сток;

    Для Сч = 1 По ДобавленныеРеквизиты.Количество() Цикл
    ИмяРеквизита = СтрЗаменить(ДобавленныеРеквизиты[Сч-1].Значение,"Объект.Товары.",");
    СверкаР = СверкаР - ТД[ИмяРеквизита];
    ЭтаФорма["Итого"+ИмяРеквизита] = ТД.Итог(ИмяРеквизита);
    КонецЦикла;

    ТД.КоличествоСверка = СверкаР;

    Если Элементы.Товары.ТекущиеДанные.КоличествоСверка<0 Тогда
    ЦветПоляТаблицы = Новый Цвет (255,0,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    Сообщить("Данные в поле 'Количество для сверки' не могут быть отрицательным числом");
    Возврат
    Иначе
    ЦветПоляТаблицы = Новый Цвет (0,255,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    КонецЕсли;

    КонецПроцедуры
```
---
нЭлемент.ПутьКДаннымПодвала = "Объект.Товары.Итого"+ИмяКолонки;Да нет же. Просто "Итого"+ИмяКолонки, Никаких "Объект.Товары". Поэтому и ругается.

И поправьте

```1c
    //ИзменитьРеквизиты(,ДобавленныеРеквизиты.ВыгрузитьЗначения()); //неправильно
    ИзменитьРеквизиты(ДобавленныеРеквизиты.ВыгрузитьЗначения());//правильно
```

В остальном вроде всё верно. Мой пример - рабочий, я проверил.
---
Дружище. Спасибо тебе огромное. Я решил эту задачу. Чуть исправил способ заполнения, но теперь все работает. Вот рабочий текст кода:

```1c
    &НаСервере
    Процедура СформироватьСеткуНаСервере()
    Если Объект.СписокИнвойсов.Количество()<1 Тогда
    Сообщить("Список документов для формирования сетки пуст! Формирование сетки невозможно!");
    Возврат;
    КонецЕсли;

    Если ДобавленныеЭлементы.Количество()>0 Тогда
    Для Каждого ДобЭлемент Из ДобавленныеЭлементы Цикл
    Элементы.Удалить(Элементы[ДобЭлемент.Значение]);
    КонецЦикла;
    ДобавленныеЭлементы.Очистить();
    КонецЕсли;

    Если ДобавленныеРеквизиты.Количество()>0 Тогда
    ИзменитьРеквизиты(,ДобавленныеРеквизиты.ВыгрузитьЗначения());
    ДобавленныеРеквизиты.Очистить();
    КонецЕсли;

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

    СЗ = Новый СписокЗначений;

    Для Каждого Стр Из Объект.СписокСкладов Цикл
    СЗ.Добавить(СокрЛП(Стр.КодСклада));
    КонецЦикла;

    Для Каждого Стр1 Из Объект.СписокКонтрагентов Цикл
    СЗ.Добавить(СокрЛП(Стр1.КодСетки));
    КонецЦикла;

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

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

    Для Каждого Стр Из СЗ Цикл
    ИмяКолонки = СокрЛП(Стр.Значение);
    нЭлемент = Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"),Элементы.Товары);
    нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    нЭлемент.ПутьКДанным = СокрЛП("Объект.Товары."+ИмяКолонки);
    нЭлемент.ПутьКДаннымПодвала = "Итого"+ИмяКолонки;
    нЭлемент.Доступность = Истина;
    нЭлемент.Ширина = 20;
    ЦветПоляТаблицы = Новый Цвет(0,255, 0);
    нЭлемент.ЦветФона = ЦветПоляТаблицы;
    нЭлемент.УстановитьДействие("ПриИзменении","ОбработчикПриИзмененииКолонкиКоличества");
    ДобавленныеЭлементы.Добавить(ИмяКолонки);
    КонецЦикла;

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

    &НаКлиенте
    Процедура ОбработчикПриИзмененииКолонкиКоличества(Элемент)
    ТД = Элементы.Товары.ТекущиеДанные;
    Сверка = ТД.Количество;
    Сток = ТД.КоличествоСток;
    СверкаР = Сверка + Сток;

    Для Сч = 1 По ДобавленныеРеквизиты.Количество() Цикл
    ИмяРеквизита = СтрЗаменить(ДобавленныеРеквизиты[Сч-1].Значение,"Объект.Товары.",");
    СверкаР = СверкаР - ТД[ИмяРеквизита];
    ЭтаФорма["Итого"+ИмяРеквизита] = Объект.Товары.Итог(ИмяРеквизита);
    //ЭтаФорма["Итого"+ИмяРеквизита] = ТД.Итог(ИмяРеквизита);
    КонецЦикла;
    ТД.КоличествоСверка = СверкаР;

    Если Элементы.Товары.ТекущиеДанные.КоличествоСверка<0 Тогда
    ЦветПоляТаблицы = Новый Цвет (255,0,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    Сообщить("Данные в поле 'Количество для сверки' не могут быть отрицательным числом");
    Возврат
    Иначе
    ЦветПоляТаблицы = Новый Цвет (0,255,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    КонецЕсли;
    КонецПроцедуры
```
---
Да, при единичном случае добавления колонки работает. Но вот при множественном - что-то не получается у меня
---
По поводу ИзменитьРеквизиты - я погорячился, простите. Не обратил внимание, что в этом участке вы очищаете старые колонки/реквизиты. У вас всё правильно написано.

Попробуйте такой вариант
```1c
    &НаСервере
    Процедура СоздатьДинамическуюКолонку(ИмяКолонки)

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

    нРеквизит = Новый РеквизитФормы(ИмяКолонки,Новый ОписаниеТипов("Число"),"Товары");
    ДобавленныеРеквизиты.Добавить("Товары."+нРеквизит.Имя);
    нРеквизиты.Добавить(нРеквизит);

    нРеквизит = Новый РеквизитФормы("Итого"+ИмяКолонки,Новый ОписаниеТипов("Число"),");
    ДобавленныеРеквизиты.Добавить(нРеквизит.Имя);
    нРеквизиты.Добавить(нРеквизит);

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

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

    &НаСервере
    Процедура СформироватьСеткуНаСервере()
    Если Объект.СписокИнвойсов.Количество()<1 Тогда
    Сообщить("Список документов для формирования сетки пуст! Формирование сетки невозможно!");
    Возврат;
    КонецЕсли;

    Если ДобавленныеЭлементы.Количество()>0 Тогда
    Для Каждого ДобЭлемент Из ДобавленныеЭлементы Цикл
    Элементы.Удалить(Элементы[ДобЭлемент.Значение]);
    КонецЦикла;
    ДобавленныеЭлементы.Очистить();
    КонецЕсли;

    Если ДобавленныеРеквизиты.Количество()>0 Тогда
    ИзменитьРеквизиты(,ДобавленныеРеквизиты.ВыгрузитьЗначения());
    ДобавленныеРеквизиты.Очистить();
    КонецЕсли;

    Для Каждого Стр Из Объект.СписокСкладов Цикл
    ИндМагазина = Стр.Склад.ДополнительныеРеквизиты[0].Значение;
    ИмяСклада = Стр.Склад.Наименование;
    СоздатьДинамическуюКолонку(ИндМагазина);
    КонецЦикла;

    Для Каждого Стр1 Из Объект.СписокКонтрагентов Цикл
    ИндПартнера = Стр1.Партнер.ДополнительныеРеквизиты[0].Значение;
    ИмяПартнера = Стр1.Партнер.Наименование;
    СоздатьДинамическуюКолонку(ИндПартнера);
    КонецЦикла;

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

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

    ТД = Элементы.Товары.ТекущиеДанные;
    Сверка = ТД.Количество;
    Сток = ТД.КоличествоСток;

    СверкаР = Сверка + Сток;

    ИмяРеквизита = Элемент.Имя;

    ЭтаФорма["Итого"+ИмяРеквизита] = Товары.Итог(ИмяРеквизита);

    Для каждого КлючЗначение Из ДобавленныеРеквизиты Цикл
    Если Найти(КлючЗначение.Значение,"Товары.") = 1 Тогда
    СверкаР = СверкаР - ТД[СтрЗаменить(КлючЗначение.Значение,"Товары.",")];
    КонецЕсли;
    КонецЦикла;

    ТД.КоличествоСверка = СверкаР;

    Если Элементы.Товары.ТекущиеДанные.КоличествоСверка<0 Тогда
    ЦветПоляТаблицы = Новый Цвет (255,0,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    Сообщить("Данные в поле 'Количество для сверки' не могут быть отрицательным числом");
    Возврат
    Иначе
    ЦветПоляТаблицы = Новый Цвет (0,255,0);
    Элементы.Товары.ТекущийЭлемент.ЦветФона = ЦветПоляТаблицы;
    КонецЕсли;

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

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

нЭлемент.ПутьКДаннымПодвала = СокрЛП("Объект.Товары.Итог")+нРеквизит.Имя;