Настройка полей отчетов в системе компоновки данных 1С

Для примера буду использовать учебную версию 1С:Предприятия и базу "Знакомство с платформой".

Откроем базу "Знакомство с платформой" в конфигураторе, перейдем в ветку "Отчеты - Материалы" и создадим новый макет "Пример" с типом "Схема компоновки данных".

Рисунок "Создание схемы компоновки данных 1С"

Создание схемы компоновки данных 1С

После нажатия кнопки "Готово" откроется окно редактирования отчета на основе созданной нами СКД "Пример":

Создание СКД 1С

Замечание: если отчет содержит несколько макетов, то основная схема компоновки данных для отчета выбирается в окне редактирования соответствующего отчета как объекта конфигурации:

окне редактирования соответствующего отчета

[свернуть]

Закладка "Набор данных"

Закладка "Набор данных" предназначена для добавления набора данных, из которого собственно и будут получены данные. 

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

  1. набор данных - запрос;
  2. набор данных - объект;
  3. набор данных - объединение.

На закладке "Наборы данных" добавим новый набор данных типа "Запрос".

Набор данных типа "Запрос"

Подробнее о наборе данных

Наборы данных первоначально определяются при построении отчета.

Если наборов данных несколько, то их можно связать по ключу, аналогично механизму соединения таблиц запросов:

При этом флаг "Обязательный" определяет, задействованы ли поля, используемые в источнике (ЛОЖЬ) или в приемнике (ИСТИНА) и на основании этого добавляет связь в макет.

В таблице «Поля» заполняются свойства:

  1. «Поле» - имя поля, заполняется:
    • в случае набор данных запрос - автоматически;
    • в случае набор данных объект - вручную.
  2. «Путь» - указывается путь к данным из набора. Название, указанное именно в этом поле, будет фигурировать во всех дальнейших настройках СКД.
  3. «Заголовок» - строка с заголовком поля, который выводится в отчет или в настройках.
  4. «Ограничение поля» - ряд флагов-настроек, служит для указания того, может ли данное поле быть использовано в настройках (флаг установлен - нельзя). Возможно указать следующие ограничения:
    • «Поле» - поле нельзя использовать в выборках СКД;
    • «Условие» - поле нельзя использовать как условие;
    • «Группа» - запрет на использование поля в группировках;
    • «Упорядочивание» - запрет использовать поле в сортировках.
  5. «Ограничение реквизитов» - ряд флагов-настроек ниже, указывает на ограничения для реквизитов поля, смысл установки данных ограничений такой же что и для полей.
  6. «Роль» - обозначает дополнительные свойства поля и его взаимоотношения с другими полями. Для редактирования ролей открывается специальный диалог:
    Диалог редактирования ролей в СКД

    Диалог редактирования ролей в СКД

    [свернуть]
    • «Без роли» - никаких особых «нагрузок» на поле не накладывается, режим по умолчанию для большинства полей;
    • «Период» - содержит номер периода, если поле имеет тип периода. Самый младший период должен иметь тип 1. Данный номер будет указывать, как в СКД рассчитывается итоги по полям остатка (например, в запросе рассчитываем итоги по различным периодам: ПериодСекунда = 1, ПериодДень=2, ПериодНеделя=3 и т.д.);
    • «Дополнительный» – указывает на то, что поле-период не является обязательным;
    • «Счет» - указывает на то, что поле является бухгалтерским счетом, используется для расчета бухгалтерских итогов;
    • «Вид» - строка-выражение, с помощью которого рассчитывается вид счета. Результатом выражения должно быть значение перечисления ВидСчета (Активный, Пассивный, Активно/Пассивный), либо число. Значение числа 0 соответствует активному счету, 1 – пассивному, 2 – активно-пассивному. Выражение записывается на языке выражений системы компоновки данных. Данная информация используется при расчете по полям бухгалтерских остатков; 
    • «Остатки» – признак того, что поле является полем остатка;
    • «Имя» – строка, содержащая имя группы полей остатка (например, "Сумма", "Количество");
    • «Тип» – тип остатка ("НачальныйОстаток", "КонечныйОстаток", "Нет" - поле не является остатком);
    • «Бух. тип» – тип бухгалтерского остатка ("Дебет", "Кредит", "Нет" - поле не является бухгалтерским остатком); 
    • «Поле счета» – имя поля-счета, для которого рассчитываются остатки;
    • флаг "Игнорировать значения NULL" – если установлен, то в результат не нужно включать групповые записи по данному полю в случае, если поле содержит значение NULL;
    • флаг «Обязательное» - при выполнении запроса поле с указанным флажком будут присутствовать всегда, даже если не были выбраны в выборке.
  7. «Выражение представления» - содержит выражение, которое используется при выводе значений поля в отчет (выражение, результат которого будет выводиться в результат компоновки для данного поля); в случае, если выражение представления не заполнено, выдаваться будет выдаваться значение самого выражения поля. Например, нужно преобразовать дату в особый формат (для этого указываем такое выражение «Формат(ПериодПолугодие,"ДФ = '""Полугодие с"" дд.ММ.гггг""'")») или ссылку на документ преобразовать к произвольному виду (««Дата: »+Ссылка.Дата+«Номер: »+Ссылка.Номер»);
  8. «Выражение упорядочивания» - выражения, используемые для упорядочивания поля. Описывается аналогично выражениям упорядочивания для поля набора данных. При редактировании открывается диалог:
    Выражение упорядочивания СКД

    Выражения упорядочивания СКД

    [свернуть]
    • «Выражение» - как упорядочивается это поле;
    • «Тип упорядочивания» - «по возрастанию» или «по убыванию»;
    • флаг «Необходимость автоупорядочивания» – автоматическое определение полей, по которым необходимо упорядочивать результат компоновки данных
  9. «Проверка иерархии» - используется, в случае если нужно формировать нестандартные отборы:
    Рисунок

    Проверка иерархии наборов данных

    [свернуть]
    • «Набор данных» – набор данных для проверки иерархии; 
    • «Параметр» – параметр, в который будет подставляться значение, для которого нужно получить дочерние элементы; 
  10. «Тип значения» - уточнение типа значения поля набора данных, полезно использовать для уточнения полей составного типа.
  11. «Оформление» - параметры оформления поля набора данных. При редактировании открывается диалог:

    Рисунок

    [свернуть]

     

