Слишком сложный поисковый запрос 1с ошибка

Обновлено: 30.01.2023

У меня есть восемь таблиц, которые содержат информацию об изменениях, вносимых в приложения по всей компании. Я только хочу запросить и объединить строки для подмножества более 200 приложений. Для этого я запрашиваю каждую таблицу по коду приложения (AAA, BBB и т. Д.) И хочу объединить результаты. Когда я использую более 5 кодов приложения, я получаю ошибку «Запрос к комплексу».

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

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

3 ответа

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

Если вы не используете подстановочные операторы в рамках критериев для like , вы можете альтернативно использовать in и предоставить список кодов приложений:

Кроме того, вы можете создать таблицу, содержащую все коды приложений, которые вы хотите вернуть (в следующем примере я назвал такую таблицу ApplicationCodes , содержащую одно поле с именем Code ), а затем использовать простое объединение для неявного применения фильтрации, например:

Я бы порекомендовал вам создать таблицу, в которой есть все приложения, тогда вы могли бы сделать всего 8 запросов

Если вам это не нравится, вы можете попробовать предложение IN

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

Создайте таблицу (например, ApplicationChanges) с полями объединенных таблиц и добавьте дополнительное поле ChangedAt , которое будет содержать старое имя таблицы. Возможно, старые таблицы содержат поле даты, которое показывает дату ChangedAt, тогда вы можете опустить имя таблицы и запрос, какие даты принадлежат этой таблице.

Затем используйте запрос @LeeMacs для заполнения новой таблицы:

Если вам нужна старая структура данных, создайте запросы для каждой предыдущей таблицы с критерием ChangedAt. Например. Таблица [2019-07-A July 5 to 7]

Алексей Чужов

Алексей Чужов

Возьмите др клиентов,вычтите из этих дат сутки.Затем можно например передать в переменные ДеньВчерРожд=день(ДатаРождМинусОдин);
МесяцВчерРожд=месяц(датаРождМинусОдин);
У вас получиться номер месяца вчерашнего дня рождения и дюномер дня вчерашнего др.А затем сравните их с номером дня и номером месяца текущей даты.Вообщем если не понятно или еще не сделали пишите,не мложно это.Единственный шаткий момент это високосные года.

Юрий Чернов

Где именно хотите получить — в запросе, в СКД, в отчете?
Вообще, чем не устраивает задать дату рождения между:
конечная дата -конец дня текущей даты,
начальная дата — начало дня текущей даты — 24 часа.
В отбор попадут нужные клиенты.
Или у вас дата разбита — отдельно день, отдельно месяц, отдельно год?

Валентина Ивановна

Юрий, СКД. Дата разбита: отдельно День, Месяц. И когда задала Дату рождения Между (ДеньГода) — получила. что-то непонятное.

Юрий Чернов

Вот как—то так: ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, 1984 — 1), МЕСЯЦ, 12 — 1), ДЕНЬ, 31 — 1) КАК Поле1 . Только вместо цифр года, месяца и дня подставить свои данные из запроса. Суть, берем дату 01.01.0001 и прибавляем день месяц и год. Если год не нужен, его можно опустить. Ну, тем более, имея уже собранную дату, вроде бы не сложно придумать нужное сравнение.

Дмитрий Сметанин

Дмитрий Сметанин запись закреплена

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

Данислав Мингалёв

Здарова. Я сам когда-то только начинал работать с 1С. И тоже начинал с экселя. Я бы помог, но времени совсем щас нет. У меня осталась обработка на которой я тренировался. Там и загрузка написана и выгрузка. Может поможет.

Читайте также:

  • Как связаны объекты конфигурации и объекты базы данных 1с
  • Программа в топе как работает
  • Как прошить asus zc500tg
  • Как выйти в интернет без браузера на андроид
  • Как в фотошопе сделать 3д обложку

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

ВЫБРАТЬ

       ЗначенияСвойствОбъектов.Объект КАК Объект,

       ЗначенияСвойствОбъектов.Свойство КАК Свойство,

       ВЫБОР

           КОГДА ЗначенияСвойствОбъектов.Значение.Код = 211

                   ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 212

               ТОГДА «Ликероводочные изделия в т.ч.:»

           ИНАЧЕ ВЫБОР

                   КОГДА ЗначенияСвойствОбъектов.Значение.Код = 250

                           ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 251

                       ТОГДА «Напитки винные в т.ч.:»

                   ИНАЧЕ ВЫБОР

                           КОГДА ЗначенияСвойствОбъектов.Значение.Код = 400

                                   ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 410

                               ТОГДА «Вина в т.ч.:»

                           ИНАЧЕ ЗначенияСвойствОбъектов.Значение

                       КОНЕЦ

               КОНЕЦ

       КОНЕЦ КАК Значение1,

       ЗначенияСвойствОбъектов.Значение КАК Значение

   ИЗ

       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

   ГДЕ

       ЗначенияСвойствОбъектов.Свойство = &КОДПр

