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

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ЗначениеЗаполнено(НеобходимыеПродукты) Тогда
    НеобходимыеПродукты.Очистить();
    ЗапросТаблЧ();
    Иначе
    ЗапросТаблЧ();
    КонецЕсли;

    //тут не относящийся к вопросу код

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

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

    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("СсылкаБлюдо", Блюдо.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();

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

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

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

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ЗначениеЗаполнено(НеобходимыеПродукты) Тогда
    КолонкаСМестомХранения = НеобходимыеПродукты.ВыгрузитьКолонку("МестоХранения"); //добавил тут
    НеобходимыеПродукты.Очистить();
    ЗапросТаблЧ();
    НеобходимыеПродукты.ЗагрузитьКолонку(КолонкаСМестомХранения, "МестоХранения"); // и тут
    Иначе
    ЗапросТаблЧ();
    КонецЕсли;
```

Вроде работает, надеюсь в будущем кто вдруг случайно найдёт эту темку в гугле это чем-то ему поможет)
---
Забыл отписать, но в общем я ещё утром решил проблему добавив такие строчки кода:

```1c
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ЗначениеЗаполнено(НеобходимыеПродукты) Тогда
    КолонкаСМестомХранения = НеобходимыеПродукты.ВыгрузитьКолонку("МестоХранения"); //добавил тут
    НеобходимыеПродукты.Очистить();
    ЗапросТаблЧ();
    НеобходимыеПродукты.ЗагрузитьКолонку(КолонкаСМестомХранения, "МестоХранения"); // и тут
    Иначе
    ЗапросТаблЧ();
    КонецЕсли;
```

Вроде работает, надеюсь в будущем кто вдруг случайно найдёт эту темку в гугле это чем-то ему поможет)