upd
This commit is contained in:
parent
af2f7b8e7a
commit
bd940b1078
BIN
public/bsp-zagruzka-iz-faila/19.png
Normal file
BIN
public/bsp-zagruzka-iz-faila/19.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
@ -13,6 +13,73 @@ slug: общие-бсп-стандартные-подсистемы-загруз
|
||||
|
||||
Макет создается на уровне объекта и должен обязательно иметь имя, созданное по шаблону **ЗагрузкаИзФайла<ИмяТабличнойЧасти>**. В нем настраиваем вид шапки таблицы **именя ячеек которой должны соответствовать именам реквизитов нужной табличной части**.
|
||||
|
||||
## ВАЖНО
|
||||
|
||||

|
||||
|
||||
Если в макете есть колонки, которые являются реквизитами какой-то колонки целевой **табличной части**, то нужно для ячеек указывать **параметры расшифровки**. Например, есть макет с именами колонок:
|
||||
- **Артикул**
|
||||
- **Наименование**
|
||||
- ...
|
||||
- ...
|
||||
|
||||
По которым мы пытаемся подобрать значение реквизита ТЧ `Номенклатура`:
|
||||
|
||||
```bsl
|
||||
СтрокаНоменклатуры = ТаблицаНоменклатуры.Найти(СтрокаЗагружаемыхДанных.Идентификатор, "Идентификатор");
|
||||
|
||||
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
|
||||
|
||||
...
|
||||
|
||||
Если СтрокаНоменклатуры <> Неопределено Тогда
|
||||
|
||||
Если СтрокаНоменклатуры.КоличествоСтрок = 1 Тогда
|
||||
СтрокаТабличнойЧасти.Номенклатура = СтрокаНоменклатуры.Номенклатура;
|
||||
|
||||
// ТУТ ПОЯВИЛАСЬ НЕДОНОЗНАЧНОСТЬ
|
||||
ИначеЕсли СтрокаНоменклатуры.КоличествоСтрок > 1 Тогда
|
||||
СтрокаНеоднозначности = СписокНеоднозначностей.Добавить();
|
||||
СтрокаНеоднозначности.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
|
||||
СтрокаНеоднозначности.Колонка = "Номенклатура"; // ИМЯ КОЛОНКИ ТАБЛИЧНОЙ ЧАСТИ, НЕ ТАБ.ДОК
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
...
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
```
|
||||
|
||||
Для того, чтобы в аргументе `ЗагружаемыеЗначенияСтрока` процедуры `ЗаполнитьСписокНеоднозначностей` были добавлены значения колонок `Артикул` и `Наименование` таб.док нужно для них указать расшифровку, что эти колонки относятся именно к номенклатуре.
|
||||
|
||||
Если не указать параметры расшифровки для колонок, то при попытке считать их из аргумента `ЗагружаемыеЗначенияСтрока` будет сыпаться ошибка.
|
||||
|
||||
```bsl
|
||||
Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
|
||||
|
||||
...
|
||||
|
||||
Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда
|
||||
ТекстГде = " ГДЕ СправочникНоменклатура.Наименование = &Наименование";
|
||||
Запрос.УстановитьПараметр("Наименование", ЗагружаемыеЗначенияСтрока.Наименование);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Артикул) Тогда
|
||||
Если ПустаяСтрока(ТекстГде) Тогда
|
||||
ТекстГде = " ГДЕ СправочникНоменклатура.Артикул = &Артикул";
|
||||
Иначе
|
||||
ТекстГде = ТекстГде + " ИЛИ СправочникНоменклатура.Артикул = &Артикул";
|
||||
КонецЕсли;
|
||||
|
||||
Запрос.УстановитьПараметр("Артикул", ЗагружаемыеЗначенияСтрока.Артикул);
|
||||
КонецЕсли;
|
||||
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
>Если табличная часть одна, допускается именовать макет просто **"ЗагрузкаИзФайла"**
|
||||
|
||||

|
||||
@ -141,6 +208,172 @@ slug: общие-бсп-стандартные-подсистемы-загруз
|
||||
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
|
||||
<summary style="font-weight: bold; cursor: pointer;">Пример реализации</summary>
|
||||
|
||||
```bsl
|
||||
// АдресЗагружаемыхДанных - Строка - адрес временного хранилища с таблицей значений, в которой
|
||||
// находятся загруженные данные из файла. Состав колонок:
|
||||
// * Идентификатор - Число - порядковый номер строки.
|
||||
// Остальные колонки соответствуют колонкам макета ЗагрузкаИзФайла.
|
||||
// АдресТаблицыСопоставления - Строка - адрес временного хранилища с пустой таблицей значений,
|
||||
// являющейся копией табличной части документа,
|
||||
// которую необходимо заполнить из таблицы АдресЗагружаемыхДанных.
|
||||
// СписокНеоднозначностей - ТаблицаЗначений - список неоднозначных значений:
|
||||
// * Колонка - Строка - имя колонки, в которой была обнаружена неоднозначность.
|
||||
// * Идентификатор - Число - идентификатор строки, в которой была обнаружена неоднозначность.
|
||||
// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные.
|
||||
// ДополнительныеПараметры - Произвольный - любые дополнительные сведения.
|
||||
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
|
||||
|
||||
|
||||
ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных);
|
||||
ТабличнаяЧасть = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления);
|
||||
|
||||
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ВЫРАЗИТЬ(ДанныеДляСопоставления.Артикул КАК СТРОКА(50)) КАК Артикул,
|
||||
| ВЫРАЗИТЬ(ДанныеДляСопоставления.ЕдиницаИзмерения КАК СТРОКА(30)) КАК ЕдиницаИзмерения,
|
||||
| ВЫРАЗИТЬ(ДанныеДляСопоставления.Номенклатура КАК СТРОКА(300)) КАК Номенклатура,
|
||||
| ДанныеДляСопоставления.Идентификатор КАК Идентификатор
|
||||
|ПОМЕСТИТЬ ВТДанныеДляСопоставления
|
||||
|ИЗ
|
||||
| &ЗагружаемыеДанные КАК ДанныеДляСопоставления
|
||||
|;
|
||||
|
|
||||
|////////////////////////////////////////////////////////////////////////////////
|
||||
|ВЫБРАТЬ
|
||||
| СправочникНоменклатура.Ссылка КАК Номенклатура,
|
||||
| СправочникНоменклатура.Артикул КАК Артикул,
|
||||
| ВТДанныеДляСопоставления.Идентификатор КАК Идентификатор
|
||||
|ПОМЕСТИТЬ ВТСопоставленнаяНоменклатураПоАртикулу
|
||||
|ИЗ
|
||||
| ВТДанныеДляСопоставления КАК ВТДанныеДляСопоставления
|
||||
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
|
||||
| ПО ВТДанныеДляСопоставления.Артикул = СправочникНоменклатура.Артикул
|
||||
| И (ВТДанныеДляСопоставления.Артикул <> """")
|
||||
|;
|
||||
|
|
||||
|////////////////////////////////////////////////////////////////////////////////
|
||||
|ВЫБРАТЬ
|
||||
| ВТДанныеДляСопоставления.Номенклатура КАК Номенклатура,
|
||||
| ВТДанныеДляСопоставления.Идентификатор КАК Идентификатор
|
||||
|ПОМЕСТИТЬ ВТДанныеДляСопоставленияПоНаименованию
|
||||
|ИЗ
|
||||
| ВТДанныеДляСопоставления КАК ВТДанныеДляСопоставления
|
||||
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСопоставленнаяНоменклатураПоАртикулу КАК ВТСопоставленнаяНоменклатураПоАртикулу
|
||||
| ПО ВТДанныеДляСопоставления.Идентификатор = ВТСопоставленнаяНоменклатураПоАртикулу.Идентификатор
|
||||
|ГДЕ
|
||||
| ВТСопоставленнаяНоменклатураПоАртикулу.Идентификатор ЕСТЬ NULL
|
||||
|;
|
||||
|
|
||||
|////////////////////////////////////////////////////////////////////////////////
|
||||
|ВЫБРАТЬ
|
||||
| СправочникНоменклатура.Ссылка КАК Номенклатура,
|
||||
| ВТДанныеДляСопоставленияПоНаименованию.Идентификатор КАК Идентификатор
|
||||
|ПОМЕСТИТЬ ВТСопоставленнаяНоменклатураПоНаименованию
|
||||
|ИЗ
|
||||
| ВТДанныеДляСопоставленияПоНаименованию КАК ВТДанныеДляСопоставленияПоНаименованию
|
||||
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
|
||||
| ПО ВТДанныеДляСопоставленияПоНаименованию.Номенклатура = СправочникНоменклатура.Наименование
|
||||
|;
|
||||
|
|
||||
|////////////////////////////////////////////////////////////////////////////////
|
||||
|ВЫБРАТЬ
|
||||
| МАКСИМУМ(СопоставленнаяНоменклатура.Номенклатура) КАК Номенклатура,
|
||||
| СопоставленнаяНоменклатура.Идентификатор КАК Идентификатор,
|
||||
| СУММА(СопоставленнаяНоменклатура.КоличествоСтрок) КАК КоличествоСтрок
|
||||
|ИЗ
|
||||
| (ВЫБРАТЬ
|
||||
| ВТСопоставленнаяНоменклатураПоАртикулу.Номенклатура КАК Номенклатура,
|
||||
| ВТСопоставленнаяНоменклатураПоАртикулу.Идентификатор КАК Идентификатор,
|
||||
| 1 КАК КоличествоСтрок
|
||||
| ИЗ
|
||||
| ВТСопоставленнаяНоменклатураПоАртикулу КАК ВТСопоставленнаяНоменклатураПоАртикулу
|
||||
|
|
||||
| ОБЪЕДИНИТЬ ВСЕ
|
||||
|
|
||||
| ВЫБРАТЬ
|
||||
| ВТСопоставленнаяНоменклатураПоНаименованию.Номенклатура,
|
||||
| ВТСопоставленнаяНоменклатураПоНаименованию.Идентификатор,
|
||||
| 1
|
||||
| ИЗ
|
||||
| ВТСопоставленнаяНоменклатураПоНаименованию КАК ВТСопоставленнаяНоменклатураПоНаименованию) КАК СопоставленнаяНоменклатура
|
||||
|
|
||||
|СГРУППИРОВАТЬ ПО
|
||||
| СопоставленнаяНоменклатура.Идентификатор
|
||||
|;
|
||||
|
|
||||
|////////////////////////////////////////////////////////////////////////////////
|
||||
|ВЫБРАТЬ
|
||||
| ВТДанныеДляСопоставления.Идентификатор КАК Идентификатор,
|
||||
| КОЛИЧЕСТВО(ВТДанныеДляСопоставления.ЕдиницаИзмерения) КАК КоличествоСтрок,
|
||||
| МАКСИМУМ(УпаковкиЕдиницыИзмерения.Ссылка) КАК ЕдиницаИзмерения
|
||||
|ИЗ
|
||||
| ВТДанныеДляСопоставления КАК ВТДанныеДляСопоставления
|
||||
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
|
||||
| ПО ВТДанныеДляСопоставления.ЕдиницаИзмерения = УпаковкиЕдиницыИзмерения.Наименование
|
||||
|
|
||||
|СГРУППИРОВАТЬ ПО
|
||||
| ВТДанныеДляСопоставления.Идентификатор";
|
||||
|
||||
Запрос.УстановитьПараметр("ЗагружаемыеДанные", ЗагружаемыеДанные);
|
||||
|
||||
РезультатыЗапроса = Запрос.ВыполнитьПакет();
|
||||
|
||||
ТаблицаНоменклатуры = РезультатыЗапроса.Получить(4).Выгрузить();
|
||||
ТаблицаЕдиницИзмерения = РезультатыЗапроса.Получить(5).Выгрузить();
|
||||
|
||||
Для Каждого СтрокаЗагружаемыхДанных Из ЗагружаемыеДанные Цикл
|
||||
|
||||
СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
|
||||
СтрокаТабличнойЧасти.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
|
||||
СтрокаТабличнойЧасти.Цена = СтрокаЗагружаемыхДанных.Цена;
|
||||
|
||||
СтрокаНоменклатуры = ТаблицаНоменклатуры.Найти(СтрокаЗагружаемыхДанных.Идентификатор, "Идентификатор");
|
||||
|
||||
Если СтрокаНоменклатуры <> Неопределено Тогда
|
||||
|
||||
Если СтрокаНоменклатуры.КоличествоСтрок = 1 Тогда
|
||||
СтрокаТабличнойЧасти.Номенклатура = СтрокаНоменклатуры.Номенклатура;
|
||||
ИначеЕсли СтрокаНоменклатуры.КоличествоСтрок > 1 Тогда
|
||||
СтрокаНеоднозначности = СписокНеоднозначностей.Добавить();
|
||||
СтрокаНеоднозначности.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
|
||||
|
||||
// ИМЯ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ, НЕ ИМЯ ЯЧЕЙКИ ТАБ.ДОК
|
||||
СтрокаНеоднозначности.Колонка = "Номенклатура";
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаЕдиницыИзмерения = ТаблицаЕдиницИзмерения.Найти(СтрокаЗагружаемыхДанных.Идентификатор, "Идентификатор");
|
||||
|
||||
Если СтрокаЕдиницыИзмерения <> Неопределено Тогда
|
||||
|
||||
Если СтрокаЕдиницыИзмерения.КоличествоСтрок = 1 Тогда
|
||||
СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаЕдиницыИзмерения.ЕдиницаИзмерения;
|
||||
ИначеЕсли СтрокаЕдиницыИзмерения.КоличествоСтрок > 1 Тогда
|
||||
СтрокаНеоднозначности = СписокНеоднозначностей.Добавить();
|
||||
СтрокаНеоднозначности.Идентификатор = СтрокаЗагружаемыхДанных.Идентификатор;
|
||||
|
||||
// ИМЯ РЕКВИЗИТА ТАБЛИЧНОЙ ЧАСТИ, НЕ ИМЯ ЯЧЕЙКИ ТАБ.ДОК
|
||||
СтрокаНеоднозначности.Колонка = "ЕдиницаИзмерения";
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ПоместитьВоВременноеХранилище(ТабличнаяЧасть, АдресТаблицыСопоставления);
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
|
||||
<summary style="font-weight: bold; cursor: pointer;">Пример реализации из БСП</summary>
|
||||
|
||||
```bsl
|
||||
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
|
||||
|
||||
@ -273,6 +506,87 @@ slug: общие-бсп-стандартные-подсистемы-загруз
|
||||
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
|
||||
<summary style="font-weight: bold; cursor: pointer;">Пример реализации</summary>
|
||||
|
||||
```bsl
|
||||
|
||||
// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки.
|
||||
//
|
||||
// Параметры:
|
||||
// ПолноеИмяТабличнойЧасти - Строка - полное имя табличной части, в которую загружаются данные.
|
||||
// СписокНеоднозначностей - Массив из СправочникСсылка._ДемоНоменклатура - массив для заполнения с неоднозначными данными.
|
||||
// ИмяКолонки - Строка - имя колонки <ТАБЛИЧНОЙ ЧАСТИ>, в который возникла неоднозначность.
|
||||
// ЗагружаемыеЗначенияСтрока - Строка - загружаемые данные на основании которых возникла неоднозначность.
|
||||
// ДополнительныеПараметры - Произвольный - любые дополнительные сведения.
|
||||
//
|
||||
Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
|
||||
|
||||
// ВАЖНО
|
||||
// В ЗагружаемыеЗначенияСтрока попадают только значения, где Имя или ПараметрРасшифровки = ИмяКолонки
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
|
||||
Если ИмяКолонки = "Номенклатура" Тогда
|
||||
|
||||
ТекстГде = "";
|
||||
Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда
|
||||
ТекстГде = " ГДЕ СправочникНоменклатура.Наименование = &Наименование";
|
||||
Запрос.УстановитьПараметр("Наименование", ЗагружаемыеЗначенияСтрока.Наименование);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Артикул) Тогда
|
||||
Если ПустаяСтрока(ТекстГде) Тогда
|
||||
ТекстГде = " ГДЕ СправочникНоменклатура.Артикул = &Артикул";
|
||||
Иначе
|
||||
ТекстГде = ТекстГде + " ИЛИ СправочникНоменклатура.Артикул = &Артикул";
|
||||
КонецЕсли;
|
||||
|
||||
Запрос.УстановитьПараметр("Артикул", ЗагружаемыеЗначенияСтрока.Артикул);
|
||||
КонецЕсли;
|
||||
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| СправочникНоменклатура.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.Номенклатура КАК СправочникНоменклатура " + ТекстГде;
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
СписокНеоднозначностей.Добавить(Выборка.Ссылка);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ИмяКолонки = "ЕдиницаИзмерения" Тогда
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| УпаковкиЕдиницыИзмерения.Ссылка КАК Ссылка
|
||||
|ИЗ
|
||||
| Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
|
||||
|ГДЕ
|
||||
| НЕ УпаковкиЕдиницыИзмерения.ПометкаУдаления
|
||||
| И УпаковкиЕдиницыИзмерения.Наименование = &Наименование";
|
||||
|
||||
Запрос.УстановитьПараметр("Наименование", СокрЛП(ЗагружаемыеЗначенияСтрока.ЕдиницаИзмерения));
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
СписокНеоднозначностей.Добавить(Выборка.Ссылка);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
|
||||
<summary style="font-weight: bold; cursor: pointer;">Пример реализации из БСП</summary>
|
||||
|
||||
```bsl
|
||||
// Возвращает список подходящих объектов ИБ для неоднозначного значения ячейки.
|
||||
//
|
||||
|
Loading…
x
Reference in New Issue
Block a user