Создание множественного дополнительного реквизита. Управление торговлей 11

Публикация № 802289 20.03.18

Приемы и методы разработки

доработка обмен xml xsd битрикс множественный реквизит множественный выбор

Создание механизма множественного дополнительного реквизита для выгрузки в битрикс.

Здравствуйте, уважаемые читатели! 

Хочу поделиться своей реализацией множественного выбора дополнительного реквизита в Управлении торговлей 11 (проверено на 11.4.1.261) для последующей выгрузки его в интернет-магазин под управлением 1С битрикс. Для чего это потребовалось? В определенный момент менеджер интернет-магазина мне сказал: хочу увидеть весь ассортимент выбранного товара (условно назовем его Товар№1) красного, синего и зеленого цветов, как?. Сразу оговорюсь, что по ряду внутренних причин характеристики мы не используем, возможно, с ними будет совсем другая история, но поскольку данный вопрос возникает периодически, я решил написать эту статью. Так вот, в УТ цвет это у нас дополнительный реквизит и соответственно он может принимать только одно значение. На сайте это выглядит как выбор из списка, а требуется чтобы можно было отмечать галочкой несколько значений.

з.ы. это моя первая публикация (не только на ИС, но и вообще), не судите строго :)

Итак, начнем. Весь процесс доработки можно разделить на 3 этапа:

  1. Доработка механизма создания и вывода на форму дополнительных реквизитов.
  2. Доработка xsd схемы.
  3. Доработка выгрузки на сайт.

1. Доработка механизма создания и вывода на форму дополнительных реквизитов.

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

Чтобы получать ссылку на нужный элемент ПВХ, я добавил функцию в модуль УправлениеСвойствамиСлужебный

Функция ПолучитьУИДМножественногоСвойства() Экспорт
    Возврат "859484ef-7e0a-11e7-8111-3863bb43122b";
КонецФункции

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

Перед ним добавим следующий код:

лУИД = Новый УникальныйИдентификатор(ПолучитьУИДМножественногоСвойства());
МножественноеСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(лУИД);
ЭтоПервый = Истина;

А в теле цикла будем отлавливать наше свойство следующим образом:

Если Строка.Свойство = МножественноеСвойство Тогда
    Если ЭтоПервый Тогда
        ЭтоПервый = Ложь;
    Иначе 
        фКэшОписания = ОписаниеСвойства;
        ОписаниеСвойства = ОписаниеСвойств.Добавить();
        ЗаполнитьЗначенияСвойств(ОписаниеСвойства, фКэшОписания);
    КонецЕсли;
КонецЕсли;

В итоге должна получится следующая картина:

После этого переходим к созданию элементов на форме. Тут логика следующая, каждый дополнительный реквизит в своем наименовании имеет уникальный идентификатор и тем самым обеспечивается уникальность (простите за тавтологию) имен элементов формы. Поэтому нам необходимо пронумеровать наш реквизит в момент создания. За это отвечает процедура ЗаполнитьДополнительныеРеквизитыВФорме общего модуля УправлениеСвойствами.

Находим в ней строку

Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл

Перед началом этого цикла вставим счетчик, например:

СчСвойств = 1;

А в теле цикла, после строки

ОписаниеСвойства.ИмяУникальнаяЧасть = ...

добавим наш код:

Если СтрНайти(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор()), УправлениеСвойствамиСлужебный.ПолучитьУИДМножественногоСвойства()) > 0 Тогда             
    ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть    +"_"+ Строка(СчСвойств);            
    СчСвойств = СчСвойств + 1;                                                  
КонецЕсли;

Получается такая картина:

Дальше, чтобы не заморачиваться с формой при обновлении, добавляем ее в расширение. Добавляем событие ПриСозданииНаСервере с типом вызова "После", в нем создаем кнопку для копирования и заполним технические реквизиты. На форму потребуется добавить 2 реквизита:

1. МножВыборИмя - тип строка, хранит имя дополнительного реквизита без индекса

2. СчСвойств - тип число, хранит текущий индекс дополнительного реквизита.

 
 Полный текст модуля формы в расширении

После этих действий у вас должно получиться что-то подобное:

Если нужно добавить кнопку удаления реквизитов, то, думаю, у вас не возникнет с этим больших проблем :)

2. Доработка xsd схемы.

Если вы не знакомы с этой темой, то в интернете полно информации с подробным описанием, расписывать детально тут не буду. Схема находится в плане обмена Б_ОбменССайтом в макете СхемаXSDОбмена. Сохраняем в файл, открываем и находим там строку

