From 9d39ee9234bf4d33c2811f76dc1a59b9da84abfb Mon Sep 17 00:00:00 2001
From: Ivan Smirnov <52702497+ivanmolodec@users.noreply.github.com>
Date: Wed, 10 Apr 2024 15:04:40 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20?=
=?UTF-8?q?=D0=B8=20=D0=B0=D0=B4=D0=B0=D0=BF=D1=82=D0=B0=D1=86=D0=B8=D1=8F?=
=?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B?=
=?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D1=84?=
=?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B0=20Excel=20(#37)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Перенос и адаптация подсистемы https://github.com/Bayselonarrend/uniloadXLS
---
...21\203\320\274\320\265\320\275\321\202.md" | 29 ++
...1\200\320\262\320\265\321\200\320\260.xml" | 23 ++
.../Ext/Module.bsl" | 267 ++++++++++++++++++
...0\273\320\270\320\265\320\275\321\202.xml" | 23 ++
.../Ext/Module.bsl" | 64 +++++
src/Configuration.xml | 11 +-
...0\274\320\265\320\275\321\202\320\260.xml" | 25 ++
7 files changed, 438 insertions(+), 4 deletions(-)
create mode 100644 "docs/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202.md"
create mode 100644 "src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260.xml"
create mode 100644 "src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl"
create mode 100644 "src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202.xml"
create mode 100644 "src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl"
create mode 100644 "src/Subsystems/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\230\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\263\320\276\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml"
diff --git "a/docs/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202.md" "b/docs/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202.md"
new file mode 100644
index 00000000..d8e1edf8
--- /dev/null
+++ "b/docs/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202.md"
@@ -0,0 +1,29 @@
+# Подсистема загрузки файлов Excel через табличный документ
+
+Пример вызова на форме
+
+```1C (BSL)
+&НаКлиенте
+Асинх Процедура ЗагрузитьXLS(Команда)
+
+ СтруктураКолонок = Новый Структура;
+ СтруктураКолонок.Вставить("Спр2" , "СправочникСсылка.Спр2");
+ СтруктураКолонок.Вставить("Перечисление1" , "ПеречислениеСсылка.Перечисление1");
+ СтруктураКолонок.Вставить("ЛюбоеИмя" , "");
+ СтруктураКолонок.Вставить("Док1" , "ДокументСсылка.Док1");
+ СтруктураКолонок.Вставить("Спр1" , "СправочникСсылка.Спр1");
+
+ ИД = Ждать __ЗагрузкаФайлаЧерезТабличныйДокументКлиент.ЗагрузитьИзXLS(СтруктураКолонок, , 2);
+
+ Если ЗначениеЗаполнено(ИД) Тогда
+ ЗагрузкаНаСервере(ИД);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗагрузкаНаСервере(ИД)
+ ТЗ = ПолучитьИзВременногоХранилища(ИД);
+КонецПроцедуры
+
+```
diff --git "a/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260.xml" "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260.xml"
new file mode 100644
index 00000000..4cb12eac
--- /dev/null
+++ "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ __ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера
+
+
+ ru
+ Загрузка файла через табличный документ вызов сервера
+
+
+
+ false
+ false
+ true
+ false
+ false
+ true
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl"
new file mode 100644
index 00000000..5bbaa7f6
--- /dev/null
+++ "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl"
@@ -0,0 +1,267 @@
+// MIT License
+
+// Copyright (c) 2024 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+#Область ПрограммныйИнтерфейс
+
+// Процедура - Формирование таблицы
+//
+// Параметры:
+// АдресВХранилище - Строка - Адрес файла во временном хранилище
+// Расширение - Строка - Расширение файла (xls, xlsx)
+// Параметры - Структура - Параметры загрузки
+//
+Процедура ФормированиеТаблицы(АдресВХранилище, Расширение, Параметры) Экспорт
+
+ Макет = Параметры.Макет;
+ АдресПомещения = Параметры.АдресПомещения;
+ НазваниеЛиста = Параметры.НазваниеЛиста;
+ НомерСтроки = Параметры.НомерПервойСтроки;
+
+ ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
+ ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
+ ДвоичныеДанные.Записать(ИмяВременногоФайла);
+
+ ТабДок = Новый ТабличныйДокумент;
+ ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
+
+ Попытка
+ УдалитьФайлы(ИмяВременногоФайла);
+ Исключение
+ ЗаписьЖурналаРегистрации(НСтр("ru = 'Загрузка файла через табличный документ.Удаление временного файла'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+ КонецПопытки;
+
+ Лист = ?(ЗначениеЗаполнено(НазваниеЛиста), Табдок.Области.Найти(СтрЗаменить(НазваниеЛиста, " ", "_")), Неопределено);
+
+ ПервыйЛист = ТабДок.Области[0].Имя;
+ Для Каждого ЛистДок Из ТабДок.Области Цикл
+ Если ЛистДок.Верх = 1 Тогда
+ ПервыйЛист = ЛистДок.Имя;
+ КонецЕсли;
+ КонецЦикла;
+
+ ТабДок = ТабДок.ПолучитьОбласть(?(Лист = Неопределено, ПервыйЛист, СтрЗаменить(НазваниеЛиста, " ", "_")));
+
+ Если Не НомерСтроки = 1 Тогда
+ ТабДок.УдалитьОбласть(ТабДок.Область("R1:R" + Строка(НомерСтроки - 1)), ТипСмещенияТабличногоДокумента.ПоВертикали);
+ КонецЕсли;
+
+ ТабДок.ВставитьОбласть(ТабДок.Область("R1"),
+ ТабДок.Область("R1"),
+ ТипСмещенияТабличногоДокумента.ПоГоризонтали);
+
+ Табдок.Область("R1").Очистить(Истина, Истина, Истина);
+
+ Счетчик = 0;
+ Для Каждого Колонка Из Макет Цикл
+ Счетчик = Счетчик + 1;
+ Если Не ЗначениеЗаполнено(Колонка.Значение) Тогда
+ Продолжить;
+ КонецЕсли;
+ ТабДок.Область("R1" + "C" + Строка(Счетчик)).Текст = Колонка.Ключ;
+ КонецЦикла;
+
+ ПЗ = Новый ПостроительЗапроса;
+ ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
+ ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.Добавлять;
+ ПЗ.ЗаполнитьНастройки();
+ ПЗ.Выполнить();
+ ТЗ = ПЗ.Результат.Выгрузить();
+
+ ТЗ.Колонки.Добавить("ПорядковыйНомер", Новый ОписаниеТипов("Число"));
+
+ КоллекцияОтборов = Новый ТаблицаЗначений;
+ КоллекцияОтборов.Колонки.Добавить("ТипДанных");
+ КоллекцияОтборов.Колонки.Добавить("НомерСтрокиДочерней");
+ КоллекцияОтборов.Колонки.Добавить("МассивДанных");
+ КоллекцияОтборов.Колонки.Добавить("НазваниеКолонки");
+
+ Н = ТЗ.Количество() - 1;
+
+ Пока НЕ Н < 0 Цикл
+
+ Счетчик = 0;
+ ТЗ[Н].ПорядковыйНомер = Н;
+
+ Для каждого Колонка Из ТЗ.Колонки Цикл
+ Если Не ЗначениеЗаполнено(ТЗ[Н][Колонка.Имя]) Тогда
+ Счетчик = Счетчик + 1;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если Счетчик = ТЗ.Колонки.Количество() Тогда
+ ТЗ.Удалить(Н);
+ КонецЕсли;
+
+ Н = Н - 1;
+
+ КонецЦикла;
+
+ ВставкаВТ = "";
+ ВставкаБазовые = "";
+ ВставкаСсылочные = "";
+ ВставкаИсточники = "";
+ ХранилищеИсточников = Новый Соответствие;
+ МассивИменСсылочных = Новый Массив;
+ СоответствиеПеречислений = Новый Соответствие;
+
+ Для Каждого Колонка Из Макет Цикл
+
+ Если Не ЗначениеЗаполнено(Колонка.Значение) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ВставкаВТ = ВставкаВТ + "ВходнаяТаблица." + Колонка.Ключ + " КАК " + Колонка.Ключ + "," + Символы.ПС;
+
+ Если СтрНайти(Колонка.Значение, "Ссылка") <> 0 И СтрНайти(Колонка.Значение, "Перечисление") = 0 Тогда
+
+ ТЗ.Колонки.Добавить(Колонка.Ключ + "КодЧислом", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15)));
+ ВставкаВТ = ВставкаВТ + "ВходнаяТаблица." + Колонка.Ключ + "КодЧислом КАК " + Колонка.Ключ + "КодЧислом," + Символы.ПС;
+ МассивИменСсылочных.Добавить(Колонка.Ключ);
+
+ РазбивкаТипа = СтрРазделить(СтрЗаменить(Колонка.Значение, "Ссылка", ""), ".", Ложь);
+
+ ВхождениеИсточника = ХранилищеИсточников.Получить(РазбивкаТипа[1]);
+ ХранилищеИсточников.Вставить(РазбивкаТипа[1], ?(ВхождениеИсточника = Неопределено, 1, ВхождениеИсточника + 1));
+ Итерация = ?(ХранилищеИсточников.Получить(РазбивкаТипа[1]) = 0, "", Строка(ХранилищеИсточников.Получить(РазбивкаТипа[1])));
+
+ Если РазбивкаТипа[0] = "Документ" Тогда
+ РеквизитСравнения = "Номер";
+ Иначе
+ РеквизитСравнения = "Наименование";
+ КонецЕсли;
+
+ ВставкаСсылочные = ВставкаСсылочные + РазбивкаТипа[1] + Итерация + ".Ссылка КАК " + Колонка.Ключ + "," + Символы.ПС;
+
+ Если Не СтрНайти(ВставкаИсточники, " " + РазбивкаТипа[1] + " ") > 0 Тогда
+ ВставкаИсточники = ВставкаИсточники + "
+ | ЛЕВОЕ СОЕДИНЕНИЕ " + СтрЗаменить(Колонка.Значение, "Ссылка", "") + " КАК " + РазбивкаТипа[1] + Итерация + "
+ | ПО " + "ВходнаяТаблица." + Колонка.Ключ + " <> """" И " + "ВходнаяТаблица." + Колонка.Ключ + " <> 0" + "
+ | И (ВходнаяТаблица." + Колонка.Ключ + " = " + РазбивкаТипа[1] + Итерация + "." + РеквизитСравнения + Символы.ПС;
+
+ Если СтрНайти(РазбивкаТипа[1], "Номенклатура") > 0 Тогда
+ ВставкаИсточники = ВставкаИсточники + " ИЛИ "
+ + "ВходнаяТаблица." + Колонка.Ключ + " = " + РазбивкаТипа[1] + Итерация + "." + "Артикул" + Символы.ПС;
+ ВставкаИсточники = ВставкаИсточники + " ИЛИ "
+ + "ВходнаяТаблица." + Колонка.Ключ + "КодЧислом = " + РазбивкаТипа[1] + Итерация + "." + "Код" + Символы.ПС;
+ ВставкаИсточники = ВставкаИсточники + " ИЛИ "
+ + "ВходнаяТаблица." + Колонка.Ключ + " = " + РазбивкаТипа[1] + Итерация + "." + "Код" + Символы.ПС;
+ ИначеЕсли СтрНайти(Колонка.Значение, "Справочник") > 0
+ И Не СтрНайти(Колонка.Значение, "Организации") > 0 Тогда
+ ВставкаИсточники = ВставкаИсточники + " ИЛИ "
+ + "ВходнаяТаблица." + Колонка.Ключ + "КодЧислом = " + РазбивкаТипа[1] + Итерация + "." + "Код" + Символы.ПС;
+ ВставкаИсточники = ВставкаИсточники + " ИЛИ "
+ + "ВходнаяТаблица." + Колонка.Ключ + " = " + РазбивкаТипа[1] + Итерация + "." + "Код" + Символы.ПС;
+ КонецЕсли;
+
+ ВставкаБазовые = ВставкаБазовые + "ВходнаяТаблица." + Колонка.Ключ + " КАК " + Колонка.Ключ + "Служебный," + Символы.ПС;
+ ВставкаИсточники = ВставкаИсточники + ")";
+ КонецЕсли;
+
+ ИначеЕсли СтрНайти(Колонка.Значение, "Перечисление") <> 0 Тогда
+ КолонкаПеречисления = ТЗ.Колонки.Добавить(Колонка.Ключ + "НеОбрабатывать", Новый ОписаниеТипов(Колонка.Значение));
+ СоответствиеПеречислений.Вставить(Колонка.Ключ, Колонка.Значение);
+ ВставкаВТ = СтрЗаменить(ВставкаВТ, "." + Колонка.Ключ + " КАК", "." + КолонкаПеречисления.Имя + " КАК");
+ ВставкаБазовые = ВставкаБазовые + "ВходнаяТаблица." + Колонка.Ключ + " КАК " + Колонка.Ключ + "," + Символы.ПС;
+ ИначеЕсли Не СтрНайти(Колонка.Ключ, "НеОбрабатывать") > 0 Тогда
+ ВставкаБазовые = ВставкаБазовые + "ВходнаяТаблица." + Колонка.Ключ + " КАК " + Колонка.Ключ + "," + Символы.ПС;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ВставкаВТ = ВставкаВТ + "ВходнаяТаблица.ПорядковыйНомер Как ПорядковыйНомер";
+ ВставкаБазовые = Лев(ВставкаБазовые, СтрДлина(ВставкаБазовые) - 2);
+ ОТЧ = Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15));
+
+ Для Каждого СтрокаТаблицы Из ТЗ Цикл
+
+ Для Каждого ИмяМассива Из МассивИменСсылочных Цикл
+ СтрокаТаблицы[ИмяМассива + "КодЧислом"] = ОТЧ.ПривестиЗначение(СтрокаТаблицы[ИмяМассива]);
+ КонецЦикла;
+
+ Для Каждого Колонка Из СоответствиеПеречислений Цикл
+
+ Для Каждого ТекЭлемент Из Метаданные.Перечисления[СтрЗаменить(Колонка.Значение, "ПеречислениеСсылка.", "")].ЗначенияПеречисления Цикл
+ Если нРег(ТекЭлемент.Синоним) = нРег(СтрокаТаблицы[Колонка.Ключ]) Тогда
+ СтрокаТаблицы[Колонка.Ключ + "НеОбрабатывать"] = Перечисления[СтрЗаменить(Колонка.Значение, "ПеречислениеСсылка.", "")][ТекЭлемент.Имя];
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | #ВставкаВТ
+ |ПОМЕСТИТЬ ВходнаяТаблица
+ |ИЗ
+ | &ВходнаяТаблица КАК ВходнаяТаблица
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | #ВставкаСсылочные
+ | #ВставкаБазовые
+ |ИЗ
+ | ВходнаяТаблица КАК ВходнаяТаблица
+ | #ВставкаИсточники
+ |
+ |УПОРЯДОЧИТЬ ПО
+ | ВходнаяТаблица.ПорядковыйНомер";
+
+ Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ВставкаВТ", ВставкаВТ);
+ Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ВставкаСсылочные", ВставкаСсылочные);
+ Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ВставкаБазовые", ВставкаБазовые);
+ Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ВставкаИсточники", ВставкаИсточники);
+
+ Запрос.УстановитьПараметр("ВходнаяТаблица", ТЗ);
+ РезультатЗапроса = Запрос.Выполнить();
+
+ ПоместитьВоВременноеХранилище(РезультатЗапроса.Выгрузить(), АдресПомещения);
+
+КонецПроцедуры
+
+// Функция - Поместить заглушку
+//
+// Параметры:
+// Макет - Структура - Список колонок загружаемого файла
+//
+// Возвращаемое значение:
+// - Строка - Адрес файла во временном хранилище
+//
+Функция ПоместитьЗаглушку(Макет) Экспорт
+
+ Заглушка = Новый ТаблицаЗначений;
+
+ Для Каждого Колонка Из Макет Цикл
+ Заглушка.Колонки.Добавить(Колонка.Ключ, Новый ОписаниеТипов(Колонка.Значение));
+ КонецЦикла;
+
+ ИД = ПоместитьВоВременноеХранилище(Заглушка, Новый УникальныйИдентификатор);
+
+ Возврат ИД;
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202.xml" "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202.xml"
new file mode 100644
index 00000000..f89426f9
--- /dev/null
+++ "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ __ЗагрузкаФайлаЧерезТабличныйДокументКлиент
+
+
+ ru
+ Загрузка файла через табличный документ клиент
+
+
+
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl"
new file mode 100644
index 00000000..a3992afa
--- /dev/null
+++ "b/src/CommonModules/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\244\320\260\320\271\320\273\320\260\320\247\320\265\321\200\320\265\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\271\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl"
@@ -0,0 +1,64 @@
+// MIT License
+
+// Copyright (c) 2024 Anton Tsitavets
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+#Область ПрограммныйИнтерфейс
+
+// Функция - Загрузить из XLS
+//
+// Параметры:
+// СоответствиеКолонок - Структура - Описание колонок загружаемого файла
+// НазваниеЛиста - Строка - Имя загружаемого листа (по-умолчанию не заполнено)
+// НомерПервойСтроки - Число - Номер строки с которой начинается загрузка данных (по-умолчанию 1)
+//
+// Возвращаемое значение:
+// - Строка - Адрес файла во временном хранилище
+//
+Асинх Функция ЗагрузитьИзXLS(СоответствиеКолонок, НазваниеЛиста = "", НомерПервойСтроки = 1) Экспорт
+
+ // ++ Обход ошибки отстутствия модуля БСП, не переносить
+ ОбщегоНазначенияКлиент = Неопределено;
+ // -- Обход ошибки отстутствия модуля БСП, не переносить
+
+ АдресПомещения = __ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.ПоместитьЗаглушку(СоответствиеКолонок);
+
+ Параметры = Новый Структура("Макет, АдресПомещения, НазваниеЛиста, НомерПервойСтроки", СоответствиеКолонок, АдресПомещения, НазваниеЛиста, НомерПервойСтроки);
+
+ ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
+ ПараметрыДиалога.Фильтр = "Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|";
+ ПараметрыДиалога.МножественныйВыбор = Ложь;
+ ПараметрыДиалога.ИндексФильтра = 0;
+ ПараметрыДиалога.Заголовок = "Выберите файл для загрузки";
+
+ ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх( , , , ПараметрыДиалога);
+
+ Если ТипЗнч(ОписаниеФайла) = Тип("ОписаниеПомещенногоФайла") И Не ОписаниеФайла.ПомещениеФайлаОтменено Тогда
+ __ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.ФормированиеТаблицы(ОписаниеФайла.Адрес, ОписаниеФайла.СсылкаНаФайл.Расширение, Параметры);
+ Иначе
+ ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Помещение файла отменено'"));
+ АдресПомещения = Неопределено;
+ КонецЕсли;
+
+ Возврат АдресПомещения;
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/src/Configuration.xml b/src/Configuration.xml
index 6510147f..5a7f62c2 100644
--- a/src/Configuration.xml
+++ b/src/Configuration.xml
@@ -232,11 +232,11 @@
Managed
NotAutoFree
- DontUse
+ UseWithWarnings
DontUse
- Taxi
+ TaxiEnableVersion8_2
DontUse
- Version8_3_14
+ Version8_3_18
@@ -249,6 +249,7 @@
__ПредопределенныеЗначения
__СоответствиеОбъектовИБ
__УправлениеИнтеграциями
+ __ЗагрузкаИзТабличногоДокумента
__ПодсистемаУправлениеИнтеграциями
__Реквизит
__Реквизиты
@@ -269,11 +270,14 @@
__XMLEditor
__ВспомогательныйМодульНеПереносить
__ВспомогательныйМодульНеПереноситьКлиент
+ __ВспомогательныйМодульНеПереноситьКлиентСервер
__ДокументыОбработкаЗаполнения
__ДокументыОбработкаПроведения
__ДокументыПередЗаписью
__ДокументыПриЗаписи
__ДокументыПриКопировании
+ __ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера
+ __ЗагрузкаФайлаЧерезТабличныйДокументКлиент
__ИнтеграцииСервер
__КоннекторHTTP
__МетодыРегламентныхЗаданийСервер
@@ -298,7 +302,6 @@
__СправочникиПриКопировании
__СтроковыеФункцииКлиентСервер
__ТипСоответствияОбъектовИБПереопределяемый
- __ВспомогательныйМодульНеПереноситьКлиентСервер
__ДокументыОбработкаЗаполнения
__ДокументыОбработкаПроведения
__ДокументыПередЗаписью
diff --git "a/src/Subsystems/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\230\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\263\320\276\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" "b/src/Subsystems/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\230\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\263\320\276\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml"
new file mode 100644
index 00000000..20058b50
--- /dev/null
+++ "b/src/Subsystems/__\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\230\320\267\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\263\320\276\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml"
@@ -0,0 +1,25 @@
+
+
+
+
+ __ЗагрузкаИзТабличногоДокумента
+
+
+ ru
+ Загрузка из табличного документа
+
+
+
+ true
+ false
+ false
+
+
+
+ CommonModule.__ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера
+ CommonModule.__ЗагрузкаФайлаЧерезТабличныйДокументКлиент
+
+
+
+
+
\ No newline at end of file