Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 окт 2024, 09:00

Загрузка из табличного документа внешней обработки в документ

Автор helgе, 02 ноя 2018, 09:55

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

helgе

В общем во внешней обработке сделал так,чтобы из файла (*.xls) приложение OpenOffice calc данные попадали в ТабДок,который я поместил во внешнюю обработку, теперь хочу,чтобы данные из ТабДока попадали в соответствующие реквезиты документа (код,наименование,номер). Не пойму как... буду рад помощи если будет.

alex0402

Цитата: helgе от 02 ноя 2018, 09:55В общем во внешней обработке сделал так,чтобы из файла (*.xls) приложение OpenOffice calc данные попадали в ТабДок

Цитата: helgе от 02 ноя 2018, 09:55теперь хочу,чтобы данные из ТабДока попадали в соответствующие реквезиты документа (код,наименование,номер).

Почему не сразу из Excel?
Спасибо за Сказать спасибо

helgе

Цитата: alex0402 от 02 ноя 2018, 09:59
Цитата: helgе от 02 ноя 2018, 09:55В общем во внешней обработке сделал так,чтобы из файла (*.xls) приложение OpenOffice calc данные попадали в ТабДок

Цитата: helgе от 02 ноя 2018, 09:55теперь хочу,чтобы данные из ТабДока попадали в соответствующие реквезиты документа (код,наименование,номер).

Почему не сразу из Excel?
На компьютере нет экселя. Да и просто хочется именно так поработать.

Kamor

Вот пример загрузки из экселя

Процедура ОткрытьФайл()

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

ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
Если ДиалогВыбораФайла.Выбрать() Тогда

ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Если нРег(ФайлНаДиске.Расширение) = ".xlsx" или нРег(ФайлНаДиске.Расширение) = ".xls" Тогда
ПрочитатьТабличныйДокументИзExcel1(ДиалогВыбораФайла.ПолноеИмяФайла);
Иначе
Сообщить("Файл не формата Excel");
КонецЕсли;
КонецЕсли; 

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

Функция ПрочитатьТабличныйДокументИзExcel(ИмяФайла, НомерЛистаExcel = 1) Экспорт
xlLastCell = 11;

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Сообщить("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;

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

ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;

//считываем строки документа excel
Для Row = 2 По RowCount Цикл
НомерДок =  СокрЛП(Строка (Excel.Cells(Row,1).Value));
Сумма = Число(СокрЛП(Строка (Excel.Cells(Row,2).Value)));
СтЗатрат = СокрЛП(Строка (Excel.Cells(Row,4).Value));
Сообщить(НомерДок);
//Поиск документа
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Номер", НомерДок);
Запрос.УстановитьПараметр("Дата", Дата('20180101'));
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
| ПоступлениеТоваровУслуг.СкладОрдер.Подразделение КАК СкладОрдер
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Номер = &Номер";

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() тогда
сообщение = "Документ: " + НомерДок + " не найден";
сообщить(сообщение);
КонецЕсли;

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Ссылка = ВыборкаДетальныеЗаписи.ссылка.получитьОбъект();
Ссылка.сумма = Сумма;
        попытка
Ссылка.ОбменДанными.Загрузка = Истина;
Ссылка.записать();
Исключение
сообщение = "не удалось записать "+Строка(Ссылка.ссылка);
сообщить(Сообщение);
КонецПопытки;
КонецЦикла;
КонецЦикла;

Excel.WorkBooks.Close(); 
Excel = 0;

Возврат Истина;

КонецФункции


helgе

Цитата: Kamor от 02 ноя 2018, 10:34
Вот пример загрузки из экселя

Процедура ОткрытьФайл()

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

ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
Если ДиалогВыбораФайла.Выбрать() Тогда

ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Если нРег(ФайлНаДиске.Расширение) = ".xlsx" или нРег(ФайлНаДиске.Расширение) = ".xls" Тогда
ПрочитатьТабличныйДокументИзExcel1(ДиалогВыбораФайла.ПолноеИмяФайла);
Иначе
Сообщить("Файл не формата Excel");
КонецЕсли;
КонецЕсли; 

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

Функция ПрочитатьТабличныйДокументИзExcel(ИмяФайла, НомерЛистаExcel = 1) Экспорт
xlLastCell = 11;

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Сообщить("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;

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

ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;

//считываем строки документа excel
Для Row = 2 По RowCount Цикл
НомерДок =  СокрЛП(Строка (Excel.Cells(Row,1).Value));
Сумма = Число(СокрЛП(Строка (Excel.Cells(Row,2).Value)));
СтЗатрат = СокрЛП(Строка (Excel.Cells(Row,4).Value));
Сообщить(НомерДок);
//Поиск документа
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Номер", НомерДок);
Запрос.УстановитьПараметр("Дата", Дата('20180101'));
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
| ПоступлениеТоваровУслуг.СкладОрдер.Подразделение КАК СкладОрдер
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Номер = &Номер";

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() тогда
сообщение = "Документ: " + НомерДок + " не найден";
сообщить(сообщение);
КонецЕсли;

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Ссылка = ВыборкаДетальныеЗаписи.ссылка.получитьОбъект();
Ссылка.сумма = Сумма;
        попытка
Ссылка.ОбменДанными.Загрузка = Истина;
Ссылка.записать();
Исключение
сообщение = "не удалось записать "+Строка(Ссылка.ссылка);
сообщить(Сообщение);
КонецПопытки;
КонецЦикла;
КонецЦикла;

Excel.WorkBooks.Close(); 
Excel = 0;

Возврат Истина;

КонецФункции


Да. Спасибо,но я это знаю. Я ещё нашёл функцию вообще через js для OpenOffice, но я делаю по другому я в ТабДок закинул данные из файла OpenOffice, вот так:
ЭлементыФормы.табдок.Прочитать(ИмяФайлаXLS);
Теперь думаю, возможно ли вообще эти данные закинуть в Поля Документа в 1с. Например "УстановкаЦенНоменклатуры" в Ут 10.3. Ну вообще в любой другой. Но не могу понять всё равно...

wise

(0) ОБЫЧНО... из табличного документа ЛУЧШЕ загрузить в таблицу значений(с ней ЛЕГЧЕ работать), а из ТЗ уже творить всякие документы, наборы записей, элементы справочников...
В Вашем случае нужно читать области табличного документа...
http://solutions.1cstyle.ru/public/692579/
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

helgе

Цитата: wise от 02 ноя 2018, 11:49
(0) ОБЫЧНО... из табличного документа ЛУЧШЕ загрузить в таблицу значений(с ней ЛЕГЧЕ работать), а из ТЗ уже творить всякие документы, наборы записей, элементы справочников...
В Вашем случае нужно читать области табличного документа...
http://solutions.1cstyle.ru/public/692579/
Спасибо,помучаюсь теперь с ТаблицойЗначений...

Kamor

А что с ТаблицейЗначений?

        Для каждого стр из ТаблицаЗначений цикл
        НовыйДокумент = Документы.УстановкаЦенНоменклатуры.НайтиПоКоду("коддокумента").получитьОбъект();
        НовыйДокумент.реквизит = стр.НазваниеСтолбцаТЗ;//Заполняете все поля
        НовыйДокумент.записать();
        конеццикла

Теги:

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

Рейтинг@Mail.ru

Поиск