Особенности использования набора данных:

  1. Платформа 1С допускает использование нескольких наборов данных.
  2. При определении в схеме компоновки данных связи между двумя наборами данных используется левое соединение первого набора ко второму, в ряде случаев устанавливается внутреннее соединение.
  3. Если необходимо разрешить установку отбора на вхождение в группу собственной иерархии, отличной от стандартной, то необходимо настраивать проверку иерархии на закладке "Наборы данных" в окне конструктора схемы компоновки.
  4. В системе компоновки могут быть реализованы следующие виды соединений двух наборов данных:
    • только "Все ко всем";
    • "Левое";
    • "Внутреннее".
  5. Если при настройке связи между двумя наборами данных установлен флаг "Обязательная связь" и в списке выбранных полей указаны поля только левого набора, то такие действия пользователя приведут к тому, что связь не будет реализована.
  6. Внешние данные передаются в набор-объект в системе компоновки данных средствами встроенного языка через процессор компоновки данных.

[свернуть]
Особенности использования "набор данных - запрос"

Добавление "набор данных - запрос"

Набор данных типа "Запрос"

[свернуть]

В случае, если в качестве набора данных для СКД был указан "набор данных - запрос", то собственно запрос нужно специфицировать.

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

Особенности набора данных - запроса:

  1. Если в схеме компоновки данных использовать пакетные запросы, то результирующим запросом будет пакетный запрос.
  2. При использовании пакетных запросов содержимым набора данных будет считаться результат последнего набора.
  3. Синтаксические инструкции языка запросов для системы компоновки данных выделяются фигурными скобками {}.

[свернуть]

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

  • либо с клавиатуры прямо в поле "Запрос", 
  • либо воспользоваться конструктором запроса, который позволяет создавать и редактировать запросы визуальными средствами.

Рассмотрим вариант создания текста запроса с помощью конструктора.  Для вызова конструктора запроса нажмем кнопку "Конструктор запроса...":

Как открыть конструктор запросов 1С

Конструктор запроса

Закладки конструктора запроса 1С:

Вкладка "Таблицы и поля"

На этой вкладке указывается источник данных и поля, которые необходимо выводить в отчет (по сути описываются конструкции ВЫБРАТЬ … ИЗ).

В качестве источников данных могут служить:

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

В контекстном меню виртуальных таблиц можно задать параметры этих таблиц.

На закладке "Таблицы и поля" конструктора запросов задают:

  1. источники данных запросов, в качестве которых могут выступать реальные и виртуальные таблицы;
  2. набор полей из таблиц - источников данных запроса;
  3. поля в виде произвольного выражения.

[свернуть]
Вкладка "Связи"

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

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

Соединение таблиц может быть:

  • безусловным;
  • условным (или по ключу), то есть по заданному условию связи:
    1. полным - все записи обеих таблиц; для тех, которым не нашлось соответствия, запрос возвращает NULL;
    2. левым/правым - все записи из соответственно левой/правой таблицы (из противоположной только те, которым есть соответствие), для не найденных запрос возвращает NULL. Примечание: консоль запросов всегда преобразует правое соединение в левое, меняя таблицы местами (в случае, если запрос написать вручную, и потом открыть конструктором);
    3. внутренним - только совпадающие записи обеих таблиц.

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

На практике чаще встречаются задачи соединения по определенному полю двух таблиц.

В конструкторе запросов тип условного соединения регулируется флажком "Все" - где он стоит, из той таблицы и выбираются все записи.

Флажок "Все", устанавливаемый у таблицы, выбранной на закладке "Связи" конструктора запросов означает что в результат запроса надо включить все записи этой таблицы.

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

[свернуть]
Вкладка "Группировка"

Вкладка "Группировка"

На данной вкладке система позволяет группировать и суммировать нужные поля результата таблицы. Описывается использование конструкций СГРУППИРОВАТЬ ПО, СУММА, МИНИМУМ, СРЕДНЕЕ, МАКСИМУМ, КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗЛИЧНЫХ.

При описании группировки в тексте запроса все поля должны делиться:

  • на те, по которым производится группировка;
  • на агрегатные функции (рассчитываемые поля);
  • на поля вложенных таблиц.

Вложенные таблицы не попадают ни в группируемые, ни в агрегируемые поля.

Количество записей в результате запроса можно узнать с помощью агрегатной функции КОЛИЧЕСТВО(*).

[свернуть]
Вкладка "Условия"

Вкладка "Условия"

Отвечает за все условия, накладываемые на получаемые данные, т.е. за всё, что идёт в тексте запроса после конструкции ГДЕ.

[свернуть]
Вкладка "Дополнительно"

Вкладка "Дополнительно"

Вкладка "Дополнительно" включает важные параметры.

Группировка "Выборка записей":

  • Первые  — параметр, возвращающий в запрос только N записей (оператор ПЕРВЫЕ ); позволяет вывести в отчет первые N записей, которые будут отобраны с учетом правил упорядочивания, настроенных в конструкторе запросов;
  • Без повторяющихся — обеспечивает уникальность полученных записей (оператор РАЗЛИЧНЫЕ) и позволяет исключить из результирующей таблицы запроса одинаковые строки (данная операция распространяется только на детальные записи);
  • Разрешенные — позволяет выбирать только те записи, которые позволяет выбрать система с учетом настройки RLS (конструкция РАЗРЕШЕННЫЕ).

Группировка "Тип запроса":

  •  определяет тип запроса:
    1. Выборка данных;
    2. Создание временной таблицы;
    3. Уничтожение временной таблицы.

Флаг "Блокировать получаемые данные для последующего изменения":

  1. позволяет включить возможность установки блокировки данных, которая обеспечивает сохранность данных от момента их чтения до изменения (актуально только для "Автоматического режима блокировок", конструкция ДЛЯ ИЗМЕНЕНИЯ); позволяет заблокировать данные указанных таблиц-источников на чтение (в рамках транзакции).
  2. в режиме автоматических транзакционных блокировок) происходят блокировки:
    • в варианте файл-сервер - на уровне таблиц базы данных;
    • в варианте клиент-сервер - на уровне записей таблиц базы данных.
  3. Если список "Таблицы для изменения" - пуст, то будут блокироваться данные всех таблиц, задействованных в запросе, иначе - только таблиц, указанных в списке.

[свернуть]
Вкладка "Объединения/Псевдонимы"

Вкладка "Объединения/Псевдонимы"

