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

Кнопка "Выгрузить"

Автор Ивашка, 16 фев 2020, 21:18

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

Ивашка

Здравствуйте! Подскажите пожалуйста: У меня есть кнопка,я хочу чтоб при нажатии этой кнопки, оно мне заменила два процесса: Открытие и Сохранения файлов, т.е сначала открывается диалог открытия, я выбираю любой файл(и я хочу чтоб этот документ записался на форме(не данные документа)), потом как сохранить этот документ автоматически без диалогов? Или использовать Хранилище?
Процедура ПолучитьПутьНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для загрузки";
Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = "Файл MS Excel *.xls)| *.xlsx";
Если Не Диалог.Выбрать() Тогда
Сообщить("Файл для обработки не выбран!");
Иначе
ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;
//очищаем таблицу и удаляем колонки
ТЗ.Очистить();
ТЗ.Колонки.Очистить();
ЭлементыФормы.ТЗ.Колонки.Очистить();
КонецПроцедуры

Процедура СохранитьНажатие(Элемент)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите имя файла для сохранения";
Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = "Файл MS Excel *.xls)| *.xlsx";
Если Диалог.Выбрать() Тогда
    //ТабДок = Новый ТабличныйДокумент;
    //КоличествоКолонок = ТЗ.Колонки.Количество();
   //Формируем строку с заголовками
    //Для Счетчик = 1 По КоличествоКолонок Цикл
    //ТекущаяКолонка = ТЗ.Колонки[Счетчик - 1];
    //ТабДок.Область("R1C" + Счетчик).Текст = ТекущаяКолонка.Имя;
    //КонецЦикла;
    //Добавляем строки из таблицы
    //НомерСтроки = 2;
    //Для Каждого СтрокаТаблицы Из ТЗ Цикл
    //Для НомерКолонки = 1 По КоличествоКолонок Цикл
    //ТабДок.Область("R" + СокрЛП(НомерСтроки) + "C" + СокрЛП(НомерКолонки)).Текст //= Строка(СтрокаТаблицы[НомерКолонки - 1]);
    //КонецЦикла;
    //НомерСтроки = НомерСтроки + 1;
    //КонецЦикла;
    //Записываем табличный документ в файл Excel
    //ТабДок.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
//ТабДок.Показать();
//КонецЕсли;
КонецПроцедуры

Процедура ВыгрузитьНажатие(Элемент)
ПолучитьПутьНачалоВыбора(Элемент,Ложь);
СохранитьНажатие(Элемент);
КонецПроцедуры

Поиск родных

Почитайте про азы метапрогограммирования (по выдёргиванию стула, на котором сидишь):
https://ru.wikipedia.org/wiki/Метапрограммирование

https://ru.wikipedia.org/wiki/Самомодифицирующийся_код

Цитата: Ивашка от 16 фев 2020, 21:18
Здравствуйте! Подскажите пожалуйста: У меня есть кнопка,я хочу чтоб при нажатии этой кнопки, оно мне заменила два процесса: Открытие и Сохранения файлов, т.е сначала открывается диалог открытия, я выбираю любой файл(и я хочу чтоб этот документ записался на форме(не данные документа)), потом как сохранить этот документ автоматически без диалогов? Или использовать Хранилище?
Процедура ПолучитьПутьНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для загрузки";
Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = "Файл MS Excel *.xls)| *.xlsx";
Если Не Диалог.Выбрать() Тогда
Сообщить("Файл для обработки не выбран!");
Иначе
ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;
//очищаем таблицу и удаляем колонки
ТЗ.Очистить();
ТЗ.Колонки.Очистить();
ЭлементыФормы.ТЗ.Колонки.Очистить();
КонецПроцедуры

Процедура СохранитьНажатие(Элемент)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите имя файла для сохранения";
Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = "Файл MS Excel *.xls)| *.xlsx";
Если Диалог.Выбрать() Тогда
    //ТабДок = Новый ТабличныйДокумент;
    //КоличествоКолонок = ТЗ.Колонки.Количество();
   //Формируем строку с заголовками
    //Для Счетчик = 1 По КоличествоКолонок Цикл
    //ТекущаяКолонка = ТЗ.Колонки[Счетчик - 1];
    //ТабДок.Область("R1C" + Счетчик).Текст = ТекущаяКолонка.Имя;
    //КонецЦикла;
    //Добавляем строки из таблицы
    //НомерСтроки = 2;
    //Для Каждого СтрокаТаблицы Из ТЗ Цикл
    //Для НомерКолонки = 1 По КоличествоКолонок Цикл
    //ТабДок.Область("R" + СокрЛП(НомерСтроки) + "C" + СокрЛП(НомерКолонки)).Текст //= Строка(СтрокаТаблицы[НомерКолонки - 1]);
    //КонецЦикла;
    //НомерСтроки = НомерСтроки + 1;
    //КонецЦикла;
    //Записываем табличный документ в файл Excel
    //ТабДок.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
//ТабДок.Показать();
//КонецЕсли;
КонецПроцедуры

Процедура ВыгрузитьНажатие(Элемент)
ПолучитьПутьНачалоВыбора(Элемент,Ложь);
СохранитьНажатие(Элемент);
КонецПроцедуры


Ивашка

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

Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь);

Если Не Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;

Попытка
ТекОбъект = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные;
ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), Новый СжатиеДанных);
ТекОбъект.ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог) + 1);
Исключение
Сообщить("" + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры

Процедура ВыгрузитьНажатие(Элемент)
ДополнительныеФайлыИмяФайлаНачалоВыбора(Элемент, Ложь);
КонецПроцедуры


но возникает ошибка: Поле не обнаружено(Хранилище)

DmitriyF

Цитата: Ивашка от 17 фев 2020, 09:23
Сделал вот так:
Процедура ДополнительныеФайлыИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)

Диалог = РаботаСФайлами.ПолучитьДиалогВыбораФайлов(Ложь);

Если Не Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;

Попытка
ТекОбъект = ЭлементыФормы.ДополнительныеФайлы.ТекущиеДанные;
ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), Новый СжатиеДанных);
ТекОбъект.ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог) + 1);
Исключение
Сообщить("" + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры

Процедура ВыгрузитьНажатие(Элемент)
ДополнительныеФайлыИмяФайлаНачалоВыбора(Элемент, Ложь);
КонецПроцедуры


но возникает ошибка: Поле не обнаружено(Хранилище)
Так это ты пытаешься на клиенте. Пробуй на сервере.

Теги:

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

Рейтинг@Mail.ru

Поиск