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