На этой вкладке устанавливается возможность объединения разных таблиц и псевдонимы (конструкция КАК).

В левой части указываются таблицы, если установить флаги напротив таблицы, будут использоваться конструкции ОБЪЕДИНИТЬ, иначе — ОБЪЕДИНИТЬ ВСЕ (отличия двух способов тут).

В правой части указываются соответствия полей в разных таблицах, если соответствие не указано, запрос будет возвращать NULL.

На закладке "Объединения/Псевдонимы" конструктора запросов можно:

  1. Задать список запросов (в результирующую выборку попадут записи всех указанных запросов).
  2. Задать имена полей результирующей таблицы.

При создании запросов, участвующих в объединении, с помощью конструктора запросов, он сам добавит в каждый запрос необходимое количество недостающих полей со значением NULL. Настроить соответствие добавленных конструктором полей и полей результата запроса можно на закладке "Объединения/Псевдонимы".

Настройки, сделанные в разделе "Объединения/Псевдонимы" конструктора запросов, отразятся на информации, отображаемой в других разделах конструктора, следующим образом:

  1. Если заданы псевдонимы полей результирующей таблицы, то новые названия появляются на закладке "Порядок" в списке полей.
  2. При объединении запросов на ряде закладок (в том числе "Таблицы и поля") появляется возможность переключения между объединяемыми запросами.
При объединении двух запросов на закладке "Объединения/Псевдонимы" конструктора запросов условие связи между запросами задать нельзя: в случае объединения связь всегда безусловна.

[свернуть]
Вкладка "Порядок"

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

  1. на закладке "Порядок";
  2. на закладке "Объединения/Псевдонимы".

Таблица, полученная в результате запроса, может быть отсортирована по алфавиту по нужному полю:

  1. по полю, присутствующему в запросе;
  2. по любому полю таблицы-источника (кроме случаев объединенных запросов).

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

Вкладка "Порядок"

Указывается порядок сортировки значений (УПОРЯДОЧИТЬ ПО) — по убыванию (УБЫВ) или возрастанию (ВОЗР).

Флаг "Автоупорядочивание" (в запросе — АВТОУПОРЯДОЧИВАНИЕ):

  • если установлен, то система будет сортировать данные (по умолчанию система 1С 8.3 выводит данные в «хаотичном» порядке).
Если на закладке "Порядок" конструктора запросов не заданы настройки, то установка флага "Автозаполнение" обусловит следующее:
  1. записи в результирующей таблице запроса будут упорядочены по полям сортировки по умолчанию для таблиц-источников данных;
  2. если заданы настройки на станицах "Группировка" или "Итоги", то порядок записей в результирующей таблице запроса будет определяться этими настройками.

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

[свернуть]
Вкладка "Итоги"

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

Вкладка "Итоги

В ней указывается:

  1. Поле, по которому группируем, и тип его итогов:
    • Элементы - итоги только по конечным элементам;
    • Элементы и иерархия - итоги по папкам и по конечным элементам;
    • Только иерахия - итоги только по папкам.
  2. Флаг "Общие итоги" - суммирование всех полученных запросом строк;
  3. Итоговое поле - по которому собственно и считаем итоги.

Таким образом, при использовании секции "ИТОГИ ... ПО" количество записей в результате запроса увеличится (по сравнению с их количеством без секции "ИТОГИ ... ПО").

Результатом запроса с итогами будет дерево значений:

Дерево значений

[свернуть]
Вкладка "Пакет запросов"

Вкладка "Пакет запросов"

На этой вкладке можно создавать новые пакеты запросов, а также использовать её для навигации.

В тексте запроса пакеты разделяются символом «;» (точка с запятой).

[свернуть]

В регистрах накопления на вкладке "Таблицы и поля" выберем виртуальную таблицу "ОстаткиМатериалов"и добавим её в окна "Таблицы" и "Поля":

  1. Двойной щелчок на таблице приведет к тому, что таблица будет помещена в табличное поле "Таблицы". В этом поле отображаются все таблицы, из которых будут получаться данные запроса.
  2.  Раскрыв таблицу "ОстаткиМатериалов", мы увидим, какие поля мы можем получать из нее. В данном случае нас интересуют все поля, поэтому просто сделаем двойной щелчок по таблице и конструктор запроса поместит все поля таблицы в выбранные поля.

