1с битрикс дополнительные реквизиты свой алгоритм

Настроить реквизиты загружаемых документов

Урок
51
из
170

Сложность урока:

5 уровень — сложно, но не смертельно. Нужно подумать, вспоминать уже пройденный материал, собрать в кучу внимание, немного терпения и всё получится.


5 из 5

Дата изменения:
03.06.2022

Просмотров:
4210

Недоступно в лицензиях:

Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).


Старт, Стандарт

При нажатии в узле обмена на кнопку

Настроить загружаемые документы

10-3-7-52.png


открывается окно, в котором настраивается заполнение реквизитов загружаемых документов. При создании узла обмена соответствия загружаемых полей заполняются по умолчанию.

Нажмите на рисунок, чтобы увеличить

  Левая верхняя таблица

В левой верхней таблице отображены все загружаемые документы. В таблице можно указать:

  1. Какая дата документа подставляется: дата на момент загрузки документа в 1С или же с дата создания документа на сайте.
  2. Откуда берется номер документа: подставляется автоматически из 1С или приходит с сайта.
  3. Режим записи документа: записывать/проводить оперативно/проводить не оперативно.
  4. Действия с отмененными документами: помечать на удаление/отменять проведение/ничего не делать. Если на документ есть ссылки, то документ не будет отменен.

  Правая верхняя таблица

В правой верхней таблице отображаются все реквизиты указанного документа. Для того чтобы реквизиты документа отобразились в таблице необходимо нажать на кнопку Настроить соответствия реквизитов, которая находится в верхней левой таблице.

Тип данных заполнения реквизита может быть следующий:

  1. Из поля XML. Если выбран этот тип, тогда значение будет найдено по алгоритму, указанному в колонке Значение. Как правило, алгоритмы реализованы на основании данных XML. При указании этого типа в колонке Значение появляется предопределенный список значений алгоритмов алгоритмов.
  2. Фиксированное значение. Если выбран этот тип, то в реквизит документа будет подставляться указанное фиксированное значение. При указании этого типа данных тип значения фиксированного значения определяется автоматически.
  3. Из дополнительных свойств документа (по наименованию). При указании этого типа значение реквизита будет искаться по следующему алгоритму:
    • Смотрится, есть ли свойство документа (задается в профилях обмена) с указанным наименованием, которое указывается в колонке Значение.
    • Если такое свойство есть и оно заполнено, то определяется тип реквизита документа. Если их несколько (составное) – массив.
    • Перебираются все элементы объектов 1С указанного типа объекта (или нескольких). Первый найденный элемент с наименованием, указанным в свойстве заказа, будет подставлен в реквизит.
  4. Из дополнительных свойств (по ид). Примерно то же самое, что и выше, но элемент ищется не по наименованию, а по уникальному идентификатору. Имеет смысл использовать в связке с Highload-инфоблоками, которые будут хранить значения выгруженных справочников.
  5. <Свой алгоритм>. Если указан свой алгоритм, то реквизит заполняется по указанному алгоритму.

  Левая нижняя таблица

В нижней левой части документа отображены все заполняемые табличные части указанного документа (добавление новых табличных частей пока отключено). В колонке Поле XML указывается наименование подчиненного элемента, из которого берутся данные. Если значение не заполнено – будет создана всего одна строка.

  Правая нижняя таблица

В нижней правой части отображаются все реквизиты указанной табличной части документа. Для того чтобы реквизиты документа отобразились в таблице – необходимо нажать на кнопку Настроить соответствия реквизитов, которая находится в нижней левой таблице.

Заполняются реквизиты так же, как и реквизиты документа, с единственным отличием, что у табличной части больше предопределенных алгоритмов.

601bccb83ee1c101275981.pngМодуль обмена 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С документов»:

Как дописать обмен с Битрикс не меняя конфигурацию. Настроить реквизиты загружаемых в 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);

КонецЦикла;

//Если оба кода без нулей полностью идентичны, значит это нужный нам партнер

Если НомерКода = Номер Тогда

[Результат] = Выборка.Ссылка;

Прервать;

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЕсли;

КонецЦикла;

Заключение

Подобным образом можно писать почти любые алгоритмы. Единственный минус тут — нельзя отладчиком остановиться и проверить, что происходит внутри вашего кода. Но это малая плата за то, чтобы оставить модуль Битрикс типовым.
Надеемся, данная статья была полезна и сэкономит вам кучу времени при обновлении конфигурации и модуля обмена «Битрикс».

Также вы можете заказать у нас настройку и доработку обмена с Битрикс

Понравилась статья? Поделить с друзьями:
  • 1с динамический список добавить колонку реквизита
  • 1с документооборот дополнительные реквизиты задач
  • 1с дополнительные реквизиты в динамическом списке
  • 1с дополнительные реквизиты для разработчиков имя
  • 1с дополнительные реквизиты как выбрать в запросе