1с скд не найдено описание вложенного объекта настройки
Для использования в отчёте на СКД произвольной таблицы значений необходимо настроить соответствующим образом схему компоновки данных и прописать программный вывод отчёта.
1. Настройка схемы компоновки данных.
1.1. Создаём основную схему компоновки данных.
1.2. На закладке "Наборы данных" добавляем набор данных - объект.
1.3. Добавляем необходимые поля набора данных (достаточно указать Поле) и указываем Имя объекта, содержащего данные.
1.4. Если в СКД есть другие наборы данных (например, Запрос), то создаём связи наборов данных на закладке "Связи наборов данных".
1.5. Настраиваем вывод отчёта нужным образом.
2. Программный вывод отчёта.
2.1. В модуле объекта отчёта создаём процедуру-обработчик ПриКомпоновкеРезультата.
2.2. В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.
2.3. Формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с полями набора данных в СКД (п.1.3).
2.4. Получаем схему компоновки данных из макета.
2.5. Из схемы получаем настройки по умолчанию.
2.6. Помещаем данные о расшифровке в соответствующую переменную.
2.7. Формируем макет с помощью компоновщика макета.
2.8. Передаём в макет компоновки схему, настройки и данные расшифровки.
2.9. Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных (п.1.3), значение - сформированная таблица значений), данные расшифровки.
2.10. Очищаем поле табличного документа.
2.11. Выводим результат в табличный документ.
Помимо таблиц значений в качестве внешних наборов данных могут использоваться результаты запросов, табличные части.
Пример сформированного отчёта:
Справочная информация из синтакс-помощника:
ПроцессорКомпоновкиДанных (DataCompositionProcessor)
Инициализировать (Initialize)
Синтаксис:
Инициализировать(, , , )
Параметры:
(обязательный)
Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка.
(необязательный)
Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры - внешнему набору данных.
(необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.
(необязательный)
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь.
Описание:
Инициализировать объект.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Схема компоновки данных представляет собой большой конструктор, состоящий из наборов данных, вычисляемых полей, описания итоговых полей (ресурсов), макетов, вариантов настроек и т.д. Схему компоновки достаточно удобно создавать в конфигураторе при помощи конструктора схемы компоновки.
Но на практике часто встречаются задачи, когда схему компоновки нужно программно создать с нуля или доработать существующую схему при помощи кода на встроенном языке, настроить вариант отчета – добавить отбор, установить условное оформление, добавить группировку и т.д. Такие задачи решаются на внедрениях при адаптации типовых конфигураций фирмы “1С” под требования конкретного заказчика.
Задача действительно очень актуальная, участники Мастер-группы по СКД задают много вопросов на эту тему :)
Также традиционно много вопросов возникает при программной работе с пользовательскими настройками отчетов:
- Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках? Которое из этих значений используется для формирования отчета?
- Как связываются между собой настройки компоновщика и пользовательские настройки?
- Как установить значение отбора или параметра, если они вынесены в пользовательские настройки?
- И многие другие…
Поэтому мы опубликовали серию видеоуроков, в которых рассказывается, как работать со схемой компоновки программно.
Общая длительность всех видеоуроков – 1 час 5 минут.
Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в видео.
Видео 1 – Программное создание варианта отчета
00:37 – В каком обработчике можно расположить код для создания настроек компоновки
01:00 – Где в Синтакс-помощнике можно “подсмотреть” свойства, которые потребуются при написании кода
01:58 – Как настроить группировки отчета
02:28 – Какое свойство позволяет создавать вложенные группировки
03:11 – Как включить/выключить отдельные элементы настроек.
Видео 2 – Программное создание группировки
00:22 – Как создать структуру отчета
02:00 – Как указать поля, по которым выполняется группировка
04:10 – Как настроить выбранные поля
06:30 – Как создать автополе.
Видео 3 – Программное создание вложенной группировки
00:22 – Как создать подчиненную группировку
02:05 – Почему в отчете группировки могут выводиться несколько раз
02:40 – Как проверить наличие группировок в структуре отчета.
Видео 4 – Программное добавление отбора
00:18 – Где в Синтакс-помощнике найти типы данных, необходимые для создания отборов
00:55 – Какие свойства объекта типа ЭлементОтбораКомпоновкиДанных нужно использовать для создания отбора
01:20 – Как создать отбор при помощи программного кода.
Видео 5 – Программная установка сортировки
00:25– Где в Синтакс-помощнике найти типы данных, необходимые для включения сортировки
00:50 – Какие свойства объекта типа ЭлементПорядкаКомпоновкиДанных нужно использовать для включения сортировки
01:00 – Как установить сортировку при помощи программного кода.
Видео 6 – Программное добавление условного оформления
00:25 – Где в Синтакс-помощнике найти типы данных, необходимые для работы с условным оформлением
00:33 – Какие свойства объекта типа ЭлементУсловногоОформленияКомпоновкиДанных нужно использовать
02:08 – Как добавить условное оформление при помощи программного кода
02:31 – Как задать перечень полей, к которым будет применяться условное оформление
03:34 – Как отобрать оформляемые данные
04:15 – Как при помощи программного кода описать применяемое оформление.
Видео 7 – Программная работа с пользовательскими настройками
01:01 – Как программно установить значение параметра
02:00 – Почему значения параметров, выводимые на форму отчета, не совпадают со значениями в самом отчете
04:25 – Что делает метод ПолучитьНастройки
05:10 – Как нужно работать с пользовательскими настройками
06:17 – Для чего нужно свойство ИдентификаторПользовательскойНастройки
07:10 – Где в типовой конфигурации УТ 11 можно найти пример работы с пользовательскими настройками.
Видео 8 – Особенности использования метода ПолучитьНастройки
00:58 – Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках
01:23 – Как связываются между собой настройки компоновщика и пользовательские настройки
03:06 – Как работает метод ПолучитьНастройки и значение какого типа он возвращает
Видео 9 – Программное создание отборов в пользовательских настройках
00:34 – Чем отличается отбор в настройках компоновщика и отбор в пользовательских настройках
02:34 – Как используется свойство ИдентификаторПользовательскойНастройки
03:08 – Какой алгоритм должен использоваться для установки значения отбора в пользовательских настройках
03:42 – Как реализовать процедуру для установки значения отбора в пользовательских настройках.
Видео 10 – Программное создание схемы компоновки
00:40 – Как при компоновке отчета программно создать схему, по которой будет формироваться отчет
02:15 – Какой алгоритм должен использоваться для программного создания с нуля схемы компоновки
02:50 – Как программно создать источник данных схемы компоновки
04:00 – Как программно добавить в схему набор данных – объект
06:25 – Как программно добавить поля набора данных.
Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?
Чтобы подробнее изучить возможности системы компоновки данных и уверенно применять механизм на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
1С Предприятие, конфигурации, обработки, услуги программиста, помощь программиста
Нечасто делаю отчеты на СКД, тем более с использованием вложенных схем. И порой очень раздражает когда делаешь вложенную схему, видишь, что в другом подобном отчете всё есть, а в моем нету полей связи родительского отчета со вложенным.
Нет полей вложенного запроса для связи
Попробуем разобраться. И оставляю себе напоминалочку, так как нервы не железные.
1 Заходим в схему вложенного отчета
рис. Открываем схему вложенного отчета
2 Открываем конструктор запроса
3 Переходим на закладку «Компоновка данных» и переносим стрелками из левой в правую часть те реквизиты, по которым хотим установить связь.
4 Открываем снова настройки связей схемы
Нужные поля для связи появились
5 Но вот в правом значении дает выбирать только элементы
6 Поэтому нажимаем крестик
7 Выбираем «Поле компоновки данных
8 Выбираем нужное поле родителя для связи с вложенным запросом
9 Настроить отбор в родительском запросе, став мышью на вложенный отчет в группировках, чтобы данные вложенного запроса ограничивались связью.
Работа с отчетами в пользовательском режиме, формы отчетов. Понятие пользовательских настроек в отчетах на СКД. Определение состава пользовательских настроек для разделов в целом и для отдельных элементов, для всего отчета и для отдельных группировок. Видимость функциональных опций в отчетах на СКД.
И так, продолжаем тему настроек отчетов, построенных на базе СКД. Для тех, кто не читал первые статьи, ссылки ниже:
В данной статье поговорим про пользовательские настройки.
Что же это такое, зачем они нужны и чем отличаются от настроек варианта?
Дело в том, что настройки варианта отчета достаточно сложны для пользователя. Много различных закладок, сложная структура отчета – не каждый рядовой сотрудник сможет во всем этом разобраться:
По этой причине, разработчики решили упростить работу для конечных пользователей отчетов, и создать дополнительную сущность, так называемые пользовательские настройки, которые представляют собой подмножество настроек вариантов отчетов. Разработчик отчета определяет сам, что, и в каком объеме будет доступно пользователям:
Несмотря на то, что на программном уровне, пользовательские настройки – это отдельная ветвь компоновщика настроек, они не могут существовать без привязки к настройкам варианта. На программном уровне связь выполняется по идентификатору пользовательской настройки.
Работа с отчетами в пользовательском режиме
Само собой разумеется, что пользовательские настройки доступны для редактирования в режиме 1С-предприятия. Они сохраняются автоматически при работе пользователей в специальном системном хранилище пользовательских настроек (его можно переопределить на уровне конфигурации в целом). Редактирование пользовательских настроек не приводит к необходимости сохранять новый или измененный вариант отчета, в отличие от редактирования настроек самого варианта в пользовательском режиме.
Настройки вариантов отчетов, также доступны в режиме работы пользователей. То-есть, «продвинутые» сотрудники имеют возможность редактировать, или сохранять новые варианты отчета, а также определять доступные «пользовательские» настройки для остальных пользователей отчета.
Как правило, в пользовательские настройки выносятся наиболее часто используемые настройки варианта. Сами же настройки варианта можно вообще скрыть от пользователей, чтобы не загромождать их лишней информацией.
Сам интерфейс работы с настройками вариантов и пользовательскими настройками зависит от используемой конфигурации и наличия специальных форм для отчетов.
Формы отчетов
Формы, для отчетов на базе СКД система генерирует автоматически. Однако, при необходимости, можно создать собственные формы. Для отчетов доступны следующие виды форм:
- Форма отчета – основная форма для вывода отчета и быстрых пользовательских настроек,
- Форма настроек отчета – форма для редактирования пользовательских настроек,
- Форма вариантов отчета – форма для редактирования вариантов отчета в пользовательском режиме.
Например, в демонстрационной конфигурации (Управляемое приложение), формы для отчетов не указаны. Сгенерированная автоматически форма отчета выглядят так:
После кнопки «Сформировать» расположена кнопка открытия списка доступных вариантов отчетов.
Далее расположена кнопка открытия формы настроек (это именно пользовательские настройки, состав и определение которых будет описано ниже).
Под этими кнопками расположен раздел «быстрых» пользовательских настроек, о которых мы будем говорить позже.
Что касается настройки варианта отчета, или сохранение нового, эти действия доступны через меню «Еще». Также, далее в этом меню есть команды для принудительного сохранения и применения пользовательских настроек. Напомню, пользовательские настройки сохраняются автоматически при закрытии формы отчета.
Пункт меню «Установить стандартные настройки» позволяет вернуться к изначально заданным настройкам варианта отчета.
На заметку . Команду «Установить стандартные настройки» целесообразно использовать в случае, если в процессе работы изменяются настройки варианта отчета. Так как они могут быть «перекрыты» сохраненными ранее пользовательскими настройками.
Есть возможность указать общие формы, которые будут применятся по умолчанию для всех отчетов конфигурации.
В типовых конфигурациях семейства ЕРП, существуют общие предопределенные формы для самого отчета и настроек, заданные на уровне конфигурации в целом:
На ряду с другими дополнительными возможностями, типовая форма настроек позволяет выполнять редактировать как пользовательские настройки так и настройки вариантов отчетов. Переход осуществляется нажатием на кнопку «Расширенный» в настройках отчета:
Также, в выпадающем списке по кнопке «Еще» формы отчета, можно выполнить работу с вариантами отчетов и с сохраненными пользовательскими настройками.
В типовой конфигурации бухгалтерии 3.0, также заданы общие формы на уровне конфигурации в целом. Но во многих отчетах, формы переопределены непосредственно для этих отчетов.
Определение состава пользовательских настроек
И так, поговорим о том, каким образом можно включить те или иные настройки варианта отчета в пользовательские настройки.
Определение состава на уровне структуры
В пользовательские настройки можно включить целиком целые разделы настроек варианта, которые будут влиять на весь отчет в целом. Эти действия выполняются из окна структуры настроек:
Доступны для включения следующие разделы:
- Группировки – возможность настройки используемых группировок,
- Поля – возможность настройки используемых полей отчета,
- Отборы – возможность указания доступных отборов,
- Порядок – возможность настройки сортировки по доступным полям,
- Оформление – возможность указания произвольного оформления полей отчета.
При добавлении группировок в пользовательские настройки, есть одна особенность. Группировки добавляются в виде списка, а не иерархической структуры, как они определены в настройках варианта:
Такая настройка соответствует простой структуре, где в первую группировку по списку входит следующая и так далее:
С одной стороны, это удобно, так как можно быстро выбрать нужные группировки и их последовательность. Причем, можно отключить использование первых группировок, и это не повлияет на вывод остальных. Однако, настроить более сложную структуру группировок таким образом нельзя, и это существенное ограничение.
Теперь, что касается быстрого доступа.
Это те настройки, которые можно редактировать непосредственно на форме самого отчета. Существует три варианта добавления настроек в пользовательские настройки:
- Быстрый доступ – настройки будут доступны непосредственно в форме отчета,
- Обычный – настройки будут доступны в отдельной форме настроек,
- Не доступный – настройки не будут доступны в пользовательских настройках.
В параметре «Режим редактирования» можно указать один из выше указанных вариантов, и это будет отражено на расположении настроек.
Разделы настроек можно включить в пользовательские не только для всего отчета в целом, как было описано выше, но и для отдельных уровней структуры:
Такие настройки будут влиять только на тот уровень структуры отчета, для которого они используются. Состав возможных настроек для группировки включает дополнительные пункты:
- Группировка / Таблица – в пользовательских настройках будет выведен флаг использования данной группировки или таблицы. Представление — это текст данного флага,
- Вложенные группировки – в пользовательских настройках будет выведено поле для добавления вложенных группировок к текущей. Можно добавить произвольное количество вложенных группировок из доступных полей. Добавить несколько полей в одной группировке нельзя,
- Состояние – настройка, которая может иметь состояния: включена, отключена, удалена пользователем. Данная настройка влияет на использование группировки в пользовательском режиме по умолчанию. Допускается ситуация, когда не используется группировка более высокого уровня, а вложенные используются.
Определение состава на уровне отдельных элементов
Помимо включения в пользовательские настройки разделов целиком, есть возможность включить отдельные элементы следующих разделов:
- Отборы,
- Условное оформление,
- Другие настройки.
Так же как и для разделов целиком, можно включать в пользовательские настройки отдельные элементы для всего отчета в целом и для конкретных группировок. Для выполнения этих действий используется кнопка или одноименный пункт контекстного меню «Свойство элемента пользовательских настроек»:
В открывшимся окна можно указать режим редактирования и представление настройки:
Если задано представление, наименование настройки будет изменено, а также будет доступно для выбора только значение данной настройки.
Например: если это отбор, не будет возможности выбрать вид сравнения. Если это условное оформление, не будет возможности выбрать условие оформления и поля, к которым оно будет применено.
Для элементов отборов и условного оформления, можно задать дополнительное представление непосредственно в табличной части для отборов или оформления. Для отображения дополнительного представления, необходимо нажать на кнопку «Подробно»:
Обратите внимание: это представление не является представлением, которое описано выше, и у него другое назначение!
Если указано представление в табличной части, отборы или оформления будут выводиться в пользовательских настройках в виде флага (использовать / не использовать). Все характеристики, в этом случае полностью должен быть заданы в настройках варианта.
Как было описано в предыдущей статье про настройки вариантов, на закладке «Отборы» можно создать группы отборов, для объединения различных отборов по логическому И, ИЛИ и НЕ. Такие группы целиком, также можно включить в пользовательские настройки. Можно задать для группы оба представления, описанные выше.
Просмотреть все пользовательские настройки можно по кнопке «Предварительный просмотр пользовательских настроек» в окне структуры настроек:
Произвольное добавление настроек на форму отчета
Как указано выше, для отчетов на СКД можно не создавать специальных форм самого отчета и настроек. Формы генерируются автоматически. Однако, если в этом есть необходимость, можно создать собственные формы и выполнить произвольное размещение необходимых дополнительных элементов.
При создании собственной формы отчета необходимо иметь в виду, что форма обязательно должна содержать группу для отображение быстрых пользовательских настроек. Такая группа должны быть указана в свойстве формы «ГруппаПользовательскихНастроек»:
По мимо быстрых пользовательских настроек, в форме отчета на СКД можно вывести непосредственно таблицу полей отчета, таблицу отборов или таблицу порядка, связав ее с соответствующим разделом из настроек:
Если таким образом добавляются отборы, у таблицы будет присутствовать свойство «РежимОтображения». Оно влияет на то, какие отборы будут попадать в данную таблицу. Если «Режим отображения = Быстрый доступ», в таблицу попадут только те отборы, для которых в свойствах пользовательских настроек указано значение «Быстрый доступ».
Функциональные опции и настройки отчетов
Не забывайте о том, что в отображаемых данных отчетов, построенных на СКД учитываются значения функциональных опций.
Также ФО учитываются в настройках варианта отчета в режиме 1С-предприятие и в пользовательских настройках. Недоступные поля нельзя выбрать в настройках. А если ФО отключает объект целиком, в настройках варианта и в пользовательских настройках в пользовательском режиме нельзя будет выбрать не одно поле отключенного объекта.
Отдельно стоит сказать про параметризуемые функциональное опции. Это те ФО, место хранения которых «Справочник». Более подробно что такое параметризуемые ФО, и как они используются можно почитать в этой статье.
И так, для того, чтобы СКД смогла определить доступность полей, которые связаны с параметризуемыми ФО необходимо передать в схему параметр ФО. Для этого нужно добавить новый параметр на закладку «Параметры» схему компоновки и установить для него значение реквизита «Параметр функциональной опции»:
После установки такого параметра (по умолчанию в схеме или в пользовательском режиме), СКД будет определять видимость полей, привязанных к параметризуемым ФО.
На этом, я заканчиваю большую тему настроек компоновки: настройки вариантов, пользовательские настройки. Мы еще к ней вернемся, когда будем рассматривать программную работу с отчетом и с настройками.
В следующих статьях будут рассмотрены:
- Расширения языка запросов для СКД,
- Использование нескольких наборов данных и связей между ними, , ,
- Разработка произвольных макетов,
- Программная работа с отчетом на СКД.
Для ознакомления с предыдущими статьями можно перейти по ссылкам:
Если статья Вам понравилась, ставьте плюс. Успехов в работе и хорошего настроения!
Приветствую, коллеги! В этой статье поговорим о вложенных схемах в СКД. Вложенные схемы удобно использовать, когда из одной выборки нужно передать значения в другую выборку.
Другими словами, у нас есть одна выборка, внутри которой также происходит формирование выборки, передавая в нее из первой нужные значения параметров.
Отработаем следующий кейс: в демонстрационной базе ERP необходимо получить отчёт, который собирает сводную выручку по менеджерам, а затем выводится информация о начислении зарплаты менеджеру за этот период.
Рис. 1 Сводная выручка менеджеров
2. Формирование выборки по регистру
Для реализации поставленной задачи нам нужно получить выборку по оборотам регистра накопления «ВыручкаИСебестоимостьПродаж», а внутри нее произвести формирование выборки по регистру «ЗарплатаКВыплате» с отбором по периоду и сотруднику из «верхней» выборки.
Сначала сформируем простой отчет по выручке, сгруппированный по ответственным менеджерам. В документах продажи для поля «Менеджер» используется пользователь базы, чтобы менеджера можно было связать с зарплатным регистром. Дополнительно выведем физическое лицо, соответствующее данному пользователю.
Рис. 2 Простой отчет по выручке
В настройках СКД делаем группировку именно по физическому лицу, добавим заголовки в поля группировки, включим параметры в пользовательские настройки; макет оформления – «Античный».
Рис. 3 Настройки СКД
Сохраним, сформируем отчет по выручке, проверим результат.
Отчет выглядит так.
Рис. 4 Отчет по выручке после нужных настроек СКД
Половина пути пройдена, произошло формирование выборки по выручке за 2016 год в разрезе ответственных менеджеров. Данный период я намеренно выбрал, чтобы проще было связать выручку с существующими начислениями зарплаты. В демонстрационной базе начисления проведены только в 2016 году. Теперь осталось получить эти начисления во вложенной схеме и связать с выборкой по выручке.
Переходим на закладку «Вложенные схемы», создаем новую, проваливаемся внутрь поля «Схема».
Рис. 5 Закладка Вложенные схемы
Видим стандартный конструктор схемы компоновки данных, создаем новый простой запрос.
Рис. 6 Конструктор схемы компоновки данных
Настройки в системе компоновки данных можно сделать мастером, установим заголовок полей, если требуется, для красоты добавим макет «Античный», нажимаем «Ок».
Рис. 7 Настройки системы компоновки данных с помощью мастера
Теперь мы получили выборку по Зарплате, но выборка сейчас по всему регистру, за весь период ведения учета и по всем сотрудникам, осталось наложить отборы на вложенный запрос. Особенность в том, что отборы на вложенный запрос в 1С накладываются в верхнем запросе в поле «Настройки», проваливаемся туда.
Рис. 8 Отборы на вложенный запрос 1С
Затираем произвольную дату, прописываем тип «Поле компоновки», выбираем поля владельца (это как раз верхняя выборка), в параметрах находим «Начало периода». Действуйте внимательно, не перепутайте с параметрами самого вложенного запроса в 1С, они там рядышком и можно легко промахнуться.
Рис. 9 Поле компоновки в системе компоновки данных в 1С
Аналогично задаем «Конец периода» в системе компоновки данных в 1С, в итоге должно получиться вот так.
Рис. 10 Заданный Конец периода в системе компоновки данных
Добавляем отбор. Напоминаю, нам нужен отбор по сотруднику из результата верхнего запроса.
Добавляем отбор, в левой части выбираем физическое лицо, в правой части затираем тип, выбираем тип «Поле компоновки» для данных, там находим поля верхней схемы (владельца) – «МенеждерФизическоеЛицо».
Рис. 11 Поле компоновки данных
Готово, настройка должна выглядеть теперь вот так, нажимаем «ОК».
Рис. 12 Результат настройки СКД
3. Вложенный отчет
Переходим в настройку отчета, кликаем на группировку по менеджеру и добавляем вложенный отчет.
Рис. 13 Добавление вложенного отчета
Рис. 14 Результат добавления вложенного отчета
Если Вы делали какие-либо настройки во вложенной схеме, они сразу перенесутся сюда. Мы только сформировали детальные записи и добавили макет, поэтому просто сохраним отчет и посмотрим результат:
Рис. 15 Перенесенные настройки вложенных схем
Как видите, требуемую информацию отчет выводит, проверьте данные документов, параметры и отборы. Осталось привести отчет в более читаемый вид. Например, выровнять ширину полей, уменьшить шрифт, это можно сделать на закладке «Условное оформление». Также можно отключить отображение параметров и отборов, они засоряют отчет и пользователю не нужны, сделать это можно на закладке «Другие настройки».
Требуемая печатная форма сформирована.
Рис. 16 Печатная форма вложенного отчета
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Читайте также: