Пример работы с общим макетом типа ActiveDocument в клиент-серверном варианте Код 1C v 8.х
&НаСервере
Функция ПолучитьДанныеМакета()
АдресХранилища = Новый УникальныйИдентификатор( ) ;
Макет = ПолучитьОбщийМакет( "Договор" ) ;
ВременныйФайл = ПолучитьИмяВременногоФайла( "doc" ) ;
Макет. Записать( ВременныйФайл) ;
Адрес = ПоместитьВоВременноеХранилище( Новый ДвоичныеДанные( ВременныйФайл) , АдресХранилища) ;
УдалитьФайлы( ВременныйФайл) ;
Возврат Адрес;
КонецФункции
&НаСервере
Функция КодПользователя(Пользователь)
Возврат СокрЛП( Пользователь. Сотрудник. Код) ;
КонецФункции
&НаКлиенте
Процедура ПечатьДоговора(Ссылка,РеквизитыДляПечати)
Пользователь = ОбщегоНазначения. ТекущийПользователь( ) ;
Каталог = КаталогВременныхФайлов( ) ;
Каталог = ? ( Прав( Каталог, 1 ) = "\" , Каталог, Каталог+ "\" ) ;
ПолноеИмяФайла = Каталог+ "Договор_" + КодПользователя( Пользователь) + ".doc" ;
Попытка
Индификатор = ПолучитьДанныеМакета( ) ;
МакетДоговора = ПолучитьИзВременногоХранилища( Индификатор) ;
МакетДоговора. Записать( ПолноеИмяФайла) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
Попытка
MSWord = Новый COMОбъект( "Word.Application" ) ;
Исключение
Сообщить( "Ошибка при попытке создать объект "" MS Word"" !" + Символы. ПС +
"Возможно приложение "" MS Word"" не установлено или установлено неправильно." , СтатусСообщения. Внимание) ;
КонецПопытки ;
MSWord. Documents. Open( ПолноеИмяФайла) ;
Попытка
Документ = MSWord. Application. Documents( 1 ) ;
Документ. Activate( ) ;
Исключение
Сообщение = Новый СообщениеПользователю( ) ;
Сообщение. Текст = ОписаниеОшибки( ) ;
Сообщение. Сообщить( ) ;
MSWord. Application. Quit( ) ;
Возврат ;
КонецПопытки ;
Попытка
Замена = Документ. Content. Find;
Замена. Execute( "{ЧтоМеняем}" , Ложь , Истина , Ложь , , , Истина , , Ложь , "На что меняем" ) ;
Исключение
КонецПопытки ;
MSWord. Application. Visible = Истина ;
MSWord. Activate( ) ;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Использование синхронных методов на клиенте запрещено Адаптировала обработку под интерфейс Такси Бухгалтерии 3, и получила ошибку:
Ошибка при вызове метода контекста (Выбрать)
Если ДиалогОткрытияФайла.Выбрать() Тогда
по причине:
Использование синхронных методов на клиенте запрещено!
Это вызвано тем, что Использование модальных окон запрещено!
Решение:
Нужно использовать создание объекта «ОписанияОповещения » и вызов другого метода диалога Показать()
Вот пример кода с ошибкой:
Код 1C v 8.2 УП &НаКлиенте
Процедура Выгрузить(Команда)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранить в файл" ;
Диалог. Фильтр = "Файл ТЧ документа (*.ftd)|*.ftd|Все файлы (*.*)|*.*" ;
Диалог. ПолноеИмяФайла = "Выгрузка_" + Строка( Документ. Номер) ;
Если Диалог. Выбрать( ) Тогда
ЗначениеВФайл( Диалог. ПолноеИмяФайла, ТПТЧ) ;
КонецЕсли ;
КонецПроцедуры
Исправленный код:
Код 1C v 8.3 &НаКлиенте
Процедура Выгрузить(Команда)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранить в файл" ;
Диалог. Фильтр = "Файл ТЧ документа (*.ftd)|*.ftd|Все файлы (*.*)|*.*" ;
Диалог. ПолноеИмяФайла = "Выгрузка_" + Строка( ВернутьНомерОснования( Объект. Основание) ) ;
Диалог. Показать( Новый ОписаниеОповещения( "ВыгрузитьЗавершение" , ЭтаФорма, Новый Структура( "Диалог" , Диалог) ) ) ;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Диалог = ДополнительныеПараметры. Диалог;
Если ( ВыбранныеФайлы < > Неопределено ) Тогда
ВыгрузитьСервер( Диалог. ПолноеИмяФайла) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьСервер(ПолнИмяФайла)
ЗначениеВФайл( ПолнИмяФайла, ЭтаФорма. ТЗ. Выгрузить( ) ) ;
КонецПроцедуры
Категория:
Системные Ошибки Функции для работы с ZIP-архивами В работе часто приходится сжимать выгруженные данные в zip архив, отправлять по почте, и потом автоматически разархивировать полученный zip файл:
Код 1C v 8.х
Функция РаспаковатьZipФайл(Знач ПолноеИмяФайлаАрхива, Знач ПутьРаспаковкиФайлов, Знач ПарольАрхива = "" ) Экспорт
Результат = Истина ;
Попытка
Архиватор = Новый ЧтениеZipФайла( ПолноеИмяФайлаАрхива, ПарольАрхива) ;
Исключение
Архиватор = Неопределено ;
СообщитьОбОшибке( КраткоеПредставлениеОшибки( ИнформацияОбОшибке( ) ) ) ;
Возврат Ложь ;
КонецПопытки ;
Попытка
Архиватор. ИзвлечьВсе( ПутьРаспаковкиФайлов, РежимВосстановленияПутейФайловZIP. НеВосстанавливать) ;
Исключение
СтрокаСообщения = НСтр( "ru = 'Ошибка при распаковке файлов архива: %1 в каталог: %2'" ) ;
СтрокаСообщения = ПодставитьПараметрыВСтроку( СтрокаСообщения, ПолноеИмяФайлаАрхива, ПутьРаспаковкиФайлов) ;
Сообщить( СтрокаСообщения) ;
Результат = Ложь ;
КонецПопытки ;
Архиватор. Закрыть( ) ;
Архиватор = Неопределено ;
Возврат Результат;
КонецФункции
Функция ЗапаковатьВZipФайл(Знач ПолноеИмяФайлаАрхива, Знач МаскаУпаковкиФайлов, Знач ПарольАрхива = "" ) Экспорт
Результат = Истина ;
Попытка
Архиватор = Новый ЗаписьZipФайла( ПолноеИмяФайлаАрхива, ПарольАрхива) ;
Исключение
Архиватор = Неопределено ;
СообщитьОбОшибке( КраткоеПредставлениеОшибки( ИнформацияОбОшибке( ) ) ) ;
Возврат Ложь ;
КонецПопытки ;
Попытка
Архиватор. Добавить( МаскаУпаковкиФайлов, РежимСохраненияПутейZIP. НеСохранятьПути) ;
Архиватор. Записать( ) ;
Исключение
СтрокаСообщения = НСтр( "ru = 'Ошибка при запаковке файлов архива: %1 из каталог: %2'" ) ;
СтрокаСообщения = ПодставитьПараметрыВСтроку( СтрокаСообщения, ПолноеИмяФайлаАрхива, МаскаУпаковкиФайлов) ;
Сообщить( СтрокаСообщения) ;
Результат = Ложь ;
КонецПопытки ;
Архиватор = Неопределено ;
Возврат Результат;
КонецФункции
В примере используется строковая функция ПодставитьПараметрыВСтроку ():
Код 1C v 8.х
Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки,
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт
Если СтрокаПодстановки = Неопределено ИЛИ СтрДлина( СтрокаПодстановки) = 0 Тогда
Возврат "" ;
КонецЕсли ;
Результат = "" ;
НачПозиция = 1 ;
Позиция = 1 ;
Пока Позиция < = СтрДлина( СтрокаПодстановки) Цикл
СимволСтроки = Сред( СтрокаПодстановки, Позиция, 1 ) ;
Если СимволСтроки < > "%" Тогда
Позиция = Позиция + 1 ;
Продолжить;
КонецЕсли ;
Результат = Результат + Сред( СтрокаПодстановки, НачПозиция, Позиция - НачПозиция) ;
Позиция = Позиция + 1 ;
СимволСтроки = Сред( СтрокаПодстановки, Позиция, 1 ) ;
Если СимволСтроки = "%" Тогда
Позиция = Позиция + 1 ;
НачПозиция = Позиция;
Результат = Результат + "%" ;
Продолжить;
КонецЕсли ;
Попытка
НомерПараметра = Число( СимволСтроки) ;
Исключение
ВызватьИсключение НСтр( "ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + СимволСтроки) ;
КонецПопытки ;
Если СимволСтроки = "1" Тогда
ЗначениеПараметра = Параметр1 ;
ИначеЕсли СимволСтроки = "2" Тогда
ЗначениеПараметра = Параметр2 ;
ИначеЕсли СимволСтроки = "3" Тогда
ЗначениеПараметра = Параметр3 ;
ИначеЕсли СимволСтроки = "4" Тогда
ЗначениеПараметра = Параметр4 ;
ИначеЕсли СимволСтроки = "5" Тогда
ЗначениеПараметра = Параметр5 ;
ИначеЕсли СимволСтроки = "6" Тогда
ЗначениеПараметра = Параметр6 ;
ИначеЕсли СимволСтроки = "7" Тогда
ЗначениеПараметра = Параметр7 ;
ИначеЕсли СимволСтроки = "8" Тогда
ЗначениеПараметра = Параметр8 ;
ИначеЕсли СимволСтроки = "9" Тогда
ЗначениеПараметра = Параметр9 ;
Иначе
ВызватьИсключение НСтр( "ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + ЗначениеПараметра) ;
КонецЕсли ;
Если ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра = "" ;
Иначе
ЗначениеПараметра = Строка( ЗначениеПараметра) ;
КонецЕсли ;
Результат = Результат + ЗначениеПараметра;
Позиция = Позиция + 1 ;
НачПозиция = Позиция;
КонецЦикла ;
Если ( НачПозиция < = СтрДлина( СтрокаПодстановки) ) Тогда
Результат = Результат + Сред( СтрокаПодстановки, НачПозиция, СтрДлина( СтрокаПодстановки) - НачПозиция + 1 ) ;
КонецЕсли ;
Возврат Результат;
КонецФункции
Категория:
Работа с Файлами и Каталогами Авто добавление обработки в справочник Внешних обработок Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автоматически добавляет в конфигурацию:
Код 1C v 8.х ПолноеИмяФайлаОбработки = ЭтотОбъект. ИспользуемоеИмяФайла;
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Наименование" , ЭтотОбъект. Метаданные( ) . Синоним) ;
Запрос. УстановитьПараметр( "ВидОбработки" , Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма) ;
Запрос. Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВнешниеОбработки.Ссылка
|ИЗ
| Справочник.ВнешниеОбработки КАК ВнешниеОбработки
|ГДЕ
| ВнешниеОбработки.Наименование = &Наименование
| И ВнешниеОбработки.ВидОбработки = &ВидОбработки" ;
Если НЕ Запрос. Выполнить( ) . Пустой( ) Тогда Возврат ; КонецЕсли ;
Если Вопрос( "Зарегистрировать обработку как печатную форму для документа "" ЗарплатаКВыплатеОрганизаций"" в справочнике "" Внешние обработки"" ?" , РежимДиалогаВопрос. ДаНет) = КодВозвратаДиалога. Да Тогда
ВнешняяОбработка = Справочники. ВнешниеОбработки. СоздатьЭлемент( ) ;
ВнешняяОбработка. Наименование = ЭтотОбъект. Метаданные( ) . Синоним;
ВнешняяОбработка. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
ВнешняяОбработка. ВидОбработки = Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма;
ВнешняяОбработка. Комментарий = "Внешняя печатная форма для документа "" ЗарплатаКВыплатеОрганизаций"" " ;
ВнешняяОбработка. КомментарийКФайлуИсточнику = ПолучитьКомментарийКФайлу( ПолноеИмяФайлаОбработки) ;
НовСтр = ВнешняяОбработка. Принадлежность. Добавить( ) ;
НовСтр. ПредставлениеОбъекта = "Документ "" Зарплата к выплате организаций"" " ;
НовСтр. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
НовСтр. СсылкаОбъекта = Документы. ЗарплатаКВыплатеОрганизаций. ПустаяСсылка( ) ;
Попытка
ВнешняяОбработка. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
КонецПопытки ;
КонецЕсли ;
Категория:
1С Общие вопросы - Обычные формы Обработка файлов в папке и запись дополнительной информации в них Частенько при загрузке данных в 1С сталкиваешься с необходимостью дополнительной обработки загружаемых файлов. Возможно это добавление какой-либо информации или наоборот удаление, а может изменение.
Ниже приведен код, который обрабатывает файлы в указанной папке и добавляет в конец файла информацию о дате его последнего изменения:
(это лишь рабочий пример / набросок - который вы можете использовать для написания своего обработчика)
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
масФайлов = НайтиФайлы( ПутьКФайлу, "*.w1c" ) ;
Для Каждого стр из масФайлов Цикл
Состояние( "Обработка: " + стр. Имя) ;
текФайл = стр. ПолноеИмя;
ВыбФайл = Новый Файл( текФайл) ;
ДатаИзмененияФайла = Формат( ВыбФайл. ПолучитьУниверсальноеВремяИзменения( ) , "ДЛФ=D" ) ;
текДок = Новый ТекстовыйДокумент;
текДок. Прочитать( текФайл, "UTF-8" ) ;
текТекст = текДок. ПолучитьТекст( ) + Символы. ПС+ "<&w1c&>" + ДатаИзмененияФайла;
текДок. УстановитьТекст( текТекст) ;
текДок. Записать( текФайл, "UTF-8" ) ;
КонецЦикла ;
КонецПроцедуры
Процедура ПриОткрытии()
ПутьКФайлу= "Укажите каталог"
КонецПроцедуры
Процедура ПутьКФайлуНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. Заголовок = "Выберите Каталог с файлами" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
ПутьКФайлу = ДиалогОткрытияФайла. Каталог;
Иначе
Текст = "ru = "" Файл(ы) не выбран!"" ; en = "" File(s) not selected!"" " ;
Предупреждение( НСтр( Текст) ) ;
КонецЕсли ;
КонецПроцедуры
Сама обработка : ObrabotkaFaylov.rar
Категория:
Работа с Файлами и Каталогами Загрузка данных из файла табличного документа в управляемом приложении В управляемом приложении (если конечно вы не работаете в Толстом клиенте) можно столкнутся с такой проблемой, что многие функции работают только на сервере. Что делать, если у Вас есть файл-макет с данными, которые надо прочитать (обработать)? Надо передать этот файл на сервер и дальше работать с ним на сервере.
Для начала на клиенте через диалог получим имя файла
Код 1C v 8.2 УП длгВыборФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Открытие) ;
длгВыборФайла. Заголовок = "Выберите табличный документ..." ;
длгВыборФайла. Фильтр = "Табличный документ (*.mxl)|*.mxl" ;
длгВыборФайла. Расширение = "mxl" ;
длгВыборФайла. ПроверятьСуществованиеФайла = Истина ;
Если Не длгВыборФайла. Выбрать( ) Тогда Возврат ; КонецЕсли ;
Адрес = ПоместитьВоВременноеХранилище( Новый ДвоичныеДанные( длгВыборФайла. ПолноеИмяФайла) ) ;
ЗаполнитьИзФайлаНаСервере( Адрес) ;
На сервере обработам полученные данные:
Код 1C v 8.2 УП ФайлПриемник = ПолучитьИмяВременногоФайла( "mxl" ) ;
ДанныеХранилища = ПолучитьИзВременногоХранилища( Адрес) ;
ДанныеХранилища. Записать( ФайлПриемник) ;
ТабДок = Новый ТабличныйДокумент;
ТабДок. Прочитать( ФайлПриемник) ;
Вот и все,теперь данные из файла загружены
Категория:
Табличный документ Выгрузка картинок из базы 1С в XML В нынешнее время для электронного каталога или интернет-магазина необходимо выгружать не только информацию о цене и характеристиках товара, но и сопутствующие изображения. Хранящиеся в базе или связанные с номенклатурой изображения порой приходилось выгружать отдельно, подвергая предварительной обработке имена файлов, подгоняя их под правила связи товара с изображениями в приемнике. Тем не менее, в 1С существует возможность поместить двоичные данные изображений в виде строки в XML, либо другой файл выгрузки, чтобы уже на месте разобрать информацию о товаре.
Рассмотрим на примере следующей конфигурации.
Перечень объектов:
- справочники "Номенклатура", подчиненный ему справочник "Файлы";
- документ "Установка цен";
- обработка "Выгрузка прайса";
- перечисления "Типы файлов", "Типы номенклатуры";
- регистр "Цены номенклатуры".
Для начала, добавим форму элемента для справочника "Файлы"
Код 1C v 8.2 УП &НаСервере
Процедура ОбновитьКартинкуФорма(ХранилищеКартинки)
Если Объект. ТипФайла = Перечисления. ТипыФайлов. Картинка Тогда
Картинка = ПоместитьВоВременноеХранилище( ХранилищеКартинки. Получить( ) , УникальныйИдентификатор) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ПоместитьНаСервер(Данные = Неопределено)
ХранилищеКартинки = ? ( Данные = Неопределено , Неопределено , Новый ХранилищеЗначения( Данные) ) ;
ОбновитьКартинкуФорма( ХранилищеКартинки) ;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьФайл(Команда)
Режим = РежимДиалогаВыбораФайла. Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = "" ;
ДиалогОткрытияФайла. Фильтр = "Все *.*|*.*|.jpg|*.jpg|.png|*.png" ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
ДиалогОткрытияФайла. Заголовок = "Выберите файл" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
мФайл = ДиалогОткрытияФайла. ПолноеИмяФайла;
ПоместитьНаСервер( Новый ДвоичныеДанные( мФайл) ) ;
Иначе
Текст = "Файл не выбран!" ;
Предупреждение( Текст) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ОбновитьКартинкуФорма( ТекущийОбъект. ХранилищеФайла) ;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект. ХранилищеФайла = ? ( ПустаяСтрока( Картинка) , Неопределено , Новый ХранилищеЗначения( ПолучитьИзВременногоХранилища( Картинка) ) ) ;
КонецПроцедуры
Настроим форму документа "Установка цен".
Код 1C v 8.2 УП &НаСервере
Процедура ЗаполнитьТЧ()
Результат = ВыгрузкаПрайса. ПолучитьТаблицуЦен( Объект. Дата) ;
Объект. Товары. Загрузить( Результат) ;
КонецПроцедуры
&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьТЧ( ) ;
КонецПроцедуры
Добавляем обработку выгрузки в XML.
Код 1C v 8.2 УП &НаКлиенте
Процедура Выгрузить(Команда)
Если ПустаяСтрока( ФайлВыгрузки) Тогда
Возврат ;
КонецЕсли ;
мСтрока = ВыгрузкаПрайса. ПолучитьДанныеXML( ) ;
мФайл = Новый ТекстовыйДокумент;
мФайл. УстановитьТекст( мСтрока) ;
мФайл. Записать( ФайлВыгрузки) ;
КонецПроцедуры
&НаКлиенте
Процедура ФайлВыгрузкиОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. Сохранение;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = ФайлВыгрузки;
Фильтр = "(*.xml)|*.xml" ;
ДиалогОткрытияФайла. Фильтр = Фильтр;
ДиалогОткрытияФайла. Заголовок = "Выберите файл" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
ФайлВыгрузки = ДиалогОткрытияФайла. ПолноеИмяФайла;
Иначе
Текст = "ru = "" Файл(ы) не выбран!"" ; en = "" File(s) not selected!"" " ;
Предупреждение( НСтр( Текст) ) ;
КонецЕсли ;
КонецПроцедуры
При заполнении табличной части "Товары" документа "Установка цен" и в обработке выгрузки мы обращаемся к общему модулю "Выгрузка прайса":
Код 1C v 8.2 УП Функция ПолучитьТаблицуЦен(ДатаЗапроса = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| ЕСТЬNULL(Цены.Цена, 0) КАК Цена,
| ПРЕДСТАВЛЕНИЕ(Номенклатура.Ссылка) КАК НоменклатураСтрока
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Товар,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
| ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних) КАК Цены
| ПО Номенклатура.Ссылка = Цены.Товар
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ" ;
Запрос. УстановитьПараметр( "Дата" , ? ( ЗначениеЗаполнено( ДатаЗапроса) , ДатаЗапроса, ТекущаяДата( ) ) ) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
Функция ПолучитьИзображения(НоменклатураСсылка)
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| Файлы.Ссылка
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.Владелец = &Владелец
| И Файлы.ТипФайла = ЗНАЧЕНИЕ(Перечисление.ТипыФайлов.Картинка)
| И НЕ Файлы.ПометкаУдаления" ;
Запрос. УстановитьПараметр( "Владелец" , НоменклатураСсылка) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
Функция ПолучитьДанныеXML() Экспорт
ТЧ_Цены = ПолучитьТаблицуЦен( ) ;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML. УстановитьСтроку( ) ;
ЗаписьXML. ЗаписатьОбъявлениеXML( ) ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "price_list" ) ;
Для Каждого СтрокаЦен Из ТЧ_Цены Цикл
ЗаписьXML. ЗаписатьНачалоЭлемента( "tovar" ) ;
ЗаписьXML. ЗаписатьАтрибут( "name" , СтрокаЦен. НоменклатураСтрока) ;
ЗаписьXML. ЗаписатьАтрибут( "price" , Формат( СтрокаЦен. Цена, "ЧРД=.; ЧГ=0" ) ) ;
ТЧ = ПолучитьИзображения( СтрокаЦен. Номенклатура) ;
Если НЕ ТЧ. Количество( ) = 0 Тогда
ЗаписьXML. ЗаписатьНачалоЭлемента( "picture_list" ) ;
Для Каждого СтрТЧ Из ТЧ Цикл
мДанные = СтрТЧ. Ссылка. ХранилищеФайла. Получить( ) ;
Если НЕ ЗначениеЗаполнено( мДанные) Тогда
Продолжить;
КонецЕсли ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "picture" ) ;
ЗаписьXML. ЗаписатьАтрибут( "binary" , Base64Строка( мДанные) ) ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЕсли ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
СтрокаXML = ЗаписьXML. Закрыть( ) ;
Возврат СтрокаXML;
КонецФункции
Кодирование изображений выполняется с помощью функции Base64Строка , в качестве аргумента передаются двоичные данные из справочника "Файлы". Предполагается, что приемник XML может выполнить обратное преобразование. В 1С это можно сделать с помощью функции Base64Значение.
результат выгрузки прайса в XML:
Код Batch File (DOS, CMD, BAT) <?xml version="1 .0 "?>
<price_list>
<tovar name="Товар 1 " price="5 ">
<picture_list>
<picture binary="iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAB3RJTUUH3QINBSMt
F2PHEwAAABd0RVh0U29mdHdhcmUAR0xEUE5HIHZlciAzLjRxhaThAAAACHRwTkdH
TEQzAAAAAEqAKR8AAAAEZ0FNQQAAsY8L/GEFAAAABmJLR0QA/wD/AP+gvaeTAAAA
pklEQVR4nGP4jw3kajICEVYpBmRFcMafGkMgQhZB1wBRBDEYohquBy6F0AAXejM5
DoiQbUAWgehB2ACRg0jDEbIgRCUTAyponLY4XF8cjoBcNAUMaB44EiEBRJhsuJOY
8 rSY+oMNgDohJBCsvPiyZd0xIAIyICJwBUDF6E4iDEh1EnoowdXBVaOFElnBCvE3
cggCufAwgIQ1xMdQP5CcNMhJfMQnbwDR3npihwr9YwAAAABJRU5ErkJggg=="/>
</picture_list>
</tovar>
<tovar name="Товар 2 " price="10 "/>
<tovar name="Товар 3 " price="15 "/>
<tovar name="Товар 4 " price="18 ">
<picture_list>
<picture binary="iVBORw0KGgoAAAANSUhEUgAAAGUAAAAaCAYAAACuCJLbAAAABHNCSVQICAgIfAhk
iAAAAAlwSFlzAAADtgAAA7YBp8dLNgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3Nj
YXBlLm9yZ5vuPBoAABQvSURBVGiB7Xp5cJ3HceevZ77rXXjv4QZIAjzFUxIpSqQo
0 ZIiS5apK1EiKYpke2OvdawrLttyNrXeql2K3qxd8WZXKW9i+YiPjeNLdJxDt2Qd
DGVCMi+JJ0iQBEFcxPXu975zpvcPABQIgtRWHFftbrmrpoBvpmemp3/TPT09j5gZ
lyai7dvvEzhyRMaGHCObduT4aFUi+z7dfkNAHmhsTqh80VNuuxdh1Sp13/3 bNd5H
6 XSx9m3bSKwubbIblWtr2Pa4GyWgrRRLEYcQZkha/FoW8v8RmSw0tA4Ng6tCB2XD
krUU+T4yGe+mrW/4 wNzKnxOUvY9ebU4kzFTgO9mC9luIZDJSlAoVMoo5BcEmmOjX
vqr/x0kS60hT5AguWVIUmLlCUlViljmaEEGuoRqW139jTzi73/mgENG3HlkfW2Q5
mVxI7R7k4mqkFmjFVhRpN1RBVYdUYRGFWuk5URaE9/OHlyQCnesviH6lsS5Fmvnc
pmLwr7TBNGPO/oYUxNowTZOThrQShkGOIApituhPSt2rlR7O6yD/8 Df3ujNd2nmg
vPKxtYkoHW/I+VgakLGk5kdZ3/cLbqTznq8qtSCoeF5Qq0UcqrD2f6wwIc4Haqay
5 SUULwRY/oogz0WKQVrPrcjJ9vdAmgkeAFyq32ySZpxsASsRt2Mpy0o6tkjaplVv
2 WY6LmXeMPWpxoTumRitTXzkb96pTvc7B8r2bWusbC3TOFI2V9TccE01Cslzw+GJ
anloPOeWJoqeNxaFqhaR9n2fCWBvlhB0EQXOdnSSSAMATYG1eH7aPDVQDIFfr3Vc
jGYrHgB4SvmK+byz82JHNM+yFgcAA2TbNsUNFg3SNJoyjt2USWaymWR70jLb4rbB
MYcPJql2dF4gxqZdmQEA2EYiXfxQckxV5gWRWlJRISq1sG94LN9/bKxSGixUwrIP
7 Xkeu5hUJLlzAnC+RQBqDoZzPI8+vCG97+1 B9/ab18TTWds6eHyw/PVv7i1NtxPA
BGgAuObyFnP3wZEL/O8Pv3ffwse/8 OKZs8NlPbe65hRSMObe8XPV0xx1GpAXss0a
KwYCPMQAchwnTJWqflvR85aHuragIRYwxxaSNJdaMl6aSCgP26iArawNAHh2aL0T
xrz6IJALa75Oh27UNzyW739nOJ/vm/CjvOdp9z0QZoMx83s2CAwAf/lnt7f/1 dd2
j95597L45g0dTZWyChYvysxb2JG+0 iBKgCCY4W/YtOCd5Ss6DvWfLXlf/MqrJQD4
93 +0 IVlnJ+RYoRj85y/etmTBvPRy0zJTzNB//pdv/NP8jobs337ngfSGLd/aN5eS
L6K42QDOBdD7KX22HmbyT/JO6cwFCK6HWAy65EN7UaiAFnTWC0uastMwzEVOTOW6
ipvcTYBL/MQT4uXii5l81ViZ19hYqXmlkdFC976Bwkj3SMUv5D1Vu1CI6f/1 RerP
fX/zK3e33XbLkttjlkxCEPcNFnaM52rFtpa6lrbmxAZJwgamXRxzuRodE0I4/QP5
d1pakwuSjtXsxIz5AMBEipglALDmIIr4NBmoM4Ronhjzdi7Z9Bc730fRACAu0T67
bua3mPV9KV66yDwUAyibdcSKlqS9rjPdOr++fqUds1NZS3WlMvLoHc4tRXr6idWW
Xcs0lvN0JWfmb0q2LyyETvpMzWeMvbvrI5hSdGbpFdtj8xaPAIBpGFpIiZG3f35D
dWzwTgLISKT2z7txy9OWlQqmJbAdW2VjUWJRx8RdptRxAGCmaGzEndj7wu5bSxOl
tljcDlddv+zIsnULhwVNroMI2PfqoSUjAxNNdsz0b77/uv006Vn4wJvHOgZODs9r
bs1OXH3bFT0A8MoP3rzGrYWRHUscW3LrJ78KADzWtfEX//D6raHrLgbJYqK+8 c0r
7 /3 k3wFA9wtPby6OD2+QJPx1f/CprwFAEAR08p+f3Vg+O3idbTtDmaWrukYO77v3
PLUzYEpZWnLXR79z4vkfPhgGfkuyfeGrjWuuPVLoO9ZeOLb/9 wBGrGn+m5FbbgrK
xRVWXeP++rWbd2k9eW6Nv/3 i76rAb3fSDe+2 LF9xkAtn20eP7Y03OWJ/hqsHGhnj
RmzIMXyJZCRE2kkmWBuWKwwnqo0OtEaVwm9Py1MbO3M4sWDpqGVZGkEgTz73v/6 a
Vdg5JSuCgrfeHxp63V68csixbQUA7fXV1sb66lVSIq6ZiIgAgrnjx6/9 YWGk2Eog
lCfKGP3xeKdXCV6/8 gMrT0+Nx3tePrhZay0BYOkVC/s7VswbJyG4e/eJNRPD+fax
vvHSNbevO/6 zJ5//8 NmB8fkA8IF7Noy1NhRadv7gRw/3 HT59+8 zzoTjcf+3 Or/2 X
j131wMMPWYl4xT+Ruw8A9v3o67zho3/0 lGEYnO858gSzrkMiuaPU2xMGpdzvzbIG
BKBIkPiumxv9GLNO1IbY4FUbuif27fgrrVUGRH7LNTd/f3DHM59hFXbqwFsshOgS
Ahj+xbMPBLnRfwsAtdBdJFav3U+JTCiEHQTaqwtNjgeWbYhs5MiAZFIppEtjQ2f7
Tx7p6+7 uHh4anTjh+cEOv1bl0PMQeX5kWlYIAH2v/mTrNCAkjAlhWCcBUkQCjm2r
sZ4DC4TQQpgSphG1EYEkgyiKDHN0ou32Dy4/3 dBcN7Zm07K9hikDAOj+Zc8qSDCg
sffnB5ZprSVo0vj3Pb/veiGFnhnFMVjs+buua6cBWXPt8t1XbF7Znzv+1 sdPHz59
BwMkhFDJbPK0YVrDIIB11Hzw77/7 vQ/+/m+NJLPJPgBw82N/AL9odr/y003Mug4A
L7/5 nq8QBGhSAGXFkzuFYfVOzy3kewGZIELvc3/z37RWGQC6cc3GTycaWovTlqUj
xSGzO7D7tSWlgVOfcMtF1Io5FEfOBvv27Rno2dd1wnOLxYCNdJnr6uoCWxrjdVUp
AicWkZEoj44O9Z7Njezsy+V6RouDrosHP7u+uR8A9faeHPz817cfTSQS9OjquuuE
lIBh/nN1zYc/nonFpF3qn18oV0q93/rSlzkKbj27++UzVz7xwNOCoIzTQ0tF4Kco
VA4ydWP1McO6+bpFZ8dGSg1i6oBsTpiW0Te8SFRq2Z6u4ytAgG0Zyg8iOTZSqpen
+i7Tixcen3anKtTW3l09qwnAwo768Vu2rOnlILR/+cL+jQSAhFAPfeF3flRXn/II
wv/Hp166uf/E0MrA9ebR8L5P/u6DG45+/2 uvdTCzsXf7d/7 ULVfaAcBwnAMNi5bl
B3bv5Cmle1c99JkvvPv3336wenbgU1prlAvVilcts4pCVEuFtRxGHUpFiIzY5/a8
e/qliefe1FfqvgBKwbCkWmu+dtn+rlf+AjPC5pB1uPv4sxNXL23mJU2pRq1VC4fa
Ga73pQEArIkRzQrIL0K3tFjLtFJCK4XBXO1L2596ajqEzQNQn13f3EQAvIqdkuqM
oomyMs6OmNDMDNSMEuIA1D/86 MCywZFqioggpOB7r08NGoNHUuVqQKeOdjtEhHtu
uazvH1/vXcwM2vXSrvZrH6TD7vCAUxopAUQWEcEyhbrngaV96Dk0T0sZDfWcyLhu
iIbmRCnbe2gBBhDqtoYzH7yjbdeTf/L2Sgbj4HOvtW6+ftHJdJ135MSh4dVj/aeu
B0/e2SrKfuTpz/+H7o3ct9lghmZWN9265eBjaxtHYpMWwp947LHTn1hm81RY0wEA
6 Zbkmcf+6 y3xznVP1gDQ5eubWIBAkuTrT+34 MhgOAy4DowLoBIA7tqzIjvfkwMwg
EEsxiZloLCUUseWZQlRYIm7b0okbLOKzwFBT0UTvhDs4XbekM/1 bT3/795 d99ctb
Wv/nl+9 sfvVnH1/7 +W888OL6D634+Wc/s3mH3T2w1syVWwE2MOmJSE3tlnWrGseW
d2ZypoEoCkP65k/2 r4QK+dlXe9rDwEcYeMjlC4ZQfhi4NezqOjHP7DmxNKoVTbdS
Qlgr61qpgMJETn7vJ291ciVvUnE8JlRNu5USckPjCVnNx2QhX2ee7Ft88IV9lwde
DaHnorM9lo9KRfOhDy16l7UKVBgKFYWkVdT9jT29h99++23 FES9gZghA97/7 +Eeu
uXHp9QBAgsTxrkc/Kw1pAoA0ZMAACiOVjr0vHdm456VHbgAAgcmoJfKiNX4taAHA
nmn8Gwb7U7rA7XdfsfHu+9 etS9THswbJsjIi16h4Soi0jshUZSJVNA0rmYxbySbD
lLbjzA4BAUAeKHpVZs4DQJCv/Ymz78SPr1He992dh3+xcGjkK4VfHL8p1312Xd+B
wVWi6jaKfHUe9Pkx/O5DI/UnzxTr7t+y7HRTNuYBQBAoCQDdpyfqgcmb8yu7znTU
fGUygHzJi5VHSw3Tg8TiZrhmWcMYABw9MdH4866+VjBj5eL6PADUvND66g/eWdnT
X0y+uvNUx4svHbuaAUhDqPaYqFHFYxovWxtWNh6YHvOGtS3P9f/3 m+46 +6 UPfKQh
Ke8EA/G6mO/kSwvNiJPTfILYmb5QLljefNRJ2kUA2PnTd+7 O9Y1f/Y3/cef8WMpO
Ta3DAIDLNix85Q+33 mElUk4aAOqb6lobsvbClo661U0tmTY7RuVEGJXQ1BQZ6XRJ
lQr1FSVQqgqxyLasVEPacVJFFcRi3sxLFgFAPA4jnXEeL5f872rN9Npb/R3TJoww
iv3sme4l+aLnDI2U0yuX1L8r5kgmP7+jt9PzlfHFnrcbp+sScSs4fCKXDoLJiOuK
y5rGTGMyHbPv6FgzM9MzO04vOJcSYOCBLcuO//lIJZEv+fFXdp3paG1O1G7buODY
vkOjyYoXpgdHKqm/3 n5w1cy5b7+u47AOlccVb4wZOD1QvAYAHFNWb1yajSPQNzy3
/+xVxWq0CAA608aw6DqeEqXKuY2lNAvGe5eyj/6 nD//g2//xnx7Rio2Xvt31+I2P
bN57esaNrXFe+sydD19/CMBVQpIBAKYpLCkoHXesxsa2VG5gpFJMxYJqqq2sxCrc
F0VOwWPJpZjJYcKwGxrqE9m2tLSyk9YybgjypJSlu1Y1xY9+4 YY/fvyjV336Uw9d
eaSh3nGFmMxV2ZaMYjEj6mxPlYnAne11JTBDaz1ZZiSNrr68ZTRmy5AIICLOph33
4 ftXHzvYM5q1TKma6mO1+29 b0vPbtyzpvedDy/ovW5jJW5ZUYxPVWCZle5YlVDZp
uexHxX9397KXE45RM6UInnnl1Lxoonzqj+9 e9sNFzfFjUtB0Wobjlizfe13Hc2vb
k3vCopeLFJPSTPlq2GAK4W9cmv0lM4gBysatshQUNWfsgXs2zHuLASTAVdMQgWMb
nvNW9+WppOWZpgibU6bRZJO15aGrnzctwyMBHHv5yFYnZecMS/jxjDPxsSfu/OnU
PqJkKl40LOGnsrEiR+wEXiT9ql8wRFh2AwTrh+9 SxAB1fW6TMxoFbZUgcVXJjxbl
q95Af6548nDvWG7Tokzy0zd1PqZZh6YhkkYylrXrYvNB526s76Wc50oSnU8X5MtI
iAv6qKo/oqr+uIyZWRG360mQpf2ooP2wqGt+yWpOr2TFgSrVBlQY1cDMUHxBnm3G
pAQAJIUkKSwdRO5FBWKQZn1hHmuK0W7NLIw0ahSFEMk4aQFQ3BGs2fY6Gnu0bfms
eMZwU3MDYDCIIZi15FDHAk9nB4+MjA0dGX/dYn/PPJuGNj3Z5cknmLHgrQF9JjwA
JU1olhmCqHeEoISF4NFr2+5 yTNFg1sXbCcRky4S0ZJKmc780fZuYLDyjzNQ2vffn
/MJMzExaM6kwrEZVfzSq+SUQDJYko5pf1JVgJHKDIphJhdrlUFU5jGrKD6usWDNP
XfcvUibzmiBmZhUqxVNzThfNLHi6TPFOynbB2kRU8YqIlIpc31UVNwxztbJF3KYK
Vc/OlTvt0XwHImUaXphQMdN1hic6IUQk3CBueGFceEEcGrb2oobxs7Xy2KniQcOv
7 XdSleGbk3dV8frrfC51f2Tb/VZ/4 VRDzo1d5mlxRdWNDDf0Ru9dHrvNdgzbjFtJ
JsCwjbh0rMzFduUMAC7aQGAGnXfYMADU+if2AwCZ0iCCJAipo8iDvjDbPMVnc6j8
S8kyF73fo9bMNPzcT3nniwEBISzT0X7kClPadkNyoZDCApEAAZFjF2UUOay0TUrb
kSbzrE+Hx0bdY0NDlRfmpYPusUQtd9/WQwEw85GLiLo+t8kZ88OGCscWR5FYmomp
FcszWOUYZEhDQlpS2pl4q5CCiMCzbV9P2r5iAgkSc197mFlrDqBZaaUCDiLPSDjZ
yA8qQa42zFMC0ZSlkSCAL8jq/ko0nYf6l9DFUv4gJjCxMKUNzVpY0tJKKxAZ0rZS
RszKMsGMmNRgLjg4OBF11WrhO3GXe5sy0cSmJ7u86ddH473ZmF/ets1fP/RMrjUe
hAXYxZKnC6eLRmibaEmmZF2dYaSFIkhoYgYiNygySJgxM0XECN2oypqVNA2HBLMw
yJxjWVwbr+UjL/RIkDDjZlxP1PIcKqW1SDGfvzfpPTj+NR6/pnLR/yJM3qfTVLM/
JXAYAYDQGqgV3bFKWO1Tpq0DjfHhQrArYYlTdeSOaFOXNj2517voczAAEBE9/cRq
c7HrxAZ9M+PVzNYAlDKESNgOWhMGtYFgCQKiUGs9JYMQk4ehNISQBhlgYjUVcpGE
kNIQREDoh4EOzz+UiZg0n/8 +/38 bXcrlMTNrAHKGS6bJI4wZOiiH6GfNOc2yJiks
J8xotC2u8qdinnv/E4dDngXCRX9ihG3bxBt4w4rlXCvPpi0UOSXFSZcoboJNkvI3
v2a5BEUApFLMQgRQ2o1Lv5KJxV0n9AK3PhbchJsCbN06p1u+OChTtG3bNnEj3hDu
xICcKCSMRaYnjGSGyrHoN6C8D6Vcg6NKgXtDRzdkqlGsYb7agZv01ouAMU3/G2jy
rVebJ+JFAAAAAElFTkSuQmCC"/>
</picture_list>
</tovar>
<tovar name="Услуга 1 " price="32 "/>
<tovar name="Услуга 2 " price="15 "/>
</price_list>
Источник
Категория:
JSON, XML, TXT, CSV, DBF Загрузка картинок в базу 1С (сохранение в хранилище значений) В теме форма: v8: Получение данных из ХралищаЗначений
Bell в управляемом интерфейсе пробует сохранить выбранные картинки в базу 1С, но возникли сложности с сохранением в хранилище значений. как пример Bell приложил CF файл с мини конфигурацией, за что ему большое спасибо, т.к. большая часть материалов этой статьи написана им, я лишь поправил небольшие участки кода связанные с передачей файлов и сохранение в хранилище значений.
Так как везде уже Такси, то CF я перевел в этот режим и в нем демонстрирую.
Имеется справочник Хранилище данных :
Основная Форма Элемента:
Ее код:
Код 1C v 8.3
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект. Ссылка. Пустая( ) Тогда
Объект. Наименование = "." ;
КонецЕсли ;
Если НЕ Параметры. Ключ. Пустая( ) Тогда
ДанныеАдрес = ПолучитьНавигационнуюСсылку( Объект. Ссылка, "ДанныеХЗ" ) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Объект. Ссылка. Пустая( ) Тогда
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЭтоАдресВременногоХранилища( ДанныеАдрес) Тогда
РежимСжатия = Новый СжатиеДанных( 9 ) ;
ДанныеСохранения = ПолучитьИзВременногоХранилища( ДанныеАдрес) ;
ТекущийОбъект. ДанныеХЗ = Новый ХранилищеЗначения( ДанныеСохранения, РежимСжатия) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЭтоАдресВременногоХранилища( ДанныеАдрес) Тогда
УдалитьИзВременногоХранилища( ДанныеАдрес) ;
ДанныеАдрес = ПолучитьНавигационнуюСсылку( ТекущийОбъект. Ссылка, "ДанныеХЗ" ) ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьДанные(Команда)
ДанныеВыбрать( ) ;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьДанные(Команда)
Если НЕ ЗначениеЗаполнено( Объект. Ссылка) Тогда
Предупреждение( НСтр( "ru = 'Элемент не записан !!!'" ) ) ;
Возврат ;
КонецЕсли ;
ДанныеСохранения = ПолучитьНавигационнуюСсылку( Объект. Ссылка, "ДанныеХЗ" ) ;
ИмяСохранения = Объект. Наименование;
ПолучитьФайл( ДанныеСохранения, ИмяСохранения, Истина ) ;
КонецПроцедуры
&НаКлиенте
Процедура ДанныеВыбрать()
ПолученныеДанныеАдрес = "" ;
Если ПоместитьФайл( ПолученныеДанныеАдрес, , Объект. ДанныеПуть, Истина , УникальныйИдентификатор) Тогда
ДанныеАдрес = ПолученныеДанныеАдрес;
ВыбранныйФайл = Новый Файл( Объект. ДанныеПуть) ;
Объект. Наименование = ВыбранныйФайл. Имя;
Объект. ДанныеТекущаяДата = ТекущаяДата( ) ;
Модифицированность = Истина ;
КонецЕсли ;
КонецПроцедуры
так же имеется общая форма ФормаЗагрузкиФайлов
При помощи ее выбираются файлы изображений и загружаются в справочник - одновременно можно загружать несколько файлов
код формы:
Код 1C v 8.3
&НаКлиенте
Процедура СписокФайловПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина ;
ДобавитьФайлы( ) ;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьФайлы()
ВыборФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Открытие) ;
ВыборФайла. МножественныйВыбор = Истина ;
ВыборФайла. Заголовок = НСтр( "ru = 'Выбор файла'" , "ru" ) ;
ВыборФайла. Фильтр = НСтр( "ru = 'Все файлы'" , "ru" ) + " (*.*)|*.*" ;
ВыборФайла. ПредварительныйПросмотр = Истина ;
Если ВыборФайла. Выбрать( ) Тогда
Для каждого СтрокаФайл Из ВыборФайла. ВыбранныеФайлы Цикл
ОписаниеФайла = Новый Файл( СтрокаФайл) ;
НВС = СписокФайлов. Добавить( ) ;
НВС. ПолноеИмяФайла = СтрокаФайл;
НВС. РазмерФайла = ОписаниеФайла. Размер( ) ;
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура Загрузить()
Если НЕ ПроверитьЗаполнение( ) Тогда
Возврат ;
КонецЕсли ;
ОчиститьСообщения( ) ;
Если СписокФайлов. Количество( ) = 0 Тогда
Сообщить( "Файлы не выбраны !!!'" ) ;
Возврат ;
КонецЕсли ;
ПомещаемыеФайлы = Новый Массив;
Для каждого СтрокаФайл Из СписокФайлов Цикл
Описание = Новый ОписаниеПередаваемогоФайла( СтрокаФайл. ПолноеИмяФайла, "" ) ;
ПомещаемыеФайлы. Добавить( Описание) ;
КонецЦикла ;
ПомещенныеФайлы = Новый Массив;
СписокЗагруженныхФайлов = Новый СписокЗначений;
Если ПоместитьФайлы( ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь , УникальныйИдентификатор) Тогда
Закрыть( Истина ) ;
Иначе
Сообщение = Новый СообщениеПользователю( ) ;
Сообщение. Текст = НСтр( "ru = 'Файлы не загружены'" , "ru" ) ;
Сообщение. Сообщить( ) ;
КонецЕсли ;
ОповеститьОВыборе( ПомещенныеФайлы) ;
КонецПроцедуры
&НаСервере
Функция ПоместитьВыбранныеФайлыВХранилище(ПомещаемыеФайлы)
АдресХЗ = ПоместитьВоВременноеХранилище( ПомещаемыеФайлы, УникальныйИдентификатор) ;
Возврат АдресХЗ;
КонецФункции
в коде вызывается ОповеститьОВыборе(ПомещенныеФайлы) и срабатывает обработчик в ФормаСпискаДополнительно
Код 1C v 8.3 &НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора. ИмяФормы = "ОбщаяФорма.ФормаЗагрузкиФайлов" Тогда
ОбработкаВыбораПодборНаСервере( ВыбранноеЗначение) ;
КонецЕсли ;
КонецПроцедуры
и следующим кодом идет создание элементов справочника и загрузка изображений из временного хранилища
Код 1C v 8.3 &НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
Для Каждого СтрокаФайл Из ВыбранноеЗначение Цикл
Файл = Новый Файл( СтрокаФайл. Имя) ;
ХранимыйФайл = Справочники. ХранилищеДанныхСправочники. СоздатьЭлемент( ) ;
ХранимыйФайл. Наименование = Файл. Имя;
ХранимыйФайл. ДанныеПуть = Файл. Путь;
ХранимыйФайл. ДанныеТекущаяДата = ТекущаяДата( ) ;
ХранимыйФайл. ДанныеХЗ = Новый ХранилищеЗначения( ПолучитьИзВременногоХранилища( СтрокаФайл. Хранение) , Новый СжатиеДанных( ) ) ;
ХранимыйФайл. Записать( ) ;
КонецЦикла ;
Элементы. Список. Обновить( ) ;
КонецПроцедуры
Скачать DT - Платформа 8.3.4
Категория:
Работа с Хранилищем Значений Отображение PDF файлов в 1С используя ActiveX Adobe PDF Reader Часто при разработке какого-либо функционала в 1С мы делаем прикрепление файлов pdf.
Итак, Первым делом идет Выбор файла, далее нужно быстро просмотреть приложенный файл.
Для решения используются следующие варианты:
файл Выбирается по кнопке Выбор файла и помещается в Реквизит с типом Хранилище Значений
Код 1C v 8.х Процедура КнопкаВыбратьСканНажатие(Элемент)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Открытие) ;
Диалог. Заголовок = "Выберите файл" ;
Диалог. ПолноеИмяФайла = "" ;
Фильтр = "Все файлы (*.*)|*.*" ;
Диалог. Фильтр = Фильтр;
Если Диалог. Выбрать( ) Тогда
Попытка
ПутьКВнешнемуФайлу = Диалог. ПолноеИмяФайла;
СканФайл = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПутьКВнешнемуФайлу) ) ;
СканНазвание = СтрЗаменить( Диалог. ПолноеИмяФайла, Диалог. Каталог, "" ) ;
Исключение
СканНазвание = "ОШИБКА!" ;
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЕсли ;
КонецПроцедуры
Для открытия используем:
1. Открытие файла в программе Adobe Acrobat Reader
для этого используйте код:
Код 1C v 8.х Процедура ОсновныеДействияФормыПечатьСканВорд(Кнопка)
ИмяМакета = СканФайл;
Если Прав( СканНазвание, 3 ) = "doc" или Прав( СканНазвание, 3 ) = "docx" Тогда
Состояние( "Идет печать в Word" ) ;
УниверсальныеМеханизмы. НапечататьВнешнююФорму( Ссылка, ИмяМакета) ;
Иначе
ИмяКаталога = КаталогВременныхФайлов( ) ;
ИмяФайла = "vrem" + Формат( ТекущаяДата( ) , "ДФ=yyyyMMddhhmmss" ) + СокрЛП( Прав( СканНазвание, 5 ) ) ;
ИмяФайла = РаботаСФайлами. ПолучитьИмяФайла( ИмяКаталога, ИмяФайла) ;
ДвоичныеДанные = ИмяМакета. Получить( ) ;
Если ДвоичныеДанные = Неопределено Тогда
Предупреждение( "Не могу открыть файл, прикрепите новый внешний файл!" ) ;
Иначе
ДвоичныеДанные. Записать( ИмяФайла) ;
ЗапуститьПриложение( ИмяФайла) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
2. Добавляем на форму элемент ActiveX Adobe PDF Reader
для этого используйте код:
Код 1C v 8.х Процедура ОсновныеДействияФормыПечатьСканВорд(Кнопка)
ИмяМакета = СканФайл;
Если Прав( СканНазвание, 3 ) = "doc" или Прав( СканНазвание, 3 ) = "docx" Тогда
Состояние( "Идет печать в Word" ) ;
УниверсальныеМеханизмы. НапечататьВнешнююФорму( Ссылка, ИмяМакета) ;
Иначе
ИмяКаталога = КаталогВременныхФайлов( ) ;
ИмяФайла = "vrem" + Формат( ТекущаяДата( ) , "ДФ=yyyyMMddhhmmss" ) + СокрЛП( Прав( СканНазвание, 5 ) ) ;
ИмяФайла = РаботаСФайлами. ПолучитьИмяФайла( ИмяКаталога, ИмяФайла) ;
ДвоичныеДанные = ИмяМакета. Получить( ) ;
Если ДвоичныеДанные = Неопределено Тогда
Предупреждение( "Не могу открыть файл, прикрепите новый внешний файл!" ) ;
Иначе
ДвоичныеДанные. Записать( ИмяФайла) ;
ЭлементыФормы. PDFСканДоговор. LoadFile( ИмяФайла) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
Вот так это выглядит:
Категория:
OLE, ActiveX Загрузить данные в 1с из текстового файла с разделителями В этой статье я расскажу, как загружать данные в 1с 8 из простейших текстовых файлов с разделителями. Обычно они имеют расширение csv (Comma-Separated Values). Т. е. название подразумевает, что в каждой строке такого текстового файла значения разделены запятой. Но на самом деле, запятую, в качестве разделителя, использовать не надёжно. Поэтому применяют другие разделители, которые в обычном тексте встречаются редко. Это могут быть символы «^», «~»,«|» и другие. Итак, наша задача состоит в том, чтобы загрузить имеющуюся в csv файле информацию в базу данных 1с. Например, в файле будут содержаться товары интернет - магазина. В качестве образца, я взял выгрузку из магазина на скрипте virtuemart. Посмотрим, как выглядит файл.
Привожу две первых строки из него:
Код ~product_sku~^~category_path~^~product_name~^~product_desc~
~20~^~Книги/Электронные книги~^~Amazon Kindle 4 Touch~^~<p>Популярная электронная книга с ч/б экраном 6", электронной бумагой E-Ink Pearl, разрешением 600x800 пикс. с 16 - ю оттенками серого.</p>~
Посмотрим на файл.
Первая строка служебная. В ней описан формат нашего файла. Т. е. в какой ячейке, что находится. Однако, имейте в виду, что такой строки может и не быть.
Ячейки образуются при помощи разделителя «^», а данные в ячейках обрамляются символом «~».
В любой конфигурации 1с есть иерархический справочник товаров. В него и будем загружать информацию.
Создадим внешнюю обработку. Добавим строковый реквизит «путьКФайлуЗагрузки» для хранения имени файла. Добавим на форму поле ввода, связанное с данным реквизитом. Включим в свойствах поля ввода кнопку выбора и создадим обработчик события «НачалоВыбора» и напишем в нём такой код:
Код 1C v 8.х Процедура путьКФайлуЗагрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла. Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = "" ;
Фильтр = "Comma separated file (*.csv)|*.csv" ;
ДиалогОткрытияФайла. Фильтр = Фильтр;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
ДиалогОткрытияФайла. Заголовок = "Выберите файл" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
путьКФайлуЗагрузки = ДиалогОткрытияФайла. ПолноеИмяФайла;
КонецЕсли ;
КонецПроцедуры
Т. о. мы организовали диалог для выбора файла в нашей обработке.
Хорошо. Теперь, для удобства и наглядности я предлагаю создать временную табличку, в которую мы загрузим текстовый файл, а уже после её заполнения - будем осуществлять загрузку в базу 1с. Для этого, на форму добавим табличное поле «табЗагрузки», с типом значения «ТаблицаЗначений» и командной панелью. В панели поместим кнопку «Заполнить» и создадим обработчик её нажатия «КоманднаяПанель1Заполнить». Также для элемента универсальности, добавим в обработку два строковых реквизита «символОграничения» и «разделительПолей». В них мы будем хранить «^», и «~». Можно в теле модуля формы осуществить их начальную инициализацию:
разделительПолей = "^";
символОграничения = "~";
Это позволит пользователю задать свои значения и при желании сохранить настройку, которая впоследствии не затрется нашей инициализацией.
Код 1C v 8.х Процедура КоманднаяПанель1Заполнить(Кнопка)
Если табЗагрузки. Количество( ) > 0 И Вопрос( "Таблица будет очищена. Вы уверены?" , РежимДиалогаВопрос. ДаНет)
= КодВозвратаДиалога. Нет Тогда
Возврат ;
КонецЕсли ;
ЗаполнитьТаблицу( ) ;
КонецПроцедуры
Процедура ЗаполнитьТаблицу()
текст = Новый ТекстовыйДокумент;
Попытка
текст. Прочитать( путьКФайлуЗагрузки, КодировкаТекста. UTF8) ;
Исключение
Сообщить( "Не удалось прочитать файл: "
+ ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
Возврат ;
КонецПопытки ;
табЗагрузки. Очистить( ) ;
табЗагрузки. Колонки. Очистить( ) ;
квоСтрок = текст. КоличествоСтрок( ) ;
Если Не квоСтрок > 0 Тогда
Сообщить( "Файл пустой" , СтатусСообщения. Внимание) ;
Возврат ;
КонецЕсли ;
стрТекста = текст. ПолучитьСтроку( 1 ) ;
масЗначСтр = ОбщегоНазначения. РазложитьСтрокуВМассивПодстрок( стрТекста, разделительПолей) ;
табЗагрузки. Колонки. Добавить( "не_загружать" , Новый ОписаниеТипов( "Булево" ) , "Не загружать" ) ;
табЗагрузки. Колонки. Добавить( "номер_строки" , Новый ОписаниеТипов( "Число" ,
Новый КвалификаторыЧисла( 10 , 0 , ДопустимыйЗнак. Неотрицательный) ) , "Номер строки" ) ;
Для каждого зн Из масЗначСтр Цикл
значение = СтрЗаменить( зн, символОграничения, "" ) ;
кол = табЗагрузки. Колонки. Добавить( значение, Новый ОписаниеТипов( "Строка" ) ) ;
КонецЦикла ;
ЭлементыФормы. табЗагрузки. СоздатьКолонки( ) ;
Для номСтр = 2 По квоСтрок Цикл
стрТекста = текст. ПолучитьСтроку( номСтр) ;
масЗначСтр = ОбщегоНазначения. РазложитьСтрокуВМассивПодстрок( стрТекста, разделительПолей) ;
новСтр = табЗагрузки. Добавить( ) ;
новСтр. номер_строки = номСтр;
номЗнач = 2 ;
Для каждого зн Из масЗначСтр Цикл
новСтр[номЗнач] = СтрЗаменить( зн, символОграничения, "" ) ;
номЗнач = номЗнач + 1 ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Функцию разложения строки с разделителями в массив можно разместить как в одном из общих модулей, так и непосредственно в обработке.
Код 1C v 8.х Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока Истина Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока Истина Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Отлично. В итоге, после заполнения, получим примерно такую картинку:
Теперь приступим непосредственно к загрузке товаров. Рядом с кнопкой «заполнить» добавим кнопку «загрузить» и добавим обработчик её нажатия «КоманднаяПанель1Загрузить», а также добавим реквизит «ПапкаЗагрузкиВыгрузкиТоваров» с типом вашего справочника товаров для опциональной их загрузки в определенную папку. Текст обработчика будет такой:
Код 1C v 8.х Процедура КоманднаяПанель1Загрузить(Кнопка)
Если Вопрос( "Вы уверены, что хотите загрузить файл?" , РежимДиалогаВопрос. ДаНет)
= КодВозвратаДиалога. Нет Тогда
Возврат ;
КонецЕсли ;
ВсегоСтрок = табЗагрузки. Количество( ) ;
номСтр = 1 ;
Для каждого стрТЗ Из табЗагрузки Цикл
Состояние( "Обработано: " + Окр( номСтр * 100 / ВсегоСтрок) + "%" ) ;
номСтр = номСтр + 1 ;
ОбработкаПрерыванияПользователя( ) ;
Если стрТЗ. не_загружать Тогда
Продолжить;
КонецЕсли ;
объект1 С = вернутьТовар( стрТЗ) ;
Если объект1 С = Неопределено Тогда
Возврат ;
КонецЕсли ;
Если Не ЗаписатьЭлементСпр( объект1 С) Тогда
Сообщить( "Загрузка прервана!" , СтатусСообщения. ОченьВажное) ;
Возврат ;
КонецЕсли ;
стрТЗ. не_загружать = Истина ;
КонецЦикла ;
КонецПроцедуры
В приведенном коде две новые функции «вернутьТовар» и «ЗаписатьЭлементСпр». Вот их текст:
Код 1C v 8.х Функция вернутьТовар(стрТабФайла)
Артикул = стрТабФайла. product_sku;
Если Не ЗначениеЗаполнено( Артикул) Тогда
Сообщить( "В строке " + стрТабФайла. номер_строки + " не заполнен product_sku" ,
СтатусСообщения. ОченьВажное) ;
Возврат Неопределено ;
КонецЕсли ;
Запрос = Новый Запрос( "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул" ) ;
Запрос. УстановитьПараметр( "Артикул" , Артикул) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. Ссылка. ПолучитьОбъект( ) ;
Иначе
ЭтоНовый = Истина ;
объект1 С = Справочники. Номенклатура. СоздатьЭлемент( ) ;
объект1 С. Артикул = Артикул;
объект1 С. Наименование = стрТабФайла. product_name;
объект1 С. Родитель = вернутьРодителяТовара( стрТабФайла. category_path) ;
Возврат объект1 С;
КонецЕсли ;
КонецФункции
Функция ЗаписатьЭлементСпр(Спр)
Попытка
Спр. Записать( ) ;
Исключение
Сообщить( "При записи элемента справочника " + Спр + " возникла ошибка: " + ОписаниеОшибки( ) , СтатусСообщения. ОченьВажное) ;
Возврат Ложь ;
КонецПопытки ;
Возврат Истина ;
КонецФункции
И осталась последняя новая функция для обработки родителя товара вернутьРодителяТовара. Текст её смотрите ниже. Комментарии по тексту.
Код 1C v 8.х Функция вернутьРодителяТовара(стрКатегории)
Родитель = ПапкаЗагрузкиВыгрузкиТоваров;
масРодителей = РазложитьСтрокуВМассивПодстрок( стрКатегории, "/" ) ;
Для каждого Род Из масРодителей Цикл
РодСс = Справочники. Номенклатура. НайтиПоНаименованию( Род, Истина ) ;
Если РодСс. Пустая( ) Тогда
НовРод = Справочники. Номенклатура. СоздатьГруппу( ) ;
НовРод. Наименование = Род;
НовРод. Родитель = Родитель;
Если Не ЗаписатьЭлементСпр( НовРод) Тогда
Возврат Неопределено ;
КонецЕсли ;
Родитель = НовРод. Ссылка;
Иначе
Родитель = РодСс;
КонецЕсли ;
КонецЦикла ;
Возврат Родитель;
КонецФункции
Все. Конечно, в реальной жизни еще много чего нужно будет дописать, но не все сразу. Такой шаблон можно использовать как отправную точку.
Скачивать файлы может только зарегистрированный пользователь!
Успехов в разработке!
Источник Категория:
Текстовый документ Как записать текстовый файл в кодировке UTF-8 без сигнатуры BOM Текстовый файл сохраняемый как UTF-8 с сигнатуры BOM в начале имеет 3 байта с значениями: EF, BB, BF. Сигнатура BOM - метка порядка байтов (Byte Order Mark, BOM). Часто, BOM называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). Признак BOM определяет, является ли файл закодированным в UTF-8. Не все программы могут корректно работать с файлами с сигнатуры BOM.
Код 1C v 8.х
функция ЗаписатьФайлВформате_UTF8_без_BOM(текст,полноеИмяФайла)
ТекстовыйФайлUTF8_Bom = Новый ТекстовыйДокумент( ) ;
ТекстовыйФайлUTF8_Bom. ДобавитьСтроку( текст) ;
ТекстовыйФайлUTF8_Bom. Записать( полноеИмяФайла, "UTF-8" ) ;
Данные = Новый ДвоичныеДанные( полноеИмяФайла) ;
Строка64 = Base64Строка( Данные) ;
Строка64 = Прав( Строка64 , СтрДлина( Строка64 ) - 4 ) ;
ДанныеНаЗапись= Base64Значение( Строка64 ) ;
ДанныеНаЗапись. Записать( полноеИмяФайла) ;
КонецФункции
Категория:
JSON, XML, TXT, CSV, DBF Добавим документы ODF (OpenOffice/LibreOffice) в стандартную обработку Загрузки Табличного документа Доброго времени суток!
Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 1С-ник. И сколько бы обработок такого плана не появлялось, эта остается классикой. Даже претензии можно предъявлять если вы в ней что-то не понимаете к самой 1С. Хотя какие претензии, исходный код открыть – изучай, не хочу…
Еще чем мне нравится эта обработка – тем что вы читаете данные из внешнего источника, показываете их с помощью объекта табличное поле и только затем выбираете алгоритм загрузки в 1С. При чем загрузка у Вас происходит в среде 1С без привлечения дополнительных компонентов. Без всяких выпадов в неизвестный объект OLE, полей которые не прочитались в обработке загрузки. Если вы видете данные в табличном поле, то они и будут грузиться по вашему алгоритму.
Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format и между прочим ГОСТ Р ИСО/МЭК 26300-2010). Как говаривал мой начальник – есть чем себя занять. Из всех внешних загрузок, которые сейчас есть к сожалению самыми распостраненными являются OLE(Com+) технологии. Возможно что-то еще появиться, но пока примемся за них.
Залезаем в код и видим несколько однотипных функуций
Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
Функция мПрочитатьТабличныйДокументИзТекста(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
Пора добавить свою:
Код 1C v 8.х
Функция мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент, ИмяФайла, НомерЛистаCalc = 1) Экспорт
ВыбФайл = Новый Файл( ИмяФайла) ;
Если НЕ ВыбФайл. Существует( ) Тогда
Сообщить( “Файл не существует!”) ;
Возврат Ложь ;
КонецЕсли ;
Попытка
ServiceManager = Новый COMОбъект( “com. sun. star. ServiceManager”) ;
Desktop = ServiceManager. CreateInstance( “com. sun. star. frame. Desktop”) ;
Desktop. getCurrentFrame( ) . getContainerWindow( ) . setVisible( Ложь ) ;
Параметры = Новый COMSafeArray( “VT_DISPATCH”, 1 ) ;
Свойство = ServiceManager. Bridge_GetStruct( “com. sun. star. beans. PropertyValue”) ;
Свойство. Name = “Hidden”;
Свойство. Value = true;
Параметры. SetValue( 0 , Свойство) ;
Document = Desktop. LoadComponentFromURL( “file:
Состояние( “Обработка файла Office Calc …”) ;
Листы = Document. getSheets( ) ;
Лист = Листы. getByIndex( НомерЛистаCalc- 1 ) ;
Исключение
Сообщить( “Ошибка загрузки данных. Возможно неверно указан номер листа книги Calc. ”) ;
Возврат ложь ;
КонецПопытки ;
ТабличныйДокумент. Очистить( ) ;
НульЯчейка = Лист. GetCellbyPosition( 0 , 0 ) ;
НульКурсор = Лист. createCursorByRange( НульЯчейка) ;
НульКурсор. GotoEndOfUsedArea( 1 ) ;
НульАдрес = НульКурсор. RangeAddress;
ПослСтрока = НульАдрес. EndRow;
ПослКолонка = НульАдрес. EndColumn;
Для Row = 1 По ПослСтрока + 1 Цикл
Если Лист. getCellByPosition( Column- 1 , Row- 1 ) . getType( ) = 0 Или Лист. getCellByPosition( Column- 1 , Row- 1 ) . getType( ) = 1 Тогда ТабличныйДокумент. Область( “R” + Формат( Row, “ЧГ= ”) + ”C” + Формат( Column, “ЧГ= ”) ) . Текст = Лист. getCellByPosition( Column- 1 , Row- 1 ) . value;
ИначеЕсли Лист. getCellByPosition( Column- 1 , Row- 1 ) . getType( ) = 2 Тогда ТабличныйДокумент. Область( “R” + Формат( Row, “ЧГ= ”) + ”C” + Формат( Column, “ЧГ= ”) ) . Текст = Лист. getCellByPosition( Column- 1 , Row- 1 ) . string;
КонецЕсли ;
КонецЦикла ;
Document. Dispose( ) ;
Document = 0 ;
Параметры = 0 ;
Desktop = 0 ;
ServiceManager = 0 ;
Возврат Истина ;
КонецФункции
И добавим в форму выбора файла ods по тексту.
Код 1C v 8.х ДиалогВыбораФайла. Фильтр = “Табличный документ ( * . mxl) |*.mxl|Лист Calc (*.ods)|*.ods|Лист Excel (*.xls)|*.xls|Текстовый документ (*.txt)|*.txt|dBase III (*.dbf)|*.dbf|”;
И выбор функции для ods
ИначеЕсли нРег(ФайлНаДиске.Расширение) = “.ods” Тогда
мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);
Вот так лучше.
Сайт
sikuda.ru Категория:
Работа с Microsoft Office и OpenOffice Как выгрузить Таблицу значение в файл Excel? Код 1C v 8.х Процедура СохранитьТаблицуВФайлExcel(Таблица, ПолноеИмяФайла="" , ОткрыватьДиалогВыбораФайла=Истина, ВыгружаемыеКолонки="" ) Экспорт
Если ПустаяСтрока( ПолноеИмяФайла) ИЛИ ОткрыватьДиалогВыбораФайла Тогда
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранение документа Excel" ;
Диалог. Фильтр = "Документ Excel (*.xls)|*.xls" ;
Диалог. Расширение = "xls" ;
Диалог. ПолноеИмяФайла = ПолноеИмяФайла;
Диалог. Каталог = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной( "глТекущийПользователь" ) , "ОсновнойКаталогФайлов" ) ;
Если ( Диалог. Выбрать( ) ) И ( НЕ ПустаяСтрока( Диалог. ПолноеИмяФайла) ) Тогда
ПолноеИмяФайла = Диалог. ПолноеИмяФайла;
Иначе
Возврат ;
КонецЕсли ;
КонецЕсли ;
ФайлНаДиске = Новый Файл( ПолноеИмяФайла) ;
Попытка
Состояние( "Выгрузка данных из 1С в Microsoft Excel..." ) ;
ExcelПриложение = Новый COMОбъект( "Excel.Application" ) ;
Книга = ExcelПриложение. WorkBooks. Add( ) ;
Лист = Книга. WorkSheets( 1 ) ;
Исключение
Сообщить( "Ошибка при загрузке Microsoft Excel."
+ Символы. ПС + ОписаниеОшибки( ) , СтатусСообщения. Внимание) ;
Возврат ;
КонецПопытки ;
Если ПустаяСтрока( ВыгружаемыеКолонки) Тогда
ТаблицаВыгрузки = Таблица. Скопировать( ) ;
Иначе
ТаблицаВыгрузки = Таблица. Скопировать( , ВыгружаемыеКолонки) ;
КонецЕсли ;
Для Кол = 0 По ТаблицаВыгрузки. Колонки. Количество( ) - 1 Цикл
Лист. Cells( 1 , Кол + 1 ) . Value = ТаблицаВыгрузки. Колонки[Кол]. Заголовок;
КонецЦикла ;
Попытка
Для Стр = 0 По ТаблицаВыгрузки. Количество( ) - 1 Цикл
Для Кол = 0 По ТаблицаВыгрузки. Колонки. Количество( ) - 1 Цикл
Если ТипЗнч( ТаблицаВыгрузки[Стр][Кол]) = Тип( "Число" ) Тогда
Лист. Cells( Стр + 2 , Кол + 1 ) . Value = ТаблицаВыгрузки[Стр][Кол];
Иначе
Лист. Cells( Стр + 2 , Кол + 1 ) . Value = Строка( ТаблицаВыгрузки[Стр][Кол]) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
ExcelПриложение. DisplayAlerts = False;
Книга. SaveAs( ПолноеИмяФайла) ;
ExcelПриложение. ActiveWorkbook. Close( ) ;
ExcelПриложение. Quit( ) ;
Сообщить( "Файл выгружен успешно: " + ПолноеИмяФайла) ;
Исключение
Сообщить( "Ошибка записи данных файла :" + ПолноеИмяФайла) ;
Сообщить( ОписаниеОшибки( ) ) ;
Попытка
ExcelПриложение. Quit( ) ;
Исключение
КонецПопытки ;
КонецПопытки ;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Загрузка данных из CSV файла Код 1C v 8.х // выберем CSV файл
ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = “Выберите файл”;
Если ДиалогВыбора.Выбрать() Тогда
ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
//Обработка данных из CSV
// очищаем информацию в таблице и находим файл на диске, а потом считываем его:
//очищаем таблицу и удаляем колонки
Таблица.Очистить();
Таблица.Колонки.Очистить();
ЭлементыФормы.Таблица.Колонки.Очистить();
// чтение файла
ЗагружаемыйФайл = Новый ТекстовыйДокумент;
ЗагружаемыйФайл.Прочитать(ИмяФайла);
//После того как мы получили все данные из файла, мы считываем 1 строку файла
// и формируем колонки на форме с наименованиями из файла
//шапка по умолчанию 1 строка, из первой строки делаем колонки таблицы
Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);
//раскладываем строку в массив
МассивКолонок = РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель); // процедура из типовой конфигурации, разбивает строку в массив по разделителям
//генерируем колонки
Для Каждого ИмяКолонки Из МассивКолонок Цикл
ИмяБезПробелов = СтрЗаменить(ИмяКолонки,” “,”"); // убираем из имени колонок пробелы
Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);
НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);
НоваяКолонка.Данные = ИмяБезПробелов;
КонецЦикла;
// После того, как шапка сформирована можно приступать к обработке самих данных
Для НомерСтроки=2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
Состояние(“Обрабатывается “+Строка(Формат(?(ЗагружаемыйФайл.КоличествоСтрок()=0,0,((100*НомерСтроки)/ ЗагружаемыйФайл.КоличествоСтрок())),”ЧЦ=3; ЧДЦ=0″))+” %”);
ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break
// получить строку файла с указанным номером и преобразуем её в массив
Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);// процедура из типовой конфигурации, разбивает строку в массив по разделителям
НоваяСтрока = Таблица.Добавить();
Если МассивКолонок.Количество() <> Таблица.Колонки.Количество() Тогда
Сообщить(“Ошибка со строкой ” + Строка);
Продолжить; // скорее всего в тексте содержит разделитель
КонецЕсли;
Для НомерКолонки = 1 по МассивКолонок.Количество() Цикл
//заполняем строку значениями
ТекущееЗначение = МассивКолонок[НомерКолонки-1];
ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя;
НоваяСтрока[ИмяКолонки] = ТекущееЗначение;
КонецЦикла;
КонецЦикла;
Категория:
JSON, XML, TXT, CSV, DBF Выбрать файл и записать в реквизит типа Хранилище значений Код 1C v 8.х Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Открытие) ;
Диалог. Заголовок = "Выберите файл" ;
Диалог. ПолноеИмяФайла = "" ;
Фильтр = "DOC (*.doc)|*.doc|DOCX (*.docx)|*.docx" ;
Диалог. Фильтр = Фильтр;
Если Диалог. Выбрать( ) Тогда
Попытка
ВнешнийДоговор = Новый ХранилищеЗначения( Новый ДвоичныеДанные( Диалог. ПолноеИмяФайла) ) ;
ВнешнийФайлНавание = СтрЗаменить( Диалог. ПолноеИмяФайла, Диалог. Каталог, "" ) ;
Исключение
ВнешнийФайлНавание = "ОШИБКА!" ;
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЕсли ;
Категория:
Работа с Хранилищем Значений