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

в результатах выполнения запроса поле Марка пусто. Не могу понять почему. Марка это реквизит справочника Номенклатура, тип Справочник.Марка
2 Злопчинский
 
21.03.21
17:24
что скажет на такое?
3 Злопчинский
 
21.03.21
17:26
...ну и попутно у меня вызывает сомнение что у тебя именно такая архитектура для марочного учета..
получаетяс у тебя для КАЖДОЙ МАРКИ в справочнике НОМЕНКЛАТУРА - отдельная карточка номенклатуры...?
смысл тогда заводить отдельны справочник марко... пиши ВСЕ ДАННЫЕ о марке - СРАЗУ в карточку номенклатуры.. ;-)
4 Бамагите
 
21.03.21
17:55
(1) в справочнике Номенклатура хранятся автозапчасти. Реквизит Марка соответственно от какой марки авто эта запчасть.
при таком запросе частично поле Марка заполняется, но очень мало где, при том что поле у товаров проставлено. При типизации в запросе у этих товаров в поле Марка отображается "Объект не найден"
5 acanta
 
21.03.21
18:00
Требуется ли в этом же запросе получить id справочника марки и воспользоваться левым соединением?
6 Бамагите
 
21.03.21
18:10
(5) в целом мне нужно выбирать товары с фильтром по марке авто, по модели, по кузову, а я даже просто марку выбрать не могу...
7 hhhh
 
21.03.21
18:13
(0) почему Спр.ID без доллара, а $Спр.Марка с долларом? Это так и задумано?
8 AAA
 
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) а, ну тады понятно. что это не марочный учет, уже легче ;-)
12 evorle145
 
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) для начала - если это дбф - убить все индексные файлы и переиндексироватьяс начистовую
16 vladmenleo
 
21.03.21
18:32
(8) ставлю именно на это
(12) тут речь про 7.7 однако
17 Злопчинский
 
21.03.21
18:35
(16) раз все тривиально. а не работает - значит автор на троллит и не все говорит...
18 acanta
 
21.03.21
18:39
(10) Галочку отбор в свойствах реквизита марка не ставили?
19 AAA
 
21.03.21
18:39
Причин может быть несколько
1 - периодический реквизит
2 - действительно мало где заполнен
3 - справочник не "Марка", а например "Марки". Точно не помню, но по моему ругаться не будет, а будет неверно типизтроваться
20 AAA
 
21.03.21
18:40
(18)Галочка [X] - Отбор по моему никак не влияет
21 vladmenleo
 
21.03.21
18:40
(0) попробуй так
вместо $Спр.Марка as [Марка $Справочник.Марка]
напиши  $ПоследнееЗначение.Марка.Марка(Спр.ID, :НужнаяДата) Марка
и параметр поставь типа ТекущаяДата()
22 acanta
 
21.03.21
18:42
(20) в черном запросе используются индексы если они есть. В этом не знаю.
23 vladmenleo
 
21.03.21
18:43
(17) почему я поставил на периодику - когда пишешь в черном запросе, то там по умолчанию берется последнее значение, а в прямом нужно это явно указать
24 Mikeware
 
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) ..то есть индексы и по "отбор" м.б строятся, но доя чорных запросов не используются
27 Mikeware
 
21.03.21
21:10
(26) а разве отбор без сортировки возможен? под рукой клюшек нет, снес все нахрен очередной раз...
28 dmitryds
 
21.03.21
21:37
может быть $Спр.Марка as [Марка $Справочник.Марки]
?
29 Злопчинский
 
21.03.21
23:53
(27) отбор без сортировки - нет, наоборот - да. (так что - лень смотреть в DD - скорее всего отбор юзает индекс сортировки)
30 trdm
 
22.03.21
09:49
(28) ТОже подозреваю, что так.
31 Mikeware
 
22.03.21
10:42
(30) матюкнется жеж, на то, что не знает, к чему типизировать...
(29) дык! "сортировка" строит индекс, а отбор - позволяет его использовать интерактивно.
32 Бамагите
 
22.03.21
10:54
(21) Марка не периодический реквизит
(28) нет
(24) https://pastenow.ru/BXW8T
33 trdm
 
22.03.21
11:02
(32) (0) > в результатах выполнения запроса поле Марка пусто. Не могу понять почему. Марка это реквизит справочника Номенклатура, тип Справочник.Марка
Возможно само заполнение поля в спр. Номенклатура совсем не "спр.марка", т.к. запрос просто не типизирует, а к примеру др. справочник.
34 Mikeware
 
22.03.21
11:04
(32) по скрину видно, что не периодический. Теперь уточни тип значения реквизита Марка.
запросы из (24), особенно последний - что говорят?
35 trdm
 
22.03.21
11:05
(4) > При типизации в запросе у этих товаров в поле Марка отображается "Объект не найден"
Это явно показывает на это.
Может шаловливые ручки просто погуляли по справочнику и поудаляли часть записей "спр. марка."
36 trdm
 
22.03.21
11:12
Если есть архив, то можно просто сравнить к примеру кол-во записей.
37 Mikeware
 
22.03.21
11:14
- мальчик, тебя как звать??
--
- ты что, тормоз?
-- Вася!
- а сколько тебе лет, Вася?
-- сам ты тормоз!!!
©
38 trdm
 
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
41 Mikeware
 
22.03.21
11:40
(40) если типизацию поля Марка убрать из запроса - что выдаст?
представление справочника "Марка" - в виде  кода, и код пустой?
42 AAA
 
22.03.21
11:56
Чудес не бывает. Запрос тривиальный. Если реквизит не периодический (этой картинки я так и не увидел), то теоретически могут быть
кривые индексы, но маловероятно. Возьми элемент номенклатуры с нормальной маркой и посмотри что для него выдает запрос без типизации. Напиши запрос к справочнику Марка, выбери все поля и посмотри какие там ID. Что-то тут не то
43 Mikeware
 
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) помощь очень нужна, но оперативно отвечать не могу
46 AAA
 
