diff --git a/public/bsp-zagruzka-iz-faila/19.png b/public/bsp-zagruzka-iz-faila/19.png
new file mode 100644
index 0000000..8e000b0
Binary files /dev/null and b/public/bsp-zagruzka-iz-faila/19.png differ
diff --git a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md
index 3e9b41c..ef18b2a 100644
--- a/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md
+++ b/src/content/docs/knowledge-base/Общие/(БСП) Стандартные подсистемы/Загрузка данных из файла/3. Загрузка данных в табличную часть.md
@@ -13,6 +13,73 @@ slug: общие-бсп-стандартные-подсистемы-загруз
Макет создается на уровне объекта и должен обязательно иметь имя, созданное по шаблону **ЗагрузкаИзФайла<ИмяТабличнойЧасти>**. В нем настраиваем вид шапки таблицы **именя ячеек которой должны соответствовать именам реквизитов нужной табличной части**.
+## ВАЖНО
+
+
+
+Если в макете есть колонки, которые являются реквизитами какой-то колонки целевой **табличной части**, то нужно для ячеек указывать **параметры расшифровки**. Например, есть макет с именами колонок:
+- **Артикул**
+- **Наименование**
+- ...
+- ...
+
+По которым мы пытаемся подобрать значение реквизита ТЧ `Номенклатура`:
+
+```bsl
+СтрокаНоменклатуры = ТаблицаНоменклатуры.Найти(СтрокаЗагружаемыхДанных.Идентификатор, "Идентификатор");
+
+Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
+
+...
+
+Если СтрокаНоменклатуры <> Неопределено Тогда
+
+ Если СтрокаНоменклатуры.КоличествоСтрок = 1 Тогда
+ СтрокаТабличнойЧасти.Номенклатура = СтрокаНоменклатуры.Номенклатура;
+
+ // ТУТ ПОЯВИЛАСЬ НЕДОНОЗНАЧНОСТЬ
+ ИначеЕсли СтрокаНоменклатуры.КоличествоСтрок > 1 Тогда
+ СтрокаНеоднозначности = СписокНеоднозначностей.Добавить();
+ СтрокаНеоднозначности.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
+ СтрокаНеоднозначности.Колонка = "Номенклатура"; // ИМЯ КОЛОНКИ ТАБЛИЧНОЙ ЧАСТИ, НЕ ТАБ.ДОК
+ КонецЕсли;
+
+КонецЕсли;
+
+...
+
+КонецПроцедуры
+
+```
+
+Для того, чтобы в аргументе `ЗагружаемыеЗначенияСтрока` процедуры `ЗаполнитьСписокНеоднозначностей` были добавлены значения колонок `Артикул` и `Наименование` таб.док нужно для них указать расшифровку, что эти колонки относятся именно к номенклатуре.
+
+Если не указать параметры расшифровки для колонок, то при попытке считать их из аргумента `ЗагружаемыеЗначенияСтрока` будет сыпаться ошибка.
+
+```bsl
+Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
+
+...
+
+Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда
+ ТекстГде = " ГДЕ СправочникНоменклатура.Наименование = &Наименование";
+ Запрос.УстановитьПараметр("Наименование", ЗагружаемыеЗначенияСтрока.Наименование);
+КонецЕсли;
+
+Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Артикул) Тогда
+ Если ПустаяСтрока(ТекстГде) Тогда
+ ТекстГде = " ГДЕ СправочникНоменклатура.Артикул = &Артикул";
+ Иначе
+ ТекстГде = ТекстГде + " ИЛИ СправочникНоменклатура.Артикул = &Артикул";
+ КонецЕсли;
+
+ Запрос.УстановитьПараметр("Артикул", ЗагружаемыеЗначенияСтрока.Артикул);
+КонецЕсли;
+
+...
+
+```
+
>Если табличная часть одна, допускается именовать макет просто **"ЗагрузкаИзФайла"**

