Занимательные запросы
Итак допустим мы пишем в 1С в консоли запросов:
ВЫБРАТЬ
Товары.Ссылка,
Товары.Поставщик.Наименование
ИЗ
Справочник.Товары КАК Товары
В запросе к sql серверу он будет выглядеть так:
SELECT
T1._IDRRef,
T2._Description
FROM _Reference7 T1
LEFT OUTER JOIN _Reference8 T2
ON T1._Fld109RRef = T2._IDRRef
Как видим появилось левое соединение с таблицей поставщиков. А вот если бы Товары.Поставщик мог ссылаться не только на один справочник, а на несколько, то таких соединений было бы несколько - столько же на сколько таблиц может ссылаться этот реквизит.
Вроде бы всё ясно. Но глядя в логи PgSQL мы видим что от 1С пришёл не один запрос, а ещё несколько, попроще:
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\214\\376\\314j}\\362'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\214\\376\\314j}\\363'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\214\\376\\314j}\\364'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\214\\376\\314j}\\365'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\214\\376\\314j}\\366'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\215\\004=q\\000w'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\241\\000\\015\\210C\\315\\033\\021\\334\\216\\251-\\227\\247I'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\241\\000\\015\\210C\\315\\033\\021\\334\\216\\254\\324q\\326\\307'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\241\\000\\015\\210C\\315\\033\\021\\334\\216\\263`\\367\\013M'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\242\\000\\015\\210C\\315\\033\\021\\334\\221\\003\\235\\177\\321\\013'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\242\\000\\015\\210C\\315\\033\\021\\334\\221\\016Q\\000\\330\\200'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\242\\000\\015\\210C\\315\\033\\021\\334\\221\\021\\361ix.'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\215:\\000\\015\\210C\\315\\033\\021\\3352\\033\\247\\243\\012\\256'::bytea
;
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\215:\\000\\015\\210C\\315\\033\\021\\3352\\033\\247\\243\\012\\257'::bytea
Что это за запросы? Хе! Это запросы на получение представления ссылки в результатах, отображаемых на экране.
Пробуем оптимизировать наш запрос. Попробуем получить представление и посмотрим сумеет ли 1С понять что оно уже получено и повторно его получать ненадо.
ВЫБРАТЬ
Товары.Ссылка,
Товары.Наименование,
Товары.Представление,
Товары.Поставщик.Наименование
ИЗ
Справочник.Товары КАК Товары
В PostgreSQL пойдёт такой запрос:
SELECT
T1._IDRRef,
T1._Description,
T1._IDRRef,
T1._Description,
T2._Description
FROM _Reference7 T1
LEFT OUTER JOIN _Reference8 T2
ON T1._Fld109RRef = T2._IDRRef
но тут же в логах мы видим ещё 15 простых запросов вида
SELECT
T1._IDRRef,
T1._Description
FROM _Reference7 T1
WHERE T1._IDRRef = '\\214\\240\\000\\015\\210C\\315\\033\\021\\334\\214\\376\\314j}\\362'::bytea
Посчитав число отображаемых строк мы убеждаемся, что 1С не сопоставила ссылку и представление. Это вобщем логично, поскольку отображаемая таблица значений не связана с данными и поэтому 1С вынуждена подтягивать представление ссылки по мере отображения на экране.
Однако есть способ заставить 1С делать только один запрос. Для этого перепишем его вот так:
ВЫБРАТЬ
Товары.Представление,
Товары.Поставщик.Наименование
ИЗ
Справочник.Товары КАК Товары
Упорядочить по
Товары.Представление // Хочется, всё-такивидеть упорядоченные товары
При этом в Postgre отправится такой запрос
SELECT
T1._IDRRef,
T1._Description,
T2._Description
FROM _Reference7 T1
LEFT OUTER JOIN _Reference8 T2
ON T1._Fld109RRef = T2._IDRRef
ORDER BY (T1._IDRRef), (T1._Description)
Запрос ушёл один, его результат отобразился без лишних обращений к базе.
Счастье? Нет!
И вот почему:
1. Несмотря на то что мы сказали "Упорядочить по Товары.Представление" произойдёт упорядочивание по внутренним идентификаторам.
2. Представление получает из базы и идентификатор и наименование, но это не даёт нам никаких преимуществ по сравнению с простой выборкой наименований поскольку идентификатор не доступен разработчику конфигурации. Из языка 1С доступно только текстовое описание.
По сути запрос к Представлению даёт меньше чем к наименованию.
ВЫБРАТЬ
Товары.Наименование,
Товары.Поставщик.Наименование
ИЗ
Справочник.Товары КАК Товары
Упорядочить по
Товары.Наименование
В PgSQL
SELECT
T1._Description,
T2._Description
FROM _Reference7 T1
LEFT OUTER JOIN _Reference8 T2
ON T1._Fld109RRef = T2._IDRRef
ORDER BY (T1._Description)
Эта статья навеяна двумя статьями //infostart.ru/public/61624 и //infostart.ru/public/61933 .
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 286152 1609 423
Инструментарий разработчика Запросы Разработчик 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)
Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.
2 стартмани
06.07.2026 5005 65 XSlava 20
Запросы Разработчик 1С 8.3 Россия Бесплатно (free)
Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.
26.06.2026 10725 Alex_YAM 7
Нейросети Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 Абонемент ($m)
Консоль запросов 1.0: добавлен ИИ-помощник (запрос в DeepSeek), который помогает быстрее получать каркас Запроса 1С Сформулируйте простое описание; нажмите кнопку – получите результат прямо в консоли. Где дальше его можно дорабатывать и тестировать. 28.5.2026 Добавил "Консоль запросов 2.0" (запрос в DeepSeek + Claude) 4.10.2026 Обновил "Консоль запросов 2.0"
3 стартмани
20.05.2026 9621 46 German4739 72
WEB-интеграция Запросы Разработчик 1С 8.3 Абонемент ($m)
Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.
1 стартмани
02.04.2026 4709 106 priem_nv 28
Запросы Механизмы типовых конфигураций Разработчик 1С:Предприятие 8 1С:Управление торговлей 11 Россия Бесплатно (free)
Предлагается обзор работы с объектной моделью запроса по схемам запросов типовым функционалом УТ 11.5.
09.10.2025 13448 aximo 18
Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)
QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.
1 стартмани
16.05.2025 13726 168 zup_dev 32
Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)
В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.
2 стартмани
05.03.2025 7767 25 XilDen 12
Специалисты по мусоркам не шастуют, это пререгатива гиен
Развей сомнения, небоись быть услышанным и тебя услышат, только когда объясняешь , объясняй так чтобы понял не только он , но и его бабушка...
Не стестняйся простых и достуных слов.
Вся твоя статья (хорошая статья и мне понятная) ,
но ты этой статьей ХОТЕЛ -НЕ ПОЛЬЗОВАТЕЛЮ (посетителю нашего портала ЧТО-ТО новое донести,сдесь собираются СПЕЦИАЛИСТЫ разного уровня, кто пришел научить , а кто поучится) а ПОКАЗАТЬ что на такие "сопли" у настоящего СПЕЦИАЛИСТА нету времени и все это давно знают.
Но это твое мнение и я его уважаю.
Ты передал частичку СВОИХ знаний...ты стал на дорогу УЧИТЕЛЯ.
И еще тебе совет - можно досканально знать предмет, правильно и научно описывать методы, но САМОЕ важное НАЙТИ аудиторию и СПРОС на эти ЗНАНИЯ - в ИТОГЕ - ГЛАВНОЕ чтобы тебя не только УСЛЫШАЛИ , но и ПОНЯЛИ (заинтересовались) (а в этих понятиях колоссальная разница)
Не хватает только выводов.
Например: для увеличения производительности системы стоит показывать пользователю уже типизированные значения (Строка, Число, Дата), а ссылки делать не видимыми.
Правда я не уверен, что 1С (даже если скрыть в ТЗ колонку с ссылкой) не будет напрягать базу...
ЗЫ с 8-кой не работаю, мог написать глупость...
(7) >> не уверен, что 1С (даже если скрыть в ТЗ колонку с ссылкой) не будет напрягать базу
Не проверял, но думаю что не будет. А рекомендации, да, такие как ты озвучил.
А вот твоя фраза "Причём весьма неочевидным для простых 1Сников способом" любви и плюсов тебе от них не добавит. ИМХО.
Со всем уважением к твоим знаниям.
p.s. ну и плюс, конечно :)
>> твоя фраза "Причём весьма неочевидным для простых 1Сников способом" любви и плюсов тебе от них не добавит
Фразу поправил. Никого не хотел обидеть. Я сам простой 1Сник. В темы SQL только начал вникать. Это отдельная область знаний, поэтому врядли сильно углублюсь в неё.
Эта инфа давно известна, еще со времен 77.
И в рекомендациях лучших собаководов об этом давно написано - например, не выводить в печатную форму объекты, а выводить только их представление/наименование, полученное из запросов.
Однако сдвиги к лучшему есть. Если таблица связана с данными, то запрос выбирает по 20 строк в толстом клиенте и по 23-42 в тонком клиенте. Всё меньше запросов.
Не знаю как у других, а у меня до недавнего времени были иллюзии относительно виртуального поля Представление. Всё надеялся что по нему должно правильно сортироваться и что использование этого поля даёт выигрыш в скорости. Нифига подобного! Теперь мне вообще непонятно зачем нужно поле Представление.
Во-первых да, не увеличивается. Во-вторых никто и не обещал увеличения скорости. О скорости я в этой статье не говорил вообще.
Опять-таки со времён 7.7 известно правило "Жигули быстро ездят, КамАЗ много везёт". То есть если пользователей мало, то файловая база ничуть не хуже клиент-серверной. А вот если пользователей много, то файловая может просто не сдвинуться с места. Жигули 10 тонн увезти не смогут. И хамер не сможет. А вот КамАЗ увезёт.
Но это всё лирика. Статья не о том. Статья о том что неплохо бы себе представлять во что превращаются запросы внутри 1С. И сколько этих запросов на самом деле идёт в базу. Это позволит избежать ошибок при проектировании алгоритма.
Кстати, в файловой базе запросы, скорей всего, преобразуются точно также как и в клиент-серверной. Только это происходит внутри 1С и посмотреть запросы к таблицам файловой базы не получается. Так что статья актуально и для файловой базы.
SELECT
T1._Code,
T1._Description,
T1._Fld101RRef,
T1._Marked,
T1._IsMetadata,
CASE WHEN (T1._Folder = FALSE) THEN TRUE ELSE FALSE END,
T1._IDRRef,
T1._ParentIDRRef,
(T1._Folder)
FROM _Reference8 T1
WHERE (T1._ParentIDRRef = '\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\00
ORDER BY ((T1._Folder)), (T1._Description), (T1._IDRRef) LIMIT 42
Видно что 1С берёт первые 42 записи. Если не хватит, то будет второй запрос. Таким образом от элементов диалога, связанных с данными запросов генерится на порядок меньше чем от таблиц значений, куда помещены ссылки на объекты.
Тогда и обращение к табличкам, получившимся после парсинга 1Cv8.1CD, не есть обращение к базе, а стандартная для с++ работа с массивами:
а для работы с sql - пользуется тем, что MS дает в распоряжение клиента, да и то не всем
для работы с собственными, не всунутыми в мс-скл, табличками не достаточно сказать, ЧТО надо, но и программировать процесс получения, КАК получить... собственно, это отличие скульных диалектов от "взрослых" языков "программирования"
т.е. внутри 1сины должны быть парсинг скриптовых запросов и на этой основе - 1. формирование запросов к мс-скл, 2.- сишная работа с массивами. 1 -для клиент-сервера, 2 - для файловой версии
Будешь смеяться, но в этом я с тобой согласен. Однако народ считает иначе и меня почти переубедили. На написание этой статьи меня толкнула другая статья где я высказал мнение сходное с твоим. комментарий 42.
А тут не соглашусь. Уже год работаю с базой на Постгре и горя не знаю. Этот вопрос мы с тобой уже обсуждали, правда не прилюдно. Админ у нас хороший.
(32)
Для продажи ключей достаточно было бы поддержки DB2. Тут, ИМХО, другое.
ХЗ какие у них трудности. Я в этом не копенгаген. Наверное труднопреодолимые. Да и не так трудно провести одновременное обновление и 1С и Postgre. Просто об этом надо знать.
Мы, например, обновляться будем сразу на 8.2.
Слава, я понимаю твоё возмущение действиями 1С, но не понимаю твоего отношения к слонам. Ведь работают. И хорошо работают.
(33) Перескочил поскольку комментарии к запросу излишни. Там всё ясно. Хотелось ещё сказать что в MSSQL из-за этих соединений можно наткнуться на ограничение в 256 таблиц в запросе. Вообще статья сумбурная, но может кто-то что-то из неё и вынесет. Может прояснится понимание кишок 1С. Мне самуму что-то стало понятнее пока писал.
имей своЁ мненение и не будь, чем щи хлебают...прочитай ешё раз пост (3) медленно и не спеша.
ты уже в шестой раз пишешь - вон там написали и народу нравиться, а я написал......ал ...хнык..хнык ...пойду маме жаловаться
заинтересуй,заинтересовал - поддержи интерес
я не против постгреса, а против выбора тех, кто вообще не одной субд не знает, и пытается с установкой решить еще и вопрос обучения нахаляву замучив вопросами "я новичок, помогите".
учиться не хотят
сам по себе постгре вещь мощная, но только в умелых руках
по поводу 1С, у меня нет возмущений
на партнерском форуме это инструмент "управления", как еще их направлять на потребности
просто важно понимать, где компромис между количеством, критичностью ошибок с одной стороны и желанием срубить денег с другой
применительно связки 1С + постгре - иллюзия "на халяву" не настраивает на серьезный лад, это "ловушка" для новичков
это называется маркетинг,
на что только не пойдут, чтобы серверный ключ продать 8-)
главное, что потом любители сэкономить начинают любимые истории вроде
Подскажите, никто не встречался с подобной ошибкой при создании базы:
Ошибка СУБД:
ERROR: operator 16946 is not a member of optfamily 17076
CentOS, PosgreSQL 8.3.3-2.1C, 1Cv8.1.15
В версии 8.1.15 включили поддержку PosgreSQL 8.3.8 и 8.4.1, да так включили, что с 8.3.3 перестала 1с-ка работать!
У вас два выхода:
1. Понижать 1с до 8.1.14.
2. Ставить PosgreSQL 8.3.8-2.1C.
Мы поставили 8.3.8 и всё заработало!
задолбало отслеживать стабильные сочетания релизов
DB2 тоже иногда завязывается на особенности очередной версии платформы, но такого бардака в IBM не позволяют себе
Вот об этом я как-то не подумал. Спасибо за подсказку. Попробую начать пользовать блог.
(38)
gilv, из твоих высказываний можно понять что ты плохо относищься к постгресу. Халявщикам ничего не поможет. Помнишь как мы с тобой ходили к клиенту, который требовал производительности на сервере с 4 Гигами памяти и базой в 160 Гиг? Им не помог МС SQL потому что жмотились на железе.
Прошу тебя точнее указывать адресатов своего раздражения. Не слоны, а жмоты и лентяи. Причём жмоты не только на ПО, но и на железо и на обучение. PosgreSQL тут не виноват.
А я пользую слонов и примеры запросов беру из них. Почему слонов, а не что-то другое? А потому что слоны лицензионно чисты и никто мне ничего не предъявит.
(39) Халявщикам зло всё. Жадины считают что весь мир против них и весь мир им должен.
буду выражаться точнее, упрек принимаю
Жирный минус за то что новичков в заблуждение вводит. Парсер запросов хороший инструмент, но и запросы 1С надо бы знать.
Прежде чем тыкать других в невнимательность сам внимательно прочитай.
Новичкам эта статья поможет слабо. Им бы с штатной документацией разобраться. А вот опытным людям неясно зачем нужно виртуальное поле Представление. Зачем, Недостижимый? Зачем при упорядочивании по этому полю происходит упорядочивание по внутренним идентификаторам?
ВЫБРАТЬ
Товары.Представление,
Товары.Поставщик.Наименование
ИЗ
Справочник.Товары КАК Товары
Упорядочить по
Товары.Представление
При этом в Postgre отправится такой запрос
SELECT
T1._IDRRef,
T1._Description,
T2._Description
FROM _Reference7 T1
LEFT OUTER JOIN _Reference8 T2
ON T1._Fld109RRef = T2._IDRRef
ORDER BY (T1._IDRRef), (T1._Description) ПоказатьИз 1С в СУБД пошёл запрос с требованием упорядочить по внутреннему идентификатору. Я не знаю внутренностей сервера приложений 1С, может он их как-то ещё сортирует. Однако я так не думаю.
GROOVY, виртуальное поле Представление возвращается строкой. В зависимости от настроек на закладке Данные в конфигураторе оно будет содержать или код или наименование, а для документов и бизнес процессов собираться из вид+номер+дата.
Единственное практическое его применение я вижу для документов и бизнес процессов. В остальных случаях удобнее и быстрее обращаться сразу к коду или наименованию так мы избавим и сервер приложений от ненужной работы и СУБД от лишних выборок и сортировок.
"Единственное практическое его применение я вижу для документов и бизнес процессов. В остальных случаях удобнее и быстрее обращаться сразу к коду или наименованию"
Это если мы знаем какое представление указано в системе для справочника, а если нет то тут как раз и поможет это виртуальное поле.
Поправлено. Раньше вместо "консоли запросов" было "консоли отчётов"
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 62030
Создание 02.12.09 14:43
Обновление 02.12.09 00:00
Просмотры 19990
Загрузки 0
Рейтинг
41
Комментарии 49
Код открыт Не указано
Рубрики Запросы
Кому
Системный администратор
,
Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)