Причем если выкинуть хоть какое-нибудь условие (одно) то все работает.

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

1

«Слишком сложный запрос»?

17.09.2015, 09:36. Показов 5605. Ответов 26


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

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



0



Эксперт MS Access

17253 / 7093 / 1596

Регистрация: 21.06.2012

Сообщений: 13,347

17.09.2015, 09:41

2

Не наблюдается, возможно проблемы с Вашей версией Аксесса.



0



Модератор

Эксперт MS Access

11462 / 4710 / 759

Регистрация: 07.08.2010

Сообщений: 13,666

Записей в блоге: 4

17.09.2015, 10:54

3

в вашей таблице заказ
-11 подстановок непонятного формата —берется только код без наименования

  RowSource: SELECT [бумага].[id бум] FROM бумага;
  RowSource: SELECT [вес бумаги м кв].[Код] FROM [вес бумаги м кв];
  RowSource: SELECT [длина бумаги].[Код] FROM [длина бумаги];
  RowSource: SELECT [Заказчик].[Id зак-к] FROM Заказчик;
  RowSource: SELECT [красочность лицо].[id кр л] FROM [красочность лицо];
  RowSource: SELECT [красочность оборот].[id кр оборот] FROM [красочность оборот];
  RowSource: SELECT [нумерация].[id №№] FROM нумерация;
  RowSource: SELECT [тираж].[Id тир] FROM тираж;
  RowSource: SELECT [формат длина].[id формат дл] FROM [формат длина];
  RowSource: SELECT [формат ширина].[id формат ш] FROM [формат ширина];
  RowSource: SELECT [ширина бумаги].[Код] FROM [ширина бумаги];
  RowSourceType: Таблица или запрос

а в каждом запросе по 11 inner join для прицепки этого самого наименования



0



Эксперт MS Access

2833 / 1375 / 215

Регистрация: 13.05.2011

Сообщений: 4,213

17.09.2015, 10:54

4

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

такое происходит даже если в запрос добавить просто вывести запись из существующей таблицы

При создании нового запроса всё работает. Если имеете в виду редактирование существующего запроса, то укажите какого?



0



0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:20

 [ТС]

5

приложила архив, где не работает вродебы простой запрос.



0



0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:31

 [ТС]

6

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

в вашей таблице заказ
-11 подстановок непонятного формата —берется только код без наименования

а как правильно сделать??

Добавлено через 10 минут
может быть лучше вообще уйти от подстановок?



0



Эксперт MS Access

17253 / 7093 / 1596

Регистрация: 21.06.2012

Сообщений: 13,347

17.09.2015, 12:32

7

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

где не работает вродебы простой запрос.

Из спецификации Аксесс 2010

Number of joins in a query 16*

Может дело в количестве связей. Разбейте запрос на два, связывая в каждом с частью остальных таблиц, о потом соберите эти два в один.



1



0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:38

 [ТС]

8

тут дело дошло до того что если я просто запросом этим вызываю любую запись из существующих таблиц, то уже » запрос слишком сложный»…пробовала на 2 компах тоже думала что чтото с версией аксесса…



0



Эксперт MS Access

17253 / 7093 / 1596

Регистрация: 21.06.2012

Сообщений: 13,347

17.09.2015, 12:48

9

К чему там почти все таблицы (да и в Красочность). Оставьте только нужные … (в Красочность это красочность лицо, красочность оборот, нумерация).



0



0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:55

 [ТС]

10

бывает что нужно отдельно кр лица и кр оборота…по моему они все нужные, может их связывать лучше не подстановкой???



0



ltv_1953

Эксперт MS Access

17253 / 7093 / 1596

Регистрация: 21.06.2012

Сообщений: 13,347

17.09.2015, 13:08

11

Еще раз: запрос красочность

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT [красочность лицо]![красочность лицо]
+[красочность оборот]![красочтость оборота]
+[нумерация]![нумерация] AS [красочность бланка], заказ.[id зак]
FROM [ширина бумаги] INNER JOIN ([формат ширина] 
INNER JOIN ([формат длина] INNER JOIN (тираж 
INNER JOIN (нумерация INNER JOIN ([красочность оборот] 
INNER JOIN ([красочность лицо] INNER JOIN (Заказчик 
INNER JOIN ([длина бумаги] INNER JOIN (([вес бумаги м кв] 
INNER JOIN бумага ON [вес бумаги м кв].Код = бумага.вес) 
INNER JOIN заказ ON бумага.[id бум] = заказ.бумага) 
ON [длина бумаги].Код = заказ.[длина бумаги]) ON Заказчик.[Id зак-к] = заказ.заказчик) 
ON [красочность лицо].[id кр л] = заказ.[красочность л]) 
ON [красочность оборот].[id кр оборот] = заказ.[красочность о]) 
ON нумерация.[id №№] = заказ.нумерация) ON тираж.[Id тир] = заказ.тираж) 
ON [формат длина].[id формат дл] = заказ.[длина бланка]) 
ON [формат ширина].[id формат ш] = заказ.[ширина бланка]) 
ON [ширина бумаги].Код = заказ.[ширина бумаги];

