Регистры бухгалтерии. Виртуальная таблица оборотов

28.07.20

Разработка - Механизмы типовых конфигураций

Виртуальная таблица оборотов регистра бухгалтерии. Принцип работы, особенности и кое-что еще.

Введение

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

Сегодня мы продолжим анализ работы регистра, но на этот раз рассмотрим только одну виртуальную таблицу "Обороты". Такая маленькая, и такая интересная!

Все данные для публикации получены с помощью инструментов:

Транслятор запросов 1С

Просмотр и анализ структуры базы данных (отчет на СКД)

Помощник работы с идентификаторами

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

Небольшое отступление

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

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

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

  • Анализ состояния учета по налогу на прибыль
  • Продажи
  • Расшифровка платежей в бюджет
  • И еще много-много всего.

Думаю, что необходимость использования этой виртуальной таблицы очевидна. Перейдем к первому примеру и рассмотрим, что именно делает платформа 1С с этой виртуальной таблицей.

Простой пример

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

ВЫБРАТЬ
	ХозрасчетныйОбороты.Счет КАК Счет,
	ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
	ХозрасчетныйОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(, , , , , , , ) КАК ХозрасчетныйОбороты

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

 
 Запрос к базе данных

Как мы видим, платформа получает данные из основной таблицы регистра для получения оборотов по указанным ресурсам. Алгоритм такой:

  • Получаем обороты из основной таблицы по дебету
  • Получаем обороты из основной таблицы по кредиту
  • Объединяем полученные данные в единую таблицу и группируем по счету

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

Например, если в базе установлен период рассчитанных итогов для регистра бухгалтерии с 01.01.2019 по 31.07.2020, то для начала использования итогов начало периода должно быть установлено больше или равным 01.01.2019. Есть нюанс: если поставить дату начала периода меньше даты рассчитанных итогов (но не более чем на 1 месяц), то платформа все равно будет использовать итоги, а для периода до минимальной даты рассчитанных итогов будет сделан запрос к основным таблицам регистра (точнее два запроса - для дебета и для кредита). Вот так стал выглядеть запрос с началом периода.

ВЫБРАТЬ
	ХозрасчетныйОбороты.Счет КАК Счет,
	ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
	ХозрасчетныйОбороты.КоличествоОборот КАК КоличествоОборот
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, , , , , , , ) КАК ХозрасчетныйОбороты

Чтобы пример был более полным, установим параметр "НачалоПериода" как 10.12.2018, т.е. меньше минимальной даты рассчитанных итогов, но не более чем на 1 месяц. Вот такой запрос будет сформирован к базе данных.

 
 Вот и появились итоги

В чем-то этот запрос похож на предыдущий пример, но значительные отличия все же присутствуют:

  • В первую очередь данные за тот период, в котором есть рассчитанные итоги, получаются именно из таблицы итогов. В нашем случаев используются итоги между счетами.
  • Там, где итоги недоступны платформа 1С собирает данные из основных таблиц регистра (период до расчета итогов и после максимальной даты рассчитанных итогов).

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

А если добавить субконто

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

ВЫБРАТЬ
	ХозрасчетныйОбороты.Счет КАК Счет,
	ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
	ХозрасчетныйОбороты.КоличествоОборот КАК КоличествоОборот,
	ХозрасчетныйОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
	ХозрасчетныйОбороты.КоличествоОборотКт КАК КоличествоОборотКт,
	ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
	ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт,
	ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(
			&НачалоПериода,
			&КонецПериода,
			,
			Счет = &Счет,
			&ВидСубконто,
			Организация = &Организация
			И Субконто1 = &Субконто1,
			,
			) КАК ХозрасчетныйОбороты

Намешали сразу почти все, что можно в этой виртуальной таблице, кроме кор. счета и аналитики с ресурсами по нему, т.к. об этом позже. Вот какой запрос, а точнее серию запросов, в этом случае сформирует платформа 1С.

 
 Длинный запрос

