Внешняя обработка заполнения табличной части из Excel (с созданием Номенклатуры)

0. Batman 154 22.01.17 00:18 Сейчас в теме
Внешняя обработка заполнения табличной части из Excel (с созданием Номенклатуры)

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Blackie 23.01.17 10:40 Сейчас в теме
Спасибо за обработку. Вроде, удобно. А можете добавить способ загрузки xls-файла не только через com-соединение, но и без установленного на компьютере MS Excel? В 8.3, вроде, у табличного документа уже есть метод Прочитать().
lebedenko; +1 Ответить
2. Batman 154 23.01.17 11:20 Сейчас в теме
С предложением полностью согласен. Начиная с 8.3.6, если мне память не изменяет, появилась эта возможность. На дворе - 8.3.9, разумное пожелание. Будет время - придумаю, спасибо за предложение
3. lebedenko 25.01.17 07:49 Сейчас в теме
Очень существенное пожелание! При работе на сервере часто сталкиваюсь с такой проблемой com-соединений... из за чего приходится переходить на пользовательский компьютер с установленным Экселем.
4. ImHunter 196 25.01.17 07:55 Сейчас в теме
XLSX без Excel - легко. Ибо это зазипованный XML. Из какой-то обработки из состава БСП нужно использовать/скопировать 2-3-4 процедуры. Будет кому интересно - поищу.
5. Batman 154 25.01.17 09:45 Сейчас в теме
(4) ImHunter, информация пригодится, мне точно интересно :) Заранее - спасибо
34. shmax 4 12.11.19 14:00 Сейчас в теме
35. Batman 154 12.11.19 17:10 Сейчас в теме
(34) В почту пришло сообщение с текстом "БП 3.0.73.60 8.3.12.1685 при открытии сразу ошибка :-( {ВнешняяОбработка.изExcel.Форма.Форма.Форма(4)}: Поле объекта не обнаружено (ОбъектыНазначения) Если НЕ Параметры.ОбъектыНазначения...". Думаю, это был Ваш вопрос, хотя у меня видна только часть "БП 3.0.73.60 8.3.12.1685"

