Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 янв 2025, 14:22

Загрузить из файла Excel в ДеревоЗначения

Автор maxxi, 12 янв 2025, 12:13

0 Пользователей и 1 гость просматривают эту тему.

maxxi

Здравствуйте, Скажите пожалуйста, как загрузить из файла в ДЗ.

fruitella


maxxi

fruitella, там же нет про ДЗ(((
Как загрузить в ТЗ знаю, но пока не знаю как загрузить в ДЗ.

fruitella

maxxi, если эксель прочитал, просто заполни данными в дз. Вот примеры как оно заполняется: https://www.1s-up.ru/derevo-znachenij-1s/
 
Циклом проходишься и заполняешь дерево с нужной иерархией или пихаешь тз в запрос, делаешь итоги по нужным колонкам и выгружаешь с обходом иерархии по группировкам.

Лучше скинь сюда код, если что-то не получается

maxxi

fruitella,

&НаКлиенте
Процедура Сформировать1_Дерево(Команда)

дзДеревоРасходов.Очистить();

Если ФорматФайла="XLSX" Тогда

ПрочитатьФайл_XLS_Продавец_Дерево();

КонецЕсли;

СформироватьНаСервере_Дерево();

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

&НаКлиенте
Процедура ПутьКФайламНачалоВыбора_Дерево(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

Проводник.Заголовок="Файлни танланг: ";

Если ФорматФайла="XLSX" Тогда

Фильтр="Файл Excel (*.xlsx)| *.xlsx";

Иначе

Возврат;

КонецЕсли;

Проводник.Фильтр=Фильтр;

Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла",ЭтотОбъект);

Проводник.Показать(Оповещение);

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

&НаКлиенте
Процедура ПослеВыбораФайла_Дерево(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

Если ВыбранныеФайлы = Неопределено  Тогда

Возврат;

КонецЕсли;

ПутькФайлам=ВыбранныеФайлы[0];

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

&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере_Продавец_Дерево(АдресДанных)

ТабДок= Новый ТабличныйДокумент;

Данные= ПолучитьИзВременногоХранилища(АдресДанных);

ПутьКФайлуНаСервере=ПолучитьИмяВременногоФайла("xlsx");

Данные.Записать(ПутьКФайлуНаСервере);

Попытка

ТабДок.Прочитать(ПутьКФайлуНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Значение);

Исключение

Сообщение= Новый СообщениеПользователю;

Сообщение.Текст="Файл не найден" + ОписаниеОшибки();

Сообщение.Сообщить();

Возврат;

КонецПопытки;

КоличествоСтрок= ТабДок.ВысотаТаблицы;

Для НомерСтроки=2 По КоличествоСтрок Цикл

СтрокаДанных=дзДеревоРасходов.Добавить();

СтрокаДанных.Источник=Справочники.Складлар.НайтиПоНаименованию(ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки,"ЧГ=0") + "C"+1).ТекущаяОбласть.Текст);

СтрокаДанных.План=ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки,"ЧГ=0") + "C"+2).ТекущаяОбласть.Текст;

КонецЦикла;

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

&НаКлиенте
Процедура ПрочитатьФайл_XLS_Продавец_Дерево()

ДанныеФайла= Новый ДвоичныеДанные(ПутьКФайлам);

АдресДанных=ПоместитьВоВременноеХранилище(ДанныеФайла,УникальныйИдентификатор);

ПрочитатьФайл_XLS_НаСервере_Продавец_Дерево(АдресДанных);

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

&НаСервере
Процедура СформироватьНаСервере_Дерево()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧ.Источник КАК Источник,
| ТЧ.План КАК План
|ПОМЕСТИТЬ вт_Файл
|ИЗ
| &ТЧ КАК ТЧ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| вт_Файл.План КАК План
|ИЗ
| вт_Файл КАК вт_Файл
|
|СГРУППИРОВАТЬ ПО
| вт_Файл.План";

Запрос.УстановитьПараметр("ТЧ",дзДеревоРасходов.Выгрузить());
Запрос.УстановитьПараметр("Нач",Нач);
Запрос.УстановитьПараметр("Кон",Кон);
Запрос.УстановитьПараметр("Филиал",Филиал);

////////////////////////////////////////////////////////////////////////////////////////////

дзДеревоРасходов.Строки.Очистить();

ДеревоЗнач = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)

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

&НаСервере
Процедура Сформировать1НаСервере()
// Вставить содержимое обработчика.
КонецПроцедуры


Вот мой код.

fruitella

Ты много тут накуралесил. Разбей задачу по этапам:
1. Прочитай файл и получи с него данные.
2. Ты смотрел пример как заполняется дерево значений?

При обращении к строкам дерева используется метод Строки, т.е. будет так:
СтрокаПервогоУровня = дзДеревоРасходов.Строки.Добавить(); //Это первый уровень

//заполняешь его

СтрокаВторогоУровня = СтрокаПервогоУровня .Строки.Добавить(); //Это второй уровень
//заполняешь его

И тд.

Чтобы прочитать файл эксель, лучше используй построитель запроса. Он таб док преобразует в тз, а с тз уже проще работать.

maxxi

fruitella,

Для НомерСтроки=2 По КоличествоСтрок Цикл
       
    СтрокаДанных=дзДеревоРасходов.Добавить();
                           
    СтрокаДанных.Источник=Справочники.Склады.НайтиПоНаименованию(ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки,"ЧГ=0") + "C"+1).ТекущаяОбласть.Текст);   
       
    СтрокаДанных.План=ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки,"ЧГ=0") + "C"+2).ТекущаяОбласть.Текст;
           
КонецЦикла;

Тут надо изменить?

fruitella


&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере_Продавец_Дерево(АдресДанных)
   
    ТабДок= Новый ТабличныйДокумент;
   
    Данные= ПолучитьИзВременногоХранилища(АдресДанных);
   
    ПутьКФайлуНаСервере=ПолучитьИмяВременногоФайла("xlsx");
   
    Данные.Записать(ПутьКФайлуНаСервере);
   
    Попытка
       
        ТабДок.Прочитать(ПутьКФайлуНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Значение);
               
    Исключение
   
        Сообщение= Новый СообщениеПользователю;
       
        Сообщение.Текст="Файл не найден" + ОписаниеОшибки();
       
        Сообщение.Сообщить();
       
        Возврат;
           
    КонецПопытки;
   
ОбластиТаб = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);

Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластиТаб); 
Построитель.Выполнить();

ПрочитанныеДанные = Построитель.Результат.Выгрузить();

    Для Каждого СтрокаЧтения Из ПрочитанныеДанные Цикл
       //тут заполняешь ДЗ
    КонецЦикла;
 
           
КонецПроцедуры


LexaK

maxxi, вот тестовый пример как ТЗ загрузить в ДЗ
если помогло нажмите: Спасибо!

maxxi


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск