Детальные записи 1с что это
Перейти к содержимому

Детальные записи 1с что это

  • автор:

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

Структура отчета состоит из элементов структуры. К ним относятся таблицы, диаграммы, вложенные отчеты и группировки. В данной статье описываются особенности работы с группировками, у которых отсутствуют поля группировки — так называемыми «детальными записями».

Группировка без полей группировки

Если у группировки настроек отчета отсутствуют поля группировки, то система отображает их в табличном поле с текстом «».

Для создания такой группировки, достаточно при добавлении группировки, в диалоге выбора поля группировки нажать кнопку «ОК», не выбирая поле.

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

Выбранные поля содержат поля — не ресурсы

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

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

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

Номенклатура Количество оборот
Монитор 15′ LG Studioworks 575N 14,00
Монитор 17′ Philips 107S20 6,00
Монитор 19′ Hitachi CM715ET 26,00
Монитор LCD 22′ M8537ZM/A 8,00
Итого 54,00

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

Номенклатура Количество оборот
Монитор 15′ LG Studioworks 575N 12,00
Монитор 15′ LG Studioworks 575N 2,00
Монитор 17′ Philips 107S20 6,00
Монитор 19′ Hitachi CM715ET 17,00
Монитор 19′ Hitachi CM715ET 9,00
Монитор LCD 22′ M8537ZM/A 6,00
Монитор LCD 22′ M8537ZM/A 2,00
Итого 54,00

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

Использование полей из нескольких наборов данных

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

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

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

Выбранные поля содержат только поля — ресурсы

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

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

Количество оборот
54,00

Отсутствие выбранных полей

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

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

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

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

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

Рассмотрим пример. В примере будем выдавать в отчет иерархический справочник номенклатуры.

Запрос набора данных для получения номенклатуры будет выглядеть так:

ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Родитель, Номенклатура.Код, Номенклатура.Наименование, Номенклатура.ЭтоГруппаИЗ Справочник.Номенклатура КАК НоменклатураГДЕ Номенклатура.Родитель В(&Родители)

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

Набор данных с указанным запросом назовем Номенклатура.

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

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

В качестве выражения — приемника буем использовать значение поля Родитель.

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

Т.к. запрос получает данные с фильтрацией по родителю, в связи укажем параметр связи «Родитель». Таким образом, при получении дочерних записей система будет передавать значения поля Ссылка дочернему запросу через этот параметр. Т.к. параметр Родитель используется в конструкции языка запроса В, то в качестве значения параметра система может передавать не одно, а сразу несколько значений. Чтобы система это делала, укажем в связи признак «Список параметров».

Справочник Номенклатура имеет иерархию групп и элементов. При этом дочерние записи могут существовать только у групп. Поэтому, для того, чтобы система не осуществляла поиск дочерних записей не у групповых записей, укажем в связи условие связи: «ЭтоГруппа». Таким образом, система будет выполнять запросы для получения дочерних записей только для тех записей, у которых значение поля ЭтоГруппа имеет значение Истина, т.е. только для групп.

Последнее, что нам нужно сделать, это указать, с какого значения система должна начинать получать иерархические записи. Делается это при помощи свойства связи «Начальное значение связи». Нам нужно, чтобы на первом уровне отчета выдавались записи, у которых родитель отсутствует. Поэтому в качестве начального значения связи укажем выражение «Значение(Справочник.Номенклатура.ПустаяСсылка)» (без кавычек). Таким образом, при первом получении данных из набора данных система будет получать записи, у которых значение поля Родитель равно пустой ссылке, т.е. корневые записи.

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

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

Для этого добавим в настройки детальные записи (группировку без полей группировки) и выберем поля, которые мы хотели бы видеть в результате:

Результат такого отчета будет выглядеть следующим образом:

Код Наименование
0000001 Мониторы
0000021 Монитор 15′ LG Studioworks 575N
0000022 Монитор 17′ Philips 107S20
0000023 Монитор 19′ Hitachi CM715ET
0000024 Монитор LCD 22′ M8537ZM/A
0000002 Системные блоки и комплектующие
0000036 Сист. блок Hewlett-Packard Brio BA410
0000037 Сист. блок Hewlett-Packard Vectra VL420
0000038 Сист. блок IBM NetVista A22p
0000039 Сист. блок IBM NetVista M41
0000003 Принтеры
0000030 Лазерный принтер Canon LBP-810
0000031 Лазерный принтер 5250197-203 Minolta-QMS
0000032 Лазерный принтер HP LaserJet 2200
0000004 Мыши
0000025 Мышь 2-кноп A4Tech PS/2
0000026 Мышь OK-720 Mouse A4Tech PS/2
0000027 Мышь Ice Mouse MUS-2
0000028 Мышь LOGITECH M-S48 PS/2
0000029 Мышь GENIUS «EASY» (3 кнопки),
0000005 Клавиатуры
0000018 Клавиатура Apple Pro Keyboards
0000020 Клавиатура LK-601 KB-2000 PS/2
0000006 Программное обеспечение
0000045 Windows
0000009 Windows XP Home Edition Russian CD
0000010 Windows XP Home Edition Russian UPG CD
0000011 Windows XP Professional Russian CD
0000012 1С:Бухгалтерия 7.7 Базовая версия
0000013 1С:Бухгалтерия 7.7 Стандартная версия
0000014 1С:Бухгалтерия ПРОФ версия 7.7
0000015 1С:Аспект 7.7
0000016 1С:Торговля и Склад 7.7 Проф
0000007 Услуги
0000041 Доставка
0000042 Инсталляция ПО
0000043 Консультации по настройке ОС Windiws
0000044 Консультации по настройке 1С
0000033 Ноутбуки
0000034 Ноутбук Rover Computers Navigator KT7
0000035 Ноутбук Rover Computers Explorer
0000046 Телефоны
0000047 Телефон Vega 700
0000048 Телефон Vega 300
0000051 Телефон Siemens SL45
0000052 Телефон LG W7200
0000049 Копировальные аппараты
0000050 Копировальный аппарат Omega

Детальные записи

Author24 — интернет-сервис помощи студентам

Всем привет.
Задался вопросом а что такое «Детальные записи» в запросе и в скд, есть ли определение этому.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

Отчет СКД Убрать детальные записи
В отчете написанном на скд необходимо убрать значения детальных записей в колонках X Y при этом.

СМА Miele WMG120 WPS, Утопленик , нужны детальные фото модуля
Mod : WMG120 WPS M-Nr : 09580630 Nr: 10/000117575130 Type : HW18 Стиралка утопленик . дата.

900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680

ЦитатаСообщение от turboq Посмотреть сообщение

Задался вопросом а что такое «Детальные записи» в запросе и в скд, есть ли определение этому.
Это те записи, которые возвращает сам запрос.
Т.е. например есть запрос:

1 2 3 4 5
ВЫБРАТЬ Склад, Номенклатрура, Остаток ИЗ Регистр.ОстаткиТоваров.Остатки()

Детальные записи вернут вам строки:
Склад1, Номенклатура1, 6
Склад1, Номенклатура2, 3

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

160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
А в скд что под этим понимается?
900 / 877 / 8
Регистрация: 15.03.2012
Сообщений: 2,680

ЦитатаСообщение от turboq Посмотреть сообщение

А в скд что под этим понимается?

ЦитатаСообщение от Fenomen Посмотреть сообщение

Это те записи, которые возвращает сам запрос.
Регистрация: 16.08.2013
Сообщений: 53
То есть Детальные записи это весь результат запроса?
Регистрация: 29.08.2013
Сообщений: 57

т.е. «Детальные записи» — значит не итоги. Одно из значений типов записи запроса, на принадлежность к нему можно проверять запись при при программном обходе (см. метод ТипЗаписи() для выборки).

А определение? — Определение в КС

ДетальнаяЗапись (DetailRecord)
Описание:

Детальная (конечная) запись результата запроса.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Заменить описание записи — с анонса (начальный текст записи) на Дескрипшн записи
На пробном сайте http://djeysonborn2016.ru/ на главной странице отображаются записи (те что сразу.

ListView: добавление записи, выбор записи, удаление записи
на форме есть три текст бокса: textbox1(имя), textbox2(фамилия), textbox3(отчество).

Отображение элемента записи БД в TextBox при выборе id его записи в ComboBox
. Я реализовал редактирование записи в БД, но мне нужно что бы при выборе в ComboBox id записи.

Создание записи в непериодическом регистре сведений при записи элемента справочника
Всем привет! Платформа 1С:Предприятие 8.3, конфигурация редактированная типовая, режим.

Или воспользуйтесь поиском по форуму:

Выборка детальные записи 1с

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

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