Для вычисления [красочность бланка] нужны только три таблицы, зачем все остальные? В запросах должны быть только те таблицы, которые нужны.



0



0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 14:44

 [ТС]

12

делала в режиме конструктора, там этого не видно

Добавлено через 1 час 31 минуту
может такая проблема выскочить из-за использования подстановок???



0



Эксперт MS Access

7336 / 4476 / 289

Регистрация: 12.08.2011

Сообщений: 13,568

18.09.2015, 05:19

13

Лучший ответ Сообщение было отмечено VinniPuh как решение

Решение

Поля подстановок в таблицах недопустимы.



1



hrutsik

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

18.09.2015, 09:31

 [ТС]

14

сделала без подстановок, все равно если через конструктор делать join-ит все теблицы! отсюда и перегрузка видимо.
поубирала лишние, вроде работатет:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT IIf(INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина])>(INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина])),
INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина]),
INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина]))
 AS [оптимальное количество бланков на листе]
FROM [ширина бумаги] 
INNER JOIN ([формат ширина] 
INNER JOIN ([формат длина] 
INNER JOIN ([длина бумаги] 
INNER JOIN заказ 
ON [длина бумаги].Код = заказ.[id длина бумаги]) 
ON [формат длина].[id формат дл] = заказ.[id длина бланка]) 
ON [формат ширина].[id формат ш] = заказ.[id ширина бланка]) 
ON [ширина бумаги].Код = заказ.[id ширина бумаги];

нет ли ошибок?



0



8777 / 5643 / 578

Регистрация: 27.03.2013

Сообщений: 19,093

18.09.2015, 09:58

15

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

нет ли ошибок?

Если это не БД на 10000 уже забитых ральных данных, типа тестовая, то я что бы перепровериться открываю табличку, удаляю ВСЁ.
Жму в меню
Сжать и восстановить.
Закрываю БД, Открываю БД и начинаю вводить всё по новой.
Обычно это очень даже хорошо помогает и ошибки уже не присутствуют.



0



0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

18.09.2015, 12:21

 [ТС]

16

PuhKMV, не помогло…
поменяла связи убрала подстановки, 2 запроса написала работают, новый выдает «введите параметр»..
даже если просто запись из таблицы вызываешь…



0



8777 / 5643 / 578

Регистрация: 27.03.2013

Сообщений: 19,093

18.09.2015, 12:28

17

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

…убрала подстановки,…

ну это в таблицах. а в формах перепроверились.
Как часто бывало в детстве
Создал форму по таблице. затем 8 раз всё поменял, а в форме позабыл, и целую неделю репу чешешь, типа где ошибка.
Явно же аксик не всегда указывает где несоответствие.
Я обычно в таких случаях лезу сразу в-
— Источник записей
— Списки
— Поля со списком
— Подчиненные формы



0



hrutsik

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

18.09.2015, 12:58

 [ТС]

18

там нет форм…только таблицы…может связи не верно установлены??? запуталась совсем…

п.с. почему если через конструктор запросов пишу, то лишние таблицы join-тся??

Добавлено через 22 минуты
подскажите как исправить?! н срочно работу сдать.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 SELECT 35*([красочность лицо]![красочность лицо]+[красочность оборот]![красочтость оборота])+
([тираж]![тираж]/(IIf(INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина])>(INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина])),INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина]),INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина]))))*(IIf([тираж]![тираж]<=100,0.07,IIf(Eval([тираж]![тираж]>100 AND [тираж]![тираж]<=200),0.05,IIf(Eval([тираж]![тираж]>200 AND [тираж]![тираж]<=1000),0.03,IIf(Eval([тираж]![тираж]>1000 AND [тираж]![тираж]<=2000),0.02,IIf(Eval([тираж]![тираж]>2000),0.01,0)))))) AS техотходы
FROM [ширина бумаги] 
INNER JOIN ([формат ширина] 
INNER JOIN ([формат длина] 
INNER JOIN (тираж 
INNER JOIN (нумерация 
INNER JOIN ([красочность оборот] 
INNER JOIN ([красочность лицо] 
INNER JOIN ([длина бумаги] 
INNER JOIN заказ 
ON [длина бумаги].Код = заказ.[длина бумаги])  
ON [красочность лицо].[id кр л] = заказ.[красочность л]) 
ON [красочность оборот].[id кр оборот] = заказ.[красочность о]) 
ON нумерация.[id №№] = заказ.нумерация) 
ON тираж.[Id тир] = заказ.тираж) 
ON [формат длина].[id формат дл] = заказ.[длина бланка]) 
ON [формат ширина].[id формат ш] = заказ.[ширина бланка]) 
ON [ширина бумаги].Код = заказ.[ширина бумаги];