<xs:complexType name="ЗначенияСвойства">

после элемента "Значение" добавляем следующий код

<xs:element name="ЗначениеСвойства" minOccurs="0" maxOccurs="unbounded" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Значение" type="tns:ЗначениеТип" maxOccurs="1" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

В итоге должно получится следующее: 

Далее обновляем макет в плане обмена и сохраняем конфигурацию. Все, xsd схема готова.

3. Доработка выгрузки на сайт.

Итак, мы на финишной прямой. Еще чуточку усилий и все будет готово!

Открываем общий модуль Б_ОбменССайтомСерверВыгрузкаДанных, находим в нем процедуру ВыгрузитьСвойстваXDTO,

в ней ищем строку:

XDTOСвойство.Наименование	= Лев(ТекСвойство.Наименование, 250);

это в цикле по коллекции тзнСвойств. После нее добавляем проверку. Если это наше свойство, то делаем его множественным.

Если СтрНайти(XDTOСвойство.Ид, УправлениеСвойствамиСлужебный.ПолучитьУИДМножественногоСвойства()) Тогда
	XDTOСвойство.Множественное = Истина;
КонецЕсли;

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

 
 Процедура ВыгрузитьСвойстваНоменклатурыXDTO

 

Вот и все, после этих манипуляций, xml код файла для битрикса должен выглядеть примерно так:

Битрикс такую структуру понимает и никаких действий со стороны сайта делать не требуется. Если вы все сделали правильно, то все должно работать.

p.s. 

Хочу поблагодарить Сергея Главатских за его идею копирования дополнительных реквизитов, а так же парней из ветки https://dev.1c-bitrix.ru, без них у меня бы ничего не получилось.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. EmpireSer 21.03.18 00:47 Сейчас в теме
По мне "ЗначениеСвойства" в XSD задан "не красиво". Можно было всё в одном месте указать:
<xs:element name="ЗначениеСвойства" type="tns:ЗначениеТип" minOccurs="0" maxOccurs="unbounded" />

Так же можно было доработать доп. реквизит так, что бы он просто принимал "СписокЗначений", а не делать копирование. По моему мнению это получилось "элегантнее".
shurik_shurik; +1 Ответить
2. bad_wag 41 21.03.18 11:06 Сейчас в теме
(1) В начале я так и пытался сделать, но для этого потребовалось дорабатывать поддержку списков значений доп реквизитами, а это, на мой взгляд, гораздо сложнее данной реализации
3. vis_tmp 30 11.05.18 18:15 Сейчас в теме
Спасибо, очень познавательно про множественные доп. реквизиты.
6. bad_wag 41 06.06.18 02:00 Сейчас в теме
4. mark_oilbass 05.06.18 14:07 Сейчас в теме
5. bad_wag 41 06.06.18 01:59 Сейчас в теме
9. itdvl 28 16.08.18 06:41 Сейчас в теме
(5) не понимаю как сделать кнопку удалить. Не подскажете?
7. mark_oilbass 04.07.18 15:39 Сейчас в теме
Коллеги, подскажите пожалуйста! как быть если множественных реквизитов несколько? Я в плане видов характеристик создал реквизит МножественныйРеквизит и с помощью него получаю все множественные доп свойства. Перед выгрузкой свойств формирую запрос результатом, которого является список всех множественных свойств и дальше делаю такие же проверки как в этой статье. Прикрепляю файл с кодом. Заработает ли такой код?
Прикрепленные файлы:
Код.txt
8. mark_oilbass 05.07.18 11:24 Сейчас в теме
10. EliWalles 27.05.19 10:02 Сейчас в теме
Возможно ли вынести функции в расширение и воспользоваться &Вместо("ЗаполнитьДополнительныеРеквизитыВФорме") такой конструкцией, что бы не менять конфигурацию, будет работать?
УИД - это в XML файле экспорта поле <Ид>?
11. bad_wag 41 27.05.19 13:41 Сейчас в теме
(10) Вынести в расширение можно, работать будет, но при обновлениях конфигурации надо будет следить за изменениями в этой функции. Про УИД сейчас не вспомню, можно посмотреть отладчиком или выгрузить в файл там уже глянуть
12. goodwill 20 02.07.19 15:40 Сейчас в теме
Большое спасибо за выложенный материал, очень помог.

