Как сделать загрузку данных из ексель документа

1. Logmaster 05.04.23 10:59 Сейчас в теме
Здравствуйте, столкнулся с проблемой при создании функционала по загрузке данных из ексель документа в справочник, нашел видео по которому сделал, но некоторые реквизиты остаются пустыми, как это можно исправить?
По теме из базы знаний
Найденные решения
9. Flondi32042 07.04.23 09:29 Сейчас в теме
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , истина, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборФайла(Результат,Адрес, ВыбранноеИмяФайла,ДополнительныеПараметры) экспорт
    если не Результат тогда
        Возврат;
    Конецесли;
    ПутьКФайлу = ВыбранноеИмяФайла;
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
СформироватьНаСервере(ПутьКФайлу);    
КонецПроцедуры

Процедура СформироватьНаСервере(ПутьКФайлу)
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПостроительЗапроса = новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый     ОписаниеИсточникаДанных(ТабДок.Область("Sheet1"));
ПостроительЗапроса.Выполнить();
ТабЗнач = ПостроительЗапроса.Результат.Выгрузить();
ЧислоСтрок = ТабЗнач.Количество();

Для Строка=0 по ЧислоСтрок-1 цикл
    СтрокаТЗ = ТабЗнач[Строка];
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Детали.Ссылка КАК Детали
        |ИЗ
        |    Справочник.Детали КАК Детали
        |ГДЕ
        |    Детали.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Наименование", СтрокаТЗ.Наименование);
    Выборка = Запрос.Выполнить().Выбрать();
    если Выборка.Следующий() тогда
    Продолжить;
иначе
    если Справочники.ГОСТЫ.НайтиПоНаименованию(СтрокаТЗ.ГОСТ)=Справочники.ГОСТЫ.ПустаяСсылка() тогда
    ГОСТ = Справочники.ГОСТЫ.СоздатьЭлемент();
    ГОСТ.Наименование = СтрокаТЗ.ГОСТ;
    ГОСТ.Записать();
Конецесли;

    если Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(СтрокаТЗ.ЕдиницаИзмерения)=Справочники.ЕдиницыИзмерения.ПустаяСсылка() тогда
    ЕД = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    ЕД.Наименование = СтрокаТЗ.ЕдиницаИзмерения;
    ЕД.Записать();
Конецесли;
если Справочники.ТипыДеталей.НайтиПоНаименованию(СтрокаТЗ.Тип)=Справочники.ТипыДеталей.ПустаяСсылка() тогда
    ТД = Справочники.ТипыДеталей.СоздатьЭлемент();
    ТД.Наименование = СтрокаТЗ.Тип;
    ТД.Записать();
Конецесли;    
    если Справочники.Детали.НайтиПоНаименованию(СтрокаТЗ.Наименование) = Справочники.Детали.ПустаяСсылка() тогда
    Деталь = Справочники.Детали.СоздатьЭлемент();
    Деталь.Наименование = СтрокаТЗ.Наименование;
    Деталь.ГОСТ = Справочники.ГОСТЫ.НайтиПоНаименованию(СтрокаТЗ.ГОСТ);
    Деталь.Артикул = СтрокаТЗ.Артикул;
    Деталь.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(СтрокаТЗ.ЕдиницаИзмерения);
    Деталь.Тип = Справочники.ТипыДеталей.НайтиПоНаименованию(СтрокаТЗ.Тип);
    Деталь.Цена = СтрокаТЗ.Цена;
    Деталь.Количество = СтрокаТЗ.Количество;
    Деталь.Записать();
Конецесли;    
Конецесли;
Конеццикла;
КонецПроцедуры;

Показать




Попробуй этим кодом воспользоваться, если нужно грузить в другие Справочники а не только реквизиты то придется писать еще условия с созданием записей
Logmaster; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user856012 14 05.04.23 11:28 Сейчас в теме
(1)
нашел видео по которому сделал, но некоторые реквизиты остаются пустыми, как это можно исправить?
Найти другое видео. :-)
10. user1933577 07.04.23 11:53 Сейчас в теме
Есть вот такая штука.