Для работы с запросами в системе «1С:Предприятие 8» предусмотрено несколько специальных объектов, а именно:

  • Запрос
  • РезультатЗапроса
  • ВыборкаИзРезультатаЗапроса.

Общая схема выполнения запроса такова:

  1. Создание объекта «Запрос» с нужным текстом запроса на специальном языке запросов.
  2. Установка параметров запроса с помощью метода УстановитьПараметр.
  3. Выполнение запроса, получение результата.
  4. Получение выборки из результата запроса или выгрузка результата в таблицу значений / дерево значений. Также есть возможность использовать результат запроса для формирования сводной таблицы.
  5. Обработка выборки или таблицы значений (например, перебор строк) и выполнение действий, для которых был нужен запрос, например, вывод области при формировании отчета

Графически это можно представить следующим образом:

Цифрами на схеме обозначены следующие действия:

1. Установка текста запроса

Объект «Запрос» имеет свойство «Текст», которое содержит строку с текстом запроса на языке запросов. Этому свойству, во-первых, можно явно присвоить значение или, во-вторых, воспользоваться конструктором объекта «Запрос». В последнем случае текст запроса передается в качестве параметра в конструктор объекта «Запрос» при его создании.

2-й вариант (с другим текстом запроса):

2. Установка параметров запроса

Объект «Запрос» имеет метод «УстановитьПараметр», с помощью которого в запрос передаются значения параметров. Параметры запроса обычно используются в условиях отбора (конструкции ГДЕ, ИМЕЮЩИЕ) или в качестве параметров вызова виртуальных таблиц. В тексте запроса параметры обозначаются знаком «&» (например, параметр «ВыбГруппа» в первом запросе).

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

3. Выполнение запроса

После присвоения текста и установки параметров, запрос запускается на выполнение с помощью метода «Выполнить()» объекта «Запрос». Этот метод возвращает другой объект «РезультатЗапроса», содержащий выбранные данные из базы данных.

Далее возможны три варианта:

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

4. Получение выборки из результата запроса

Объект «РезультатЗапроса» имеет метод «Выбрать()», который возвращает новый объект «ВыборкаИзРезультатаЗапроса». В зависимости от параметра метода «Выбрать()» выборка будет линейной (по умолчанию), иерархической или по группировкам. Далее выборка обходится с помощью цикла «Пока Выборка.Следующий() Цикл», а в теле цикла производятся какие-то действия, например, вывод областей в табличный документ.

5. Выгрузка результата запроса в таблицу или дерево значений

Объект «РезультатЗапроса» имеет метод «Выгрузить()», который возвращает таблицу значений или дерево значений, в зависимости от переданного параметра . Если устанавливается прямой тип обхода (по умолчанию), то будет создана таблица значений, иначе — дерево значений. Далее таблица значений (дерево значений) может быть обработана средствами встроенного языка или показана пользователю в табличном поле.

6. Формирование сводной таблицы

Результат запроса может быть использован как источник данных для сводной таблицы. При этом итоги (см. предложение ИТОГИ в тексте запроса) становятся ресурсами (отображаются в области данных), а группировочные поля, по которым они подсчитываются, становятся измерениями сводной таблицы. В качестве источника данных для сводной таблицы может быть также использован объект «ПостроительОтчета», но ему на вход тоже подается запрос, поэтому можно сказать, что основа любой сводной таблицы — это запрос к базе данных.

Выборка в 1С 8.2 и 8.3- специализированный способ перебора записей таблиц информационной базы. Рассмотрим подробно, что такое выборка и как её использовать.

Что такое выборка в 1С?

Выборка — способ перебора информации в 1С, который заключается в последовательной установки курсора на последующей записи. Выборку в 1С можно получить из результата запроса и из менеджера объектов , например, документов или справочников.

Пример получения и перебора из менеджера объекта:

Пример получения выборки из запроса:

Получите 267 видеоуроков по 1С бесплатно:

Оба перечисленных выше примера получают одинаковые наборы данных для перебора.

Методы Выборки 1С 8.3