не срабатывает, просит параметр…



0



Эксперт MS Access

17253 / 7093 / 1596

Регистрация: 21.06.2012

Сообщений: 13,347

18.09.2015, 13:12

19

Какой? Ищите по имени параметра, поля какой таблицы не хватает в запросе. И добавьте ее в запрос.



0



8777 / 5643 / 578

Регистрация: 27.03.2013

Сообщений: 19,093

18.09.2015, 13:23

20

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



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

18.09.2015, 13:23

20

Обновлено: 30.01.2023

У меня есть восемь таблиц, которые содержат информацию об изменениях, вносимых в приложения по всей компании. Я только хочу запросить и объединить строки для подмножества более 200 приложений. Для этого я запрашиваю каждую таблицу по коду приложения (AAA, BBB и т. Д.) И хочу объединить результаты. Когда я использую более 5 кодов приложения, я получаю ошибку «Запрос к комплексу».

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

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

3 ответа

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

Если вы не используете подстановочные операторы в рамках критериев для like , вы можете альтернативно использовать in и предоставить список кодов приложений:

Кроме того, вы можете создать таблицу, содержащую все коды приложений, которые вы хотите вернуть (в следующем примере я назвал такую таблицу ApplicationCodes , содержащую одно поле с именем Code ), а затем использовать простое объединение для неявного применения фильтрации, например:

Я бы порекомендовал вам создать таблицу, в которой есть все приложения, тогда вы могли бы сделать всего 8 запросов

Если вам это не нравится, вы можете попробовать предложение IN

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

Создайте таблицу (например, ApplicationChanges) с полями объединенных таблиц и добавьте дополнительное поле ChangedAt , которое будет содержать старое имя таблицы. Возможно, старые таблицы содержат поле даты, которое показывает дату ChangedAt, тогда вы можете опустить имя таблицы и запрос, какие даты принадлежат этой таблице.

Затем используйте запрос @LeeMacs для заполнения новой таблицы:

Если вам нужна старая структура данных, создайте запросы для каждой предыдущей таблицы с критерием ChangedAt. Например. Таблица [2019-07-A July 5 to 7]

Алексей Чужов

Алексей Чужов

Возьмите др клиентов,вычтите из этих дат сутки.Затем можно например передать в переменные ДеньВчерРожд=день(ДатаРождМинусОдин);
МесяцВчерРожд=месяц(датаРождМинусОдин);
У вас получиться номер месяца вчерашнего дня рождения и дюномер дня вчерашнего др.А затем сравните их с номером дня и номером месяца текущей даты.Вообщем если не понятно или еще не сделали пишите,не мложно это.Единственный шаткий момент это високосные года.

Юрий Чернов

Где именно хотите получить — в запросе, в СКД, в отчете?
Вообще, чем не устраивает задать дату рождения между:
конечная дата -конец дня текущей даты,
начальная дата — начало дня текущей даты — 24 часа.
В отбор попадут нужные клиенты.
Или у вас дата разбита — отдельно день, отдельно месяц, отдельно год?

Валентина Ивановна

Юрий, СКД. Дата разбита: отдельно День, Месяц. И когда задала Дату рождения Между (ДеньГода) — получила. что-то непонятное.

Юрий Чернов

Вот как—то так: ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, 1984 — 1), МЕСЯЦ, 12 — 1), ДЕНЬ, 31 — 1) КАК Поле1 . Только вместо цифр года, месяца и дня подставить свои данные из запроса. Суть, берем дату 01.01.0001 и прибавляем день месяц и год. Если год не нужен, его можно опустить. Ну, тем более, имея уже собранную дату, вроде бы не сложно придумать нужное сравнение.

Дмитрий Сметанин

Дмитрий Сметанин запись закреплена

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

Данислав Мингалёв

Здарова. Я сам когда-то только начинал работать с 1С. И тоже начинал с экселя. Я бы помог, но времени совсем щас нет. У меня осталась обработка на которой я тренировался. Там и загрузка написана и выгрузка. Может поможет.

Читайте также:

  • Как связаны объекты конфигурации и объекты базы данных 1с
  • Программа в топе как работает
  • Как прошить asus zc500tg
  • Как выйти в интернет без браузера на андроид
  • Как в фотошопе сделать 3д обложку

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

1

«Слишком сложный запрос»?

17.09.2015, 09:36. Показов 5451. Ответов 26


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

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

0

Эксперт MS Access

17139 / 7005 / 1567

Регистрация: 21.06.2012

Сообщений: 13,110

17.09.2015, 09:41