Запрос стал больше и сложнее, но на самом деле ничего сверхъестественного тут нет:

  • Сначала платформа подготавливает информацию по счету, который используется в отборах и по виду субконто.
  • Затем начинается основной запрос, в котором:
    • Получаем данные оборотов из таблицы итогов по 2 субконто. Почему именно по этой таблице? Да потому что во всех отборах нашего примера устанавливался счет 51, у которого 2 субконто (банковский счет и статья ДДС). Для получаемых значений также устанавливается фильтр по счету и субконто, а также по организации. Отбор по периоду устанавливается в промежутке от 01.01.2019 (начала периода рассчитанных итогов) до 28.02.2020 включительно.
    • Т.к. изначально отбор ставился с 10.12.2018, то платформа делает дополнительных два запроса (по дебету и кредиту) к основным таблицам регистра в период с 10.12.2018 по 31.12.2018, т.к. получить обороты из таблиц итогов за этот период нельзя.
    • Дополнительно делаются аналогичные два запроса (по дебету и по кредиту) за 01.03.2020, т.к. именно эта дата установлена как конец периода отбора. Т.к. итоги рассчитываются в разрезе месяца, то получить данные оборотов за один день с их помощью не получится. Именно поэтому и был еще раз сгенерирован запрос к основным таблицам регистра.
    • После все полученные данные группируются и возвращаются как результат.

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

Данные кор. счета

Немного изменим пример, добавив кор. счет с аналитикой и обороты по количеству (т.к. это не балансовый ресурс) по нему.

ВЫБРАТЬ
	ХозрасчетныйОбороты.Счет КАК Счет,
	ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
	ХозрасчетныйОбороты.КоличествоОборот КАК КоличествоОборот,
	ХозрасчетныйОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
	ХозрасчетныйОбороты.КоличествоОборотКт КАК КоличествоОборотКт,
	ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
	ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт,
	ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт,
	ХозрасчетныйОбороты.КорСчет КАК КорСчет,
	ХозрасчетныйОбороты.КоличествоКорОборот КАК КоличествоКорОборот,
	ХозрасчетныйОбороты.КоличествоКорОборотДт КАК КоличествоКорОборотДт,
	ХозрасчетныйОбороты.КоличествоКорОборотКт КАК КоличествоКорОборотКт
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(
			&НачалоПериода,
			&КонецПериода,
			,
			Счет = &Счет,
			&ВидСубконто,
			Организация = &Организация
				И Субконто1 = &Субконто1,
			,
			) КАК ХозрасчетныйОбороты

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

 
 Запрос уже не тот

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

Будьте осторожны с получением данных оборотов по корреспондирующим счетам и их аналитике.

Особая периодичность

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

ВЫБРАТЬ
	ХозрасчетныйОбороты.Счет КАК Счет,
	ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
	ХозрасчетныйОбороты.КоличествоОборот КАК КоличествоОборот,
	ХозрасчетныйОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
	ХозрасчетныйОбороты.КоличествоОборотКт КАК КоличествоОборотКт,
	ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
	ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДт,
	ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Обороты(
			&НачалоПериода,
			&КонецПериода,
			Неделя,
			Счет = &Счет,
			&ВидСубконто,
			Организация = &Организация
				И Субконто1 = &Субконто1,
			,
			) КАК ХозрасчетныйОбороты

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

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

 
 И снова без итогов

Использовать периодичность нужно очень осторожно, т.к. некорректное ее указание может значительно снизить производительность информационной системы.

Производительность запросов

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

  1. Для максимальной производительности запросов к виртуальной таблице оборотов необходимо использовать итоги регистра. То есть они должны быть рассчитаны и обслуживаться ежемесячно, сдвигая дату рассчитанных итогов. Об этом мы говорили ранее.
  2. Даже если итоги в базе рассчитаны и обслуживаются, необходимо придерживаться некоторых правил написания запросов к таблице оборотов, когда это возможно в контексте поставленной задачи:
    • Периодичность не должна быть меньше месяца, иначе данные будут запрашиваться из основных таблиц регистра и итоги будут игнорироваться.
    • Обязательно нужно указывать период, за который выполняется получение данных оборотов, иначе все данные будут получаться из основных таблиц регистра. Да, если не указать период в таблице оборотов - итоги не будут использоваться. Но Вы же так не делаете, верно?
    • Использование корреспондирующих полей (кор. счет или измерения, а также ресурсы) также приводит к отключению использования итогов. Будьте осторожны.
  3. При работе с оборотами продумайте максимально возможные условия отборов, как минимум по периоду и основным измерениям регистра, счетам и субконто (виду и значениям). Это позволит избежать большинства проблем производительности при использовании этой виртуальной таблицы.
  4. Для максимальной производительности отборы должны быть максимально селективными. Если Вы получаете обороты за пару лет с указанием отбора только по счету, то потенциальный объем получаемых данных может быть очень большой. В этом случае СУБД может проигнорировать индексы, т.к. ей проще эти данные получить сканированием таблиц.

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

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