Проверьте, пожалуйста, для каких документов подключена эта обработка (картинку с примером прилагаю)
Прикрепленные файлы:
6. ImHunter 196 25.01.17 10:05 Сейчас в теме
// Передираем из БСП, обработка ЗагрузкаДанныхИзФайла
Функция ТаблицаИзФайлаExcel2007(ПутьКФайлу)
	
	ВременныйКаталог = КаталогВременныхФайлов() + ПолучитьРазделительПути() + "excel2007";
	УдалитьФайлы(ВременныйКаталог);
	
	РаспаковатьФайл(ПутьКФайлу, ВременныйКаталог);
	
	ФайлСтрок = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() +"sharedStrings.xml";
	СписокСтрок = ПрочитатьСписокСтрок(ФайлСтрок);
	
	ФайлФорматов = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() +"styles.xml";
	СписокФорматов = ПрочитатьСписокФорматов(ФайлФорматов);
	
	НомерЛиста = 1;
	ФайлЛиста = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() + "worksheets" + ПолучитьРазделительПути() + "sheet" + НомерЛиста + ".xml";
	Файл = Новый Файл(ФайлЛиста);
	Если НЕ Файл.Существует() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	МассивБукв = ПолучитьМассивБукв();
	ДеревоДанных = ПолучитьДеревоДанных(ФайлЛиста);
	
	Таблица = Новый ТаблицаЗначений;
	
	// Создаем колонки
	Колонки = ДеревоДанных.Строки.Найти("dimension", "Объект", Истина);
	Счетчик = 0;
	Для Каждого Строка Из Колонки.Строки Цикл
		Если Строка.Объект = "ref" Тогда
			Диапазон = Строка.Значение; 
			// Поиск максимального значения колонки.
			Счетчик = МассивБукв.Количество();
			Пока Счетчик > 0 Цикл 
				Счетчик = Счетчик - 1;
				Если Найти(Диапазон, МассивБукв[Счетчик]) > 0 Тогда
					Для Индекс = 0 По Счетчик Цикл
						Таблица.Колонки.Добавить(МассивБукв[Индекс]);
					КонецЦикла;
					Счетчик = 0;
				КонецЕсли;
			КонецЦикла;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	// читаем строки
	СтрСтрок = ДеревоДанных.Строки.Найти("sheetData", "Объект", Истина);
	Для Каждого Строка Из СтрСтрок.Строки Цикл
		НоваяСтрока = Таблица.Добавить();
		
		Для Каждого Колонка Из Строка.Строки Цикл
			Если Колонка.Объект <> "c" Тогда
				Продолжить;
			КонецЕсли;
			
			ЗначениеЯчейки = Неопределено;
			
			СтрЗначение = Колонка.Строки.Найти("v", "Объект");
			Если СтрЗначение <> Неопределено Тогда
				ЗначениеЯчейки = СтрЗначение.Значение;
			КонецЕсли;
			
			ЯчейкаСодержитТекст = Ложь;
			СтрЗначение = Колонка.Строки.Найти("t", "Объект");
			Если СтрЗначение <> Неопределено И СтрЗначение.Значение = "s" И ЗначениеЯчейки <> Неопределено Тогда
				ЯчейкаСодержитТекст = Истина;
				Позиция = Число(ЗначениеЯчейки); 
				Если СписокСтрок.Количество() > Позиция Тогда
					ЗначениеЯчейки = СписокСтрок.Получить(Позиция).Значение;
				КонецЕсли;
			КонецЕсли;
			
			сОбъект = Колонка.Строки.Найти("s", "Объект");
			Если сОбъект <> Неопределено Тогда
				СтрЗначение = СтрокуВЧисло(Колонка.Строки.Найти("s", "Объект").Значение, -1);
				Если СтрЗначение >= 0 Тогда
					ИмяФормата = СписокФорматов.Получить(СтрЗначение);
					Если ИмяФормата = "Дата" ИЛИ ИмяФормата = "ДатаВремя" ИЛИ ИмяФормата = "Время" Тогда
						Если ЗначениеЗаполнено(ЗначениеЯчейки) И НЕ ЯчейкаСодержитТекст Тогда
							ПозицияРазделителя = Найти(ЗначениеЯчейки, ".");
							Если ПозицияРазделителя > 0 Тогда 
								КоличествоДней = СтрокуВЧисло(Лев(ЗначениеЯчейки, ПозицияРазделителя - 1)) * 86400 - 2 * 86400;
								КоличествоСекунд = СтрокуВЧисло(Сред(ЗначениеЯчейки, ПозицияРазделителя + 1)) - 2 * 60;
							Иначе
								КоличествоДней = СтрокуВЧисло(ЗначениеЯчейки) * 86400 - 2 * 86400;
								КоличествоСекунд = 0;
							КонецЕсли;
							ПолученнаяДата = Дата(1900, 1, 1, 0, 0, 0) + КоличествоДней + КоличествоСекунд;
							Если ИмяФормата = "Дата" Тогда 
								ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=D");
							ИначеЕсли ИмяФормата = "ДатаВремя" Тогда 
								ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=DT");
							ИначеЕсли ИмяФормата = "Время" Тогда 
								ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=T");
							КонецЕсли;
						КонецЕсли;
					Иначе
						Если ИмяФормата = "Число" Тогда
							ЗначениеЯчейкиЧисло = Формат(СтрокуВЧисло(ЗначениеЯчейки), "ЧРГ=''; ЧГ=0");
							Если НЕ ЗначениеЗаполнено(ЗначениеЯчейкиЧисло) Тогда
								ЗначениеЯчейки = Формат(ЗначениеЯчейки, "ЧРГ=''; ЧГ=0");
							Иначе
								ЗначениеЯчейки = ЗначениеЯчейкиЧисло;
							КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
			
			// поиск колонки
			СтрЗначение = Колонка.Строки.Найти("r", "Объект");
			Если СтрЗначение <> Неопределено Тогда
				ИмяКолонки = СтрЗначение.Значение;
			КонецЕсли;
			ИндексСтроки = Неопределено;
			Счетчик = МассивБукв.Количество();
			Пока Счетчик > 0 Цикл 
				Счетчик = Счетчик - 1;
				Если Найти(ИмяКолонки, МассивБукв[Счетчик])>0 Тогда
					ИндексСтроки = Счетчик;
					Счетчик = 0;
				КонецЕсли;   
			КонецЦикла;
			
			НоваяСтрока[МассивБукв[ИндексСтроки]] = ЗначениеЯчейки;
		КонецЦикла;
	КонецЦикла;
	Возврат Таблица;
	