@@ -140,6 +207,172 @@ slug: общие-бсп-стандартные-подсистемы-загруз
Пример реализации
+
+```bsl
+// АдресЗагружаемыхДанных - Строка - адрес временного хранилища с таблицей значений, в которой
+// находятся загруженные данные из файла. Состав колонок:
+// * Идентификатор - Число - порядковый номер строки.
+// Остальные колонки соответствуют колонкам макета ЗагрузкаИзФайла.
+// АдресТаблицыСопоставления - Строка - адрес временного хранилища с пустой таблицей значений,
+// являющейся копией табличной части документа,
+// которую необходимо заполнить из таблицы АдресЗагружаемыхДанных.
+// СписокНеоднозначностей - ТаблицаЗначений - список неоднозначных значений:
+// * Колонка - Строка - имя колонки, в которой была обнаружена неоднозначность.
+// * Идентификатор - Число - идентификатор строки, в которой была обнаружена неоднозначность.
+// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные.
+// ДополнительныеПараметры - Произвольный - любые дополнительные сведения.
+Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
+
+
+ ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных);
+ ТабличнаяЧасть = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления);
+
+ МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
+
+ Запрос = Новый Запрос;
+ Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ВЫРАЗИТЬ(ДанныеДляСопоставления.Артикул КАК СТРОКА(50)) КАК Артикул,
+ | ВЫРАЗИТЬ(ДанныеДляСопоставления.ЕдиницаИзмерения КАК СТРОКА(30)) КАК ЕдиницаИзмерения,
+ | ВЫРАЗИТЬ(ДанныеДляСопоставления.Номенклатура КАК СТРОКА(300)) КАК Номенклатура,
+ | ДанныеДляСопоставления.Идентификатор КАК Идентификатор
+ |ПОМЕСТИТЬ ВТДанныеДляСопоставления
+ |ИЗ
+ | &ЗагружаемыеДанные КАК ДанныеДляСопоставления
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | СправочникНоменклатура.Ссылка КАК Номенклатура,
+ | СправочникНоменклатура.Артикул КАК Артикул,
+ | ВТДанныеДляСопоставления.Идентификатор КАК Идентификатор
+ |ПОМЕСТИТЬ ВТСопоставленнаяНоменклатураПоАртикулу
+ |ИЗ
+ | ВТДанныеДляСопоставления КАК ВТДанныеДляСопоставления
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
+ | ПО ВТДанныеДляСопоставления.Артикул = СправочникНоменклатура.Артикул
+ | И (ВТДанныеДляСопоставления.Артикул <> """")
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | ВТДанныеДляСопоставления.Номенклатура КАК Номенклатура,
+ | ВТДанныеДляСопоставления.Идентификатор КАК Идентификатор
+ |ПОМЕСТИТЬ ВТДанныеДляСопоставленияПоНаименованию
+ |ИЗ
+ | ВТДанныеДляСопоставления КАК ВТДанныеДляСопоставления
+ | ЛЕВОЕ СОЕДИНЕНИЕ ВТСопоставленнаяНоменклатураПоАртикулу КАК ВТСопоставленнаяНоменклатураПоАртикулу
+ | ПО ВТДанныеДляСопоставления.Идентификатор = ВТСопоставленнаяНоменклатураПоАртикулу.Идентификатор
+ |ГДЕ
+ | ВТСопоставленнаяНоменклатураПоАртикулу.Идентификатор ЕСТЬ NULL
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | СправочникНоменклатура.Ссылка КАК Номенклатура,
+ | ВТДанныеДляСопоставленияПоНаименованию.Идентификатор КАК Идентификатор
+ |ПОМЕСТИТЬ ВТСопоставленнаяНоменклатураПоНаименованию
+ |ИЗ
+ | ВТДанныеДляСопоставленияПоНаименованию КАК ВТДанныеДляСопоставленияПоНаименованию
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
+ | ПО ВТДанныеДляСопоставленияПоНаименованию.Номенклатура = СправочникНоменклатура.Наименование
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | МАКСИМУМ(СопоставленнаяНоменклатура.Номенклатура) КАК Номенклатура,
+ | СопоставленнаяНоменклатура.Идентификатор КАК Идентификатор,
+ | СУММА(СопоставленнаяНоменклатура.КоличествоСтрок) КАК КоличествоСтрок
+ |ИЗ
+ | (ВЫБРАТЬ
+ | ВТСопоставленнаяНоменклатураПоАртикулу.Номенклатура КАК Номенклатура,
+ | ВТСопоставленнаяНоменклатураПоАртикулу.Идентификатор КАК Идентификатор,
+ | 1 КАК КоличествоСтрок
+ | ИЗ
+ | ВТСопоставленнаяНоменклатураПоАртикулу КАК ВТСопоставленнаяНоменклатураПоАртикулу
+ |
+ | ОБЪЕДИНИТЬ ВСЕ
+ |
+ | ВЫБРАТЬ
+ | ВТСопоставленнаяНоменклатураПоНаименованию.Номенклатура,
+ | ВТСопоставленнаяНоменклатураПоНаименованию.Идентификатор,
+ | 1
+ | ИЗ
+ | ВТСопоставленнаяНоменклатураПоНаименованию КАК ВТСопоставленнаяНоменклатураПоНаименованию) КАК СопоставленнаяНоменклатура
+ |
+ |СГРУППИРОВАТЬ ПО
+ | СопоставленнаяНоменклатура.Идентификатор
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | ВТДанныеДляСопоставления.Идентификатор КАК Идентификатор,
+ | КОЛИЧЕСТВО(ВТДанныеДляСопоставления.ЕдиницаИзмерения) КАК КоличествоСтрок,
+ | МАКСИМУМ(УпаковкиЕдиницыИзмерения.Ссылка) КАК ЕдиницаИзмерения
+ |ИЗ
+ | ВТДанныеДляСопоставления КАК ВТДанныеДляСопоставления
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
+ | ПО ВТДанныеДляСопоставления.ЕдиницаИзмерения = УпаковкиЕдиницыИзмерения.Наименование
+ |
+ |СГРУППИРОВАТЬ ПО
+ | ВТДанныеДляСопоставления.Идентификатор";
+
+ Запрос.УстановитьПараметр("ЗагружаемыеДанные", ЗагружаемыеДанные);
+
+ РезультатыЗапроса = Запрос.ВыполнитьПакет();
+
+ ТаблицаНоменклатуры = РезультатыЗапроса.Получить(4).Выгрузить();
+ ТаблицаЕдиницИзмерения = РезультатыЗапроса.Получить(5).Выгрузить();
+
+ Для Каждого СтрокаЗагружаемыхДанных Из ЗагружаемыеДанные Цикл
+
+ СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
+ СтрокаТабличнойЧасти.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
+ СтрокаТабличнойЧасти.Цена = СтрокаЗагружаемыхДанных.Цена;
+
+ СтрокаНоменклатуры = ТаблицаНоменклатуры.Найти(СтрокаЗагружаемыхДанных.Идентификатор, "Идентификатор");
+
+ Если СтрокаНоменклатуры <> Неопределено Тогда
+
+ Если СтрокаНоменклатуры.КоличествоСтрок = 1 Тогда
+ СтрокаТабличнойЧасти.Номенклатура = СтрокаНоменклатуры.Номенклатура;
+ ИначеЕсли СтрокаНоменклатуры.КоличествоСтрок > 1 Тогда
+ СтрокаНеоднозначности = СписокНеоднозначностей.Добавить();
+ СтрокаНеоднозначности.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
+
+ // ИМЯ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ, НЕ ИМЯ ЯЧЕЙКИ ТАБ.ДОК
+ СтрокаНеоднозначности.Колонка = "Номенклатура";
+ КонецЕсли;
+
+ КонецЕсли;
+
+ СтрокаЕдиницыИзмерения = ТаблицаЕдиницИзмерения.Найти(СтрокаЗагружаемыхДанных.Идентификатор, "Идентификатор");
+
+ Если СтрокаЕдиницыИзмерения <> Неопределено Тогда
+
+ Если СтрокаЕдиницыИзмерения.КоличествоСтрок = 1 Тогда
+ СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаЕдиницыИзмерения.ЕдиницаИзмерения;
+ ИначеЕсли СтрокаЕдиницыИзмерения.КоличествоСтрок > 1 Тогда
+ СтрокаНеоднозначности = СписокНеоднозначностей.Добавить();
+ СтрокаНеоднозначности.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
+
+ // ИМЯ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ, НЕ ИМЯ ЯЧЕЙКИ ТАБ.ДОК
+ СтрокаНеоднозначности.Колонка = "ЕдиницаИзмерения";
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ПоместитьВоВременноеХранилище(ТабличнаяЧасть, АдресТаблицыСопоставления);
+
+КонецПроцедуры
+```
+
+
+
+
+Пример реализации из БСП
```bsl
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
@@ -273,6 +506,87 @@ slug: общие-бсп-стандартные-подсистемы-загруз
Пример реализации
+```bsl
+
+// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки.
+//
+// Параметры:
+// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные.
+// СписокНеоднозначностей - Массив из СправочникСсылка._ДемоНоменклатура - массив для заполнения с неоднозначными данными.
+// ИмяКолонки - Строка - имя колонки <ТАБЛИЧНОЙ ЧАСТИ>, в который возникла неоднозначность.
+// ЗагружаемыеЗначенияСтрока - Строка - загружаемые данные на основании которых возникла неоднозначность.
+// ДополнительныеПараметры - Произвольный - любые дополнительные сведения.
+//
+Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
+
+ // ВАЖНО
+ // В ЗагружаемыеЗначенияСтрока попадают только значения, где Имя или ПараметрРасшифровки = ИмяКолонки
+
+ Запрос = Новый Запрос;
+
+ Если ИмяКолонки = "Номенклатура" Тогда
+
+ ТекстГде = "";
+ Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда
+ ТекстГде = " ГДЕ СправочникНоменклатура.Наименование = &Наименование";
+ Запрос.УстановитьПараметр("Наименование", ЗагружаемыеЗначенияСтрока.Наименование);
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Артикул) Тогда
+ Если ПустаяСтрока(ТекстГде) Тогда
+ ТекстГде = " ГДЕ СправочникНоменклатура.Артикул = &Артикул";
+ Иначе
+ ТекстГде = ТекстГде + " ИЛИ СправочникНоменклатура.Артикул = &Артикул";
+ КонецЕсли;
+
+ Запрос.УстановитьПараметр("Артикул", ЗагружаемыеЗначенияСтрока.Артикул);
+ КонецЕсли;
+
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | СправочникНоменклатура.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.Номенклатура КАК СправочникНоменклатура " + ТекстГде;
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+ СписокНеоднозначностей.Добавить(Выборка.Ссылка);
+ КонецЦикла;
+
+ КонецЕсли;
+
+ Если ИмяКолонки = "ЕдиницаИзмерения" Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | УпаковкиЕдиницыИзмерения.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
+ |ГДЕ
+ | НЕ УпаковкиЕдиницыИзмерения.ПометкаУдаления
+ | И УпаковкиЕдиницыИзмерения.Наименование = &Наименование";
+
+ Запрос.УстановитьПараметр("Наименование", СокрЛП(ЗагружаемыеЗначенияСтрока.ЕдиницаИзмерения));
+
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ Пока Выборка.Следующий() Цикл
+ СписокНеоднозначностей.Добавить(Выборка.Ссылка);
+ КонецЦикла;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+```
+
+
+
+
+Пример реализации из БСП
+
```bsl
// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки.
//