Хочу добавить от себя немного, Мне показалось не очень удачным определять множественный реквизит по GUID, в разных базах они разные и код получается не универсальным. Так же нет возможности добавить несколько множественных реквизитов. Для того что бы это исправить я добавил в ПланВидовХарактеристик.ДополнитеотныеРеквизитыИСведения новый реквизит МножественныйРеквизит

Изменения от первоначальной статьи следующие
1) Функция ПолучитьУИДМножественногоСвойства() не нужна
2) В модуле УправлениСвойствами

Если ОписаниеСвойства.Свойство.МножественныйРеквизит Тогда
	ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть    +"_"+ Строка(СчСвойств);            
	СчСвойств = СчСвойств + 1;                                                  
КонецЕсли;


3) УправлениеСвойствамиСлужебный


// < -- xs
СоответствиеСвойствЭтоПервый = Новый Соответствие;
// xs -- > 
	
// Заполнение значений свойств.
Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл
	ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
	Если ОписаниеСвойства <> Неопределено Тогда
		
		// < -- xs
		Если СоответствиеСвойствЭтоПервый.Получить(Строка.Свойство) = Неопределено Тогда
			СоответствиеСвойствЭтоПервый.Вставить(Строка.Свойство, Истина);
		КонецЕсли; 
		
		Если Строка.Свойство.МножественныйРеквизит Тогда
			
			Если СоответствиеСвойствЭтоПервый.Получить(Строка.Свойство) Тогда
				СоответствиеСвойствЭтоПервый.Вставить(Строка.Свойство, Ложь);
			Иначе 
				фКэшОписания = ОписаниеСвойства;
				ОписаниеСвойства = ОписаниеСвойств.Добавить();
				ЗаполнитьЗначенияСвойств(ОписаниеСвойства, фКэшОписания);
			КонецЕсли;
		КонецЕсли;
		// xs -- > 

		// Поддержка строк неограниченной длины.
		Если НЕ ЭтоДополнительноеСведение
		   И ИспользоватьНеограниченнуюСтроку(
		         ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода)
		   И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда 
			
			ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока;
		Иначе
			ОписаниеСвойства.Значение = Строка.Значение;
			КонецЕсли;
	КонецЕсли;
КонецЦикла;
Показать


4) Форма элемента справочника Номенклатура, так же добавил туда кнопку удаления реквизита.


&НаСервере
Процедура хот_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	НоваяКоманда = ЭтаФорма.Команды.Добавить("СкопироватьСвойство");
	НоваяКоманда.Заголовок = "+";
	НоваяКоманда.Действие = "хот_СкопироватьСвойство";
	
	НоваяКоманда = ЭтаФорма.Команды.Добавить("УдалитьСвойство");
	НоваяКоманда.Заголовок = "-";
	НоваяКоманда.Действие = "хот_УдалитьСвойство"; 
	
	Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
		
		Если НЕ стрДополнительногоРеквизита.Свойство.МножественныйРеквизит Тогда
			Продолжить;
		КонецЕсли; 
			
		Если Элементы.Найти("КнопкаСкопироватьСвойство") = Неопределено Тогда
			НоваяКнопка = Элементы.Добавить("КнопкаСкопироватьСвойство", Тип("КнопкаФормы"),   Элементы.Найти("ГруппаДополнительныеРеквизитыКнопки"));
			НоваяКнопка.ИмяКоманды = "СкопироватьСвойство";
		КонецЕсли; 
		
	КонецЦикла; 
	
	спМножественныхСвойств = ПолучитьСписокМножественныхСвойств();
	Если спМножественныхСвойств.Количество() > 0 Тогда
		НоваяКнопка = Элементы.Добавить("КнопкаУдалитьСвойство", Тип("КнопкаФормы"), Элементы.Найти("ГруппаДополнительныеРеквизитыКнопки"));
		НоваяКнопка.ИмяКоманды = "УдалитьСвойство";
	КонецЕсли;
		
КонецПроцедуры

&НаСервере
Функция ПолучитьСписокМножественныхСвойств()
	
	спМножественныхСвойств = Новый СписокЗначений;
	
	вт_Свойства = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.Выгрузить();
	вт_Свойства.Колонки.Добавить("Счетчик");
	вт_Свойства.ЗаполнитьЗначения(1, "Счетчик");
	вт_Свойства.Свернуть("Свойство", "Счетчик");
	
	Для Каждого стрСвойство из вт_Свойства Цикл 
		Если стрСвойство.Счетчик > 1 Тогда
			спМножественныхСвойств.Добавить(стрСвойство.Свойство);
		конецЕсли
	КонецЦикла;
	
	Возврат спМножественныхСвойств;
	
