Вход | Регистрация
    1  2   
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Помогите с прямым запросом

v7: Помогите с прямым запросом
Я
   Бамагите
 
21.03.21 - 17:17
есть вот такой простой запрос
ТекстЗапроса = "
    |SELECT
    |    Спр.ID as [Ссылка $Справочник.Номенклатура],
    |    $Спр.Марка as [Марка $Справочник.Марка]
    |FROM
    |    $Справочник.Номенклатура AS Спр

в результатах выполнения запроса поле Марка пусто. Не могу понять почему. Марка это реквизит справочника Номенклатура, тип Справочник.Марка
   Злопчинский
 
1 - 21.03.21 - 17:23
я, как плавающий в прямых запросах сначала писал бы максимально просто
    |SELECT
    |    Спр.ID,
    |    $Спр.Марка
    |FROM
    |    $Справочник.Номенклатура AS Спр
   Злопчинский
 
2 - 21.03.21 - 17:24
что скажет на такое?
   Злопчинский
 
3 - 21.03.21 - 17:26
...ну и попутно у меня вызывает сомнение что у тебя именно такая архитектура для марочного учета..
получаетяс у тебя для КАЖДОЙ МАРКИ в справочнике НОМЕНКЛАТУРА - отдельная карточка номенклатуры...?
смысл тогда заводить отдельны справочник марко... пиши ВСЕ ДАННЫЕ о марке - СРАЗУ в карточку номенклатуры.. ;-)
   Бамагите
 
4 - 21.03.21 - 17:55
(1) в справочнике Номенклатура хранятся автозапчасти. Реквизит Марка соответственно от какой марки авто эта запчасть.
при таком запросе частично поле Марка заполняется, но очень мало где, при том что поле у товаров проставлено. При типизации в запросе у этих товаров в поле Марка отображается "Объект не найден"
   acanta
 
5 - 21.03.21 - 18:00
Требуется ли в этом же запросе получить id справочника марки и воспользоваться левым соединением?
   Бамагите
 
6 - 21.03.21 - 18:10
(5) в целом мне нужно выбирать товары с фильтром по марке авто, по модели, по кузову, а я даже просто марку выбрать не могу...
   hhhh
 
7 - 21.03.21 - 18:13
(0) почему Спр.ID без доллара, а $Спр.Марка с долларом? Это так и задумано?
   AAA
 
8 - 21.03.21 - 18:20
Марка - случайно не периодический реквизит справочника Номенклатура ?
   Бамагите
 
9 - 21.03.21 - 18:24
(8) нет
(7) такие правила
   Бамагите
 
10 - 21.03.21 - 18:25
Обычным черным запросом все работает, но оооочень долго
   Злопчинский
 
11 - 21.03.21 - 18:27
(4) а, ну тады понятно. что это не марочный учет, уже легче ;-)
   evorle145
 
12 - 21.03.21 - 18:27
(8) что такое "переодический" реквизит? о_О
   Злопчинский
 
13 - 21.03.21 - 18:28
(4) "при таком запросе частично поле Марка заполняется, но очень мало где,"
- значит мало где введено
   Злопчинский
 
14 - 21.03.21 - 18:28
(4) "При типизации в запросе у этих товаров в поле Марка отображается "Объект не найден""
- битые ссылки.
   Злопчинский
 
15 - 21.03.21 - 18:30
(4) для начала - если это дбф - убить все индексные файлы и переиндексироватьяс начистовую
   vladmenleo
 
16 - 21.03.21 - 18:32
(8) ставлю именно на это
(12) тут речь про 7.7 однако
   Злопчинский
 
17 - 21.03.21 - 18:35
(16) раз все тривиально. а не работает - значит автор на троллит и не все говорит...
   acanta
 
18 - 21.03.21 - 18:39
(10) Галочку отбор в свойствах реквизита марка не ставили?
   AAA
 
19 - 21.03.21 - 18:39
Причин может быть несколько
1 - периодический реквизит
2 - действительно мало где заполнен
3 - справочник не "Марка", а например "Марки". Точно не помню, но по моему ругаться не будет, а будет неверно типизтроваться
   AAA
 
20 - 21.03.21 - 18:40
(18)Галочка [X] - Отбор по моему никак не влияет
   vladmenleo
 