2

Не наблюдается, возможно проблемы с Вашей версией Аксесса.

0

Модератор

Эксперт MS Access

11335 / 4654 / 748

Регистрация: 07.08.2010

Сообщений: 13,484

Записей в блоге: 4

17.09.2015, 10:54

3

в вашей таблице заказ
-11 подстановок непонятного формата —берется только код без наименования

  RowSource: SELECT [бумага].[id бум] FROM бумага;
  RowSource: SELECT [вес бумаги м кв].[Код] FROM [вес бумаги м кв];
  RowSource: SELECT [длина бумаги].[Код] FROM [длина бумаги];
  RowSource: SELECT [Заказчик].[Id зак-к] FROM Заказчик;
  RowSource: SELECT [красочность лицо].[id кр л] FROM [красочность лицо];
  RowSource: SELECT [красочность оборот].[id кр оборот] FROM [красочность оборот];
  RowSource: SELECT [нумерация].[id №№] FROM нумерация;
  RowSource: SELECT [тираж].[Id тир] FROM тираж;
  RowSource: SELECT [формат длина].[id формат дл] FROM [формат длина];
  RowSource: SELECT [формат ширина].[id формат ш] FROM [формат ширина];
  RowSource: SELECT [ширина бумаги].[Код] FROM [ширина бумаги];
  RowSourceType: Таблица или запрос

а в каждом запросе по 11 inner join для прицепки этого самого наименования

0

Эксперт MS Access

2832 / 1374 / 215

Регистрация: 13.05.2011

Сообщений: 4,208

17.09.2015, 10:54

4

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

такое происходит даже если в запрос добавить просто вывести запись из существующей таблицы

При создании нового запроса всё работает. Если имеете в виду редактирование существующего запроса, то укажите какого?

0

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:20

 [ТС]

5

приложила архив, где не работает вродебы простой запрос.

0

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:31

 [ТС]

6

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

в вашей таблице заказ
-11 подстановок непонятного формата —берется только код без наименования

а как правильно сделать??

Добавлено через 10 минут
может быть лучше вообще уйти от подстановок?

0

Эксперт MS Access

17139 / 7005 / 1567

Регистрация: 21.06.2012

Сообщений: 13,110

17.09.2015, 12:32

7

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

где не работает вродебы простой запрос.

Из спецификации Аксесс 2010

Number of joins in a query 16*

Может дело в количестве связей. Разбейте запрос на два, связывая в каждом с частью остальных таблиц, о потом соберите эти два в один.

1

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:38

 [ТС]

8

тут дело дошло до того что если я просто запросом этим вызываю любую запись из существующих таблиц, то уже » запрос слишком сложный»…пробовала на 2 компах тоже думала что чтото с версией аксесса…

0

Эксперт MS Access

17139 / 7005 / 1567

Регистрация: 21.06.2012

Сообщений: 13,110

17.09.2015, 12:48

9

К чему там почти все таблицы (да и в Красочность). Оставьте только нужные … (в Красочность это красочность лицо, красочность оборот, нумерация).

0

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 12:55

 [ТС]

10

бывает что нужно отдельно кр лица и кр оборота…по моему они все нужные, может их связывать лучше не подстановкой???

0

ltv_1953

Эксперт MS Access

17139 / 7005 / 1567

Регистрация: 21.06.2012

Сообщений: 13,110

17.09.2015, 13:08

11

Еще раз: запрос красочность

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT [красочность лицо]![красочность лицо]
+[красочность оборот]![красочтость оборота]
+[нумерация]![нумерация] AS [красочность бланка], заказ.[id зак]
FROM [ширина бумаги] INNER JOIN ([формат ширина] 
INNER JOIN ([формат длина] INNER JOIN (тираж 
INNER JOIN (нумерация INNER JOIN ([красочность оборот] 
INNER JOIN ([красочность лицо] INNER JOIN (Заказчик 
INNER JOIN ([длина бумаги] INNER JOIN (([вес бумаги м кв] 
INNER JOIN бумага ON [вес бумаги м кв].Код = бумага.вес) 
INNER JOIN заказ ON бумага.[id бум] = заказ.бумага) 
ON [длина бумаги].Код = заказ.[длина бумаги]) ON Заказчик.[Id зак-к] = заказ.заказчик) 
ON [красочность лицо].[id кр л] = заказ.[красочность л]) 
ON [красочность оборот].[id кр оборот] = заказ.[красочность о]) 
ON нумерация.[id №№] = заказ.нумерация) ON тираж.[Id тир] = заказ.тираж) 
ON [формат длина].[id формат дл] = заказ.[длина бланка]) 
ON [формат ширина].[id формат ш] = заказ.[ширина бланка]) 
ON [ширина бумаги].Код = заказ.[ширина бумаги];

Для вычисления [красочность бланка] нужны только три таблицы, зачем все остальные? В запросах должны быть только те таблицы, которые нужны.