КонецФункции

&НаСервере
Функция ПолучитьСписокМножественныхСвойствВсе()
	
	спМножественныхСвойств = Новый СписокЗначений;
	
	Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
		
		Если НЕ спМножественныхСвойств.НайтиПоЗначению(стрДополнительногоРеквизита.Свойство) = Неопределено Тогда
			Продолжить;
		КонецЕсли; 
		
		Если стрДополнительногоРеквизита.Свойство.МножественныйРеквизит Тогда
			спМножественныхСвойств.Добавить(стрДополнительногоРеквизита.Свойство);
		КонецЕсли; 
		
	КонецЦикла;
	
	Возврат спМножественныхСвойств;
	
КонецФункции

&НаКлиенте
Процедура хот_СкопироватьСвойство()
	
	спМножественныхСвойств = ПолучитьСписокМножественныхСвойствВсе();
	
	Оповещение = Новый ОписаниеОповещения("хот_ПослеВыбораИзМеню", ЭтотОбъект);
	ПоказатьВыборИзМеню(Оповещение, спМножественныхСвойств, Элементы.КнопкаСкопироватьСвойство);
	
КонецПроцедуры

&НаКлиенте
Процедура хот_УдалитьСвойство()
	
	//Список свойств, для которых есть несколько значений
	спМножественныхСвойств = ПолучитьСписокМножественныхСвойств();
	
	спМножественныхСвойствВыбор = Новый СписокЗначений;
	Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
		
		Если спМножественныхСвойств.НайтиПоЗначению(стрДополнительногоРеквизита.Свойство) = Неопределено Тогда
			Продолжить;
		КонецЕсли; 
		
		спМножественныхСвойствВыбор.Добавить(стрДополнительногоРеквизита, СокрЛП(стрДополнительногоРеквизита.Свойство) + " " + СокрЛП(ЭтаФорма[стрДополнительногоРеквизита.ИмяРеквизитаЗначение]));
				
	КонецЦикла;
	
	Оповещение = Новый ОписаниеОповещения("хот_ПослеВыбораИзМенюУдалитьСвойство", ЭтотОбъект);
	ПоказатьВыборИзМеню(Оповещение, спМножественныхСвойствВыбор, Элементы.КнопкаУдалитьСвойство);
	
КонецПроцедуры

&НаКлиенте
Процедура хот_ПослеВыбораИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
	Если НЕ ВыбранныйЭлемент = Неопределено Тогда
		хот_ДобавитьРеквизиты(ВыбранныйЭлемент.Значение)
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура хот_ПослеВыбораИзМенюУдалитьСвойство(ВыбранныйЭлемент, Параметры) Экспорт
	Если НЕ ВыбранныйЭлемент = Неопределено Тогда
		УдалитьСвойство(ВыбранныйЭлемент.Значение.ИмяРеквизитаЗначение);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УдалитьСвойство(ИмяРеквизитаЗначение)
	Элементы.Удалить(Элементы.Найти(ИмяРеквизитаЗначение));
	
	НайденныеСтроки = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("ИмяРеквизитаЗначение", ИмяРеквизитаЗначение));
	Для Каждого стрСвойство Из НайденныеСтроки Цикл 
		ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.Удалить(стрСвойство);
	КонецЦикла;
	
Конецпроцедуры

&НаСервере
Процедура хот_ДобавитьРеквизиты(ДопРеквизит)
	
	ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
	Для каждого стрДополнительногоРеквизита Из ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов Цикл
		Если стрДополнительногоРеквизита.Свойство = ДопРеквизит Тогда
			ОписаниеТипа = стрДополнительногоРеквизита.ТипЗначения;		
			Прервать;
		КонецЕсли; 
	КонецЦикла;
	
	ИмяРеквизита = СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки("ДополнительныйРеквизит_" + Строка(Новый УникальныйИдентификатор));
	лСвойство = ДопРеквизит;
	
	лМассив = Новый Массив;
	лМассив.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипа,,ДопРеквизит.Наименование, Истина));
	ИзменитьРеквизиты(лМассив);
	
	НовЭлемент = Элементы.Вставить(ИмяРеквизита, Тип("ПолеФормы"), Элементы.Найти("ГруппаДополнительныеРеквизиты"));
	НовЭлемент.ПутьКДанным = ИмяРеквизита;
	НовЭлемент.Вид = ВидПоляФормы.ПолеВвода;
	
	МассивПараметров = Новый Массив;
	МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.Владелец", лСвойство));
	
	Элементы[ИмяРеквизита].ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
	
	ДобавитьСвойство(ЭтаФорма, ИмяРеквизита, лСвойство);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ДобавитьСвойство(лФорма, ИмяРеквизита, Свойство)

	лШаблон = лФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("Свойство", Свойство));
	НовоеСвойство = лФорма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить();
	
	Если лШаблон.Количество() > 0 Тогда
		ЗаполнитьЗначенияСвойств(НовоеСвойство, лШаблон[0]);
		НовоеСвойство.ИмяРеквизитаЗначение = ИмяРеквизита;
	КонецЕсли;
	