21 - 21.03.21 - 18:40
(0) попробуй так
вместо $Спр.Марка as [Марка $Справочник.Марка]
напиши  $ПоследнееЗначение.Марка.Марка(Спр.ID, :НужнаяДата) Марка
и параметр поставь типа ТекущаяДата()
   acanta
 
22 - 21.03.21 - 18:42
(20) в черном запросе используются индексы если они есть. В этом не знаю.
   vladmenleo
 
23 - 21.03.21 - 18:43
(17) почему я поставил на периодику - когда пишешь в черном запросе, то там по умолчанию берется последнее значение, а в прямом нужно это явно указать
   Mikeware
 
24 - 21.03.21 - 20:06
для начала, если не признаешься в типах и периодичности - дай скрин справочника  "номенклатура" из конфигуратора.
ну и попробуй
SELECT
    Спр.ID as [Ссылка $Справочник.Номенклатура],
    $Спр.Марка as [Марка $Справочник.Марка]
  FROM
      $Справочник.Номенклатура AS Спр
ORDER BY $Спр.Марка DESC

или

SELECT
    Спр.ID as [Ссылка $Справочник.Номенклатура],
    $Спр.Марка as [Марка $Справочник.Марка]
  FROM
      $Справочник.Номенклатура AS Спр
where $Спр.Марка <> $ПустойИд
   Злопчинский
 
25 - 21.03.21 - 20:48
(22) индексы - строятся по галке "Сортировка". А галка "Отбор" - исключительно для визуальных форм для фильтрации по значению поля.
   Злопчинский
 
26 - 21.03.21 - 20:49
(25) ..то есть индексы и по "отбор" м.б строятся, но доя чорных запросов не используются
   Mikeware
 
27 - 21.03.21 - 21:10
(26) а разве отбор без сортировки возможен? под рукой клюшек нет, снес все нахрен очередной раз...
   dmitryds
 
28 - 21.03.21 - 21:37
может быть $Спр.Марка as [Марка $Справочник.Марки]
?
   Злопчинский
 
29 - 21.03.21 - 23:53
(27) отбор без сортировки - нет, наоборот - да. (так что - лень смотреть в DD - скорее всего отбор юзает индекс сортировки)
   trdm
 
30 - 22.03.21 - 09:49
(28) ТОже подозреваю, что так.
 
 Рекламное место пустует
   Mikeware
 
31 - 22.03.21 - 10:42
(30) матюкнется жеж, на то, что не знает, к чему типизировать...
(29) дык! "сортировка" строит индекс, а отбор - позволяет его использовать интерактивно.
   Бамагите
 
32 - 22.03.21 - 10:54
(21) Марка не периодический реквизит
(28) нет
(24) https://pastenow.ru/BXW8T
   trdm
 
33 - 22.03.21 - 11:02
(32) (0) > в результатах выполнения запроса поле Марка пусто. Не могу понять почему. Марка это реквизит справочника Номенклатура, тип Справочник.Марка
Возможно само заполнение поля в спр. Номенклатура совсем не "спр.марка", т.к. запрос просто не типизирует, а к примеру др. справочник.
   Mikeware
 
34 - 22.03.21 - 11:04
(32) по скрину видно, что не периодический. Теперь уточни тип значения реквизита Марка.
запросы из (24), особенно последний - что говорят?
   trdm
 
35 - 22.03.21 - 11:05
(4) > При типизации в запросе у этих товаров в поле Марка отображается "Объект не найден"
Это явно показывает на это.
Может шаловливые ручки просто погуляли по справочнику и поудаляли часть записей "спр. марка."
   trdm
 
36 - 22.03.21 - 11:12
Если есть архив, то можно просто сравнить к примеру кол-во записей.
   Mikeware
 
37 - 22.03.21 - 11:14
- мальчик, тебя как звать??
--
- ты что, тормоз?
-- Вася!
- а сколько тебе лет, Вася?
-- сам ты тормоз!!!
©
   trdm
 
38 - 22.03.21 - 11:14
(36) + ну и восстановить недостающие из архива. DTS-ом перетянуть к примеру.
   Бамагите
 
