Нередко необходимо программно создать новый документ или элемент справочника и заполнить его данными. А затем, НЕ ЗАПИСЫВАЯ его в базу данных, открыть форму для того чтобы пользователь получил возможность его отредактировать и потом сам принял решение о его записи в БД(или отказался от записи). На платформах 8.0, 8.1 (и даже 7.7) это не представляло никакой сложности, а вот в тонком клиенте управляемого приложения 8.2 эта задача уже ни кажется столь тривиальной.
Первый способ заключается в том, что необходимо заранее подготовить некую структуру, которая будет содержать данные для заполнения документа, передать эту структуру в открываемую форму, а уже в самой форме в событии ПриСозданииНаСервере() заполнять вновь открываемую форму переданными в неё данными. Этот способ не нов, но у него есть один серьезный недостаток – необходимо изменить модуль формы самого объекта, чтобы добавить/изменить событие формы ПриСозданииНаСервере(), это очень не понравится тем кто работает с типовыми конфигурациями находящимися на поддержке. Кроме того этот подход не применим во внешних обработках, что сильно сокращает потенциал его применения.
Второй способ решения этой задачи лишен вышеупомянутых недостатков:
Думаю, что все знают, как работает 1с с FTP сервером, но вот как работать с sFTP или FTPs сервером?
Первое что Вам нужно сделать - это установить бесплатную программу WinSCP, скачать ее Вы сможете здесь, также там есть вся необходимая литература по пользованию данной программы.
После того как Вы установили программу, Вам нужно добавить сессию, там все просто, прописываете узел, порт, логин и пароль к серверу.
Так же посоветую Вам вести логи данной программы, что бы потом можно было в любой момент посмотреть из-за чего не произошел обмен данными или проверять лог на успех или не успех синхронизации файлов. Для того что бы у Вас создавался лог нужно зайти на закладку «Журнализация» установить флажок записывать у файл и выбрать путь, имя файл советую сделать таким образом !S!Y!M!D.txt, это означает, что каждый день будет создаваться новый файл для лога с таким наименованием S – имя сессии, Y – год, M – месяц, D – день, то есть Вам потом будет намного удобнее считывать данные из логов.
Теперь приступим непосредственно к программирования в 1с и для этого нам нужно только знать основные команды WinSCP, весь список которых можно посмотреть на сайте программы. А я Вам приведу только те команды которые использовал я и которых на мой взгляд хватит для того что бы 1с успешно обменивалось данными с sFTP или FTPs серверами. Также я напишу что, зачем и в какой последовательности делал:
1. Перед тем как делать синхронизацию данных, нужно проверить есть ли вообще соединение с сервером, для этого мы делаем следующее:
где ПутьWinSCP – строка – путь к программе (c:\Program Files (x86)\WinSCP\WinSCP.com, ОБРАТИТЕ внимание, что расширение файла должно быть com), ПрофильWinSCP – строка – профиль сессии, то как Вы назвали Вашу сессию, к примеру test_sFTP.
2. После того как мы выполнили предыдущую команду, настоятельно рекомендую делать следующее, искать по дате лог WinSCP и проверять его, не было ли ошибки в соединении, вариантов как это сделать много, но я делал так: с конца текста искал строку «Failed», до тех пор, пока не находил «Session name: " + ПрофильWinSCP», после этого поиск прерываем, ну и собственно если была обнаружена строка «Failed», то при подключении была ошибка.
3. Делаем синхронизацию файлов:
После этого снова проверяем лог.
Остальные команды которые могут Вам понадобится: Запись файла на SFTP сервер:
Скопировать файл с SFTP сервера:
Получить список файлов на SFTP серверу и записать его в файл:
Есть задача:
в элемент управления "Поле HTML документа" загружается некая web форма, на которой есть некий InputElement. Необходимо реализовать обработчик события onchange этого элемента.
Пытаюсь сделать так:
При проверке модуля возникает ошибка:
Переменная не определена (outMsgChange)
Толстый клиент (обычное приложение)
Есть какие-то варианты назначить для web контрола в качестве обработчика процедуру модуля?
Что-то аналогичное коду на C#:
this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);
Иногда требуется разобрать данные из Excel в 1С.
Я считаю что легче и быстрей поместить все данные в ТаблицуЗначений и уже там ими манипулировать. Пример 2-х функций которые я использую:
ИзExcelВТаблицу – Читает Excel в ТаблицуЗначений
ЭлементСправочника – Создает или находит элемент справочника.
Теперь сам код:
Пример вызова:
или
Теперь функция которой я использую когда надо создать элемент справочника из полученных данных.
В платформе “1с предприятие 8.2″ появился такой замечательный объект как “динамический список“. Данный объект я часто использую в подборах, если не нужно делать сложные расчеты, а просто показать данные и выбрать.
Бывают такие ситуации, что список большой, более 10 позиций, и пользователю необходимо выбрать все строки. Стандартного способа как это сделать я не нашел.
Для решения это задачи я использовал объект “WSCript.Shell“.
В процессе реализации у меня получилось 2 варианта: Вариант №1
Определим кнопку “Выделить все строки” и в модуль обработчика добавим код:
С помощью данного кода выполняется нажатие клавиш “Ctrl + A“, т.е. “выделить все”.
Вариант №2
Вариант №1 не всегда срабатывал. Тогда данный код я переписал следующим образом:
Добавим реквизит формы “ПоследняяСтрокаСписка”
Для списка укажем свойство “Начальное отображение списка” = В конце списка
В процедуру “ПриОткрытии” добавим заполнение реквизита, определенного в пункте 1.
Определим кнопку “Выделить все строки” и в модуль обработчика добавим код:
С помощью данного кода выполняется нажатие клавиш “Shift + кнопка вверх“.
Хочу обратить внимание. Данное решение не будет работать на клиентах, которые запускаются на Линукс.
В процедурах выгрузки/загрузки создается ФабрикаXDTO из схемы, которая хранится в макете как файл. Файл настроек схемы надо использовать один и тот же в обработках Загрузки/Выгрузки
Из Фабрики создается объект, его заполняю выгружаемыми данными
Фабрику сохраняю в XML. В процедуре загрузки из читаю фабрику из XML и пробегаю по объектам
Очень удобно!
Файл схемы примерно такой (разукрашка съела скобки, но смысл должен быть понятен ))
Формат конфигурационного файла программы запуска Файл расположен в каталоге %APPDATA%\1C\1CEStart
В конфигурационном файле содержится следующая информация:
- Версия платформы, которую нужно использовать по умолчанию;
- Расположение списков общих баз;
- Список каталогов с установленными версиями;
- Список каталогов с дистрибутивами;
- Расположение общего конфигурационного файла.
Файл представляет собой текстовый документ в кодировке UTF-16LE и содержит строки формата Параметр=Значение Описание параметровDefaultVersion - определяет версию, используемую по умолчанию. Допускается наличие нескольких строк с таким параметром.
Пример 1: DefaultVersion=8.2-8.2.9.150
Данная строка означает, что при попытке запуска информационной базы с указанием версии 8.2 будет использоваться версия 8.2.9.150.
Пример 2: DefaultVersion=8.2.9-8.2.9.100
Данная строка означает, что при попытке запуска информационной базы с версией 8.2.9 будет использоваться версия 8.2.9.100. CommonInfoBases - указывает путь и имя файла со списком общих информационных баз. InstalledLocation - содержит указание на каталог, в который выполнена установка 1С:Предприятие. По умолчанию это значение C:\Program Files\1Cv82. DistributiveLocation - содержит указание на каталог, в котором будет производится поиск новой версии для автоматической установки. CommonCfgLocation - указывает путь и имя общего конфигурационного файла. Допускается наличие нескольких строк с таким параметром. InstallComponents - В локальном конфигурационном файле (1CEStart.cfg) содержит перечень установленных компонент. Общий файл для всех пользователей компьютера находится в каталоге \Documents and Settings\All Users\Application Data\1C\1CEStart.
В общем конфигурационном файле (1CESCmn.cfg) содержит перечень компонент, которые необходимо установить (формируется администратором системы).
Содержит строку компонентов с признаком необходимости установки, разделенных пробелом:- 0 — не устанавливать,
- 1 — устанавливать.
Возможны следующие компоненты:
- DESIGNERALLCLIENTS — все клиенты и конфигуратор.
- THINCLIENT — тонкий клиент для клиент-серверного варианта работы.
- THINCLIENTFILE — тонкий клиент с возможностью работы с файловыми информационными базами.
- SERVER — сервер 1С:Предприятия. Если программа установки запускается из программы запуска, то сервер будет установлен как приложение.
- WEBSERVEREXT — компоненты расширения для веб-сервера.
- CONFREPOSSERVER — сервер хранилища конфигураций 1С:Предприятия.
- SERVERCLIENT — компоненты для администрирования кластера серверов 1С:Предприятия.
- CONVERTER77 — конвертер информационных баз из версии 1С:Предприятия 7.7.
- LANGUAGES — список языков интерфейса для установки. Если указано несколько языков, они перечисляются через ",". Перечень кодов языков локализации см. здесь.
Пример: LANGUAGES=RU,UK,BG
Пример параметра: InstallComponents=THICKCLIENT=0 THINCLIENT=1 WEBSERVEREXT=0 SERVER=0 CONFREPOSSERVER=0 CONVERTER77=0 SERVERCLIENT=1 LANGUAGES=RU,EN
В файле для всех пользователей 1CEStart.cfg могут быть указаны все настройки, аналогичного файлам пользователей, но интерактивные режимы редактирования настроек изменяют настройки в файле пользователя.
Инсталлятор записывает в All Users\Application Data\1C\1CEStart\1CEStart.cfg ключи InstalledLocation и InstallComponents.
При использовании настроек из общего конфигурационного файла и файла текущего пользователя, если ключ присутствует в обоих файлах:
Более высокий приоритет общего файла настроек для ключей: InstallComponents
Более высокий приоритет файла настроек текущего пользователя для ключей: DefaultVersion
UseHWLicenses
Остальные ключи, объединяются. ConfigurationTemplatesLocation - указывает путь к каталогу шаблонов конфигураций. Может быть более одной записи.
Если параметр присутствует и в локальном и общем конфигурационном файле, то параметры анализируются в следующем порядке:- параметры DefaultVersion, InstallComponents в порядке описания в локальном файле, затем в порядке описания в общем файле;
- параметры InstalledLocation, DistributiveLocation, CommonInfoBases в порядке описания в общем файле, затем в порядке описания в локальном файле;
- параметры CommonCfgLocation только в локальном файле;
- параметр InstallComponents используется из общего файла (если указано) и замещает значение в локальном файле, если не указано — используется значение из локального файла. UseHwLicenses - указывает необходимость поиска локального ключа защиты.
Пример параметра: UseHWLicenses=0 - поиск аппаратного ключа не выполняется
Пример конфигурационного файла:
Параметры:
<ИмяПроцедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.
<Интервал> (обязательный) Тип: Число. Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число).Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания.
Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь
Описание: Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.
Примечание:
Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.
Подключает вызов указанной процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля через определенный интервал времени. Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий. Вызов обработчика ожидания продолжается, пока система не завершит работу или пока не будет вызван метод глобального контекста ОтключитьОбработчикОжидания.
Для Формы
Параметры:
<ИмяПроцедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.
<Интервал> (обязательный) Тип: Число. Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число). Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания. 0Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь
Описание:
Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.
Доступность:
Толстый клиент. Примечание:
Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.
Пример:
Обработка ожидания в системе 1С:Предприятие, как следует из документации, предназначена для периодического выполнения процедуры глобального модуля с заданным интервалом времени. Код для запуска будет выглядеть следующим образом:
Где "ОбновитьСчетчик_" - имя процедуры глобального модуля, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)
Но! Проблема в том, что запустить обработку ожидания можно только 1 раз. Повторный запуск приведет к отмене предыдущего. Другими словами, если Вы хотите сделать, к примеру, обработку-таймер для отсчета затраченного времени, то запустить можно только один таймер, т.к. запуск второго таймера приведет к остановке первого. А что делать если Вам надо запустить 2, 3 или больше таких таймеров одновременно? Или Вам надо еще при этом периодически сканировать состояние документов?
Выход есть! Обработку ожидания надо запустить в контексте формы, чтобы отделить этот поток от глобального контекста. И тогда станет возможным периодический запуск процедуры локального модуля, т.е. процедуры, расположенной в модуле формы Вашей обработки.
Код для запуска будет выглядеть следующим образом:
Где "ОбновитьСчетчик_" - имя процедуры локального модуля формы обработки, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)
Таким образом, в каждой обработке можно запустить свою обработку ожидания, которая будет работать до тех пор, пока открыта форма.
В формах можно использовать ,
где ИмяПроцедуры - имя процедуры, которая запускается через ВремяЗапуска секунд
В самой процедуре нужно вставить для прекращения обработки ожидания (естественно, после выполнения нужных условий).
Источник lessons1c
:
При интеграции 1С с веб-сайтами всегда встает вопрос о передачи некоторых данных на веб-сервер. Будь то это передача параметров запроса для получения данных от веб-сервера в 1С или же передача данных из 1С, которые должны быть сохранены или каким-то образом обработаны на веб-сервере. Передаваться могут как простые данные в виде строк, чисел, так и целые файлы (изображения, XML-файлы и прочее). Для передачи и получения файлов и данных на веб-сервер в 1С используется объект HTTPСоединение.
Создание и инициализация HTTP соединения в 1С
Для инициализации HTTP соединения в 1С необходимо создать объект HTTPСоединение и в конструкторе указать параметры HTTP соединения.
<Сервер> (обязательный) - адрес сервера, с которым необходимо установить соединение.
<Порт> (необязательный) - порт сервера, с которым устанавливается соединение.
Значение по умолчанию зависит от защищенности соединения (80 для незащищенного и 443 для SSL-соединения).
<ИмяПользователя> (необязательный) - имя пользователя на указанном сервере.
<Пароль> (необязательный) - пароль пользователя на указанном сервере.
<Прокси> (необязательный). Тип - ИнтернетПрокси. Прокси, используемый для соединения с сервером.
<ЗащищенноеСоединение> (необязательный). Тип - Булево. Определяет используемый протокол -
http или https. По умолчанию Ложь.
Ниже приведен примеры создания HTTPСоединения с сайтом http://www.mysite.ru/.
Передача данных на веб-сервер из 1С методом GET.
Для передачи данных на веб-сервер из 1С методом GET используется процедура Получить() объекта HTTPСоединение.
<Источник> (обязательный). Тип - Строка. Адрес ресурса на сервере.
<ИмяВыходногоФайла> (обязательный). Тип - Строка. Имя файла на диске, в который
помещаются данные, полученные от сервера (ответ сервера).
<Заголовки> (необязательный). Тип - Строка. Заголовки, добавляемые к запросу на сервер.
Текстовые пары вида <Заголовок>:<Значение>, разделенные комбинацией ВК + ПС.
(подробнее о заголовках будет сказано ниже).
Рассмотрим параметры процедуры Получить() более подробно:
В качестве источника указывается строка с адресом запроса, идущая после названия домена и символа "/". Так, если необходимо отправить данные на адрес https://www.mysite.com/getusers.php, то при создании HTTP соединения в конструкторе HTTPСоединение в поле "Сервер" указывается "www.mysite.com", признак защищенного соединения устанавливается в Истина, а в процедуре Получить() в параметре Источник указывается "getUsers.php".
В поле ИмяВыходногоФайла указывает имя файла на диске, в который будут сохранены данные, полученные от сервере в результате запроса. Так, например, если сервер возвращает список пользователей в формате XML, то на диск в указанный файл будет сохранен XML файл со списком пользователей.
О заголовках более подробно будет сказано ниже.
Так же, при запросе к веб-серверу зачастую передаются дополнительные данные (параметры) для этого запроса. Параметры от адреса источника отделяются символом "?". Каждый параметр задается в формате <Имя_Параметры>=<Значение_Параметры>. Параметры от адреса источника отделяются символом "?". Сами же параметры отделяются друг от друга символом "&". В результате строка адреса источника может выглядеть следующим образом: getUsers.php?owner_id=263544&count=100.
Ниже приведен пример, поясняющий все выше сказанное.
Заголовки HTTP
Ниже приведена общая информация о HTTP заголовках из википедии.
Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA. Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.
Все заголовки разделяются на четыре основных группы:
General Headers (рус. Основные заголовки) — должны включаться в любое сообщение клиента и сервера.
Request Headers (рус. Заголовки запроса) — используются только в запросах клиента.
Response Headers (рус. Заголовки ответа) — только для ответов от сервера.
Entity Headers (рус. Заголовки сущности) — сопровождают каждую сущность сообщения.
Именно в таком порядке рекомендуется посылать заголовки получателю.
Более подробно о заголовках HTTP можно прочитать здесь. Так же можно ознакомится со списком заголовков HTTP.
От себя лишь добавлю, что, если это явно не указано в требованиях к отправке данных веб-серверу заголовки HTTP для метода GET можно не указывать. Для метода POST обычно нужно указать заголовки Content-Type (тип передаваемых данных, например: "Content-Type: text/html;charset=utf-8") и Content-Length (размер передаваемых данных в байтах, например: "Content-Length: 1348").
Напомню, что HTTP заголовки в 1С указываются строкой в виде текстовых пар "<Заголовок>:<Значение>", разделенных комбинацией символов ВК+ПС.
Также заголовки можно задать типом Соответствие, где в качестве ключа указывается заголовок, а в качестве значения - значение заголовка.
Ниже приведены поясняющие примеры:
Передача данных на веб-сервер из 1С методом POST.
Общие сведения.
Для передачи данных на веб-сервер из 1С методом POST используется процедура ОтправитьДляОбработки() объекта HTTPСоединение.
<Источник> (обязательный) - Имя файла-источника, который будет отправлен
на сервер для обработки.
<АдресРесурса> (обязательный). Тип - строка. Адрес ресурса на сервере,
в который посылаются данные из источника.
<ИмяВыходногФайла> (обязательный) - Имя файла на диске, в который записываются
полученные с сервера данные.
<Заголовки> (необязательный). Тип - строка. Заголовки, добавляемые к запросу на сервер.
Текстовые пары вида <Заголовок>:<Значение>, разделенные комбинацией ВК + ПС.
(подробнее о заголовках будет сказано ниже).
Рассмотрим параметры процедуры ОтправитьДляОбработки() подробнее:
В качестве источника указывается файл, содержимое которого необходимо отправить на сервер для обработки. Подробнее о формировании содержимого файла-источника будет сказано ниже.
Поле АдресРесурса аналогично полю Источник процедуры Получить(), т.е. указывается строка с адресом запроса, идущая после имени домена и символа "/".
Поле ИмяВыходногоФайла также аналогично одноименному полю процедуры Получить(), т.е. содержит имя файла, в котором будут сохранены данные, полученные от сервера в результате обработки исходных данных.
О заголовках было упомянуто выше. Напомню лишь, что для метода POST обычно указываются заголовки Content-Type и Content-Length. В качестве параметра заголовка Content-Length указывается размер файла-источника, преобразованный с помощью функции XMLСтрока().
Ниже приведен пример, поясняющий все выше сказанное.
Передача параметров методом POST.
Для передачи параметров, аналогично методу GET, можно сформировать строку параметров, записать их в текстовый файл и отправить этот файл на сервер для обработки. Ниже приведен пример аналогичный примеру отправки методом GET, но теперь те же данные отправляются методом POST.
Передача файлов методом POST.
Зачастую данные для обработки задаются не виде строки параметров разделенных "&", как в рассматриваемых выше примерах, а виде файла определенного формата, например XML или JSON. Рассмотрим пример отправки данных на веб-сервер для обработки методом POST, которые задаются в формате XML. Например, сервер может добавить ваш комментарий к материалу. В описании процедуры добавлении сказано, что данные необходимо отправлять по адресу www.mysite.com/addComment.php. Сами данные должны быть переданы в следующем виде:
где:
<ID_Пользователя> - id пользователя на сайте, от имени которого добавляется комментарий;
<ID_Материала> - id материала на сайте, к которому добавляется комментарий;
<Текст_Комментария> - текст комментария.
Предположим, что нам уже известны id пользователя и материала и они хранятся в переменных user_id и post_id. Ниже приведен пример, решающий нашу задачу.
Загрузка файлов (изображений, документов и т.п.) на веб-сервер методом POST.
Зачастую возникает необходимость загрузки файлов на веб-сервер. Это может быть, например, изображение к статье на сайте, или фотография для альбома, или архив для файлообменника. Ранее мы рассматривали передачу методом POST параметров или просто файлов. Таким же образом можно и передавать двоичные файлы. Но как быть, если файлы необходимо отправлять вместе с параметрами? Для возможности отправки файлов в этом случае используется HTTP заголовок ContentType:multipart/form-data. Следует заметить, что обычно таким способом передаются файлы через веб-браузеры. Т.е. когда на сайте вы выбираете файл и нажимаете кнопку "Загрузить", то файл передается способом описанным ниже. При таком способе сам файл также задается как переменная, т.е., например, файл передается через параметр file или image. Однако, мы не можем просто передать file=<Двоичные_Данные>. А вот как все таки передать файл мы и рассмотрим ниже.
Для возможности вместе с параметрами передавать и двоичные данные (файлы) необходимо сформировать HTTP заголовок Content-Type следующим образом:
Content-Type: multipart/form-data, boundary=<уникальные_данные>
где <уникальные_данные> - это любой набор цифр и/или символов, который будет служить для отделения значений друг от друга. Значение boundary должно быть уникальным в пределах пересылаемой информации, т.е. таких символов не должно встречаться в пересылаемых файлах и переменных.
Bounday можно сформировать, например, таким образом
Все данные отделяются друг от друга разделителем boundary. Начинать разделитель нужно с "--":
В конце данных нужно закрыть разделитель, добавили в конце разделителя "--", т.е. вид будет "--<boundary>--".
Итак, например, нам нужно передать на веб-сервер текстовый файл через параметр "text", его описание через параметр "desc" и id пользователя через параметр "uid", для которого будет загружен наш файл.
Предположим, что файл содержит следующий текст: Мороз и солнце; день чудесный!
Еще ты дремлешь, друг прелестный -
Пора, красавица, проснись:
Открой сомкнуты негой взоры
Навстречу северной Авроры,
Звездою севера явись!
Описание должно содержать "Стих А.С. Пушкина", а id пользователя равно "0123456". Тогда файл должен быть сформирован следующим образом (для упрощения предположим, что bounday мы уже сформировали и он равен "ccf8111910")
А теперь перейдем непосредственно к 1С. Пусть у нас будет форма с реквизитами "Пользователь", "Описание" и "ИмяФайла". Реализуем отправку данных, описанным выше способом
Передача текстовых файлов таким способом проблем не вызывает. Сложнее дело обстоит с файлами, содержащими двоичные данные (изображения, архивы и т.п.). Все дело в том, что в 1С просто нет методов для чтение двоичных файлов в строку. Если мы делаем обмен со своим сайтом, которые сами и разрабатывали, то можно просто преобразовать файл в строку Base64 при помощи процедуры Base64Строка(), а на стороне сервера преобразовать строку Base64 обратно.
А как же быть если мы загружаем файл на сторонний сервер, который принимает файл как есть без преобразование его в строку Base64(). В это случае можно пойти на хитрость. В 1С есть процедура ОбъединитьФайлы(), которая объединяет несколько файлов на диске в один результирующий файл
<ИменаЧастей> (обязательный). Тип - Массив. Массив имен частей файлов, которые
требуется объединить. Объединение будет происходить в порядке, в котором заданы
имена файлов в массиве.
<ИмяРезультирующегоФайла> (обязательный). Тип - Строка. Имя файла, который будет
создан в результате объединения файлов.
Т.е. мы можем сформировать текстовый файл с запросом, объединить его с файлом(-ами), которые необходимо передать на веб-сервер и передать уже файл, получившийся в результате объединения исходных файлов. Ниже демонстрируется процесс передачи двух zip архивов на сервер с дополнительными параметрами user_id и post_id.
Ну вот, вроде бы, и все, что я хотел рассказать о способах передачи файлов и данных на веб-сервер из 1С. Если что-то не понятно, что-то хотите уточнить или нашли ошибки - пишите в комментариях.
Автор: Павел
Обработка Универсальный обмен данными в формате XML (обработка универсальныйобменданнымиxml)
Обработка "Универсальный обмен данными в формате XML" предназначена для загрузки и выгрузки данных в файл из любой конфигурации, реализованной на платформе 1С:Предприятие 8.
Режим работы
При использовании управляемой формы обработка имеет два режим работы:
1. На клиенте. При использовании этого режима файлы правил и загружаемых данных передаются с клиента на сервер, а файл выгружаемых данных передается с сервера на клиент. Пути к этим файлам, находящимся на клиенте, необходимо указывать в диалоговом окне непосредственно перед выполнением действия.
2. На сервере. В этом режиме файлы не передаются на клиентн и пути к ним необходимо указывать на сервере.
Примечание: Файл внешней обработки и файлы протоколов обмена всегда должны находиться на сервере вне зависимости от режима работы.
Выгрузка данных
Для осуществления выгрузки данных необходимо указать имя файла, в который будет осуществляться выгрузка данных и выбрать файл правил обмена. Правила обмена для любых конфигураций могут быть настроены в специализированной конфигурации "Конвертация данных, редакция 2".
Для выгрузки документов и записей независимых периодических регистров сведений необходимо указать период - "Дату начала" и "Дату окончания". Результирующий файл с выгруженными данными может быть сжат.
На закладке "Правила выгрузки данных" можно выбрать те типы объектов, которые должны выгружаться, настроить отборы для выборки объектов, либо указать узел обмена данными, для которого нужно выгружать данные.
На закладке "Параметры выгрузки" можно указать дополнительные параметры выгрузки данных.
На закладке "Комментарий" можно написать произвольный текст-комментарий, включаемый в файл обмена.
Загрузка данных
Для осуществления загрузки данных необходимо указать имя файла, из которого будет осуществляться загрузка данных.
Есть возможность настроить загрузку данных в транзакции. Для этого необходимо взвести флажок "Использовать транзакции" и указать количество элементов в одной транзакции при загрузке.
"Загружать данные в режиме обмена (ОбменДанными.Загрузка = Истина)" – если флаг установлен, то загрузка объектов будет выполнятся с установленным признаком загрузки. Это означает, что при записи объектов в базу данных будут отключены все платформенные и прикладные проверки. Исключение составляют документы, которые записываются в режиме проведения или отмены проведения. Проведение и отмена проведения документа выполняется всегда без установки режима загрузки, т.е. проверки будут выполняться.
Дополнительные настройки
Закладка служит для детальной настройки выгрузки и загрузки данных.
"Режим отладки" – флаг для задания режима отладки обмена. Если этот флаг установлен, то процесс обмена данными не будет остановлен при возникновении какой-либо ошибки. Обмен завершится до конца с выводом отладочных сообщений в файл протокола обмена. Этот режим рекомендуется использовать при отладке правил обмена.
"Вывод информационных сообщений в окно сообщений" – если флаг установлен, то в окно сообщений будет выводиться протокол процесса обмена данными.
"Количество обработанных объектов для обновления статуса" – параметр служит для определения количества обработанных элементов перед изменением строки состояние загрузки/выгрузки
"Настройки выгрузки данных" – позволяют определить количество элементов обрабатываемых в одной транзакции при выгрузке данных, выгружать и обрабатывать только те объекты, на которые есть права доступа, настроить тип изменения регистрации для выгруженных объектов через планы обмена.
"Использовать оптимизированный формат для обмена данными (V8 - V8, версия обработки не ниже 2.0.18)" – оптимизированный формат сообщения обмена предполагает наличие узла "ИнформацияОТипахДанных" в заголовке сообщения, в который выгружается информация о типах данных. Это позволяет ускорить процесс загрузки данных.
"Использовать транзакции при выгрузке для планов обмена" – флаг определяет режим использования транзакций при выгрузке данных при выборке изменений на узлах планов обмена. Если флаг установлен, то выгрузка данных будет выполняться в транзакции.
"Количество элементов в транзакции" – определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. Если значение параметра равно 0 (значение по умолчанию), то все данные помещаются в рамках одной транзакции. Такой режим является рекомендуемым, так как гарантирует согласованность данных, помещаемых в сообщение. Но при создании сообщения в многопользовательском режиме могут быть конфликты блокировок между транзакцией, в которой данные помещаются в сообщение, и транзакциями, выполняемыми другими пользователями. Для снижения вероятности возникновения таких конфликтов можно задать значение этого параметра, отличное от значения по умолчанию. Чем меньше значение параметра, тем меньше вероятность конфликта блокировок, но выше вероятность помещения в сообщение несогласованных данных.
"Выгружать объекты на которые есть права доступа" – если флаг установлен, то выборка объектов информационной базы будет выполняться с учетом прав доступа текущего пользователя программы. Это предполагает использование литерала "РАЗРЕШЕННЫЕ" в тексте запроса для выборки данных.
"Автоматически удалять недопустимые символы из строк для записи в XML" – если флаг установлен, то при записи данных в сообщение обмена недопустимые символы будут удалены. Символы проверяются на соответствие рекомендации XML 1.0.
"Изменения регистрации для узлов обмена после выгрузки" – поле определяет режим работы с регистрацией изменений данных после завершения выгрузки данных. Возможные значения:
Не удалять регистрацию – после выгрузки данных регистрация изменений на узле удалена не будет.
Полностью удалить регистрацию для узла обмена – после выгрузки данных регистрация изменений на узле будет полностью удалена.
Удалить регистрацию только для выгруженных метаданных – после выгрузки данных регистрация изменений на узле будет удалена только для объектов метаданных, которые были указаны к выгрузке.
"Протокол обмена" – позволяет настроить вывод информационных сообщений в окно сообщений, ведение и запись в отдельный файл протокола обмена.
"Имя файла, протокола обмена" – имя файла для вывода протокола процесса обмена данными.
"Протокол загрузки (для COM - соединения)" – имя файла для вывода протокола процесса обмена данными в базе-приемнике при обмене через COM-соединение. Важно: путь к файлу должен быть доступен с компьютера, на котором установлена база-приемник.
"Дописывать данные в протокол обмена" – если флаг установлен, то содержимое файла протокола обмена сохраняется, если файл протокола уже существует.
"Вывод в протокол информационных сообщений" – если флаг установлен, то в протокол обмена будут выводиться сообщения информативного характера, помимо сообщений об ошибках обмена.
"Открывать файлы протоколов обмена после выполнения операций" – если флаг установлен, то после выполнения обмена данными файлы протоколов обмена будут автоматически открыты для просмотра.
Удаление данных
Закладка нужна только для разработчиков правил обмена. Позволяет удалять из информационной базы произвольные объекты.
Отладка выгрузки и загрузки данных
Обработка позволяет совершать отладку обработчиков событий и генерировать модуль отладки из файла-правил или файла-данных.
Включение режима отладки обработчиков выгрузки производится на закладке "Выгрузка данных" установкой флажка "Режим отладки обработчиков выгрузки". Соответственно, на закладке "Загрузка данных" включение режима отладки загрузки производится установкой флажка "Режим отладки обработчиков загрузки".
После установки режима отладки обработчиков станет доступной кнопка настройки отладки. По нажатию на эту кнопку откроется окно настройки.
Настройка отладки обработчиков выполняется в четыре шага:
Шаг 1: Выбор режима отладки алгоритмов
На первом шаге необходимо определиться с режимом отладки алгоритмов:
Без отладки алгоритмов
Вызывать алгоритмы как процедуры
Подставлять код алгоритмов по месту вызова
Первый режим удобно использовать, когда мы точно знаем, что ошибка в обработчике не связана с кодом какого-либо алгоритма. В этом режиме код алгоритмов не выгружается в модуль отладки. Алгоритмы выполняются в контексте оператора "Выполнить()" и их код недоступен для отладки.
Второй режим необходимо использовать в тех случаях, когда ошибка находится в коде алгоритма. При установке этого режима алгоритмы будут выгружены как отдельные процедуры. В момент вызова алгоритма из какого-либо обработчика происходит обращение к соответствующей процедуре обработки. Этот режим удобно использовать, когда для передачи параметров в алгоритмы используется глобальная переменная "Параметры". Ограничения использования этого режима в том, что при отладке в алгоритме недоступны локальные переменные обработчика, из которого он вызывается.
Третий режим отладки используется, как и во втором случае, при отладке кода алгоритмов и в тех случаях, при которых второй режим отладки не подходит. При установке этого режима алгоритмы будут выгружены как интегрированный код в обработчиках. Т.е. взамен оператора вызова алгоритма вставляется полный код алгоритма с учетом вложенных алгоритмов. В этом режиме нет ограничений на использование локальных переменных обработчика, однако есть ограничение при отладке алгоритмов с рекурсивным вызовом.
Шаг 2: Формирование модуля отладки
На втором шаге необходимо произвести выгрузку обработчиков нажатием на кнопку "Сформировать модуль отладки выгрузки (загрузки)". Сформированные обработчики и алгоритмы будут выведены в отдельное окно для просмотра. Содержимое модуля отладки необходимо скопировать в буфер обмена нажатием на кнопку "Копировать в буфер обмена".
Шаг 3: Создание внешней обработки
На этом шаге необходимо запустить конфигуратор и создать новую внешнюю обработку. В модуль обработки необходимо вставить содержимое буфера обмена (модуль отладки) и сохранить обработку под любым именем.
Шаг 4: Подключение внешней обработки
На четвертом, завершающем шаге, надо указать имя файла внешней обработки в поле ввода. При этом программа выполняет проверку по времени создания (обновления) файла обработки. Если обработка имеет более раннюю версию, чем версия файла модуля отладки, то будет выведено предупреждение и форма настройки закрыта не будет.
Примечание: Возможность отладки глобального обработчика конвертации "После загрузки правил обмена" не поддерживается.