КонецПроцедуры


Показать


5) Модуль Б_ОбменССайтомСерверВыгрузкаДанных

Процедура ВыгрузитьСвойстваXDTO

// < -- xs
XDTOСвойство.Множественное = ТекСвойство.СвойствоНоменклатуры.МножественныйРеквизит;
// xs -- > 


Процедура ВыгрузитьСвойстваНоменклатурыXDTO


Процедура ВыгрузитьСвойстваНоменклатурыXDTO(ПараметрыОбмена, Владелец, ВладелецТип, ВыборкаНоменклатуры, МенеджерВременныхТаблиц);
	
	XDTOЗначенияСвойствТип 	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначенияСвойств", Истина, ВладелецТип);
	XDTOЗначенияСвойстваТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначенияСвойства");
	
	// < -- xs
	XDTOЗначениеСвойства_МножТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначениеСвойства", Истина, XDTOЗначенияСвойстваТип);
	// xs -- > 
	
	Запрос = Новый Запрос;
	запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	запрос.Текст =  "ВЫБРАТЬ *
	|ИЗ
	|	ВремЗначенияСвойствТовара КАК ВремЗначенияСвойствТовара
	|ГДЕ
	|	(ВремЗначенияСвойствТовара.Номенклатура = &Номенклатура	
	|И НЕ ВремЗначенияСвойствТовара.НеВыгружатьВСвойстваТоваров)";
	
	Запрос.УстановитьПараметр("Номенклатура", ВыборкаНоменклатуры.Номенклатура);
	Выборка = Запрос.Выполнить();
	
	Если НЕ Выборка.Пустой() тогда	
		ВыборкаСвойств = Выборка.Выбрать();
		XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип);
		
		// < -- xs
		XDTOЗначенияСвойства_Множ = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
		// xs -- > 
		
		Пока ВыборкаСвойств.Следующий() Цикл
			
			XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
			
			XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
			
			// < -- xs
			Если ВыборкаСвойств.Свойство.МножественныйРеквизит Тогда
				XDTOЗначениеСвойстваМнож = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначениеСвойства_МножТип);
				XDTOЗначениеСвойстваМнож.Значение = XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения);
				
			    XDTOЗначенияСвойства_Множ.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
				XDTOЗначенияСвойства_Множ.ЗначениеСвойства.Добавить(XDTOЗначениеСвойстваМнож);
				XDTOЗначенияСвойства_Множ.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
				Продолжить;
			КонецЕсли;
			// xs -- > 
			
			XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
			
			XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства);	
			
		КонецЦикла;
		
		// < -- xs	
		XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства_Множ);
		// xs -- >

		Владелец.ЗначенияСвойств = XDTOЗначенияСвойств;
	КонецЕсли;
	
КонецПроцедуры

Показать
Прикрепленные файлы:
Varozh; Buхter; bonya_by; chng; user1136006; +5 Ответить
13. bad_wag 41 02.07.19 18:09 Сейчас в теме
(12) Спасибо! Ну я решал свою задачу, по этому об универсальности не думал, но вы развернулись на широкую ногу! Хоть в типовую переноси :) Отличное дополнение
14. Djo82 57 04.07.19 15:17 Сейчас в теме
с кнопками не разобрался, если не сложно поясните подробнее
15. Djo82 57 04.07.19 16:51 Сейчас в теме
16. user1136006 07.08.19 11:54 Сейчас в теме
(12) Прекрасное решение, спасибо! Но обнаружил проблему: если было выбрано несколько значений, а потом меньшее количество - предыдущий выбор сохраняется. Наверное, надо каким-то образом очищать реквизиты во время загрузки, может быть проблема только у меня...
17. RSTR 07.09.19 13:16 Сейчас в теме
bad_wag, просьба-вопрос к вам. Можете ли вы сделать настройку данной доработки в нашей базе? Сделали всё по инструкции, в УТ множественный реквизит появился, но в файл обмена с Битриксом этот реквизит не попадает.. УТ (11.4.6.174), Битрикс 7.0.1.21
Сколько это будет стоить?
18. Djo82 57 31.01.20 19:33 Сейчас в теме
Статья помогла решить задачу. Спасибо!