Не туда ответил....как исправить?
(2)
Прикрепленные файлы:
ЗагрузкаДанныхИзТабличногоДокумента_УФ_v2.epf
11. user856012 14 07.04.23 12:04 Сейчас в теме
(10)
Есть вот такая штука.
Мне-то "такая штука" зачем? Во-первых, автор - не я и проблема не у меня.

Во-вторых, автор уже отметил выложенный код как решение, так что и ему ваша "штука" вряд ли пригодится.

На будущее: вы пришли на профессиональный форум - будьте внимательнее. ;-)
4. lefthander 05.04.23 11:42 Сейчас в теме
(1)Можно на форуме здесь поискать как это делается.
5. DesertPunk 05.04.23 13:54 Сейчас в теме
(1) Какой справочник? Что именно грузишь? Как выглядит документ excel? Какие реквизиты остаются пустыми? Код на столько секретен, что выкладывать его нельзя?
6. user1826630 05.04.23 15:12 Сейчас в теме
(5) А че, включить воображение - никак? Тебе же за это здесь деньги платят!
7. DesertPunk 05.04.23 15:21 Сейчас в теме
(6) Ну раз платят, то придется. Так пойдет:
&НаСервере 
Процедура ЗапуститьОбработку(Источник) Экспорт
    День = ДеньНедели(ТекущаяДата());
    Пользователь = Справочники.Пользователи.НайтиПоНаименованию(".....");
    СписокДляХраненияАдресатов = Новый СписокЗначений;
    СписокДляХраненияАдресатов.Добавить(Пользователь);
    НачатьТранзакцию();
    
    Попытка
        
        Для каждого Адресат Из СписокДляХраненияАдресатов Цикл
            Н = Гиф(День); 
            Т = Текст(День);
            ТекстВопроса = Т + Н;        
            Телеграм = Справочники.Телеграм.СоздатьЭлемент();
            Телеграм.Пользователь     = Адресат.Значение;
            Телеграм.ДатаСообщения     = ТекущаяДата();
            Телеграм.ВТелеграм        = ТекстВопроса;
            Телеграм.Кнопки         = "";
            Попытка
                Телеграм.Записать();
            Исключение
                
            КонецПопытки;
        КонецЦикла;
        
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
    КонецПопытки;
КонецПроцедуры

&НаСервере 
Функция Гиф(День)
    Стр = "";
    Если День = 1 Тогда
        Стр = "🌹"; 
    ИначеЕсли День = 2 Тогда 
        Стр = "😏";
    ИначеЕсли День = 3 Тогда 
        Стр = "🌻";    
    ИначеЕсли День = 4 Тогда 
        Стр = "    😘";
    ИначеЕсли День = 5 Тогда 
        Стр = "🌸";        
    ИначеЕсли День = 6 Тогда 
        Стр = "😊";
    ИначеЕсли День = 7 Тогда 
        Стр = "🏵";        
    КонецЕсли;    
    Возврат Стр;
КонецФункции    

&НаСервере 
Функция Текст(День)
        Стр = "";
    Если День = 1 Тогда
        Стр = "....., ты сегодня прекрасно выглядишь "; 
    ИначеЕсли День = 2 Тогда 
        Стр = "....., доброго утра и хорошего настроения ";
    ИначеЕсли День = 3 Тогда 
        Стр = "....., ты очень красивая ";    
    ИначеЕсли День = 4 Тогда 
        Стр = "....., ты сегодня прекрасно выглядишь ";
    ИначеЕсли День = 5 Тогда 
        Стр = "....., ты очень красивая ";        
    ИначеЕсли День = 6 Тогда 
        Стр = "....., доброго утра и хорошего настроения ";
    ИначеЕсли День = 7 Тогда 
        Стр = "....., ты сегодня прекрасно выглядишь ";        
    КонецЕсли;    
    Возврат Стр;