0

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

17.09.2015, 14:44

 [ТС]

12

делала в режиме конструктора, там этого не видно

Добавлено через 1 час 31 минуту
может такая проблема выскочить из-за использования подстановок???

0

Эксперт MS Access

7267 / 4469 / 288

Регистрация: 12.08.2011

Сообщений: 13,513

18.09.2015, 05:19

13

Лучший ответ Сообщение было отмечено VinniPuh как решение

Решение

Поля подстановок в таблицах недопустимы.

1

hrutsik

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

18.09.2015, 09:31

 [ТС]

14

сделала без подстановок, все равно если через конструктор делать join-ит все теблицы! отсюда и перегрузка видимо.
поубирала лишние, вроде работатет:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT IIf(INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина])>(INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина])),
INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина]),
INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина]))
 AS [оптимальное количество бланков на листе]
FROM [ширина бумаги] 
INNER JOIN ([формат ширина] 
INNER JOIN ([формат длина] 
INNER JOIN ([длина бумаги] 
INNER JOIN заказ 
ON [длина бумаги].Код = заказ.[id длина бумаги]) 
ON [формат длина].[id формат дл] = заказ.[id длина бланка]) 
ON [формат ширина].[id формат ш] = заказ.[id ширина бланка]) 
ON [ширина бумаги].Код = заказ.[id ширина бумаги];

нет ли ошибок?

0

8704 / 5476 / 571

Регистрация: 27.03.2013

Сообщений: 18,806

18.09.2015, 09:58

15

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

нет ли ошибок?

Если это не БД на 10000 уже забитых ральных данных, типа тестовая, то я что бы перепровериться открываю табличку, удаляю ВСЁ.
Жму в меню
Сжать и восстановить.
Закрываю БД, Открываю БД и начинаю вводить всё по новой.
Обычно это очень даже хорошо помогает и ошибки уже не присутствуют.

0

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

18.09.2015, 12:21

 [ТС]

16

PuhKMV, не помогло…
поменяла связи убрала подстановки, 2 запроса написала работают, новый выдает «введите параметр»..
даже если просто запись из таблицы вызываешь…

0

8704 / 5476 / 571

Регистрация: 27.03.2013

Сообщений: 18,806

18.09.2015, 12:28

17

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

…убрала подстановки,…

ну это в таблицах. а в формах перепроверились.
Как часто бывало в детстве
Создал форму по таблице. затем 8 раз всё поменял, а в форме позабыл, и целую неделю репу чешешь, типа где ошибка.
Явно же аксик не всегда указывает где несоответствие.
Я обычно в таких случаях лезу сразу в-
— Источник записей
— Списки
— Поля со списком
— Подчиненные формы

0

hrutsik

0 / 0 / 0

Регистрация: 08.01.2015

Сообщений: 62

18.09.2015, 12:58

 [ТС]

18

там нет форм…только таблицы…может связи не верно установлены??? запуталась совсем…

п.с. почему если через конструктор запросов пишу, то лишние таблицы join-тся??

Добавлено через 22 минуты
подскажите как исправить?! н срочно работу сдать.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 SELECT 35*([красочность лицо]![красочность лицо]+[красочность оборот]![красочтость оборота])+
([тираж]![тираж]/(IIf(INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина])>(INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина])),INT([ширина бумаги]![ширина]/[формат ширина]![ширина])*INT([длина бумаги]![длина]/[формат длина]![длина]),INT([ширина бумаги]![ширина]/[формат длина]![длина])*INT([длина бумаги]![длина]/[формат ширина]![ширина]))))*(IIf([тираж]![тираж]<=100,0.07,IIf(Eval([тираж]![тираж]>100 AND [тираж]![тираж]<=200),0.05,IIf(Eval([тираж]![тираж]>200 AND [тираж]![тираж]<=1000),0.03,IIf(Eval([тираж]![тираж]>1000 AND [тираж]![тираж]<=2000),0.02,IIf(Eval([тираж]![тираж]>2000),0.01,0)))))) AS техотходы
FROM [ширина бумаги] 
INNER JOIN ([формат ширина] 
INNER JOIN ([формат длина] 
INNER JOIN (тираж 
INNER JOIN (нумерация 
INNER JOIN ([красочность оборот] 
INNER JOIN ([красочность лицо] 
INNER JOIN ([длина бумаги] 
INNER JOIN заказ 
ON [длина бумаги].Код = заказ.[длина бумаги])  
ON [красочность лицо].[id кр л] = заказ.[красочность л]) 
ON [красочность оборот].[id кр оборот] = заказ.[красочность о]) 
ON нумерация.[id №№] = заказ.нумерация) 
ON тираж.[Id тир] = заказ.тираж) 
ON [формат длина].[id формат дл] = заказ.[длина бланка]) 
ON [формат ширина].[id формат ш] = заказ.[ширина бланка]) 
ON [ширина бумаги].Код = заказ.[ширина бумаги];