Но не отработала процедура "ВыгрузитьСвойстваНоменклатурыXDTO" при условии, что присутствует несколько множественных свойств. Подсмотрел исходники от партнеров с Битрикс. Немного подправил процедуру и файл "СхемаXSDОбмена". Вдруг кому поможет.

Процедура ВыгрузитьСвойстваНоменклатурыXDTO(ПараметрыОбмена, Владелец, ВладелецТип, ВыборкаНоменклатуры, МенеджерВременныхТаблиц);
	
	XDTOЗначенияСвойствТип 	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначенияСвойств", Истина, ВладелецТип);
	XDTOЗначенияСвойстваТип = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначенияСвойства");
	
	//++все отлично
	XDTOЗначенияСвойствМножТип   = Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена, "ЗначениеСвойства", Истина, XDTOЗначенияСвойстваТип);
	//все отлично++
	
	Запрос = Новый Запрос;
	запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	запрос.Текст =  "ВЫБРАТЬ *
	|ИЗ
	|	ВремЗначенияСвойствТовара КАК ВремЗначенияСвойствТовара
	|ГДЕ
	|	(ВремЗначенияСвойствТовара.Номенклатура = &Номенклатура	
	|И НЕ ВремЗначенияСвойствТовара.НеВыгружатьВСвойстваТоваров)";
	
	Запрос.УстановитьПараметр("Номенклатура", ВыборкаНоменклатуры.Номенклатура);
	Выборка = Запрос.Выполнить();
	
	//Если НЕ Выборка.Пустой() тогда	
	//	ВыборкаСвойств = Выборка.Выбрать();
	//	XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип);
	//	
	//	Пока ВыборкаСвойств.Следующий() Цикл
	//		
	//		XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
	//		
	//		XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
	//		XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
	//		
	//		XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства);	
	//		
	//	КонецЦикла;
	//	Владелец.ЗначенияСвойств = XDTOЗначенияСвойств;
	//КонецЕсли;
	ТаблицаСвойств = Выборка.Выгрузить();
	
СвернутьТаблицуПодСписокЗначений(ТаблицаСвойств,"ИдентификаторСвойства","Значение");
	
	Если НЕ ТаблицаСвойств.Количество() = 0 Тогда
		XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип);
		Для Каждого ВыборкаСвойств из ТаблицаСвойств Цикл

				XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип);
				
				XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства);
				Если НЕ ВыборкаСвойств.БулевоЗначение тогда
					Если НЕ ТипЗнч(ВыборкаСвойств.Значение) = Тип("СписокЗначений") Тогда
						XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения));
					Иначе
						Для каждого Свойство из ВыборкаСвойств.Значение Цикл
							XDTOЗначенияМножСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствМножТип);
							XDTOЗначенияМножСвойств.Значение = XMLСтрока(Свойство.Значение);
							XDTOЗначенияСвойства.ЗначениеСвойства.Добавить(XDTOЗначенияМножСвойств);
						КонецЦикла;
					КонецЕсли;
				Иначе
					XDTOЗначенияСвойства.Значение.Добавить(Строка(ВыборкаСвойств.ИдентификаторЗначения));
				КонецЕсли;
				
				XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства);
				
		КонецЦикла;
		Владелец.ЗначенияСвойств = XDTOЗначенияСвойств;
	КонецЕсли;
КонецПроцедуры

Процедура СвернутьТаблицуПодСписокЗначений(Таблица,ПолеДляАнализа,ПолеДляСвертки) Экспорт
	Если Ложь Тогда Таблица = Новый ТаблицаЗначений; КонецЕсли;
	СписокСвойств = Новый Соответствие;
	Для каждого Строка из Таблица Цикл
		НайденноеСвойство = СписокСвойств.Получить(Строка[ПолеДляАнализа]);
		Если НЕ НайденноеСвойство = неопределено Тогда
			Если НЕ ТипЗнч(НайденноеСвойство) = Тип("СписокЗначений") Тогда
				Список = Новый СписокЗначений;
				Список.Добавить(НайденноеСвойство);
				Список.Добавить(Строка[ПолеДляСвертки]);
				СписокСвойств.Вставить(Строка[ПолеДляАнализа], Список);
			Иначе
				НайденноеСвойство.Добавить(Строка[ПолеДляСвертки]);
			КонецЕсли;
		Иначе			
			СписокСвойств.Вставить(Строка[ПолеДляАнализа], Строка[ПолеДляСвертки]);
		КонецЕсли;
	КонецЦикла;
	КолонкиКопия = Таблица.ВыгрузитьКолонку("Значение");
	ОписаниеТипов = Новый ОписаниеТипов(Таблица.Колонки.Значение.ТипЗначения,"СписокЗначений");
	ШиринаКопия = Таблица.Колонки.Значение.Ширина;
	
	Таблица.Колонки.Удалить("Значение");
	Таблица.Колонки.Добавить("Значение",ОписаниеТипов,"Значение",ШиринаКопия);
	Таблица.ЗагрузитьКолонку(КолонкиКопия, "Значение");
	
	Для каждого Свойство из СписокСвойств Цикл
		Если ТипЗнч(Свойство.Значение) = Тип("СписокЗначений") Тогда
			НайденныеСтроки = Таблица.НайтиСтроки(Новый Структура(ПолеДляАнализа,Свойство.Ключ));
			Н = 0;
			Для Каждого Строка из НайденныеСтроки Цикл
				Н = Н + 1;
				Если Н = 1 Тогда
					Строка.Значение = Свойство.Значение;
				Иначе
					Таблица.Удалить(Строка);
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры


Показать


Немного другой текст в "СхемаXSDОбмена"

<xs:complexType name="ЗначенияСвойства">
        <xs:sequence>
            <xs:element name="Ид" type="tns:ИдентификаторГлобальныйТип" />
            <xs:element name="Наименование" type="tns:НаименованиеТип" minOccurs="0" />
            <xs:element name="Значение" type="tns:ЗначениеТип" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ЗначениеСвойства" minOccurs="0" maxOccurs="unbounded" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Значение" type="tns:ЗначениеТип" maxOccurs="1" />
                    </xs:sequence>
				</xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
Показать
19. user691380_bel4enkin 18.04.20 14:18 Сейчас в теме
А случайно никто не выкладывал подобное расширение под УТ11.4 чтобы не изучать все тонкости? Интересует множественный реквизит с выгрузкой на сайт Opencart
20. ArturShaibakov 09.02.21 20:47 Сейчас в теме
Для 1с Розница, редакция 2.3 (2.3.5.35), дальше первого пункта делать ничего не нужно, все работает.
21. user1375596 20.08.21 20:08 Сейчас в теме
вы уверены, что Битрикс умеет парсить такую конструкцию?

					<ЗначенияСвойства>
						<Ид>e94be4ad-fb60-11eb-80e2-c643fff9747c</Ид>
						<Значение>
							<Значение>f237f346-fb60-11eb-80e2-c643fff9747c</Значение>
							<Значение>f237f347-fb60-11eb-80e2-c643fff9747c</Значение>
							<ЗначенияСвойства>
								<Значение>f237f346-fb60-11eb-80e2-c643fff9747c</Значение>
							</ЗначенияСвойства>
							<ЗначенияСвойства>
								<Значение>f237f347-fb60-11eb-80e2-c643fff9747c</Значение>
							</ЗначенияСвойства>
						</Значение>
					</ЗначенияСвойства>
Показать



У меня БУС 21.400.300 не воспринимает такой массив.
22. user1375596 21.08.21 08:54 Сейчас в теме
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

Практика программирования v8 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    4675    Eugen-S    23    

Обзор полезных методов БСП 3.1.4. Часть 2

БСП (Библиотека стандартных подсистем) v8 Бесплатно (free)

Библиотека стандартных подсистем (далее - БСП) является частью любой типовой конфигурации, поэтому умение применять готовые процедуры и функции повышает качество разработки и избавляет от написания лишнего кода. К сожалению, не у всех есть время и упорство овладеть всей документацией, поэтому я собрал воедино наиболее популярный функционал.

27.04.2021    16621    rayastar    7    

Обзор полезных методов БСП 3.1.4

БСП (Библиотека стандартных подсистем) Практика программирования v8 1cv8.cf Бесплатно (free)

Библиотека стандартных подсистем (далее - БСП) является частью любой типовой конфигурации, поэтому умение применять готовые процедуры и функции повышает качество разработки и избавляет от написания лишнего кода. К сожалению, не у всех есть время и упорство овладеть всей документацией, поэтому я собрал воедино наиболее популярный функционал.