39 - 22.03.21 - 11:35
(34) https://pastenow.ru/BXWHT
(24) вот такой запрос
|SELECT
    |    Спр.ID as [Ссылка $Справочник.Номенклатура],
    |    $Спр.Марка as [Марка $Справочник.Марка]
    |FROM
    |    $Справочник.Номенклатура AS Спр
    |WHERE
    |    (( UPPER( STRTRAN( Спр.DESCR,          ""-"","""" )) LIKE '%" + сПоиска + "%' )  OR
    |    (  UPPER( STRTRAN( $Спр.ДопИнформация, ""-"","""" )) LIKE '%" + сПоиска + "%' )  OR
    |    (  UPPER( STRTRAN( $Спр.Артикул,       ""-"","""" )) LIKE '%" + сПоиска + "%' )  OR
    |    (  Спр.CODE                                          LIKE '%" + сПоиска + "%' )) AND
    |   (  $Спр.Марка <> $ПустойИд )
    |ORDER BY $Спр.Марка DESC

выдает https://pastenow.ru/BXWOS
   Бамагите
 
40 - 22.03.21 - 11:36
https://pastenow.ru/BXWOS
у всех этих позиций выбрана Марка AUDI
   Mikeware
 
41 - 22.03.21 - 11:40
(40) если типизацию поля Марка убрать из запроса - что выдаст?
представление справочника "Марка" - в виде  кода, и код пустой?
   AAA
 
42 - 22.03.21 - 11:56
Чудес не бывает. Запрос тривиальный. Если реквизит не периодический (этой картинки я так и не увидел), то теоретически могут быть
кривые индексы, но маловероятно. Возьми элемент номенклатуры с нормальной маркой и посмотри что для него выдает запрос без типизации. Напиши запрос к справочнику Марка, выбери все поля и посмотри какие там ID. Что-то тут не то
   Mikeware
 
43 - 22.03.21 - 12:00
(42) картинки в (32)(39) Не периодическй.
Просто, похоже, ТСу помощь нахрен не нужна.
   Бамагите
 
44 - 22.03.21 - 12:03
(42) без типизации:
https://pastenow.ru/BXX1X
   Бамагите
 
45 - 22.03.21 - 12:03
(43) помощь очень нужна, но оперативно отвечать не могу
   AAA
 
46 - 22.03.21 - 12:07
Какой то странный ID без типизации. А плоскую выборку справочника Марка глянуть бы ?
   Mikeware
 
47 - 22.03.21 - 12:09
если в dds SP8959 -это поле Марка справочника Номенклатура - то покажи, скрин где оно заполнено.
И срави элемент "колодки" и "ябагаж"
   Mikeware
 
48 - 22.03.21 - 12:11
(46) нормальный ид
   AAA
 
49 - 22.03.21 - 12:14
(48)Какой он нормальный, сколько же у него там марок ?
   Mikeware
 
50 - 22.03.21 - 12:17
(49) 5 миллионов 598 тысяч 945. запись создана в информационной базе № 815 :-)
   Злопчинский
 
51 - 22.03.21 - 12:23
танцевать надо от (1) и (4)
всё.
   Бамагите
 
52 - 22.03.21 - 12:29
(46) выборка марок: https://pastenow.ru/BXXCO
(1) https://pastenow.ru/BXXDR
(4) запустил выгрузку загрузку, жду. Переиндексация не помогла.
   Бамагите
 
53 - 22.03.21 - 12:34
   Бамагите
 
54 - 22.03.21 - 12:35
(47) кстати база ДБФ
   Mikeware
 
55 - 22.03.21 - 12:41
(54) на таком запросе - пофиг.
(52) привязано это поле на форме точно к реквизиту Марка?
   Mikeware
 
56 - 22.03.21 - 12:44
"ЯМусор, ябагаж" -  зачёт!
   Бамагите
 
57 - 22.03.21 - 12:48
(55) да, проверил
   Mikeware
 
58 - 22.03.21 - 12:51
(57)  в dds SP8959 -это поле Марка справочника Номенклатура ?
   AAA
 
59 - 22.03.21 - 12:53
Почему в плоской выборке СПРАВОЧНИКА Марка Id как у обычной базы, а в выборке из номенклатуры как распределенной ?
   Бамагите
 
60 - 22.03.21 - 13:12
вот что показывает ДБФ навигатор
https://pastenow.ru/BXXVA

(58) да, https://pastenow.ru/BXXVV
(59) у нас УРБД, это как-то влияет?
 
 Рекламное место пустует
   Ёпрст
 
61 - 22.03.21 - 13:19
(60) запрос на чем хоть ? vfpoledb, надеюсь ?
   Ёпрст
 
62 - 22.03.21 - 13:19
какой объект используешь для создания запроса ?
   Бамагите
 
63 - 22.03.21 - 13:26
(61)
База = СоздатьОбъект("OLEDBData");    
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
   Mikeware
 
64 - 22.03.21 - 13:50
(59) ну создавали в нераспределенной, потом распределили...
(60) судя по картинке нафигатора - запрос тянет чото не то
|SELECT
 |    Спр.ID as [Ссылка $Справочник.Номенклатура],
 |    Спр.SP8959 as [Марка $Справочник.Марка]
 |FROM
 |    $Справочник.Номенклатура AS Спр

нормально отработает?
   Бамагите
 
65 - 23.03.21 - 06:37
Привет, простите за долгое отсутствие

(64) запрос
|SELECT
    |    Спр.ID as [Ссылка $Справочник.Номенклатура],
    |    Спр.SP8959
    |FROM
    |    $Справочник.Номенклатура AS Спр
возвращает тоже самое :(
https://pastenow.ru/BY7YM
   Бамагите
 
66 - 23.03.21 - 06:41
https://pastenow.ru/BY80B
а вот это показывает база после выгрузки-загрузки
   Mikeware
 
67 - 23.03.21 - 07:42
(66) сдается мне, что у тебя с dd что-то, или  с подключением к базе. я с дбф прямыми работал мало, терзай Ёп'а
   Бамагите
 
68 - 23.03.21 - 14:26
Попробовал через 1SQlite:
БазаДанных = СоздатьОбъект("SQLiteBase");
    БазаДанных.Открыть(":memory:");
    Запрос = БазаДанных.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("create virtual table Товары using dbeng(Справочник.Номенклатура)");
    Текст = "SELECT
    |code Код,
    |id [Товар :Справочник.Номенклатура],
    |Товары.Марка [Марка :Справочник.Марка]
    |From Товары
    |WHERE
    |    (( UPPER( REPLACE( Товары.DESCR,          ""-"","""" )) LIKE '%" + сПоиска + "%' )  OR
    |    (  UPPER( REPLACE( Товары.ДопИнформация, ""-"","""" ))  LIKE '%" + сПоиска + "%' )  OR
    |    (  UPPER( REPLACE( Товары.Артикул,       ""-"","""" ))  LIKE '%" + сПоиска + "%' )  OR
    |    (  Товары.CODE                                          LIKE '%" + сПоиска + "%' ))
    //|   (  Товары.Марка <> $ПустойИд )

    //|ORDER BY Товары.Марка

    |";

https://pastenow.ru/BYCOG

через 1SQLite работает исправно... Чтото не так с 1С++ ?
   Mikeware
 
69 - 23.03.21 - 14:30
(68) смотри или dd или строку подключения. нечто похоже у меня было, когда я писал сам "типо драйвер для дбф", и ошибся в вычислении оффсета в записи...
   Ёпрст
 
70 - 23.03.21 - 15:21
(68) всё так. Скорее всего,в словарике описания полей идут не в том порядке, что в самом дбф.
   Ёпрст
 
71 - 23.03.21 - 15:21
Такое бывает, если новые реквизиты добавляли ручонками в дбф
   Djelf
 
72 - 23.03.21 - 15:45
+(71) Видимо еще что-то делали: https://gyazo.com/b9f823564e6a8f825c4adf1831d84f46
Как оно вообще еще работает? oO
   Бамагите
 
73 - 23.03.21 - 16:07
(72) Год и Комментарий это строки неограниченной длины, может поэтому их нет в dd
Удалил dd, создал заново, год и комментарий не появились в dd
запрос от 1cpp также криво отрабатывает
неужели это изза длинных строк?
   Mikeware
 
74 - 23.03.21 - 16:09
(72) а откедова у тебя dd? читер?
   Бамагите
 
75 - 23.03.21 - 16:11
(74) в (60) я его показывал
   Mikeware
 
76 - 23.03.21 - 16:14
(75) ааа.... сапсэм йа плёхой стал...
   Ёпрст
 
77 - 23.03.21 - 16:14
(73) нет. Тут все дело в волшебных реквизитах строка 999
   Mikeware
 
78 - 23.03.21 - 16:14
(75) ну выклади куда-нибудь мд/дд..
   Ёпрст
 
79 - 23.03.21 - 16:15
(73) строки неогр.длины хрпнятся в блобе..через ж..пу
   Mikeware
 
80 - 23.03.21 - 16:17
но "год" - неограниченной длины - это, как минимум, оригинально...
там, наверное, описывется, все произошедшее за этот год...
   Mikeware
 
81 - 23.03.21 - 16:24
(79) наследие тех времен, когда в единицах ГБ измеряли диск, а не озу
   dmitryds
 
82 - 23.03.21 - 16:54
(73) Вы прикалываетесь? Ни на одном скрине нет справочника марок. Везде справочник Номенклатура. Покажите в дереве конфигурации справочник Марок.
Все уже давно поняли, что реквизит справочника Номенклатура называется Марка. А теперь покажите справочник из которого выбирается это значение. (скрин дерева конфигуратора и скрин свойства поля Номенклатура.Марка)
   Бамагите
 
83 - 23.03.21 - 17:25
(82) скрин дерева https://pastenow.ru/BYF47
скрин поля Марка https://pastenow.ru/BYF4U
   Бамагите
 
84 - 23.03.21 - 17:28
   Mikeware
 
85 - 23.03.21 - 18:32
(82) анахуа он вам, пардон за мой французский?
(89) хм. чой-то я забыл, как там должно быть с полями неограниченой длины. завтра доковыряю.
   AAA
 
86 - 23.03.21 - 18:47
с полями неограниченной длины отдельная история, они хранятся, как уже тут было сказано, в отдельном файле, да еще и нарезаны блоками. Давно имел дело, мало приятного
   Ёпрст
 
87 - 23.03.21 - 19:05
(86) да. скульлайт их нормально тащит, через фокс нужно писать обработку блоков..текст запроса валяется на 1cpp
   Mikeware
 
88 - 23.03.21 - 19:32
(86) (87) а почему их в дд нет?
   Mikeware
 
89 - 23.03.21 - 19:35
может, как вариант решения, сдвинуть их в конец списка реквизитов?
в конце концов, он же тянет не "неограниченные", а вполне себе ссылки...
   Ёпрст
 
90 - 23.03.21 - 19:40
(88) они же в блобе валяются, в отдельной табличке
   dmitryds
 
91 - 23.03.21 - 20:08
(84) запрос верный. Могу только предложить попробовать проверить длину значения, которое возвращается, может тут проблема.
Потому что если подсунуть просто текстовый id из любой таблицы и указать правильно тип, то 1С++ его правильно преобразует.
   Ёпрст
 
92 - 23.03.21 - 20:40
Короче, ответ в (77) 
Выкинь нахрен КомментарийJapan Строка 999 ..или сделай его короче. И всё будет работать и через vfpoledb
Иметь такие строки, ну это полный пэ.
   Злопчинский
 
93 - 23.03.21 - 21:57
(92) то есть vfp просто не понимает такую длину строки и возвращает что-то кривое?
   Mikeware
 
94 - 24.03.21 - 09:14
(93) vfp не учитыввает поля, котоых нет в этом dbf
(0) корроче, убираешь все свои суперполя (бесконечные и супердлинные) в конец списка реквизитов
https://prnt.sc/10u161h
, и все начинает работать
https://prnt.sc/10u161h
   Mikeware
 
95 - 24.03.21 - 09:18
+(94)  последняя ссылка - https://prnt.sc/10u1bgj
   Mikeware
 
96 - 24.03.21 - 09:19
блин, все поперепутал
https://prnt.sc/10u1ccx
   Ёпрст
 
97 - 24.03.21 - 09:27
(94) там одно поле все портит..строка 999, омтальные можно не трога ть
   Djelf
 
98 - 24.03.21 - 11:25
+(97) Точно. Очень мало с фоксом работал, забыл уже.
(0) Максимальная длина текстового поля для фокса 255 символов. Когда в поле 256 символов и больше фокс начинает сбоить на все последующие поля после этого поля.
Передвинь КомментарийJapan в самый низ, либо используй 1sqlite, в нем этой проблемы нет.
   Mikeware
 
99 - 24.03.21 - 12:03
(97) (98) поле ДопИнформация - строка 500
   Mikeware
 
100 - 24.03.21 - 12:03
Ну да ладно, проблема решена, моск немного размяли
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.