Следующий раунд

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

Регистры бухгалтерии достаточно сложные и "тяжелые" как с точки зрения хранения данных, так и в части использования в разработке. Именно поэтому нужно использовать их для учетных задач, но никак не для оперативного учета. Представьте что было бы, если бы чеки ККМ формировали проводки при проведении :) Прощай розница! :)))

Все данные для публикации получены с помощью инструментов:

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

До скорых встреч!

Другие ссылки

Авторские разработки

 
 Другие разработки

регистр бухгалтерии внутреннее устройство виртуальная таблица обороты

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    507    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

10 стартмани

11.04.2024    388    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

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

08.04.2024    667    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    454    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    537    tango    12    

2

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

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

07.02.2024    2614    YA_418728146    11    

43

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1159    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4985    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artkor 263 28.07.20 13:04 Сейчас в теме
Спасибо за статью! В случае,когда итоги за нужные "года" посчитаны: порядок отбора субконто влияет на исполнение запроса?
Организация = &Организация
			И Субконто1 = &Субконто1

В данном примере когда &ВидСубконто 1-й по счету (контрагенты например) - это хорошо, но если 2-й сверху (Договоры) отбор по индексу уже использоваться не будет и получится скан?
YPermitin; +1 Ответить
3. пользователь 28.07.20 15:42
(1) если посмотреть на индекс таблицы итогов по субконто, то увидим такое:

ОбластьДанныхОсновныеДанные
Счет
Период
Организация
Значение (вид значения)
Значение (тип ссылки)
Значение
Значение (вид значения)
Значение (тип ссылки)
Значение
Валюта
Подразделение
Разделитель


Значение 1 - это первое субконто
Значение 2 - второе субконто

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

ОбластьДанныхОсновныеДанные
Счет
Период
Организация

Если такой фильтр селективный (например, если пирод небольшой), то все ОК. Если же данных много, то будет скан индекса.

Это в общих чертах.

То есть да, отбор по 1 субконто может быть важным для использования индекса.
2. Yashazz 4723 28.07.20 14:10 Сейчас в теме
Вот хорошие статьи, ну зачем их замусоривать всякими дурацкими картинками да шутками-прибаутками? Ну ладно, модераторам теперь похрен, хотя раньше за такое элементарно не пропускали публикацию, но зачем в принципе? Что это за клоунада в серьёзном вопросе?..
timeforlive; YPermitin; +2 3 Ответить
4. пользователь 28.07.20 15:42
(2) я же не книгу пишу :)

Не могу серьезно все описывать. Да и это будет как сухая инструкция.
Понимаю, не всем такой стиль нравится. Но всем угодить нельзя.
Merkalov; LeXXeR; Summer_13; Cерый; Dovbenko_V_A; +5 Ответить
5. improg 574 30.07.20 10:44 Сейчас в теме
(0) Спасибо за статью, есть вопрос по поводу инструмента "Транслятор запросов 1С в SQL" в чем его преимущество над типовой консолью запросов с ИТС? На мой взгляд тоже самое .
Прикрепленные файлы:
7. пользователь 30.07.20 10:55
(6) Тем, что это не консоль запросов :))))

Это инструмент, который позволят средствами SQL Server отловить выполняемые запросы к базе как из запросов 1С, так и произвольного алгоритма 1С. Все сделано с помощью Extended Events. Может использовать на высоконагруженном окружении без риска все уронить.

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

Странный вопрос если честно, вообще не связанные по назначению инструменты.
8. improg 574 30.07.20 11:00 Сейчас в теме
(7) ну почему же не связанные и тот и другой дают одинаковый результат, я как понял ваш меньше влияет на производительность?
9. пользователь 30.07.20 11:12
(8) транслятор отлавливает все запросы, которые генерирует платформа 1С (служебные и обычные) и делает это как для запросов на языке 1С, так и для кода встроенного языка. И да, с минимальным влиянием на производительность.

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

Разные инструменты, разные задачи. Не надо путать)
10. improg 574 30.07.20 14:08 Сейчас в теме
11. Walker.pro 7 10.10.22 12:05 Сейчас в теме
Какая практическая польза от того, что мы видим сформированные SQL-запросы? Как разработчик может это использовать на практике?
Оставьте свое сообщение