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

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 Ответить
Оставьте свое сообщение

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