Добавление полей в запрос

На этом создание запроса завершено - мы создали запрос, который будет получать данные из таблицы остатков.

Нажмем кнопку "ОК" для завершения работы конструктора запроса:

Система компоновки данных 1С

Флаг "Автозаполнение"

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

 Флаг Автозаполнение

Флаг снят - поля не доступны.

[свернуть]

Текст запроса, который был создан с помощью конструктора запросов, система 1С:Предприятие 8 поместит в поле "Запрос". Это поле представляет собой текстовый редактор, в котором можно вручную отредактировать существующий запрос. Кроме того, можно снова вызвать конструктор запроса и отредактировать запрос при помощи него.

Закладка "Ресурсы"

Ресурсы - это поля набора данных, по которым будет происходить агрегация значений.


Особенности использования закладки "Ресурсы":

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

    в качестве ресурса не числовое полеВыражение "Количество(...)" формируется автоматически при добавлении нечислового ресурса. Помимо этого в раскрывающемся списке "Выражение" можно выбрать "Максимум(...)", "Минимум(...)".

    [свернуть]
  3. Если для ресурса (при настройке схемы компоновки данных) было указано, что его можно рассчитывать только в разрезе некоторой группировки, то данный ресурс будет выводиться в результат только для этой группировки и группировок в нее вложенных.

Для указания ресурсов перейдем на закладку "Ресурсы". На этой закладке в левой части выведен список полей, которые допускается использовать в качестве ресурсов. В правой части расположено табличное поле, содержащее выражения для расчета ресурсов.

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

Закладка "Ресурсы"

Для добавления всех доступных числовых полей в список ресурсов нужно нажать на кнопку ">>".

Закладка "Макеты"

Макеты, созданные в окне конструктора схемы компоновки в разделе "Макеты", позволяют:

  1. задать оформление всего отчета;
  2. задать оформление отдельного элемента настроек;
  3. определить данные, которые необходимо выводить в отчет.
Рисунок

Закладка Макеты

Форматирование (оформление) ячеек доступно через палитру свойств:

Форматирование ячейки макета 1С

Задать оформление всего отчета или отдельного элемента настроек можно на закладке "Настройки":

оформление всего отчета или отдельного элемента настроек

[свернуть]

Если, например, в схеме компоновки данных создан макет поля "Склад", то данный макет будет использован при формировании печатной формы в следующих случаях:

  1. поле "Склад" использовано в списке выбранных полей настроек системы компоновки данных;
  2. Поле "Склад" использовано элементе структуры настроек системы компоновки данных "Группировка";
  3. Поле "Склад" использовано элементе структуры настроек системы компоновки данных "Таблица".
Рисунки

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

[свернуть]

Закладка "Настройки"

Закладка "Настройки" предназначена для задания настроек отчета по умолчанию, т.е. тех настроек, которые будет использовать пользователь при старте отчета в режиме 1С:Предприятие.

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

Конструктор настроек компоновки

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

Замечание: Пользовательское поле может быть создано вида и поле-выбор, и поле-выражение.

Рисунок

Поле-выбор и поле-выражение

[свернуть]

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

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

Закладка Настройки

Нажмем кнопку "Далее >".

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

Конструктор настроек компоновки данных

Нажмем кнопку "Далее >".

На следующем шаге нам будет предложено выбрать поля, по которым нужно упорядочивать данные. Мы не будем выбирать поля упорядочивания, а доверим системе 1С:Предприятие 8 самой решать как будет упорядочиваться отчет. 

Нажмем кнопку "ОК" для завершения работы конструктора.

Созданные конструктором настройки система 1С:Предприятие 8 помещает в настройки схемы компоновки данных. Если в дальнейшем нам понадобится их изменить, мы сможем доработать их произвольным образом при помощи табличных полей или же снова воспользоваться конструктором.

На этом работа со схемой компоновки закончена, мы сделали все, что хотели: создали запрос, указали формулы для расчета ресурсов, создали настройки по умолчанию. Закроем конструктор.

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

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

 Как видно, не очень-то понятно...

[свернуть]
Результат после внесения небольших изменений

Совсем другое дело.

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

[свернуть]
Результат с группировкой по полю "Материал"

Результат с группировкой по полю

[свернуть]

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.