22.03.21
12:07
Какой то странный ID без типизации. А плоскую выборку справочника Марка глянуть бы ?
47 Mikeware
 
22.03.21
12:09
если в dds SP8959 -это поле Марка справочника Номенклатура - то покажи, скрин где оно заполнено.
И срави элемент "колодки" и "ябагаж"
48 Mikeware
 
22.03.21
12:11
(46) нормальный ид
49 AAA
 
22.03.21
12:14
(48)Какой он нормальный, сколько же у него там марок ?
50 Mikeware
 
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) кстати база ДБФ
55 Mikeware
 
22.03.21
12:41
(54) на таком запросе - пофиг.
(52) привязано это поле на форме точно к реквизиту Марка?
56 Mikeware
 
22.03.21
12:44
"ЯМусор, ябагаж" -  зачёт!
57 Бамагите
 
22.03.21
12:48
(55) да, проверил
58 Mikeware
 
22.03.21
12:51
(57)  в dds SP8959 -это поле Марка справочника Номенклатура ?
59 AAA
 
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";
64 Mikeware
 
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
а вот это показывает база после выгрузки-загрузки
67 Mikeware
 
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С++ ?
69 Mikeware
 
23.03.21
14:30
(68) смотри или dd или строку подключения. нечто похоже у меня было, когда я писал сам "типо драйвер для дбф", и ошибся в вычислении оффсета в записи...
70 Ёпрст
 
23.03.21
15:21
(68) всё так. Скорее всего,в словарике описания полей идут не в том порядке, что в самом дбф.
71 Ёпрст
 
23.03.21
15:21
Такое бывает, если новые реквизиты добавляли ручонками в дбф
72 Djelf
 
23.03.21
15:45
+(71) Видимо еще что-то делали: https://gyazo.com/b9f823564e6a8f825c4adf1831d84f46
Как оно вообще еще работает? oO
73 Бамагите
 
23.03.21
16:07
(72) Год и Комментарий это строки неограниченной длины, может поэтому их нет в dd
Удалил dd, создал заново, год и комментарий не появились в dd
запрос от 1cpp также криво отрабатывает
неужели это изза длинных строк?
74 Mikeware
 
23.03.21
16:09
(72) а откедова у тебя dd? читер?
75 Бамагите
 
23.03.21
16:11
(74) в (60) я его показывал
76 Mikeware
 
23.03.21
16:14
(75) ааа.... сапсэм йа плёхой стал...
77 Ёпрст
 
23.03.21
16:14
(73) нет. Тут все дело в волшебных реквизитах строка 999
78 Mikeware
 
23.03.21
16:14
(75) ну выклади куда-нибудь мд/дд..
79 Ёпрст
 
23.03.21
16:15
(73) строки неогр.длины хрпнятся в блобе..через ж..пу
80 Mikeware
 
23.03.21
16:17
но "год" - неограниченной длины - это, как минимум, оригинально...
там, наверное, описывется, все произошедшее за этот год...
81 Mikeware
 
23.03.21
16:24
(79) наследие тех времен, когда в единицах ГБ измеряли диск, а не озу
82 dmitryds
 
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
85 Mikeware
 
23.03.21
18:32
(82) анахуа он вам, пардон за мой французский?
(89) хм. чой-то я забыл, как там должно быть с полями неограниченой длины. завтра доковыряю.
86 AAA
 
23.03.21
18:47
с полями неограниченной длины отдельная история, они хранятся, как уже тут было сказано, в отдельном файле, да еще и нарезаны блоками. Давно имел дело, мало приятного
87 Ёпрст
 
23.03.21
19:05
(86) да. скульлайт их нормально тащит, через фокс нужно писать обработку блоков..текст запроса валяется на 1cpp
88 Mikeware
 
23.03.21
19:32
(86) (87) а почему их в дд нет?
89 Mikeware
 
23.03.21
19:35
может, как вариант решения, сдвинуть их в конец списка реквизитов?
в конце концов, он же тянет не "неограниченные", а вполне себе ссылки...
90 Ёпрст
 
23.03.21
19:40
(88) они же в блобе валяются, в отдельной табличке
91 dmitryds
 
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 просто не понимает такую длину строки и возвращает что-то кривое?
94 Mikeware
 
24.03.21
09:14
(93) vfp не учитыввает поля, котоых нет в этом dbf
(0) корроче, убираешь все свои суперполя (бесконечные и супердлинные) в конец списка реквизитов
https://prnt.sc/10u161h
, и все начинает работать
https://prnt.sc/10u161h
95 Mikeware
 
24.03.21
09:18
+(94)  последняя ссылка - https://prnt.sc/10u1bgj
96 Mikeware
 
24.03.21
09:19
блин, все поперепутал
https://prnt.sc/10u1ccx
97 Ёпрст
 
24.03.21
09:27
(94) там одно поле все портит..строка 999, омтальные можно не трога ть
98 Djelf
 
24.03.21
11:25
+(97) Точно. Очень мало с фоксом работал, забыл уже.
(0) Максимальная длина текстового поля для фокса 255 символов. Когда в поле 256 символов и больше фокс начинает сбоить на все последующие поля после этого поля.
Передвинь КомментарийJapan в самый низ, либо используй 1sqlite, в нем этой проблемы нет.
99 Mikeware
 
24.03.21
12:03
(97) (98) поле ДопИнформация - строка 500
100 Mikeware
 
24.03.21
12:03
Ну да ладно, проблема решена, моск немного размяли
101 Бамагите
 
24.03.21
13:17
Спасибо, Друзья! :)