Использование синхронных методов на клиенте запрещено Адаптировала обработку под интерфейс Такси Бухгалтерии 3, и получила ошибку:
Ошибка при вызове метода контекста (Выбрать)
Если ДиалогОткрытияФайла.Выбрать() Тогда
по причине:
Использование синхронных методов на клиенте запрещено!
Это вызвано тем, что Использование модальных окон запрещено!
Решение:
Нужно использовать создание объекта «ОписанияОповещения » и вызов другого метода диалога Показать()
Вот пример кода с ошибкой:
Код 1C v 8.2 УП &НаКлиенте
Процедура Выгрузить(Команда)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранить в файл" ;
Диалог. Фильтр = "Файл ТЧ документа (*.ftd)|*.ftd|Все файлы (*.*)|*.*" ;
Диалог. ПолноеИмяФайла = "Выгрузка_" + Строка( Документ. Номер) ;
Если Диалог. Выбрать( ) Тогда
ЗначениеВФайл( Диалог. ПолноеИмяФайла, ТПТЧ) ;
КонецЕсли ;
КонецПроцедуры
Исправленный код:
Код 1C v 8.3 &НаКлиенте
Процедура Выгрузить(Команда)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Сохранить в файл" ;
Диалог. Фильтр = "Файл ТЧ документа (*.ftd)|*.ftd|Все файлы (*.*)|*.*" ;
Диалог. ПолноеИмяФайла = "Выгрузка_" + Строка( ВернутьНомерОснования( Объект. Основание) ) ;
Диалог. Показать( Новый ОписаниеОповещения( "ВыгрузитьЗавершение" , ЭтаФорма, Новый Структура( "Диалог" , Диалог) ) ) ;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Диалог = ДополнительныеПараметры. Диалог;
Если ( ВыбранныеФайлы < > Неопределено ) Тогда
ВыгрузитьСервер( Диалог. ПолноеИмяФайла) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьСервер(ПолнИмяФайла)
ЗначениеВФайл( ПолнИмяФайла, ЭтаФорма. ТЗ. Выгрузить( ) ) ;
КонецПроцедуры
Категория:
Системные Ошибки Как выгрузить все дополнительные обработки и отчеты в каталог? Выгрузить все дополнительные обработки и отчеты в каталог всего за пару кликов. Простейшая обработка в один реквизит и команду.
Набросайте элементы на форму и вставьте код в модуль формы обработки. И без всякого скачивания.
Работоспособность проверена на БП 3.0, Документооборот 1.4-2.0, платформы 1С 8.3.7, 8.3.8
Код 1C v 8.3 #Область ВыборКаталогаДляВыгрузки
&НаКлиенте
Процедура КаталогВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДопПараметры = новый Структура;
ДопПараметры. Вставить( "ИмяЭлемента" , "КаталогВыгрузки" ) ;
ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработатьВыборКаталога" , ЭтаФорма, ДопПараметры) ;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. ВыборКаталога) ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
Если ЗначениеЗаполнено( Объект. КаталогВыгрузки) Тогда
ДиалогОткрытияФайла. Каталог = Объект. КаталогВыгрузки;
КонецЕсли ;
ДиалогОткрытияФайла. Показать( ОписаниеОповещения) ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборКаталога(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат ;
КонецЕсли ;
Объект[ДополнительныеПараметры. ИмяЭлемента] = ВыбранныеФайлы[0 ];
КонецПроцедуры
#КонецОбласти
#Область НажатиеНаКнопку
&НаКлиенте
Процедура Выгрузить(Команда)
ОчиститьСообщения( ) ;
Если НЕ ЗначениеЗаполнено( Объект. КаталогВыгрузки) Тогда
Сообщить( "Укажите каталог для выгрузки" ) ;
Возврат ;
КонецЕсли ;
Каталог = Новый Файл( Объект. КаталогВыгрузки) ;
Если НЕ Каталог. Существует( ) Тогда
Сообщить( "Указанный каталог не существует" ) ;
Возврат ;
КонецЕсли ;
МассивФайлов = НайтиФайлы( Объект. КаталогВыгрузки, "*.*" ) ;
Если МассивФайлов. Количество( ) > 0 Тогда
ОписаниеОповещения = новый ОписаниеОповещения( "ПодвержденияЗамещения" , ЭтаФорма) ;
ПоказатьВопрос( ОписаниеОповещения, "В каталоге есть файлы. При выгрузке будет выполнение замещение существующих." + Символы. ПС+ "Начать выгрузку?" , РежимДиалогаВопрос. ДаНет) ;
Возврат ;
КонецЕсли ;
ВыгрузкаНачнись( ) ;
КонецПроцедуры
&НаКлиенте
Процедура ПодвержденияЗамещения(ЧтоОтветилПользователь, Параметры) Экспорт
Если ЧтоОтветилПользователь = КодВозвратаДиалога. Да Тогда
ВыгрузкаНачнись( ) ;
Иначе
Возврат ;
КонецЕсли ;
КонецПроцедуры
#КонецОбласти
#Область СамаВыгрузка
&НаКлиенте
Процедура ВыгрузкаНачнись()
ПолучаемыеФайлы = ПодготовимФайлыНаСервере( ЭтаФорма. УникальныйИдентификатор) ;
Обработчик = Новый ОписаниеОповещения( "ОбработкаРезультатаВыгрузки" , ЭтотОбъект) ;
НачатьПолучениеФайлов( Обработчик, ПолучаемыеФайлы, Объект. КаталогВыгрузки, Ложь ) ;
КонецПроцедуры
&НаСервере
Функция ПодготовимФайлыНаСервере(ИдентификаторФормы)
Массив = Новый Массив;
Выборка = Справочники. ДополнительныеОтчетыИОбработки. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Если ТипЗнч( Выборка. ХранилищеОбработки) = Тип( "ХранилищеЗначения" ) Тогда
Адрес = ПоместитьВоВременноеХранилище( Выборка. ХранилищеОбработки. Получить( ) , ИдентификаторФормы) ;
Массив. Добавить( Новый ОписаниеПередаваемогоФайла( Выборка. ИмяФайла, Адрес) ) ;
КонецЕсли ;
КонецЦикла ;
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура ОбработкаРезультатаВыгрузки(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
ПоказатьПредупреждение( , "Выгрузка в каталог завершена" , 10 ) ;
КонецПроцедуры
#КонецОбласти
Автор: Михали Задорнов (MZadornov)
Категория:
Внешние печатные формы, отчеты и обработк�… Как обработать файлы с разделителями, изменив их структуру и сохранив в кодировке UTF8 без BOM Частенько при разработке сайтов приходится обрабатывать тысячи однотипных файлов... чтобы оптимизировать эту рутинную работу я набросал небольшую обработку, которая перебирает в указанном каталоге все файлы с расширением w1c и полностью меняет структуру данного файла, сохраняя его в кодировке UTF8 без BOM сигнатуры
Код обработки файлов:
Код 1C v 8.3 &НаКлиенте
Процедура КомандаОбрW1C(Команда)
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с Файлами" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьККаталогу = ДиалогОткрытия. Каталог;
ВыбранКаталог = НайтиФайлы( ПутьККаталогу, "*.*" ) ;
Для каждого НайденныйФайл Из ВыбранКаталог Цикл
Если НайденныйФайл. ЭтоКаталог( ) Тогда
ИначеЕсли НайденныйФайл. Расширение= ".w1c" Тогда
Сообщить( НайденныйФайл. ПолноеИмя) ;
ОбработатьФайл( НайденныйФайл. ПолноеИмя) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьФайл(ТекФайл)
ОбрФайл = Новый ТекстовыйДокумент;
ОбрФайл. Прочитать( ТекФайл, "UTF-8" ) ;
врТекст = ОбрФайл. ПолучитьТекст( ) ;
врМассив = РазложитьСтрокуВМассив( врТекст, "<&w1c&>" ) ;
новТекст = СокрЛП( врМассив[0 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[1 ]) + "<&w1c&>" + "1<&w1c&>" ;
АтрибутыФайла = Новый Файл( ТекФайл) ;
новТекст = новТекст + Формат( АтрибутыФайла. ПолучитьВремяИзменения( ) , "ДФ=dd/MM/yyyy" ) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[2 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[3 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[4 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[5 ]) + "<&w1c&>" ;
новТекст = новТекст + "no-mods<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[6 ]) + "<&w1c&>" ;
новТекст = новТекст + СокрЛП( врМассив[7 ]) ;
ОбрФайл. Очистить( ) ;
ОбрФайл. УстановитьТекст( новТекст) ;
ОбрФайл. Записать( ТекФайл, "UTF-8" ) ;
Данные = Новый ДвоичныеДанные( ТекФайл) ;
Строка64 = Base64Строка( Данные) ;
Строка64 = Прав( Строка64 , СтрДлина( Строка64 ) - 4 ) ;
ДанныеНаЗапись= Base64Значение( Строка64 ) ;
ДанныеНаЗапись. Записать( ТекФайл) ;
КонецПроцедуры
&НаКлиенте
Функция РазложитьСтрокуВМассив(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Внешний вид обработки получился таким:
Обработка написана для Web-Студии W1C : Первый Веб-Консультант
Категория:
Текстовый документ Обработка файлов в папке и запись дополнительной информации в них Частенько при загрузке данных в 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С из PDF В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла...
И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С.
Чтение PDF файлов из 1С
Первым дело я стал искать, как напрямую можно прочитать данные из 1С в PDF файлах - было найдено много информации и вариантов решений, но к сожалению большинство из них не правильно работали с кодировкой В результате банальный текст вида Красный стул превращался в страшную кракозябру.
Далее после долгих поисков был найден конвертер PDF в TXT - pdf2txt
Поддержка командной строки:
PDF2TXT <input PDF file> [output TXT file] [-logfile] [-open] [-space] [-html] [-format] [-silent] [-blankline] [-summary] [-zoom <num>] [-?] [-h]
<input PDF file> : Open an existing PDF file to convert.
[output TXT file] : Write to TEXT file, the default is same filename of input PDF file.
[-first <page number>]: Specify the first page number.
[-last <page number>]: Specify the last page number.
[-logfile] : Write log to "C:\pdf2txt.log" file.
[-open] : Auto open the text file after it be created.
[-space] : Auto insert spaces into text file.
[-html] : Output to a HTML file, not a text file.
[-format] : Keep the page layout in the generated TXT file.
[-silent] : Disable error and warning messages.
[-blankline] : Auto delete blank line in the generated TXT file.
[-summary] : Get PDF document summary.
[-zoom <num>] : Set zoom ratio, the range is from 50 to 200.
[-unicode] : Create UTF-8 encoding text file.
Примеры:
Код Batch File (DOS, CMD, BAT) C:\>PDF2TXT C:\input.pdf
C:\>PDF2TXT C:\input.pdf -unicode
C:\>PDF2TXT C:\input.pdf -first 10 -last 12
C:\>PDF2TXT C:\input.pdf C:\output.txt
C:\>PDF2TXT C:\input.pdf -open -silent -logfile -zoom 150
C:\>PDF2TXT C:\input.pdf C:\output.txt -open -silent
C:\>PDF2TXT C:\*.pdf
C:\>PDF2TXT C:\*.pdf C:\*.txt
C:\>PDF2TXT C:\test\*.pdf C:\test\*.txt
В архиве (Скачать Вы можете из статьи по ссылке ) заготовка 1С обработки для частного случая, если она Вам подойдет - Хорошо
Если же нет, то Мы можем для Вас быстро доработать загрузку PDF в 1С !
Код на 1С для конфигурации УТ 10.3:
Код 1C v 8.х Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = "," ) Экспорт
МассивСтрок = Новый Массив( ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
МассивСтрок. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
МассивСтрок. Добавить( Стр) ;
Возврат МассивСтрок;
КонецЕсли ;
ТекЗнч = СокрЛП( Лев( Стр, Поз- 1 ) ) ;
Если ЗначениеЗаполнено( ТекЗнч) Тогда
МассивСтрок. Добавить( ТекЗнч) ;
КонецЕсли ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
тч. Очистить( ) ;
НайденныеФайлы = НайтиФайлы( ПутьКPDF, "*.pdf" , ложь ) ;
Для каждого стр Из НайденныеФайлы Цикл
Нстр = ТЧ. Добавить( ) ;
Нстр. ФайлPDF = стр. Имя;
КонецЦикла ;
ЭтаФорма. Обновить( ) ;
Для каждого стр Из ТЧ Цикл
Попытка
pdf = СокрЛП( ПутьКPDF+ "\" + стр. ФайлPDF) ;
txt = СтрЗаменить( pdf, "pdf" , "txt" ) ;
Команд = ПутьКPDF2TXT+ "\pdf2txt.exe " + pdf+ " " + txt;
ЗапуститьПриложение( Команд, ПутьКPDF, Истина ) ;
стр. ФайлTXT = txt;
Исключение
стр. ФайлTXT = "!!!_ОШИБКА" ;
КонецПопытки ;
ЭлементыФормы. ТЧ. ТекущаяСтрока = стр;
ЭлементыФормы. ТЧ. ОбновитьСтроки( стр) ;
КонецЦикла ;
мТекущийПользователь = глЗначениеПеременной( "глТекущийПользователь" ) ;
мСкладПоУмолчанию = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнойСклад" ) ;
мОсновноеПодразделение = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновноеПодразделение" ) ;
мОсновнаяВалютаВзаиморасчетов = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнаяВалютаВзаиморасчетов" ) ;
мОсновноеВедениеВзаиморасчетовПоДоговорам = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновноеВедениеВзаиморасчетовПоДоговорам" ) ;
мВидНоменклатурыПоУмолчанию = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОсновнойВидНоменклатуры" ) ;
мОтражатьВРеглУчете = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВУправленческомУчете" ) ;
мОтражатьВБухУчета = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВБухгалтерскомУчете" ) ;
мОтражатьВНалУчете = УправлениеПользователями. ПолучитьЗначениеПоУмолчанию( мТекущийПользователь, "ОтражатьДокументыВНалоговомУчете" ) ;
Для каждого стр Из ТЧ Цикл
Состояние( "Загружаю: " + стр. ФайлTXT) ;
текдок= Новый ТекстовыйДокумент;
текдок. Прочитать( стр. ФайлTXT, "UTF-8" ) ;
ЗагрузкаТЧ= Ложь ;
ДокВозвратТоваровОтПокупателя = Документы. ВозвратТоваровОтПокупателя. СоздатьДокумент( ) ;
ДокВозвратТоваровОтПокупателя. Ответственный = мТекущийПользователь;
ДокВозвратТоваровОтПокупателя. Дата = ОбщегоНазначения. ПолучитьРабочуюДату( ) ;
ДокВозвратТоваровОтПокупателя. УстановитьНовыйНомер( ) ;
ДокВозвратТоваровОтПокупателя. ВидПоступления = Перечисления. ВидыПоступленияТоваров. НаСклад;
ДокВозвратТоваровОтПокупателя. СкладОрдер = Склад;
ДокВозвратТоваровОтПокупателя. Подразделение = мОсновноеПодразделение;
ДокВозвратТоваровОтПокупателя. ВалютаДокумента = Справочники. Валюты. НайтиПоКоду( "643" ) ;
ДокВозвратТоваровОтПокупателя. УчитыватьНДС = ИСТИНА ;
ДокВозвратТоваровОтПокупателя. СуммаВключаетНДС = ИСТИНА ;
Для Ном= 1 по текдок. КоличествоСтрок( ) цикл
ТСтр = текдок. ПолучитьСтроку( Ном) ;
ТекСтр = СокрЛП( ТСтр) ;
Если Найти( ТекСтр, "Всего по накладной" ) > 0 Тогда
ЗагрузкаТЧ= Ложь ;
Для Каждого СтрокаТабличнойЧасти Из ДокВозвратТоваровОтПокупателя. Товары Цикл
ОбработкаТабличныхЧастей. РассчитатьКоличествоМестТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
ОбработкаТабличныхЧастей. РассчитатьСуммуТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
ОбработкаТабличныхЧастей. РассчитатьСуммуНДСТабЧасти( СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя) ;
КонецЦикла ;
Попытка
ДокВозвратТоваровОтПокупателя. Записать( РежимЗаписиДокумента. Проведение) ;
Исключение
ДокВозвратТоваровОтПокупателя. Записать( РежимЗаписиДокумента. Запись) ;
КонецПопытки ;
стр. Документ = ДокВозвратТоваровОтПокупателя. Ссылка;
стр. Инфо = "Все ОК" ;
ЭлементыФормы. ТЧ. ТекущаяСтрока = стр;
ЭлементыФормы. ТЧ. ОбновитьСтроки( стр) ;
Прервать ;
КонецЕсли ;
Если ЗагрузкаТЧ Тогда
ТекСтр = СтрЗаменить( ТекСтр, "подложке " , "подложке" ) ;
ТекСтр = СтрЗаменить( ТекСтр, " " , "|" ) ;
СтрМ= РазложитьСтрокуВМассивПодстрок( ТекСтр, "|" ) ;
Если СтрМ. Количество( ) > 2 Тогда
Попытка
НоваяСтрока = ДокВозвратТоваровОтПокупателя. Товары. Добавить( ) ;
НоваяСтрока. Номенклатура = Справочники. Номенклатура. НайтиПоКоду( СтрМ[2 ]) ;
НоваяСтрока. ЕдиницаИзмерения = НоваяСтрока. Номенклатура. БазоваяЕдиницаИзмерения;
НоваяСтрока. Коэффициент = 1 ;
НоваяСтрока. Количество = Число( СтрМ[6 ]) ;
НоваяСтрока. Цена = Число( СтрМ[7 ]) ;
НоваяСтрока. Сумма = Число( СтрМ[8 ]) ;
НоваяСтрока. СуммаНДС = Число( СтрМ[11 ]) ;
НоваяСтрока. Качество = Справочники. Качество. Новый ;
Попытка
НоваяСтрока. СтавкаНДС = Перечисления. СтавкиНДС["НДС" + Лев( СокрЛП( СтрМ[9 ]) , 2 ) ];
Исключение
НоваяСтрока. СтавкаНДС = НоваяСтрока. Номенклатура. СтавкаНДС;
КонецПопытки ;
Исключение
Сообщить( "Не загружено: " + ТекСтр) ;
КонецПопытки ;
Иначе
Продолжить;
КонецЕсли ;
Иначе
КонецЕсли ;
Если Найти( ТекСтр, "Товарная накладная" ) > 0 Тогда
ТекСтр = СтрЗаменить( ТекСтр, " " , "|" ) ;
СтрМ= РазложитьСтрокуВМассивПодстрок( ТекСтр, "|" ) ;
Если СтрМ. Количество( ) > 1 Тогда
ДокВозвратТоваровОтПокупателя. НомерВходящегоДокументаЭлектронногоОбмена = СтрМ[1 ];
ТекДата = СтрМ[2 ];
ДокВозвратТоваровОтПокупателя. ДатаВходящегоДокументаЭлектронногоОбмена = Дата( Прав( ТекДата, 4 ) + Сред( ТекДата, 4 , 2 ) + Лев( ТекДата, 2 ) ) ;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Грузополучатель:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекОрганизация = Справочники. Организации. НайтиПоРеквизиту( "ИНН" , текИНН) ;
Если ТекОрганизация= Справочники. Организации. ПустаяСсылка( ) Тогда
ДокВозвратТоваровОтПокупателя. Организация = Организация;
Иначе
ДокВозвратТоваровОтПокупателя. Организация = ТекОрганизация;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Поставщик:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекПоставщик = Справочники. Контрагенты. НайтиПоРеквизиту( "ИНН" , текИНН) ;
ДокВозвратТоваровОтПокупателя. Контрагент = ТекПоставщик;
ДокВозвратТоваровОтПокупателя. ДоговорКонтрагента = ТекПоставщик. ОсновнойДоговорКонтрагента;
КонецЕсли ;
КонецЕсли ;
Если Найти( ТекСтр, "Плательщик:" ) > 0 Тогда
ГдеИНН = Найти( ТекСтр, "ИНН" ) ;
Если ГдеИНН> 0 Тогда
ГдеИННвр= лев( ТекСтр, ГдеИНН+ 15 ) ;
текИНН = Прав( гдеИННвр, СтрДлина( ГдеИННвр) - ( ГдеИНН+ 3 ) ) ;
текИНН = СокрЛП( СтрЗаменить( текИНН, "." , "" ) ) ; текИНН = СокрЛП( СтрЗаменить( текИНН, "," , "" ) ) ;
ТекПлательщик = Справочники. Контрагенты. НайтиПоРеквизиту( "ИНН" , текИНН) ;
КонецЕсли ;
КонецЕсли ;
Если текстр= "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" Тогда
ЗагрузкаТЧ= Истина ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
КонецПроцедуры
Процедура ПутьКPDF2TXTОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с PDF2TXT" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьКPDF2TXT = ДиалогОткрытия. Каталог;
ПутьКPDF = ДиалогОткрытия. Каталог;
КонецЕсли ;
КонецПроцедуры
Процедура ПутьКPDFОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытия. Каталог = "" ;
ДиалогОткрытия. МножественныйВыбор = Ложь ;
ДиалогОткрытия. Заголовок = "Выберите каталог с PDF2TXT" ;
Если ДиалогОткрытия. Выбрать( ) Тогда
ПутьКPDF = ДиалогОткрытия. Каталог;
КонецЕсли ;
КонецПроцедуры
Категория:
Загрузка данных в 1С Выгрузка картинок из базы 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.х Функция вернутьРодителяТовара(стрКатегории)
Родитель = ПапкаЗагрузкиВыгрузкиТоваров;
масРодителей = РазложитьСтрокуВМассивПодстрок( стрКатегории, "/" ) ;
Для каждого Род Из масРодителей Цикл
РодСс = Справочники. Номенклатура. НайтиПоНаименованию( Род, Истина ) ;
Если РодСс. Пустая( ) Тогда
НовРод = Справочники. Номенклатура. СоздатьГруппу( ) ;
НовРод. Наименование = Род;
НовРод. Родитель = Родитель;
Если Не ЗаписатьЭлементСпр( НовРод) Тогда
Возврат Неопределено ;
КонецЕсли ;
Родитель = НовРод. Ссылка;
Иначе
Родитель = РодСс;
КонецЕсли ;
КонецЦикла ;
Возврат Родитель;
КонецФункции
Все. Конечно, в реальной жизни еще много чего нужно будет дописать, но не все сразу. Такой шаблон можно использовать как отправную точку.
Скачивать файлы может только зарегистрированный пользователь!
Успехов в разработке!
Источник Категория:
Текстовый документ Как выгрузить Таблицу значение в файл 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" ;
Диалог. Фильтр = Фильтр;
Если Диалог. Выбрать( ) Тогда
Попытка
ВнешнийДоговор = Новый ХранилищеЗначения( Новый ДвоичныеДанные( Диалог. ПолноеИмяФайла) ) ;
ВнешнийФайлНавание = СтрЗаменить( Диалог. ПолноеИмяФайла, Диалог. Каталог, "" ) ;
Исключение
ВнешнийФайлНавание = "ОШИБКА!" ;
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЕсли ;
Категория:
Работа с Хранилищем Значений Написании Выгрузки и Загрузки Данных используя Универсальный обмен данными в формате XML Написании обработок для выгрузки и загрузки данных используя методы обработки "Универсальный обмен данными в формате xml"
Принцип работы:
При изменении даты в форме, табличное поле заполняется документами за выбранную дату.
Сами правила обмена были вставлены в обработку как макет с типом "Двоичные данные".
При ВЫГРУЗКЕ используется код:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
ДиалогФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
ДиалогФайла. Фильтр = "Файл данных (*.xml)|*.xml" ;
ДиалогФайла. ПолноеИмяФайла = "Retail_" + СтрЗаменить( Формат( Дата, "ДФ=dd.MM.yyyy" ) , "." , "-" ) ;
Если ДиалогФайла. Выбрать( ) Тогда
ИмяФайла = ДиалогФайла. ПолноеИмяФайла;
Попытка
ВыгрузитьДанные( ИмяФайла) ;
ДвоичныеДанные = Новый ДвоичныеДанные( ИмяФайла) ;
ДвоичныеДанные. Записать( ИмяФайла) ;
Исключение
Предупреждение( "Внешний файл не сохранен
|" + ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыгрузитьДанные(ИмяФайлаОбмена)
Обработка= Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработка. РежимОбмена= "Выгрузка" ;
ВремФайл = ПолучитьИмяВременногоФайла( "xml" ) ;
МакетПравилОбмена = ПолучитьМакет( "ПравилаВыгрузки" ) ;
МакетПравилОбмена. Записать( ВремФайл) ;
Обработка. ИмяФайлаПравилОбмена = ВремФайл;
Обработка. ЗагружатьДанныеВРежимеОбмена = Истина ;
Обработка. ЗаписыватьРегистрыНаборамиЗаписей = Истина ;
Обработка. ЗапоминатьЗагруженныеОбъекты = Истина ;
Обработка. ИспользоватьОтборПоДатеДляВсехОбъектов = Истина ;
СписокДок = Новый Массив;
Для каждого Стр Из Документы Цикл
Если НЕ Стр. Флаг Тогда
Продолжить;
КонецЕсли ;
СписокДок. Добавить( Стр. Реализация) ;
КонецЦикла ;
Обработка. ДатаНачала = Дата;
Обработка. ДатаОкончания = КонецДня( Дата) ;
Обработка. ВыгружатьТолькоРазрешенные = Истина ;
Обработка. ИмяФайлаОбмена = ИмяФайлаОбмена;
Обработка. ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0 ;
Обработка. ЗагрузитьПравилаОбмена( ) ;
Обработка. Параметры. Вставить( "Документы" , СписокДок) ;
Обработка. ВыполнитьВыгрузку( ) ;
КонецПроцедуры
Отбор по документам осуществляется с помощью параметра "Документы", описанного в правилах обмена.
При ЗАГРУЗКЕ используем следующий код:
Код 1C v 8.х ОбработкаОбмена = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
ОбработкаОбмена. ИмяФайлаОбмена = ФайлЗагрузки;
ОбработкаОбмена. РежимОбмена = "Загрузка" ;
ОбработкаОбмена. ОткрытьФайлЗагрузки( Истина ) ;
ОбработкаОбмена. АрхивироватьФайл = Ложь ; ;
ОбработкаОбмена. ВыполнитьЗагрузку( ) ;
ОбработкаОбмена = Неопределено ;
Посмотрите по этой теме:
Обработка - Универсальный обмен данными в формате XML
Автоматическая выгрузка / загрузка данных используя Универсальный обмен данными в формате XML и Регламентное Задание
Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" Категория:
Обработки Как получить информацию о изображении (высота, ширина, размер)? Платформа 1С версии 8.х предоставляет слабые возможности по работе с изображением.
Для работы с изображениями можно использовать библиотеку Windows Image Acquisition Automation Library. Библиотеку с описанием можно
скачать здесь (в Windows 7 уже входит в состав дистриботива).
После того, как загрузили архив, распакуйте. Саму библиотеку
wiaaut.dl l придется зарегистрировать командой
regsvr32 . После регистрации доступен
COM-объект "WIA.ImageFile" . Приведем пример работы:
Код 1C v 8.х
СтандартнаяОбработка = Ложь ;
РежимДиалога = РежимДиалогаВыбораФайла. Открытие;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла( РежимДиалога) ;
ДиалогВыбораФайла. МножественныйВыбор = Ложь ;
ДиалогВыбораФайла. Заголовок = "Задайте имя файла" ;
ДиалогВыбораФайла. ПолноеИмяФайла = ПолеИмениФайла;
ДиалогВыбораФайла. Фильтр = "Все файлы картинок|*.jpg;*.jpeg;*.gif;*.bmp;*.ico;*.png;*.tif;*.*" ;
Если НЕ ДиалогВыбораФайла. Выбрать( ) Тогда
Возврат ;
КонецЕсли ;
ПолеИмениФайла = ДиалогВыбораФайла. ПолноеИмяФайла;
ФайлКартинка = Новый COMОбъект( "WIA.ImageFile" ) ;
ФайлКартинка. LoadFile( ПолеИмениФайла) ;
Сообщить( "Расширение файла: " + ФайлКартинка. FileExtension) ;
Сообщить( "Высота: " + ФайлКартинка. Height) ;
Сообщить( "Ширина: " + ФайлКартинка. Width) ;
Сообщить( "Размер: " + Окр( ФайлКартинка. FileData. Count / 1024 , 2 ) + " Кб" ) ;
Библиотека была протестирована на самых распространенных форматах файлов-картинок: jpeg, gif, bmp, ico, png, tif.
Здесь можно скачать готовую обработку:
Скачивать файлы может только зарегистрированный пользователь!
Помимо данных о картинке, библиотека может многое другое: изменить размер изображения, повернуть, получить изображение со сканера и прочее. Надеюсь, мы еще вернемся к этой библиотеке.
Источник Категория:
COM-объекты, WMI, WSH