Выборка имеет большое количество методов, рассмотрим их подробней:

  • Выбрать() — метод, с помощью которого получают непосредственно выборку. Из выборки можно получить еще одну, подчиненную, выборку если указан тип обхода «по группировкам».
  • Владелец() — метод, обратный Выбрать(). Позволяет получить «родительскую» выборка запроса.
  • Следующий() — метод, производящий перевод курсора на следующую запись. Если запись существует, возвращает Истина, если записи закончились — Ложь.
  • НайтиСледующий() — очень полезный метод, с помощью которого можно выполнять перебор только нужных поле по значению отбора (отбор — структура полей).
  • СледующийПоЗначениюПоля() — позволяет получить следующую запись с отличным от текущего положения значения. Например, необходимо перебрать все записи с уникальный значением поля «Контрагент»: Выборка.СледующийПоЗначениюПоля(«Контрагент»).
  • Сбросить() — позволяет сбросить текущее расположение курсора и установить его в первоначальное положение.
  • Количество() — возвращает количество записей в выборке.
  • Получить() — с помощью метода можно можно установить курсор на нужной записи по значению индекса.
  • Уровень() — уровень в иерархии текущей записи (число).
  • ТипЗаписи() — отображает тип записи — ДетальнаяЗапись, ИтогПоГруппировке, ИтогПоИерархии или ОбщийИтог
  • Группировка() — возвращает имя текущей группировки, если запись не является группировкой — пустую строку.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

В своем коде разработчикам 1С приходится обращаться к базе данных, получать оттуда информацию и работать с ней. Операцию работы с результатом запроса данных из БД называют «выборкой». Для успешной работы и написания оптимального кода необходимо понимать, как нужно работать с запросом и полученными данными. Также важно запомнить основные инструменты платформы, используемые для выборки.

Синтаксис выборки 1С 8.3 и работа с ее результатом

Чаще всего в конфигурациях 1С можно встретить два варианта получения выборки для работы с ней:

    Используя запрос. Программист 1С пишет запрос на языке 1С, выполняет его и получает результат запроса – таблицу с данными. Методом «Выбрать()» выбираются данные из полученного результата;

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

В обоих случаях, чтобы получить выборку из документов или справочников, необходимо использовать метод «Выбрать()». В результате в переменную «ВыборкаДанных» помещаются данные типа «ВыборкаИзРезультатаЗапроса». Это таблица, в которой содержаться все поля, перечисленные в запросе, использующая индексы. После этого с ними можно работать, используя различные методы данного типа данных:

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

Следующий() – позволяет последовательно перебрать все записи выборки, перемещая указатель на следующую строку. Чаще всего используется, так как позволяет выполнять определенные действия со всеми выбранными записями в цикле. Будьте аккуратны и не допускайте выполнения запросов в цикле;

НайтиСледующий(УсловияПоиска) – позволяет отобрать из выборки только те записи,

которые удовлетворяют условию поиска. УсловияПоиска – переменная типа

«Структура», содержащая имена полей и нужные значения;

СледующийПоЗначениюПоля(ИмяПоля) – позволяет перебирать записи только с уникальными значениями конкретного поля, указанного в параметре;

Сбросить() – позволяет в процессе перебора результата выборки вернуться к верхней записи;

Количество() – метод показывает сколько записей получилось в результате выборки из результата запроса;

Получить(ЧислоИндекса) – команда возвращает запись с заданным индексом в качестве параметра;

Выбрать(ТипОбхода) – применяется в том случае, если в качестве параметра указан обход «По группировкам». Стандартно применяется тип «Прямой», в случае получения результатов запроса с 1 группировкой применяют «ПоГруппировкам». Если же группировок несколько, то выбирайте «ПоГруппировкамСИерархией»;

Уровень() – показывает в виде числа уровень в иерархии;

ТипЗаписи() – возвращает тип текущей записи;

Группировка() – метод получает имя группировки, если это простая запись – пустую строчку.

Выборка из результатов запроса применяется в подавляющем большинстве случаев, но иногда удобнее работать с таблицей результатов. Если нужны сразу все данные, лучше использовать не метод «Выбрать()», а «Выгрузить()». В результате в переменной оказываются данные с типом ТаблицаЗначений, где вы сможете найти сразу все данные.

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

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

Запомните суть методов, так как их синтаксис вы всегда сможете найти во встроенном помощнике 1С. Большинство методов применяется в случае сложных запросов с группировками. Чаще всего разработчики 1С 8.3 обходятся простым обходом выборки с помощью метода Следующий(). Но дополнительные возможности платформы необходимо знать и использовать их в нужный момент. Если у вас остались вопросы, обращайтесь к нашим специалистам за консультацией по программам 1С. Мы с радостью вам поможем!

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

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