КонецФункции    



Показать
8. user1826630 05.04.23 15:24 Сейчас в теме
(7) Слабак! Вот правильный код:
&НаСервере
Процедура ДобавитьНаборПечатныхФормПоКлиентуВДерево(ДеревоПечатныхФорм, ДанныеКлиента, ИдентификаторКлиента, ПечатныеФормыКлиента)
    
    СтрокаОтбораИсточника  = "Организация,Партнер,Контрагент,Источник";
    СтруктураОтбораИсточника = Новый Структура(СтрокаОтбораИсточника);
    
    ИсточникиПечатныхФорм = ПечатныеФормыКлиента.Скопировать(, СтрокаОтбораИсточника);
    ИсточникиПечатныхФорм.Свернуть(СтрокаОтбораИсточника);
    
    Для Каждого СтрокаИсточника Из ИсточникиПечатныхФорм Цикл
        
        ОтборСуществующихСтрок = Новый Структура;
        ОтборСуществующихСтрок.Вставить("ИдентификаторКлиента", ИдентификаторКлиента);
        ОтборСуществующихСтрок.Вставить("Источник", СтрокаИсточника.Источник);
        ОтборСуществующихСтрок.Вставить("ЭтоГруппа", Истина);
        
        СуществующиеСтрокиИсточника = ДеревоПечатныхФорм.Строки.НайтиСтроки(ОтборСуществующихСтрок);
        Если СуществующиеСтрокиИсточника.Количество() Тогда
            НастройкаИсточника = СуществующиеСтрокиИсточника[0];
            НастройкаИсточника.Строки.Очистить();
        Иначе
            НастройкаИсточника = ДеревоПечатныхФорм.Строки.Добавить();
            НастройкаИсточника.ЭтоГруппа                  = Истина;
            НастройкаИсточника.ИдентификаторКлиента       = ИдентификаторКлиента;
            НастройкаИсточника.ПредставлениеПечатнойФормы = Строка(СтрокаИсточника.Источник);
            НастройкаИсточника.Источник                   = СтрокаИсточника.Источник;
            НастройкаИсточника.Печатать                   = Истина;
        КонецЕсли;
        
        ЗаполнитьЗначенияСвойств(СтруктураОтбораИсточника, СтрокаИсточника);
        ПечатныеФормыИсточника = ПечатныеФормыКлиента.НайтиСтроки(СтруктураОтбораИсточника);
        
        Для Каждого СтрокаПечатнойФормы Из ПечатныеФормыИсточника Цикл
            Если ТипЗнч(СтрокаПечатнойФормы.ТабличныйДокумент) = Тип("ТабличныйДокумент") И СтрокаПечатнойФормы.ТабличныйДокумент.ВысотаТаблицы > 0 Тогда
                // Добавляем запись в дерево печатных форм
                НастройкаПечатнойФормы = НастройкаИсточника.Строки.Добавить();
                НастройкаПечатнойФормы.ИдентификаторКлиента       = ИдентификаторКлиента;
                НастройкаПечатнойФормы.ИдентификаторПечатнойФормы = СтрокаПечатнойФормы.Идентификатор;
                НастройкаПечатнойФормы.ПредставлениеПечатнойФормы = СтрокаПечатнойФормы.СинонимМакета;
                НастройкаПечатнойФормы.КоличествоЭкземпляров      = СтрокаПечатнойФормы.Экземпляров;
                НастройкаПечатнойФормы.ИмяМакета                  = СтрокаПечатнойФормы.ИмяМакета;
                НастройкаПечатнойФормы.Источник                   = СтрокаПечатнойФормы.Источник;
                НастройкаПечатнойФормы.Печатать                   = Истина;
                
                ДобавитьНаборЭлементовПечатнойФормы(СтрокаПечатнойФормы.Идентификатор);
                ЭтаФорма["ПечатнаяФорма_" + СтрокаПечатнойФормы.Идентификатор] = СтрокаПечатнойФормы.ТабличныйДокумент;
                
            КонецЕсли;
        КонецЦикла;
        
    КонецЦикла;
    
КонецПроцедуры
Показать
3. soft_wind 05.04.23 11:31 Сейчас в теме
(1) дописать нужный код для поиска, и если не найдено то для создания новых элементов
9. Flondi32042 07.04.23 09:29 Сейчас в теме
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
    НачатьПомещениеФайла(Оповещение, , , истина, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборФайла(Результат,Адрес, ВыбранноеИмяФайла,ДополнительныеПараметры) экспорт
    если не Результат тогда
        Возврат;
    Конецесли;
    ПутьКФайлу = ВыбранноеИмяФайла;
КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
СформироватьНаСервере(ПутьКФайлу);    
КонецПроцедуры

Процедура СформироватьНаСервере(ПутьКФайлу)
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ПостроительЗапроса = новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый     ОписаниеИсточникаДанных(ТабДок.Область("Sheet1"));
ПостроительЗапроса.Выполнить();
ТабЗнач = ПостроительЗапроса.Результат.Выгрузить();
ЧислоСтрок = ТабЗнач.Количество();

Для Строка=0 по ЧислоСтрок-1 цикл
    СтрокаТЗ = ТабЗнач[Строка];
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Детали.Ссылка КАК Детали
        |ИЗ
        |    Справочник.Детали КАК Детали
        |ГДЕ
        |    Детали.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Наименование", СтрокаТЗ.Наименование);
    Выборка = Запрос.Выполнить().Выбрать();
    если Выборка.Следующий() тогда
    Продолжить;
иначе
    если Справочники.ГОСТЫ.НайтиПоНаименованию(СтрокаТЗ.ГОСТ)=Справочники.ГОСТЫ.ПустаяСсылка() тогда
    ГОСТ = Справочники.ГОСТЫ.СоздатьЭлемент();
    ГОСТ.Наименование = СтрокаТЗ.ГОСТ;
    ГОСТ.Записать();
Конецесли;

    если Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(СтрокаТЗ.ЕдиницаИзмерения)=Справочники.ЕдиницыИзмерения.ПустаяСсылка() тогда
    ЕД = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    ЕД.Наименование = СтрокаТЗ.ЕдиницаИзмерения;
    ЕД.Записать();
Конецесли;
если Справочники.ТипыДеталей.НайтиПоНаименованию(СтрокаТЗ.Тип)=Справочники.ТипыДеталей.ПустаяСсылка() тогда
    ТД = Справочники.ТипыДеталей.СоздатьЭлемент();
    ТД.Наименование = СтрокаТЗ.Тип;
    ТД.Записать();
Конецесли;    
    если Справочники.Детали.НайтиПоНаименованию(СтрокаТЗ.Наименование) = Справочники.Детали.ПустаяСсылка() тогда
    Деталь = Справочники.Детали.СоздатьЭлемент();
    Деталь.Наименование = СтрокаТЗ.Наименование;
    Деталь.ГОСТ = Справочники.ГОСТЫ.НайтиПоНаименованию(СтрокаТЗ.ГОСТ);
    Деталь.Артикул = СтрокаТЗ.Артикул;
    Деталь.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(СтрокаТЗ.ЕдиницаИзмерения);
    Деталь.Тип = Справочники.ТипыДеталей.НайтиПоНаименованию(СтрокаТЗ.Тип);
    Деталь.Цена = СтрокаТЗ.Цена;
    Деталь.Количество = СтрокаТЗ.Количество;
    Деталь.Записать();
Конецесли;    
Конецесли;
Конеццикла;
КонецПроцедуры;

Показать




Попробуй этим кодом воспользоваться, если нужно грузить в другие Справочники а не только реквизиты то придется писать еще условия с созданием записей
Logmaster; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот