ДоступныйОбъектНастройкиКомпоновкиДанных

Типы · DataCompositionAvailableSettingsObject

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

Полное описание, параметры и ограничения

ДоступныйОбъектНастройкиКомпоновкиДанных (DataCompositionAvailableSettingsObject)

ДоступныйОбъектНастройкиКомпоновкиДанных (DataCompositionAvailableSettingsObject)

Доступен, начиная с версии 8.1.

Свойства:
Заголовок (Title)

Описание:

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

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

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

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Вложенный объект СКД: доступные отчеты, загрузка настроек и пользовательский слой

Создаем собственную родительскую схему и дочерний отчет Книга/Ручка. Из реального источника выбираем вложение, впервые назначаем его ID, проверяем загруженный выбор и выводим действительные строки дочернего отчета.

Где и как запускать

Полный серверный общий модуль собственного нового учебного стенда УчебныеНастройкиВложений85; отдельный полный модуль формы ниже.

Подготовка

  1. Создать НОВУЮ отдельную пустую учебную базу, не рабочую и не ее копию: платформа точно 8.5.1.1343; конфигурация УчебныеНастройкиВложений85, совместимость Не использовать. Без справочников, документов, регистров, подписок, заданий и расширений.

  2. Конфигуратор → Общие → Общие модули → УчебныеНастройкиВложений85: Сервер=Да, Вызов сервера=Да, Клиент=Нет, Глобальный=Нет, Привилегированный=Нет. Вставить ВЕСЬ основной код, включая все функции и процедуры.

  3. Конфигуратор → Обработки → УчебныеНастройкиВложений85 → Формы → Пульт: управляемая форма; команда Выполнить, кнопка с этой командой, действие команды Выполнить. Реквизиты не нужны. Полный модуль формы дан отдельно ниже.

  4. Сохранить учебную конфигурацию и обновить конфигурацию базы данных (F7). Открыть свежий собственный клиент, Все функции → Обработки → УчебныеНастройкиВложений85 → Выполнить. Это будущие ручные шаги: здесь 1С и F7 не запускались.

  5. Обе схемы создаются только в памяти. Каждая имеет собственный Local-источник и буквальный запрос Книга:3×250=750 / Ручка:1×50=50. Данные базы не нужны; подготовка не записывает документы или регистры.

  6. У дочерней схемы нет структуры по умолчанию: четыре поля и одна группа деталей подготовлены именно в возвращенном Описание.Настройки. Этот источник должен загрузить их после первого назначения ID вложению.

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

  8. runtimeVerifiedScenarios=0. Выполнялась статическая проверка справки и кода; фактический результат будущего запуска должен пройти все встроенные проверки. Файлы, резервные копии, сеть, печать и production не затрагиваются.

Функция ВыполнитьПример() Экспорт
    ПроверитьСвойПустойСтенд();
    Корень = Новый СхемаКомпоновкиДанных;
    ЗаполнитьСвоиДанные(Корень);
    Описание = Корень.ВложенныеСхемыКомпоновкиДанных.Добавить();
    Описание.Имя = "ТоварыВложения85";
    Описание.Заголовок = "Товары учебного вложения";
    ЗаполнитьСвоиДанные(Описание.Схема);
    ЗаполнитьСвоиНачальныеНастройки(Описание.Настройки);
    ПроверитьСвойДочернийВывод(Описание.Схема, Описание.Настройки);
    ТекстИсходнойСхемы = СвойОбъектРасшифровкиВСтроку(Корень);
    Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
    Редактор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Корень));
    Редактор.ЗагрузитьНастройки(Корень.НастройкиПоУмолчанию);
    Рабочие = Редактор.Настройки;
    Каталог = Рабочие.ДоступныеОбъекты.Элементы;
    Если ТипЗнч(Каталог) <> Тип("КоллекцияДоступныхОбъектовНастройкиКомпоновкиДанных")
        Или Каталог.Количество() <> 1 Тогда
        ВызватьИсключение "Источник собственной схемы должен предложить одно действительное вложение";
    КонецЕсли;
    ИдентификаторОбъекта = Описание.Имя;
    Доступный = Каталог.Найти(ИдентификаторОбъекта);
    Если Доступный = Неопределено Тогда
        ВызватьИсключение "Имя собственного вложенного описания не разрешилось в источнике доступных настроек";
    КонецЕсли;
    Если ТипЗнч(Доступный) <> Тип("ДоступныйОбъектНастройкиКомпоновкиДанных")
        Или Каталог.Получить(0) <> Доступный Или Каталог.Индекс(Доступный) <> 0
        Или Доступный.Заголовок <> Описание.Заголовок Тогда
        ВызватьИсключение "Заголовок, поиск и индекс должны принадлежать одному реальному доступному объекту";
    КонецЕсли;
    Если Каталог.Найти("НетТакогоВложения85") <> Неопределено Тогда
        ВызватьИсключение "Несуществующий идентификатор не должен подменяться первым доступным объектом";
    КонецЕсли;
    Вложение = Рабочие.Структура.Добавить(Тип("НастройкиВложенногоОбъектаКомпоновкиДанных"));
    Если Вложение.ИдентификаторОбъекта <> "" Тогда
        ВызватьИсключение "Первое назначение возможно только новому собственному элементу без идентификатора объекта";
    КонецЕсли;
    Вложение.УстановитьИдентификатор(ИдентификаторОбъекта);
    Вложение.Имя = "СтрокиУчебныхТоваров85";
    Вложение.Использование = Истина;
    Вложение.ИдентификаторПользовательскойНастройки = "";
    Вложение.ПредставлениеПользовательскойНастройки = "Товары: книга и ручка";
    Вложение.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
    Если ПолучитьСвоюОсновнуюНастройку(Рабочие, ИдентификаторОбъекта) <> Вложение
        Или Вложение.Имя <> "СтрокиУчебныхТоваров85" Или Не Вложение.Использование
        Или Вложение.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный
        Или Вложение.ПредставлениеПользовательскойНастройки <> "Товары: книга и ручка"
        Или ТипЗнч(Вложение.Идентификатор) <> Тип("Строка") Тогда
        ВызватьИсключение "Не совпали имя, флаг, представление, режим и тип собственного идентификатора структуры";
    КонецЕсли;
    ИдентификаторСтруктуры = Вложение.Идентификатор;
    ПроверитьСвойДочернийВывод(Описание.Схема, Вложение.Настройки);
    ТекстДочернихНастроек = СвойОбъектРасшифровкиВСтроку(Вложение.Настройки);
    Вложение.Использование = Ложь;
    Копия = Редактор.ПолучитьНастройки();
    Используемые = 0;
    Для Каждого Часть Из Копия.Структура Цикл
        Если ТипЗнч(Часть) <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
            ВызватьИсключение "В своей структуре нет групп или диаграмм вместо вложений";
        КонецЕсли;
        Если Часть.Использование Тогда
            Используемые = Используемые + 1;
        КонецЕсли;
    КонецЦикла;
    Если Вложение.Использование Или Используемые <> 0
        Или СвойОбъектРасшифровкиВСтроку(Вложение.Настройки) <> ТекстДочернихНастроек Тогда
        ВызватьИсключение "Выключение должно исключить использование, сохранив собственные дочерние настройки";
    КонецЕсли;
    Вложение.Использование = Истина;
    ПроверитьСвойДочернийВывод(Описание.Схема, Вложение.Настройки);
    ИдентификаторПользователя = "ВыборУчебныхТоваров85";
    Вложение.ИдентификаторПользовательскойНастройки = ИдентификаторПользователя;
    Редактор.ЗагрузитьНастройки(Редактор.ПолучитьНастройки());
    Основное = ПолучитьСвоюОсновнуюНастройку(Редактор.Настройки, ИдентификаторОбъекта);
    Пользовательское = Редактор.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторПользователя);
    Если Пользовательское = Неопределено Тогда
        ВызватьИсключение "Непустой собственный пользовательский ID должен включить настройку в пользовательский состав";
    КонецЕсли;
    Если ТипЗнч(Пользовательское) <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных")
        Или Основное.ИдентификаторПользовательскойНастройки <> ИдентификаторПользователя
        Или Пользовательское.ИдентификаторПользовательскойНастройки <> ИдентификаторПользователя
        Или Не Пользовательское.Использование Тогда
        ВызватьИсключение "Нужны настоящие основная и пользовательская настройки одного собственного объекта";
    КонецЕсли;
    Эффективные = ПолучитьСвоюОсновнуюНастройку(Редактор.ПолучитьНастройки(), ИдентификаторОбъекта);
    ПроверитьСвойДочернийВывод(Описание.Схема, Эффективные.Настройки);
    Если СвойОбъектРасшифровкиВСтроку(Корень) <> ТекстИсходнойСхемы Тогда
        ВызватьИсключение "Работа редактора и пользовательского слоя не должна изменять исходную схему";
    КонецЕсли;
    Возврат "Доступно: " + Доступный.Заголовок + "; объект=" + ИдентификаторОбъекта
        + "; ID структуры=" + ИдентификаторСтруктуры + "; имя=" + Основное.Имя
        + "; пользовательская настройка=" + Основное.ПредставлениеПользовательскойНастройки
        + "; количество 4; сумма 800";
КонецФункции

Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

Процедура ЗаполнитьСвоиДанные(Схема)
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеТовары";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Истина;
    Набор.Запрос = "ВЫБРАТЬ
    |    ""Книга"" КАК Наименование,
    |    3 КАК Количество,
    |    250 КАК Цена,
    |    750 КАК Сумма
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Ручка"", 1, 50, 50";
КонецПроцедуры

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

Процедура ПроверитьСвойДочернийВывод(Схема, Настройки)
    Если ТипЗнч(Схема) <> Тип("СхемаКомпоновкиДанных")
        Или ТипЗнч(Настройки) <> Тип("НастройкиКомпоновкиДанных")
        Или Настройки.Выбор.Элементы.Количество() <> 4 Или Настройки.Структура.Количество() <> 1 Тогда
        ВызватьИсключение "Нужны реально загруженные четыре поля и одна группа деталей своего вложения";
    КонецЕсли;
    Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = Компоновщик.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроверитьСвойПолныйВывод(Макет, Неопределено);
КонецПроцедуры

Функция ПолучитьСвоюОсновнуюНастройку(Настройки, ИдентификаторОбъекта)
    Если Настройки.Структура.Количество() <> 1 Тогда
        ВызватьИсключение "В родительском отчете только одно свое вложение";
    КонецЕсли;
    Вложение = Настройки.Структура.Получить(0);
    Если ТипЗнч(Вложение) <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных")
        Или Вложение.ИдентификаторОбъекта <> ИдентификаторОбъекта Или Вложение.Родитель <> Настройки Тогда
        ВызватьИсключение "Нужна основная настройка своего вложенного объекта с настоящим родителем";
    КонецЕсли;
    Возврат Вложение;
КонецФункции

Процедура ПроверитьСвойПолныйВывод(Макет, ВнешниеДанные)
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Макет, ВнешниеДанные);
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    Приемник = Новый ТаблицаЗначений;
    Вывод.ОтображатьПроцентВывода = Ложь;
    Вывод.УстановитьОбъект(Приемник);
    Результат = Вывод.Вывести(Процессор, Ложь);
    Если ТипЗнч(Результат) <> Тип("ТаблицаЗначений") Или Результат.Количество() <> 2
        Или Результат.Колонки.Количество() <> 4 Тогда
        ВызватьИсключение "Настоящий вывод должен дать две строки и четыре колонки";
    КонецЕсли;
    Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
        Если Результат.Колонки.Найти(ИмяПоля) = Неопределено Тогда
            ВызватьИсключение "Потеряна ожидаемая колонка реального вывода " + ИмяПоля;
        КонецЕсли;
    КонецЦикла;
    Книга = Результат.Найти("Книга", "Наименование");
    Ручка = Результат.Найти("Ручка", "Наименование");
    Если Книга = Неопределено Или Ручка = Неопределено Тогда
        ВызватьИсключение "Не найдены обе реальные исходные строки результата";
    КонецЕсли;
    Если Книга.Количество <> 3 Или Книга.Цена <> 250 Или Книга.Сумма <> 750
        Или Ручка.Количество <> 1 Или Ручка.Цена <> 50 Или Ручка.Сумма <> 50
        Или Результат.Итог("Количество") <> 4 Или Результат.Итог("Сумма") <> 800 Тогда
        ВызватьИсключение "Потеряны или изменены реальные ячейки собственного полного вывода";
    КонецЕсли;
    Сообщить("Настоящий вывод проверен: Книга 3 × 250 = 750, Ручка 1 × 50 = 50; количество 4, сумма 800.");
КонецПроцедуры

Функция СвойОбъектРасшифровкиВСтроку(Объект)
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(Запись, Объект);
    Возврат Запись.Закрыть();
КонецФункции
УчебныеНастройкиВложений85.Пульт

УчебныеНастройкиВложений85 → Обработки → УчебныеНастройкиВложений85 → Формы → Пульт → Модуль

Полный модуль собственной управляемой формы; здесь не выполнялся.

&НаКлиенте
Процедура Выполнить(Команда)
    Сообщить(ВыполнитьНаСервере());
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВыполнитьНаСервере()
    Возврат УчебныеНастройкиВложений85.ВыполнитьПример();
КонецФункции

Разбор по шагам

  1. Заполнить настоящую дочернюю схему через readonly Описание.Схема и ее настройки через readonly Описание.Настройки. Присваивания этим свойствам целиком нет. Контрольный дочерний вывод проверяет обе строки и четыре колонки.

  2. Построить источник из родительской схемы, инициализировать редактор и загрузить пустые настройки родителя. ДоступныеОбъекты.Элементы содержит именно объекты настройки, не описания схем и не массив названий.

  3. ID берется из программного имени собственного вложенного описания. Перед назначением он должен разрешиться через Найти в настоящем источнике; Получить/Индекс и Заголовок сверяют тот же элемент. У доступного объекта нет свойства Идентификатор: такое свойство не выдумываем.

  4. Добавить настоящий НастройкиВложенногоОбъектаКомпоновкиДанных в источник-связанные Рабочие.Структура. УстановитьИдентификатор вызывается только при пустом предыдущем ИдентификаторОбъекта. Именно этот переход должен загрузить четыре поля и группу из подготовленного источника.

  5. ИдентификаторОбъекта выбирает дочерний объект; Идентификатор обозначает элемент структуры для расшифровок; ИдентификаторПользовательскойНастройки обозначает включение в пользовательский слой. Не приравнивать эти три разных строки.

  6. Настроить собственные Имя, Использование, пользовательское представление и Обычный режим. Родитель проверяется как настоящие основные настройки. Идентификатор читается как Строка, но не используется для придуманного клика расшифровки.

  7. Выключить использование и получить эффективную копию: использованных вложений должно быть ноль, независимо от того, оставил ли движок выключенные элементы физически. XML собственных дочерних настроек не меняется. Пустую выключенную структуру не исполняем; затем включить и повторно проверить дочерний вывод.

  8. Назначить пользовательский ID, заново загрузить эффективные настройки и найти настоящий пользовательский элемент по этому ID. После перезагрузки основные настройки получаются заново: старые ссылки не используются как текущие.

  9. У пользовательского элемента проверять только разрешенные ID и Использование. Имя, Родитель, Идентификатор и ПредставлениеПользовательскойНастройки читать только у основных настроек; у пользовательских эти свойства недоступны.

  10. Вывести дочернюю схему с фактически полученными эффективными Настройки вложения. Сравнить весь XML исходной схемы с начальным снимком в памяти и вернуть информативный результат формы. Пользовательский UI редактора и полный родительский табличный отчет здесь не исполняются.

Как проверить результат

  1. Будущий дочерний вывод во всех четырех контрольных состояниях: ТаблицаЗначений, две строки и четыре колонки; Книга: количество3, цена250, сумма750; Ручка: количество1, цена50, сумма50; итог количества4, суммы800. Приемник не заполняется ожидаемыми строками вручную.

  2. До назначения ID новый вложенный объект имеет пустой ИдентификаторОбъекта. После назначения должен иметь действительный собственный ID, четырехпольный выбор и одну группу; отсутствие автоматической загрузки завершает опыт исключением, а не искусственным дозаполнением.

  3. Отрицательный контроль: в отдельном будущем опыте убрать вызов Редактор.Инициализировать. Проверка доступных объектов или загруженных настроек должна отказать. Не обходить отказ прямым заполнением Вложение.Настройки после назначения ID.

  4. Отрицательный контроль: заменить только возвращаемый запрос дочерней схемы: Книга.Количество3→30 при прежней сумме750. Проверка реальной строки должна отказать; одного количества строк или заголовка отчета недостаточно.

  5. Исходная схема неизменна при работе редактора; XML хранится строкой в памяти, не файлом. Пользовательский элемент должен реально появиться после непустого ID и перезагрузки.

  6. runtimeVerifiedScenarios=0. Нет утверждения о запуске в 1С, видимом редакторе пользовательских настроек, клике расшифровки или выводе полного родительского отчета.

Ожидаемый результат

Подготовлены источник-связанные настройки настоящего вложения и пользовательский элемент. Полный код проверяет фактический дочерний вывод: две строки, количество4, сумма800; здесь запуск в 1С не выполнялся.

На что обратить внимание

  1. ДоступныйОбъектНастройкиКомпоновкиДанных предоставляет Заголовок, но не свойство Идентификатор. Строка поиска должна разрешаться в текущем источнике; нельзя выдавать заголовок или случайный номер за ID.

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

  3. Readonly Настройки/Родитель/Идентификатор/ИдентификаторОбъекта не переназначаются. Поле Имя серверное; полный общий модуль выполняется на сервере, не в клиентском обработчике кнопки.

  4. Настройки пользовательского слоя не равны основным по доступности свойств. После ЗагрузитьНастройки пользовательский состав пересоздается; ссылки заново ищутся в новых текущих коллекциях.

  5. РежимОтображения и представление подготовлены для редактора, но это не доказательство его внешнего вида. ID структуры читается, однако настоящий обработчик расшифровки здесь не строится.

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

  7. В прочитанной выгрузке КА2 ИсполнениеПланаПродаж вложенные схемы имеют программные имена ПоКлиентам/ПоПодразделениям, а objectID настроек ссылается на такое имя. Это пример структуры существующего исходника, а не проверка рабочей базы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.