1.
Intercititude
08.09.20 12:35 Сейчас в теме+1 $m
Добрый день.
ОФ,8.2.
Стоит следующая задача:
Необходимо реализовать выгрузки номенклатуры из 1с:
1)Номенклатура с свойствами;
2) Номенклатура с ценами;
3) Номенклатураи остатки.
Всё это по трём шаблонам в формате xml. Не смог найти информацию как сделать произвольный шаблон( интересует иеархия).
Далее необходимо настроить автоматический обмен этими данными с сайтом через api http.
Подскажите как проще это реализовать, так как первый раз сталкиваюсь, не хотелось бы много времени убить на поиск оптимального варианта.
Мысль следующая:
1) Запросом брать данные. Выгружать три файла в XML по шаблону
2) По регламентному заданию автоматически отправлять по http на сайт api .
Достаточно ли этого ? И делать желательно через обработку в самой конфигурации ?
(20)Если планируете его передавать сразу на сервис, то нет необходимости сохранять в файл, а надо передавать сразу в качестве тела POST запроса. Посмотрите в синтакс-помощнике описание метода УстановитьТелоИзСтроки(<ТелоКакСтрока>, <Кодировка>, <ИспользоватьBOM>), где параметр <ТелоКакСтрока> как раз и будет собранная в (8) xml-строка.
(24)Нужно в описании API смотреть, требуются ли какие-то заголовки для передачи на сервис или нет. А если требуются, то какие. В принципе, в интернете можете найти информацию по заголовкам HTTP
(27)А у Вас куда должен передаваться xml файл? Если реализовать выгрузку на ftp, то как-то принимающая сторона должна его получать. Что это вообще за принимающая сторона?
А для работы с HTTPСоединение требуется платформа "1С:Предприятие" версии 8.2.18 и выше или 8.3.3 и выше. Наверно, можно и обновить, хоть до 8.2.18.
(29)Обновитесь, т.к. методы будут вызываться из конфигурации, соответственно там и должна быть платформа, которая умеет использовать HTTPСоединение. Пример реализации на ИТС https://its.1c.ru/db/metod8dev/content/5574/hdoc
(30) Да, спасибо. Как раз после того как увидел эту статью на итс задал Вам вопрос.
Ещё появился вопрос. Стартмани из топика ваши однозначно.
Сейчас механизм такой.
Пользователь выбирает номенклатуру, заполняет все её характеристики.Жмёт записать.
В РС записываются эти все данные и ставится признак у номенклатуры "Выгружать на сайт"( в РС значениесвойствобъектов).
Я в свою очередь беру все позиции с характиретистиками и с этим признаком, формирую xml и шлю на сайт. Признак "Выгружать на сайт" становится ложь.
Собственно вопрос: Как сделать так, чтобы на сайт отсылалась только та номенклатура и та характеристика которую изменил пользователь.
То есть если допустим изменили лишь штрихкод. То на сайт я должен выгрузить номенклатура и измененный штрихкод,а не полностью все данные
(31)Однозначно не могу сказать, тут нужно продумывать механизм версионирования (есть в продуктах на БСП). Смысл в том, что Вам при записи нужно где-то фиксировать изменившиеся реквизиты. Причем, контролировать это нужно при записи Номенклатуры. Например, в РС добавить измерение "ИзменившиесяРеквизиты" с типом "ХранилищеДанных" и "ВерсияОбъекта", с типом "Число". При записи Номенклатуры формируется, допустим, массив с изменившимися реквизитами и сохраняется в измерение "ИзменившиесяРеквизиты", а так же проверяет, есть ли уже запись в РС по данной номенклатуре и устанавливает след. номер версии. Ну, или если не нужно хранить историю, то без версии, просто перезаписывает имеющуюся запись.
И по поводу текста xml который в РезультатЗапроса.
Всё-таки мне нужно выгрузить его и отправить человеку который занимается сайтом. Для проверки. Как это сделать ?
(32) Добрый день. А где то есть коды открытый с примером такого ?
Добрался до этого пункта наконец-то.
Или возможно проще как то можно хранить ?
Просто все мои характеристики и так записываются в регистр.
(23) Добрый вечер.
Подумал а почему нельзя этот код использовать для отправки ?
HTTP = Новый HTTPСоединение(Сервер,,,,,Истина);
// Создаем временный файл, который будет
// передан в теле POST-запроса
ФайлЗапроса = ПолучитьИмяВременногоФайла();
// Записываем в файл текстовое содержимое
// тела запроса (переменная "ТелоЗапроса")
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);
// Получаем размер отправляемых данных в теле запроса
ФайлОтправки = Новый Файл(ФайлЗапроса);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
// Подготовим временный файл для получения тела
// ответа POST-запроса
ФайлРезультата = ПолучитьИмяВременногоФайла();
// Для того, чтобы установить заголовки
// POST-запроса создадим соответствие
ЗаголовокHTTP = Новый Соответствие();
// В этом примере устанавливаем в заголовках запроса
// размер передаваемых данных и их тип
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
// Отправляем POST-запрос для обработки.
// Параметры:
// 1. Файл запроса - путь к файлу, содержащего
// тело запроса
// 2. Ресурс - ссылка на страницу веб-сервера,
// к которой выполняется POST-запрос
// 3. ФайлРезультат - файл, в который будет
// помещено тело ответа сервера
// 4. ЗаголовокHTTP - соответствие с заголовками
// POST-запроса
HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
ФайлРезультата, ЗаголовокHTTP);
// Получаем ответ веб-сервера на POST-запрос
// в виде текста
ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
СтрокаОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
Показать
Помнится речь была о том, что у меня платформа не может создавать Http запрос, так как ранняя версия конфы. А тут не используется он.
HTTPСоединение (HTTPConnection)
ОтправитьДляОбработки (Post)
Синтаксис:
ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>)
Параметры:
<HTTPЗапрос> (обязательный)
Тип: HTTPЗапрос.
HTTP-запрос.
<ИмяВыходногоФайла> (необязательный)
Тип: Строка.
Имя выходного файла, в который записываются полученные с сервера данные.
Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет.
Возвращаемое значение:
Тип: HTTPОтвет.
Описание:
Отправляет данные на указанный адрес для обработки при помощи HTTP-запроса POST.
(42)По поводу выгрузки xml-файла на фтп можете посмотреть, как это реализовано в любой типовой конфигурации. "Администрирование - Синхронизация". Выбираете в качестве транспорта обмена каталог FTP. В указанный каталог сохраняется файл обмена (xml)
Номенклатура отдельно
Цены и остатки вместе
два регламентных задания по времени определишь сам насколько это актуально для фирмы
по ценам и остаткам примерно так
ВЫБРАТЬ
ЦеныНоменклатуры.Номенклатура.Ссылка КАК Ссылка,
ЦеныНоменклатуры.Номенклатура.Код КАК Код,
ЦеныНоменклатуры.Номенклатура.Наименование КАК Наименование,
КурсВалют.Курс * ЦеныНоменклатуры.Цена КАК Цена,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатуры
ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсВалют
ПО ЦеныНоменклатуры.Валюта = КурсВалют.Валюта
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.ПустаяСсылка)) КАК ТоварыНаСкладахОстатки
ПО ЦеныНоменклатуры.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Склад.ТипСклада = ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.ПустаяСсылка)) КАК ТоварыВРезервеНаСкладахОстатки
ПО ЦеныНоменклатуры.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
ГДЕ
ЦеныНоменклатуры.ТипЦен = &ТипЦен
И ЦеныНоменклатуры.Номенклатура В ИЕРАРХИИ(&Номенклатура)
Номенклатура как один запрос
Цены и остатки как второй
Свойства как третий - потому что на сайте парсить разные запросы легче чем делать один громадный в котором запутаешься что к чему связано так как свойства имеют свои особенности
*ЗначенияСвойствОбъектов.Объект КАК Объект,
*ЗначенияСвойствОбъектов.Свойство КАК Свойство,
*ЗначенияСвойствОбъектов.Значение КАК Значение
которые нужно передавать
то есть с спр.Номенклатура левым соединением к ЗначенияСвойствОбъектов Из РегистрСведений.ЗначенияСвойствОбъектов
свойства очень не простые, хотя на первый взгляд всегда кажется наоборот
со стороны сайта тоже будет писаться код чтобы обработать твой xml с вложенными параметрами
типа UID - уникальный идентификатор номенклатуры, а Name - Наименование номенклатуры и т.п.
(12) Подскажите пожалуйста ещё в итоге готовый файл xml который я получил.
Как правильнее через http отправить по прямому адресу в теле запроса по логину паролю на сайт api ?
Не нашёл статьи подходящей
1) Необходимо регистрировать где то в 1С установку цен. Скорее всего есть документ, у документа есть регистр по установке цен. Создаем свой регистр, в который пишем всё что будем отправлять и добавляем в ресурсы поле - результат отправки(0 - не отправлено, 1 - успешно, 2 и далее всякие коды ошибок уже)
2) Создаем регламентное задание которое будет с определенной периодичностью обрабатывать очередь из нового регистра и при успешной отправке будет проставлять статус.
3) изучаем внимательно api сайта - скорее всего номенклатура, так как это ссылочное поле, синхронизируется по ГУИДу сайта, и его тоже нужно где то хранить(доп реквизит в номенклатуре или отдельный регистр - это уже кому как). Сначала убеждаемся что всё ссылочное есть уже на стороне сайта, если нет, используем методы api чтобы создать новую номенклатуру, и только после этого отправляем пакет с ценой.
Куда должен передаваться xml файл? Если реализовать выгрузку на ftp, то как-то принимающая сторона должна его получать. Что это вообще за принимающая сторона? А для работы с HTTPСоединение требуется платформа "1С:Предприятие" версии 8.2.18 и выше или 8.3.3 и выше.
добрый день. подскажите пожалуйста. Подключила Астрал ЭДО и хочу выгрузить туда акт выполненных работ в формате xml, Файл из 1с сформировала с помощью файла Выгрузка и загрузка данных XML который открыла в рабочей базе 1С, подгрузила его в астрал ЭДО, в астрал файл присоединился как неформализованный, как мне сделать чтоб файл был прочитан программой Астрал правильно и формат xml принимал верно без ошибок, Клиенты не могут прочитать неформализованный документ.