КонецФункции

Функция ПолучитьДвоичныеДанныеДляЗагрузки(АдресХранилищаИлиДвоичныеДанные)
	// анализируем входной параметр	
	ТипВходногоПараметра = ТипЗнч(АдресХранилищаИлиДвоичныеДанные);
	Если ТипВходногоПараметра=Тип("Строка") Тогда 
		Если Не ЭтоАдресВременногоХранилища(АдресХранилищаИлиДвоичныеДанные) Тогда 
			ВызватьИсключение("Недопустимый адрес загружаемого реестра: " + АдресХранилищаИлиДвоичныеДанные);
		КонецЕсли;
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилищаИлиДвоичныеДанные);
		ТипДанныхИзХранилища = ТипЗнч(ДвоичныеДанные);
		Если ТипДанныхИзХранилища<>Тип("ДвоичныеДанные") Тогда
			ВызватьИсключение("По переданному адресу " + АдресХранилищаИлиДвоичныеДанные + " содержатся НЕ двоичные данные. Тип: " + ТипДанныхИзХранилища);
		КонецЕсли;
	ИначеЕсли ТипВходногоПараметра=Тип("ДвоичныеДанные") Тогда 
		ДвоичныеДанные = АдресХранилищаИлиДвоичныеДанные;
	Иначе 
		ВызватьИсключение("Недопустимый вид данных загружаемого реестра: " + ТипВходногоПараметра);
	КонецЕсли;
	Возврат ДвоичныеДанные;
КонецФункции

// Локальная замена штатной функции из платформы 8.3
Функция ПолучитьРазделительПути()
	Возврат "\";
КонецФункции

Процедура РаспаковатьФайл(Файл, Каталог)
	Архив = Новый ЧтениеZipФайла;
	Архив.Открыть(Файл);
	Архив.ИзвлечьВсе(Каталог, РежимВосстановленияПутейФайловZIP.Восстанавливать);