не срабатывает, просит параметр…

0

Эксперт MS Access

17139 / 7005 / 1567

Регистрация: 21.06.2012

Сообщений: 13,110

18.09.2015, 13:12

19

Какой? Ищите по имени параметра, поля какой таблицы не хватает в запросе. И добавьте ее в запрос.

0

8704 / 5476 / 571

Регистрация: 27.03.2013

Сообщений: 18,806

18.09.2015, 13:23

20

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

0

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

18.09.2015, 13:23

20

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

ВЫБРАТЬ

       ЗначенияСвойствОбъектов.Объект КАК Объект,

       ЗначенияСвойствОбъектов.Свойство КАК Свойство,

       ВЫБОР

           КОГДА ЗначенияСвойствОбъектов.Значение.Код = 211

                   ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 212

               ТОГДА «Ликероводочные изделия в т.ч.:»

           ИНАЧЕ ВЫБОР

                   КОГДА ЗначенияСвойствОбъектов.Значение.Код = 250

                           ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 251

                       ТОГДА «Напитки винные в т.ч.:»

                   ИНАЧЕ ВЫБОР

                           КОГДА ЗначенияСвойствОбъектов.Значение.Код = 400

                                   ИЛИ ЗначенияСвойствОбъектов.Значение.Код = 410

                               ТОГДА «Вина в т.ч.:»

                           ИНАЧЕ ЗначенияСвойствОбъектов.Значение

                       КОНЕЦ

               КОНЕЦ

       КОНЕЦ КАК Значение1,

       ЗначенияСвойствОбъектов.Значение КАК Значение

   ИЗ

       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

   ГДЕ

       ЗначенияСвойствОбъектов.Свойство = &КОДПр

Причем если выкинуть хоть какое-нибудь условие (одно) то все работает.

полнотекстовый поиск или запрос

Автор denis-moscow1987, 19 июл 2014, 10:18

0 Пользователей и 1 гость просматривают эту тему.

СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(«», 20);
СписокПоиска.ПолучатьОписание = Истина;
МассивМД = Новый Массив();
МассивМД.Добавить(Метаданные.сПРАВОЧНИКИ.ДоговорыКонтрагентов);
СписокПоиска.ОбластьПоиска = МассивМД;
СписокПоиска.СтрокаПоиска = «КЛЦ»;
СписокПоиска.РазмерПорции = «20»;
СписокПоиска.ПерваяЧасть();
Если СписокПоиска.ПолноеКоличество() = 0 Тогда
   Если СписокПоиска.СлишкомМногоРезультатов() Тогда
      Сообщить(«Слишком много результатов, уточните запрос.»);
   КонецЕсли;
   Возврат;
КонецЕсли;
Колво = СписокПоиска.ПолноеКоличество();
Реквизит1 = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
Сообщить(Реквизит1);
вот код, поиск идет по всем реквизитам справочника, а как сделать чтобы
1.поиск шел только по наименованию?
2. пометить на удаление выдачу поиска.
спасибо


Чем вам не нравится НайтиПоНаименованию() или запрос??
К чему такая экзотика?

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Цитата: cska-fanat-kz от 21 июл 2014, 15:20
Чем вам не нравится НайтиПоНаименованию() или запрос??
К чему такая экзотика?

:D Видать человек не знает что в запросе можно искать по «Подобно» , а найти по наименованию возвращает 1 элемент)
В данном случае надо использовать запрос в условии Где пишем Контрагенты.Наименование Подобно &СтрокаПоиска.
Устанавливаем в параметр СтрокаПоиска шаблон поиска, далее в выборке если надо получаем объекты и делаем с ними что хотим.


Обновлено: 11.04.2023

У меня есть восемь таблиц, которые содержат информацию об изменениях, вносимых в приложения по всей компании. Я только хочу запросить и объединить строки для подмножества более 200 приложений. Для этого я запрашиваю каждую таблицу по коду приложения (AAA, BBB и т. Д.) И хочу объединить результаты. Когда я использую более 5 кодов приложения, я получаю ошибку «Запрос к комплексу».

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

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

3 ответа

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

Если вы не используете подстановочные операторы в рамках критериев для like , вы можете альтернативно использовать in и предоставить список кодов приложений:

Кроме того, вы можете создать таблицу, содержащую все коды приложений, которые вы хотите вернуть (в следующем примере я назвал такую таблицу ApplicationCodes , содержащую одно поле с именем Code ), а затем использовать простое объединение для неявного применения фильтрации, например:

Я бы порекомендовал вам создать таблицу, в которой есть все приложения, тогда вы могли бы сделать всего 8 запросов

Если вам это не нравится, вы можете попробовать предложение IN

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

