Настроить реквизиты загружаемых документов
Урок
51
из
170
Сложность урока:
5 уровень — сложно, но не смертельно. Нужно подумать, вспоминать уже пройденный материал, собрать в кучу внимание, немного терпения и всё получится.
5 из 5
Дата изменения:
03.06.2022
Просмотров:
4210
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Старт, Стандарт
При нажатии в узле обмена на кнопку
Настроить загружаемые документы
открывается окно, в котором настраивается заполнение реквизитов загружаемых документов. При создании узла обмена соответствия загружаемых полей заполняются по умолчанию.
Левая верхняя таблица
В левой верхней таблице отображены все загружаемые документы. В таблице можно указать:
- Какая дата документа подставляется: дата на момент загрузки документа в 1С или же с дата создания документа на сайте.
- Откуда берется номер документа: подставляется автоматически из 1С или приходит с сайта.
- Режим записи документа: записывать/проводить оперативно/проводить не оперативно.
- Действия с отмененными документами: помечать на удаление/отменять проведение/ничего не делать. Если на документ есть ссылки, то документ не будет отменен.
Правая верхняя таблица
В правой верхней таблице отображаются все реквизиты указанного документа. Для того чтобы реквизиты документа отобразились в таблице необходимо нажать на кнопку Настроить соответствия реквизитов, которая находится в верхней левой таблице.
Тип данных заполнения реквизита может быть следующий:
- Из поля XML. Если выбран этот тип, тогда значение будет найдено по алгоритму, указанному в колонке Значение. Как правило, алгоритмы реализованы на основании данных XML. При указании этого типа в колонке Значение появляется предопределенный список значений алгоритмов алгоритмов.
- Фиксированное значение. Если выбран этот тип, то в реквизит документа будет подставляться указанное фиксированное значение. При указании этого типа данных тип значения фиксированного значения определяется автоматически.
- Из дополнительных свойств документа (по наименованию). При указании этого типа значение реквизита будет искаться по следующему алгоритму:
- Смотрится, есть ли свойство документа (задается в профилях обмена) с указанным наименованием, которое указывается в колонке Значение.
- Если такое свойство есть и оно заполнено, то определяется тип реквизита документа. Если их несколько (составное) – массив.
- Перебираются все элементы объектов 1С указанного типа объекта (или нескольких). Первый найденный элемент с наименованием, указанным в свойстве заказа, будет подставлен в реквизит.
- Из дополнительных свойств (по ид). Примерно то же самое, что и выше, но элемент ищется не по наименованию, а по уникальному идентификатору. Имеет смысл использовать в связке с Highload-инфоблоками, которые будут хранить значения выгруженных справочников.
- <Свой алгоритм>. Если указан свой алгоритм, то реквизит заполняется по указанному алгоритму.
Левая нижняя таблица
В нижней левой части документа отображены все заполняемые табличные части указанного документа (добавление новых табличных частей пока отключено). В колонке Поле XML указывается наименование подчиненного элемента, из которого берутся данные. Если значение не заполнено – будет создана всего одна строка.
Правая нижняя таблица
В нижней правой части отображаются все реквизиты указанной табличной части документа. Для того чтобы реквизиты документа отобразились в таблице – необходимо нажать на кнопку Настроить соответствия реквизитов, которая находится в нижней левой таблице.
Заполняются реквизиты так же, как и реквизиты документа, с единственным отличием, что у табличной части больше предопределенных алгоритмов.
Модуль обмена 1C Битрикс с сайтом,
Раздел — обмен Заказами
Настройка соответствий загружаемых документов — тип данных = <свой алгоритм>
подскажите пжлст алгоритм, чтоб можно было получить значение реквизита Отгрузка из документа XML
<Контейнер>
<Документ>
<Ид>3Ид>
<Номер>N401Номер>
<Дата>2021-02-03Дата>
<ХозОперация>Заказ товараХозОперация>
<Роль>ПродавецРоль>
<Валюта>рубВалюта>
<Курс>1Курс>
<Сумма>455.0000Сумма>
<НомерВерсии>15НомерВерсии>
<Контрагенты>…Контрагенты>
<Время>13:26:50Время>
<Комментарий/>
<Налоги>…Налоги>
<Товары>…Товары>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ОтгрузкаНаименование>
<Значение>05.02.2021 00:00:00Значение>
ЗначениеРеквизита>
-
Вопрос заданболее двух лет назад
-
543 просмотра
Пригласить эксперта
если кому понадобится, решение такое:
[Результат] = ПолучитьЗначениеРеквизитаДокумента([ДокументXML].ЗначенияРеквизитов, «Отгрузка»);
Вернется строка.
Если реквизит в 1С типа Дата, тогда нужно
Дата( ПолучитьЗначениеРеквизитаДокумента([ДокументXML].ЗначенияРеквизитов, «Отгрузка»));
-
Показать ещё
Загружается…
23 мар. 2023, в 00:00
56000 руб./за проект
22 мар. 2023, в 23:50
1000 руб./в час
22 мар. 2023, в 23:49
500 руб./за проект
Минуточку внимания
Грамотная организация товарного каталога в части свойств товаров — залог правильного функционирования механизмов сайта, обеспечивающих быстрый поиск товара покупателем.
Посыл первый — определитесь с типом значений дополнительного реквизита. При создании нового дополнительного реквизита товара в 1С, по умолчанию, значениям присваивается тип «Дополнительные значения свойств». Это означает, что все значения этого свойства хранятся в определенном справочнике. При заполнении свойств в карточке товара, вы будете выбирать значение из этого списка. Это ограждает вас от ошибок ручного ввода (Напр.: Adidas или Adibas или Adidos, названия разные, а производитель подразумевается один). Однако, если вы, например, хотите вывести свойство номенклатуры в Умном фильтре в виде диапазона с ползунком, будет удобнее задать тип свойства в 1С как «Число». Пример — свойство номенклатуры «Фасовка (л. или кг.)».
Посыл второй — если дополнительный реквизит (свойство) используется более чем для одного вида номенклатуры — сделайте его общим для всего каталога. Это обусловлено тем, что при определенных настройках компонента каталога, когда, выбрав в меню корневую группу каталога, мы видим товары из всех дочерних папок этого корня, в Умный фильтр соберутся все свойства всех этих товаров. И если в этом корне присутствуют товары разных видов номенклатуры, и у этих видов номенклатуры есть НЕ общие свойства с одинаковыми названиями (напр. Цвет), в фильтре будет несколько пунктов с одинаковыми названиями, но разным наполнением. Это путает покупателя.
Посыл третий — для организации хранения параметров товаров используйте дополнительные реквизиты, а не свойства. В 1С Управление торговлей 11 ред. ( и конфигурациях параллельных версий ) есть два механизма хранения параметров объектов. Это свойства и дополнительные реквизиты. Для хранения параметров товаров можно использовать оба механизма. Но, в силу особенностей работы механизмов обмена, рекомендуется использовать дополнительные реквизиты.
Если вы хоть раз обновляли конфигурацию, в которую добавлена подсистема «Битрикс», вы понимаете, почему важно сохранить ее типовой. В этой статье расскажем, как дописать обмен с Битрикс не меняя конфигурацию.
Самая частая задача в доработке обмена с сайтом на Битрикс — дописать логику загрузки Заказов клиентов. Давайте рассмотрим один из наших реальных кейсов.
Постановка задачи
Наш клиент переходил с УТ 10.3 на УТ 11.4. Задача от клиента звучала так:
Обмен с сайтом. Синхронизация по коду клиента
В обмене с сайтом на УТ 10 была синхронизация по коду клиента. Менеджеры переносили руками код справочника Контрагенты при заведении клиента на сайте.
В модуле обмена битрикс в УТ 10 я правил, чтобы если этот код передавали — то искалось по нему.
Надо сделать так же, поскольку иначе начинает создавать новых клиентов, а не подвязывать старых.
При этом посмотрите, пожалуйста, вполне возможно, что это можно реализовать настройками, без изменения кода обмена как со стороны сайта, так и со стороны 1С. Программисты, которые были до вас, не смогли найти такие настройки, если они есть ))
Здесь может быть нюанс, что при переносе справочника Контрагенты -> Партнеры — мог удлиниться код.
Т.е. с сайта в Заказе клиента приходило поле «Код контрагента», в котором был код партнера из 1С. Но данный код мог содержать «лишние» нули. Более того, мы не знали, сколько лишних нулей в каждом конкретном коде.
Пример:
Код из УТ 10.3: 00002714
Код из УТ 11.4: 00000002714
Код из УТ 10.3: 0002715
Код из УТ 11.4: 00000002715
Что было сделано
Мы внесли изменения в алгоритм поиска Партнера: научили 1С брать код клиента из заказа, удалять из него лидирующие нули. Далее искать по оставшемуся коду партнеров в 1С, затем обходить найденных, и сравнивать код из заказа без лидирующих нулей с кодом партнера без лидирующих нулей. Если совпадают — подставлять Партнера в заказ. Если не совпадают или код партнера пустой — партнер не заполняется.
Все изменения внесены в режиме «1С:Предприятие», без изменения кода 1С или сайта.
Как дописать обмен с Битрикс не меняя конфигурацию
1. Зйти в настройки обмена документами:
2. Нажать «Настроить реквизиты загружаемых в 1С документов»:
3. Выделить мышкой заказ клиента и нажать «Настроить соответствия реквизитов»:
4. Найти партнера и поставить тип данных «Свой алгоритм»:
5. «Провалиться» в выбор значения:
6. Написать нужный код. Синтаксис почти не отличается от стандартного кода 1С и описан прямо в выборе значения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//Параметр на создаваемый/редактируемый документ происходит через параметр [Документ] // Параметр на создаваемую новую строку документа [НоваяСтрока] Если ее нет(шапка заполняется), то Неопределено // Глобальные настройки в параметре [ПараметрыОбмена] // // Параметр, возвращающий результат [Результат] // // Параметр на данные документа ИЗ XML [ДокументXML] // Параметр, на данные строки товаров из XML [СтрокаXML]. Если ее нет, то Неопределено //——————————————————————————————————— //Если в алгоритме необходимо брать данные из заполняемого документа, то нужно понимать, что заполняется документ последовательно, заполняемый реквизит должен быть ниже в списке(на форме), чем тот, на который идет ссылка. // //Описать структуру параметров [ДокументXML] и [СтрокаXML] очень сложно, т.к. они могут разных данных, в зависимости от настроек. Узнать, что в них — можно через конфигуратор, перехватив через точку останова //Выполняется в функции ‘ПолучитьЗначениеРеквизитаДокументаПоСоответствию’ находящаяся в общем модуле ‘Б_ОбменССайтомСерверЗагрузкиДанных’ // //——————————————————————————————————— //ПРОСТЕНЬКИЙ ПРИМЕР. [Результат] = [Документ].Контрагент.Наименование; |
Пример нашего кода
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Для каждого стр из [ДокументXML].ЗначенияРеквизитов Цикл Если стр.Наименование = «Код контрагента» Тогда Если значениеЗаполнено(стр.Значение) Тогда //Убираем лидирующие нули Номер = стр.Значение; Пока Лев(Номер,1)=«0» Цикл Номер = Прав(Номер,СтрДлина(Номер)—1); КонецЦикла; //запросом получаем всех партнеров с похожим кодом Запрос = новый запрос; Запрос.Текст = «ВЫБРАТЬ | Партнеры.Ссылка КАК Ссылка, | Партнеры.Код КАК Код |ИЗ | Справочник.Партнеры КАК Партнеры |ГДЕ | Партнеры.Код ПОДОБНО &Код»; Запрос.УстановитьПараметр(«Код»,«%»+Номер); Выборка = Запрос.Выполнить().Выбрать(); Пока выборка.Следующий() Цикл //теперь убираем лидирующие нули у полученного кода НомерКода = выборка.Код; Пока Лев(НомерКода,1)=«0» Цикл НомерКода = Прав(НомерКода,СтрДлина(НомерКода)—1); КонецЦикла; //Если оба кода без нулей полностью идентичны, значит это нужный нам партнер Если НомерКода = Номер Тогда [Результат] = Выборка.Ссылка; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; |
Заключение
Подобным образом можно писать почти любые алгоритмы. Единственный минус тут — нельзя отладчиком остановиться и проверить, что происходит внутри вашего кода. Но это малая плата за то, чтобы оставить модуль Битрикс типовым.
Надеемся, данная статья была полезна и сэкономит вам кучу времени при обновлении конфигурации и модуля обмена «Битрикс».
Также вы можете заказать у нас настройку и доработку обмена с Битрикс