КонецПроцедуры
Показать
bow; AlX0id; +2 Ответить
7. Batman 154 25.01.17 10:35 Сейчас в теме
8. rozer 271 26.01.17 20:55 Сейчас в теме
велосипед это конечно хорошо но в БСП есть же "загрузка из файлов" https://youtu.be/ovjumkjtn9I?list=PL8TlceaQF_l_CMirNFV1rgUfXUM_w_JMD .... enjoy ))
9. ir.iv 16.10.17 01:29 Сейчас в теме
Здравствуйте, Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.52.32)
При открытии возникла ошибка:
Поле объекта не обнаружено (ОбъектыНазначения)
Помогите, будьте добры.....
10. Batman 154 16.10.17 10:33 Сейчас в теме
(9) ir.iv, доброго времени суток, отвечаю Вам в личном сообщении
11. ir.iv 16.10.17 14:04 Сейчас в теме
(10) Спасибо огромное-все заработало! Обработку подключила в самой программе (администрирование-подключение внешних печатных форм и обработок). Давно искала такую "без заморочек". Так что +++++
20. llg_44 25 16.02.19 22:20 Сейчас в теме
(10) У меня аналогичная ошибка. Могу я расчитывать на помощь? время прошло, релиз уже 3.0. 67.67.
{ВнешняяОбработка.изExcel.Форма.Форма.Форма(4)}: Поле объекта не обнаружено (ОбъектыНазначения)
Если НЕ Параметры.ОбъектыНазначения = Неопределено Тогда
21. llg_44 25 16.02.19 22:22 Сейчас в теме
(10) У меня аналогичная ошибка. Могу я расчитывать на помощь? время прошло, релиз уже 3.0. 67.67.
{ВнешняяОбработка.изExcel.Форма.Форма.Форма(4)}: Поле объекта не обнаружено (ОбъектыНазначения)
Если НЕ Параметры.ОбъектыНазначения = Неопределено Тогда
(10)
Прикрепление обработки к базе ничего не дало. Я не нахожу следы обработки в базе(
22. Batman 154 16.02.19 23:16 Сейчас в теме
(21) Доброго времени суток. Давайте проверим, к каким типам документов Вы подключили обработку?
Прикрепленные файлы:
23. llg_44 25 17.02.19 14:54 Сейчас в теме
(22) К счету на оплату покупателю.
24. Batman 154 17.02.19 15:32 Сейчас в теме
(23) Проверил на демо-базе релиза 3.0.67.74, серверная, подключив обработку к документу "Счет на оплату покупателю", воспроизвести ситуацию не удалось, к сожалению. В чем еще может быть причина....
В одном из сообщений была фраза, что на версии КОРП не работает. Не проверял на этой версии конфигурации. У Вас, случайно, не КОРП?
25. llg_44 25 17.02.19 18:17 Сейчас в теме
26. Batman 154 18.02.19 09:05 Сейчас в теме
(25) Ответил личным сообщением
12. Batman 154 16.10.17 19:36 Сейчас в теме
13. user777072 22.01.18 12:59 Сейчас в теме
Добрый день,
Не работает в конфигурации КОРП
Ошибка - Поле объекта не обнаружено (объекты назначения)
Как можно исправить?
14. Batman 154 22.01.18 16:28 Сейчас в теме
Добрый день.
При подключении обработки - указали объекты назначения (документы), к которым должна подключиться эта обработка заполнения табличных частей?
15. nata_87 36 20.08.18 15:51 Сейчас в теме
При нажатии на кнопку прочитать файл, данные с файла читаются, а при нажатии на 1-Заполнить таблицу выходит сообщение, что Файл не существует!
16. Batman 154 20.08.18 21:04 Сейчас в теме
Что может быть.... Длина пути к файлу - не превышает ли 255 символов?
17. AlexB1 13.02.19 00:13 Сейчас в теме
не заполняет таблицу. файл видит. бп (3.0.67.43)
18. Batman 154 13.02.19 10:58 Сейчас в теме
(17) Доброго времени суток. Уточните - база файловая или серверная? Пришлите для примера файл, пожалуйста
19. AlexB1 13.02.19 17:08 Сейчас в теме
Доброго дня. Пробую на файловой.Но работать будет на серверной.
Прикрепленные файлы:
Поставка МТР 4 квартала для АБС для загрузки.xls
27. VKuser105103569 21.04.19 19:15 Сейчас в теме
двс!
аудит на фреше пройдет?
29. Batman 154 21.04.19 21:13 Сейчас в теме
(27) Затрудняюсь ответить. С фрешем еще не работал
30. tsk-ga2011 22.04.19 19:34 Сейчас в теме
Здравствуйте, Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.70.30)
При открытии возникла ошибка:
Поле объекта не обнаружено (Товары)
Помогите, пожалуйста.
31. Batman 154 23.04.19 08:35 Сейчас в теме
(30) Доброго времени суток. Проверьте, для какого документа подключена внешняя обработка. Судя по тексту - либо не подключена к документу, либо подключена к документу, у которого нет табличной части с названием "Товары". Чуть выше в переписке, в ответе с номером 22 показана картинка, проверьте на своей ситуации
32. tsk-ga2011 23.04.19 13:17 Сейчас в теме
Добрый день, высылаю скриншоты, посмотрите пожалуйста.
Прикрепленные файлы:
33. Batman 154 23.04.19 22:02 Сейчас в теме
(32) Верно, у этого документа нет табличных частей с названием "Товар" . Выслал в личном сообщении обработку
Оставьте свое сообщение
Вопросы с вознаграждением