25.03.2021    42495    rayastar    51    

Звуковое управление в 1С 8.3

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    7307    velemir    33    

Использование классов .Net в 1С для новичков Промо

Разработка внешних компонент Универсальные функции Практика программирования v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    85989    Serginio    116    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    9048    comol    31    

Полезные функции БСП (Часть 2)

БСП (Библиотека стандартных подсистем) v8 1cv8.cf Россия Бесплатно (free)

Список полезных функций из состава Библиотеки стандартных подсистем 3.1.

10.03.2020    21136    user5300    20    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

27.01.2020    66936    ids79    27    

Как я начал администрировать сервер 1С: Предприятие 8.3 с телефона Промо

Инструменты администратора БД Мобильная разработка v8 Бесплатно (free)

Развитие инструментов управления кластером серверов 1С:Предприятие 8.3.

14.04.2017    67791    user700211_a.straltsou    30    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    44283    John_d    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    36009    kuzyara    38    

Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Печатные формы БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

Постоянно приходится вспоминать, как добавить механизм печати (БСП) в новый документ. Поэтому решил написать шпаргалку.

10.10.2019    30948    John_d    21    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    41207    unichkin    74    

Полезные процедуры и функции для программиста

Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

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

07.10.2019    40062    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    53728    Yashazz    56    

[Шпаргалка] Программное создание элементов формы

Работа с интерфейсом Практика программирования v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    104603    rpgshnik    77    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    36273    tormozit    106    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    78802    ids79    56    

Отслеживание выполнения фонового задания

Универсальные функции Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

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

17.08.2019    45559    ids79    22    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    154929    ids79    75    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    82967    tormozit    131    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    107210    ids79    17    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    114952    AlbinaAAA    49    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    48930    ids79    27    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    54618    tormozit    51    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    22639    SeiOkami    53    

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    77082    ids79    28    

Подсистема "Варианты отчетов". Используете ли Вы ее правильно?

Работа с интерфейсом БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    56794    YPermitin    55    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    51411    tormozit    74    

Регистры накопления. Структура хранения в базе данных

Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    64685    YPermitin    31    

Выгрузка документа по условию

Инструментарий разработчика Практика программирования v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    18085    m-rv    3    

Как прикрутить ГУИД к регистру сведений

Перенос данных из 1C8 в 1C8 Инструментарий разработчика Практика программирования v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    23423    m-rv    18    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    37205    m-rv    23    

О расширениях замолвите слово...

Инструментарий разработчика Практика программирования v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    42919    ellavs    131    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    32186    ellavs    90    

RabbitMQ + Конвертация Данных 3.0

Внешние источники данных Обмен через XML Интеграция с сервисами Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

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

21.03.2019    30910    barelpro    87    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

БСП (Библиотека стандартных подсистем) Роли и права Практика программирования v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    66299    ids79    11    

Новый подход к обмену данными EnterpriseData

Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    53050    ids79    82    

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Управление персоналом (HRM) Зарплата Кадровый учет v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Бесплатно (free)

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    148838    GeterX    136    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    45210    ids79    46    

Git + 1С. Часть 1. Как подключиться к команде разработки и начать использовать Git

Инструментарий разработчика Методология v8 1cv8.cf Бесплатно (free)

Первая статья из цикла инструкций по работе с Git в 1С-разработке. Рассмотрим, как настроить рабочее место, как получить свою "копию" проекта для разработки и приступить к полезным действиям. Все примеры будут изложены в рамках трёх практических кейсов: 1. Моя команда дорабатывает типовую конфигурацию, использует приватный репозиторий на BitBucket, в котором версионируются внешние отчеты/обработки, расширения конфигураций и правила обмена; 2. Я участвую в стартап-команде, которая разрабатывает свою конфигурацию с использованием Git и GitLab; 3. Я принимаю участие в развитии OpenSource-продукта на GitHub как заинтересованный разработчик (контрибьютор).

18.10.2018    93956    stas_ganiev    86    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    48976    Rain88    49    

Тестер: частые вопросы

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    31635    grumagargler    31    

Работаем с дополнительными реквизитами на форме

Практика программирования v8 Бесплатно (free)

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

15.07.2018    53627    papche    59    

Повышаем эффективность разработки правил обмена

Практика программирования v8 КД Бесплатно (free)

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    30306    olegtymko    48    

Введение в механизм представлений в ЗУП ред. 3

Практика программирования v8 v8::СПР ЗУП3.x Бесплатно (free)

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    47762    xrrg    95