Создайте таблицу (например, ApplicationChanges) с полями объединенных таблиц и добавьте дополнительное поле ChangedAt , которое будет содержать старое имя таблицы. Возможно, старые таблицы содержат поле даты, которое показывает дату ChangedAt, тогда вы можете опустить имя таблицы и запрос, какие даты принадлежат этой таблице.

Затем используйте запрос @LeeMacs для заполнения новой таблицы:

Если вам нужна старая структура данных, создайте запросы для каждой предыдущей таблицы с критерием ChangedAt. Например. Таблица [2019-07-A July 5 to 7]

Алексей Чужов

Алексей Чужов

Возьмите др клиентов,вычтите из этих дат сутки.Затем можно например передать в переменные ДеньВчерРожд=день(ДатаРождМинусОдин);
МесяцВчерРожд=месяц(датаРождМинусОдин);
У вас получиться номер месяца вчерашнего дня рождения и дюномер дня вчерашнего др.А затем сравните их с номером дня и номером месяца текущей даты.Вообщем если не понятно или еще не сделали пишите,не мложно это.Единственный шаткий момент это високосные года.

Юрий Чернов

Где именно хотите получить — в запросе, в СКД, в отчете?
Вообще, чем не устраивает задать дату рождения между:
конечная дата -конец дня текущей даты,
начальная дата — начало дня текущей даты — 24 часа.
В отбор попадут нужные клиенты.
Или у вас дата разбита — отдельно день, отдельно месяц, отдельно год?

Валентина Ивановна

Юрий, СКД. Дата разбита: отдельно День, Месяц. И когда задала Дату рождения Между (ДеньГода) — получила. что-то непонятное.

Юрий Чернов

Вот как—то так: ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, 1984 — 1), МЕСЯЦ, 12 — 1), ДЕНЬ, 31 — 1) КАК Поле1 . Только вместо цифр года, месяца и дня подставить свои данные из запроса. Суть, берем дату 01.01.0001 и прибавляем день месяц и год. Если год не нужен, его можно опустить. Ну, тем более, имея уже собранную дату, вроде бы не сложно придумать нужное сравнение.

Дмитрий Сметанин

Дмитрий Сметанин запись закреплена

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

Данислав Мингалёв

Здарова. Я сам когда-то только начинал работать с 1С. И тоже начинал с экселя. Я бы помог, но времени совсем щас нет. У меня осталась обработка на которой я тренировался. Там и загрузка написана и выгрузка. Может поможет.

Читайте также:

  • Как связаны объекты конфигурации и объекты базы данных 1с
  • Программа в топе как работает
  • Как прошить asus zc500tg
  • Как выйти в интернет без браузера на андроид
  • Как в фотошопе сделать 3д обложку

полнотекстовый поиск или запрос

Автор denis-moscow1987, 19 июл 2014, 10:18

0 Пользователей и 1 гость просматривают эту тему.

СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(«», 20);
СписокПоиска.ПолучатьОписание = Истина;
МассивМД = Новый Массив();
МассивМД.Добавить(Метаданные.сПРАВОЧНИКИ.ДоговорыКонтрагентов);
СписокПоиска.ОбластьПоиска = МассивМД;
СписокПоиска.СтрокаПоиска = «КЛЦ»;
СписокПоиска.РазмерПорции = «20»;
СписокПоиска.ПерваяЧасть();
Если СписокПоиска.ПолноеКоличество() = 0 Тогда
   Если СписокПоиска.СлишкомМногоРезультатов() Тогда
      Сообщить(«Слишком много результатов, уточните запрос.»);
   КонецЕсли;
   Возврат;
КонецЕсли;
Колво = СписокПоиска.ПолноеКоличество();
Реквизит1 = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
Сообщить(Реквизит1);
вот код, поиск идет по всем реквизитам справочника, а как сделать чтобы
1.поиск шел только по наименованию?
2. пометить на удаление выдачу поиска.
спасибо


Чем вам не нравится НайтиПоНаименованию() или запрос??
К чему такая экзотика?

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Цитата: cska-fanat-kz от 21 июл 2014, 15:20
Чем вам не нравится НайтиПоНаименованию() или запрос??
К чему такая экзотика?

:D Видать человек не знает что в запросе можно искать по «Подобно» , а найти по наименованию возвращает 1 элемент)
В данном случае надо использовать запрос в условии Где пишем Контрагенты.Наименование Подобно &СтрокаПоиска.
Устанавливаем в параметр СтрокаПоиска шаблон поиска, далее в выборке если надо получаем объекты и делаем с ними что хотим.


  • Следует уделять внимание на проблему экологии грамматические ошибки
  • Слишком обогащенная смесь ошибка
  • Слишком низкое бортовое напряжение 2114 ошибка
  • Слишком много хештегов инстаграм ошибка
  • Следит затем чтобы не было ошибок