Имя: Пароль:
1C
 
Приведение типов в запросе - полный финиш!
Ø (PR 15.06.2008 13:25)
0 Atlant
 
11.06.08
15:08
Всем доброго времени суток!

Я ща изучаю 8ку и попадаю в шок! %-/ Тоже мне сделали "усовршенствование языка и механизма запросов"!!! полная херня!! Если ЭЛЕМЕНТАРНОЕ ПРИВЕДЕНИЕ СТРОКИ К ЧИСЛУ сделать нельзя на лету, проверить в условии потом, использовать функции языка 1С в условиях - то это же д.мо собачье, а не механизм!!!
Перелопатил весь форум на эту тему и НИЧЕГО ТУТ НЕТ!!

Я тут просто задам ВОПРОС:
 - есть ли возможность хотя бы ВНЕШНИЕ ФУНКЦИИ использовать в хваленых запросах 8ки?! Как?
1 ТелепатБот
 
гуру
11.06.08
15:08
2 Sadovnikov
 
11.06.08
15:10
(0) Чё шумишь? Как смогли, так и сделали. И, сдается мне, что есть там сто-то типа Выразить.
3 hhhh
 
11.06.08
15:12
(2) ВЫРАЗИТь - это совсем другое. Не вешай человеку лапшу на уши.
5 Atlant
 
11.06.08
15:17
(2) эта залипуха "Выразить" работает только с однородными типами - может преобразовывать Строка(10) в Строка(5) и Число(18, 3) в Число(15, 2)!! А ещё состанвые типы которые использовать можно только с бодуна! :(
Больше она ни на что не годится! У неё видишь ли есть список ДОПУСТИМЫХ пар типов при преобразовании!
Они что, НЕ СМОГЛИ сделать функцию приведения всех ЭЛЕМЕНТАРНЫХ типов к друг другу????! :( Значит ввести хрень типа "план видов (!) характеристик" они могут! А такую мелочь - это у них не вяжется!! :)
6 Maxus43
 
11.06.08
15:19
(5) зачем так эмоционировать? все вопросы в техподдержку 1с, на форуме они не сидят обычно
7 Sadovnikov
 
11.06.08
15:19
(3) Не поленился, посмотрел. Выразить = Case.
(5) Даже так? Сильно...
8 Sadovnikov
 
11.06.08
15:19
+(7) Блин, очепятался...
Выразить = Cast
9 Hadgehogs
 
11.06.08
15:24
(0) Полный финиш - это код "Отражения зарплат в рег. учете".. А это - так, детские сопли...
10 Terv
 
11.06.08
15:26
а зачем в запросе внешние функции? ну 7ке бывало полезно из за ограниченности языка, а в 8ке то зачем?
11 Grek224
 
11.06.08
15:28
Ничего не понимаю о чем они говорят :)
12 Sadovnikov
 
11.06.08
15:28
(9) А что там? Не томи... Расскажи... :)
(5) Ты погуляй по ветак "Семерка или восьмерка" и посмотри, как там франчи "запросы" восьмерошные расхваливают :)
13 trdm
 
11.06.08
15:28
он про пиведение говорит, а не про внешние функции.
14 Grek224
 
11.06.08
15:30
запрос нужен для выборки. выбирать там можно все что хочешь и как хочешь . ссылочных аномалий там нет. а если хочешь что то проверять заменять вычислять кроме вычисляемых полей запроса то вперед с песней ВЫБОРКА.СЛЕДУЮЩИЙ()
. так оно правильнее же
15 Hadgehogs
 
11.06.08
15:33
(12) Нельзя. Это может травмировать психическое здоровье участников форума и отразиться на их сексуальных предпочтениях в будущем...
16 афаф
 
11.06.08
15:34
(9) жжешь. :-)

По теме - и так нормально. Но если аффтар темы нас осчастливит новой версией платформы с приведением типов - я не против...
17 Sadovnikov
 
11.06.08
15:38
(14) " вперед с песней ВЫБОРКА.СЛЕДУЮЩИЙ()" - очень сильно... И итоги ручками пересчитаем, и кучу лишних данных на клиента вернем, и будем делать на клиенте то, на что рассчитан сервер...
(15) :)
18 Maxus43
 
11.06.08
15:39
ИМХО, приведение типов в запросе не нужно, можно обойтись... если надо например суммировать какието поля, то тип у них изначально должен числовой быть а не строковый.
19 hhhh
 
11.06.08
15:44
(8) странно ты как-то смотрел. Видимо без очков.
20 Sadovnikov
 
11.06.08
15:45
(19) Поясни?
21 Grek224
 
11.06.08
15:45
просто я что то сам не припомню всяких сравнений в запросе. есть же стандартные функции там. причем не мало их надо сказать вполне достаточно. а если число хочешь сравнивать потом в строки переводить и т д. по моему это чистое програмирование получается ни дать ни взять. при чем тут запросы то? не надо извращаться в запросах потом же сами не райдете крайнего. лучше сделайте один раз оптимальную выборку. да и вообще у меня такое ощущение что если хочется сильно сравнивать разные типы при чем несовместимые (т.е. строку "5" и число 5) то дело в изначально неверно заложенных типах данных. хотя это как вариант
22 Sadovnikov
 
11.06.08
15:51
(21) Блин, что у тебя в школе по русскому языку было? Ведь не читаемо абсолютно твое сообщение...
"это чистое програмирование получается " - а писать запросы - это не програмирование? Это так, пописать зайти?
Перед "вперед и с песней" очень не хило было бы спросить у автора, зачем ему нужна эта конвертация.
23 Chai Nic
 
11.06.08
15:53
Меня тоже удивляет, почему стандартный CAST так урезали, ведь фактически во всех sql-серверах он может преобразовать число в строку.
24 MSensey
 
11.06.08
16:15
(23) а в DB и Postgree ?
25 differs
 
11.06.08
16:34
(22) "программирование" в данном контексте это антоним к "созданию запросов"
26 BabySG
 
11.06.08
17:55
Автор не врубается в само понятие "запрос", если хочет в нем вызывать внешние функции...
27 Fragster
 
гуру
11.06.08
18:00
ну на самом деле, какого в ТСкуле можно CAst Varchar as Date сделать, а здесь - нет? :( но в целом - запросы 8.х мне лично намноооого больше нравятся... и работают быстрее
28 Grek224
 
11.06.08
18:25
я за пунктуацией не слежу и по рускому было у меня не очень  Sadovnikov мне это побарабану как то. на програмирование не влияет отладка рулит :). а зачем кому понадобилось эта конвертация особо не поясняется. т.е. прямой задачи не стоит а отсюда абстрактные рассуждения и мои и других форумчан в том числе. Всю жизнь запросом вытягивали подборку данных а дальше обрабатывали различными извращениями циклируясь по ней если такие извращения нужны. а создание запросов да по моему это не в чистом виде "кодание" а в первую очередь правильная работа с данными будет Вам известно Sadovnikov, которая кстати должна строиться изначально на верных типах данных а не преобразовываться на лету то в один тип то в другой. И безусловно я вполне могу представить ситуацию когда надо извратиться и из говна сделать конфетку, но это отдельная песня.
29 Читатель
 
11.06.08
18:33
Я чота не пойму, а в ANSI SQL есть такое преобразование ? Если есть - косяк 1С, если нет - дасвидания.
30 Grek224
 
11.06.08
18:37
и под Хорошая 1С или плохая в данном уже контексте вопрос не должен катить. Я наверное просто на вскидку не вижу необходимости в преобразованиях налету.
31 Grek224
 
11.06.08
18:41
почему сразу косяк. не думаешь что 1Сники подумали и решили А НАФИГА ЭТО НАМ НАДО?. может быть конечно у них руки не дошли до этого.
32 Grek224
 
11.06.08
18:43
сколько развивается 1С 8 и классические СУБД и встроенные в них SQL язык. сколько там стандартов SQL уже мы пережили на своем веку? Если уж сравнивать то тут правильнее 77 и 8 сравнивать. вот тут и будет крыться ответ а что же стало лучше. безусловно контруктор запросов 8 это практически конфетка.
33 i-rek
 
11.06.08
20:47
(0) Юзай СКД вместо запросов - там пользовательские функции есть.
Или юзай временные таблицы: сделал выборку, вернул в результат запросаЮ обработал встроенным языком, засунул обратно и шпарь запросами дальше
34 i-rek
 
11.06.08
20:49
А если честно, преобразование чисел в строки нужно лишь при форматировании вывода, а СКД прекрасно с этим справляетсч
35 BabySG
 
12.06.08
12:26
Вердикт по теме: автор сел в лужу, ибо кричал по незнанию предмета.
36 Atlant
 
13.06.08
00:03
(28) :-/ если программер не могёт мыслить абстрактно и эмпирически - то он не готов к воплощению действительно творческих задач - ему подавай предметику с четкими рельсами - "скажите где мне рельсы проложить и я - так уж и быть, создам неповторимые рельсы по этому чертежу!" :)
Ситуация очень простая:
-- есть договоры контрогентов. в них существует классификация по типу отгружаемой с производства продукции. типов продукции - ограниченное количество. и договора (так уж сложилось) ВСЕГДА на один тип продукции. операторов много и заглядывать в ж.пу договору чтобы узнать какой на какую продукцию никто не будет. поэтому разработчиком внесено изменение - нумерация договоров ведется с префиксом по типу продукции. по каждому префиксу номерация ведется сквозная и своя. мне ПРОСТО НУЖНО УЗНАВАТЬ - ПОСЛЕДНИЙ НОМЕР договора по префиксу, вне зависимости от контрагента, и сравнивать его с тем, который вводит оператор. дабы дата нового договора по типу продукции случайно не перевалила за уже существующий номер - чтобы хронологию номеров соблюсти.
 Конечно я решил задачу во время обработки данных. НО!! это залипуха! я так считаю! просто потому, что в 7КЕ я бы сделал это одним запросом и всё!!! а тут ещё писать код!! это не есть красота программирования! (вообще писал я просто от шока - что такая простая вещь, как преобразование - не может быть выполнена на лету!).
 Наколупать раздельные составляющие номера у договора тоже можно или вообще использовать встроенный механизм выдавания номеров - но контроль зыбкий и существуют ПРОПУЩЕННЫЕ (резерв) номера! которые - дозволительно использовать!
38 trdm
 
13.06.08
01:02
(26) В любом приличном сервере есть механизмы расширений запросов функциями, от хранимых процедур и пользовательских функций до ЦДК/АПИ на С/С++.
пойди лучше мануал почитай, вместо того что-бы умничать...
39 Один С
 
13.06.08
11:00
(36) я конечно дико извиняюсь, но вот такой простенький код вернет последний номер договора, с учетом префикса:

Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ ПЕРВЫЕ 1
   |    ДоговорыКонтрагентов.Код КАК Код
   |ИЗ
   |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
   |ГДЕ
   |    ДоговорыКонтрагентов.Код ПОДОБНО ""TLT%""
   |
   |УПОРЯДОЧИТЬ ПО
   |    Код УБЫВ";
Рез=Запрос.Выполнить().Выбрать();
Пока Рез.Следующий() Цикл
Сообщить(Рез.Код);
КонецЦикла;
40 BabySG
 
13.06.08
12:49
(36) Решения неправильно задачи, вот и проблема
(37) Почему такие, как ты, постоянно орут по незнанию предмета?
Используй СКД - там есть внешние функции, только потом ты будешь орать, а почему так сложно все.
(38) Покажи мне в С/С++ объект "Справочник" или "Документ" или, может, сумеешь указатель наваять в 1С? А знаешь, почему такого нет? Потому что это решения для разных областей. Поэтому иди и почитай мануал по сям и по 1С и найди отличия.
Иначе получиться, что от автовоза будет требовать разгона, как от порша.
41 PR
 
13.06.08
13:43
(0) >>Тоже мне сделали "усовршенствование языка и механизма запросов"!!!
Так и есть, я в восторге!

>>Если ЭЛЕМЕНТАРНОЕ ПРИВЕДЕНИЕ СТРОКИ К ЧИСЛУ сделать нельзя на лету
Нельзя, се ля ви.

>>есть ли возможность хотя бы ВНЕШНИЕ ФУНКЦИИ использовать в хваленых запросах 8ки?!
Да. Но только в СКД, а не в обычных запросах.
42 PR
 
13.06.08
13:43
(2) Смотри (3), точно :))
43 PR
 
13.06.08
13:45
(5) То, что ты не разобрался для чего нужно ВЫРАЗИТЬ, еще не значит, что 1С облажалась.
ВЫРАЗИТЬ нужно для того, чтобы из значения составного типа выразить значение конкретного типа. И ТОЛЬКО!
44 PR
 
13.06.08
13:47
(10) А как ты например решишь задачу поиска в запросе всех контрагентов с натиенованием "Вася" независимо от регистра? :))
То есть должны найтись "Вася", "вася", "ВАСЯ", "ВАся" и т. д. :)))
45 PR
 
13.06.08
13:58
(18) Приведение нужно не для суммирования :))
Есть и другие задачи :))
46 trdm
 
13.06.08
14:16
(40)
Вот тебе справочник:
class  CRefContext;
Вот тебе документ:
class  CDocActModule;
class  CDocContext;
class  CDocEnvironContext;
class  CDocFindDlg;
class  CDocForm;
class  CDocListPos;
class  CDocSetSelectDlg;
class  CDocTransacter;
Вот тебе указатель:
   вТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
   вТаблЗнач.НоваяКолонка("Х","Число",2);
   СЦ = 0;
   Для СЦ = 1 По 10 Цикл
       вТаблЗнач.НоваяСтрока();    вТаблЗнач.Х = СЦ;
   КонецЦикла;
   
   вУказатель = вТаблЗнач;
   
   вТаблЗнач.ВыбратьСтроки();
   Пока вТаблЗнач.ПолучитьСтроку() = 1 Цикл
       Сообщить("Оригинальная ТЗ:" + вТаблЗнач.Х);
   КонецЦикла;

   вУказатель.ВыбратьСтроки();
   Пока вУказатель.ПолучитьСтроку() = 1 Цикл
       Сообщить("Указатель:" + вУказатель.Х);
   КонецЦикла;

Все есть. А вообще в (40) бред написан.
47 trdm
 
13.06.08
14:25
(40) Существует множество задач, которые требуют преобразования.
Например имеет смысл хранить дату и время документа в одном поле используя тип данных сервера DataTime. Способ извлечения даты из этого поля MSSQL->Cast.
Для расчета поздравлялок используется дата рождения сотрудника т.е. тип Date.
Что-бы определиться кого поздравлять сегодня-завтра достаточно выделить месяц и день. Опять функция.
Если эти элементарные вещи приходится делать ч/з задницу (довешивать по полю на каждый док или элемент справочника), значит в консерватории что-то не так.
Видимо ты просто имеешь мало опыта и не сталкивался с задачами приведения. ну или как вариант просто недалек слегка..
48 PR
 
13.06.08
14:35
(37) Еще раз такой словесный понос и будешь забанен в секции
49 BabySG
 
13.06.08
14:43
(46)
Угу, а теперь пройдись по нему запросом в стиле 1С, нарисуй кучу соединений и покричи, что сервера облажались и даже в 1С есть обращение "через точку"
И, видимо, указатель в твоем понимании, отличается от моего. Что бы далеко не ходить, реализуй мне на 1С указатель на массив указателей. Раньше частенько сталкивался с конструкциями вида **pointer
"В общем в (46) бред написан" (с)

(47)
Я думаю, что функция МЕЖДУ приятно вас удивит...
"Видимо, ты просто имеешь мало опыта" (с)
"Ну, или как вариант - просто недалек слегка" (с)
Ибо не все задачи надо решать тупо в лоб.
50 trdm
 
13.06.08
14:59
(49) И чем функция "Между" мне поможет в случае поздравлялки? Я так понимаю она булевая и возвращает труе, когда дата находится между двумя датами?
А год ты во внимание принял? Это мне что на каждый год надо будет вызывать твою хваленую функцию вместо того, что-бы просто вытащить месяц/день?
51 PR
 
13.06.08
15:06
(47) >>Что-бы определиться кого поздравлять сегодня-завтра достаточно выделить месяц и день. Опять функция.
Логично. И в языке запросов она есть :))
52 trdm
 
13.06.08
15:08
(51) Если она узкоспецифичная, то это не решает проблему в комплексе.
53 BabySG
 
13.06.08
15:17
(50) Уважаемый, если плохо знаете язык запросов в 8 - не стоит пытаться обвинить ее в неполноценности.

(52) Проблема, как выяснилось, возникла из-за "странного" подхода к решению задачи.
54 PR
 
13.06.08
15:18
(52) Я тебя не понимаю.

>>Что-бы определиться кого поздравлять сегодня-завтра достаточно выделить месяц и день.
Именно это две функции и делают. Что тебе еще надо?
55 Atlant
 
13.06.08
20:01
(48) ??! оппа! выкинуть МЕНЯ? слышь, ведущий, может в (4) заглянешь и с иммортолом перетрешь, как следует обращаться по имени в форуме, а то я что то не понял - дятлоговорящих тут особо уважают??! А?! :((( а то давай введем официальные правила общения:
1. начинать свое высказывание форумчане-мистовчане обязаны со слов "дятел", "выхухоль" и "членоголовый".
2. всех, кого задевает данное обращение - после первого предупреждения выкидываем с форума без возможности повторной регистрации!
...
а то, как то все очень туманно! мои ответы на его дятлов - это "словесный понос", а он - млин, молодец судя по всему!
:-/
короче спасибо за справедливый и взвешенный подход, PR! :(я конечно сожалею, что ПРИХОДИТСЯ отвечать хаму на понятном ему языке, но если бы ВЕДУЩИЕ следили за этим - я думаю, было бы проще обмениваться действительно дельными мыслями!!):
56 IT Михаил
 
13.06.08
20:32
(0)не полный )
58 Atlant
 
13.06.08
21:08
(39) ОДИН С - КРАССАВЧИК!! :)
Молодчина! Отличный код! Во где тонкие знания языка запросов! Так с первого взгляда - просто, а ведь додумался ж!! Последний номер мы получили, сравнивать на больше меньше как цифры - будем при пост обработке!! УЖЕ КОЕ ЧТО!! :)
СПАСИБО!
З.Ы. и никакие скулы нам не нужны!! ;)
59 i-rek
 
13.06.08
22:57
ну плохо в языке запросов c преобразованием типов. Давайте признаем. Критично ли это ? Да при наличии трехзвенки язык запросов вообще не обязан быть. Вон в навижн вообще языка запросов нет и двухзвенка. А в аксапте в языке запросов немеряно ограничений. И живут же.
60 Immortal
 
14.06.08
00:26
(55)
1. ты дрыгаешь ногами и клювом потому что ничего не знаешь про язык запросов в 8.х и в ms sql.
2. ты и не хочешь этого знать.
3. отсюда вывод - имхо ты дятел.
61 Masquerade
 
14.06.08
02:17
(0)
То, что было в 7.7 - вообще не запросы. Хрень какая-то.
62 SnarkHunter
 
14.06.08
07:13
То, что есть в 7.7 - полноценнные запросы на полноценном T-SQL...
63 BabySG
 
14.06.08
13:11
(62) ПлакалЪ...
64 Masquerade
 
14.06.08
13:17
Гкхм... Я вообщем взглянул поглубже на 7.7 (в части запросов). Иопта, да это ж PL/SQL! ТОлько какой-то более крутой! (Неосязаемо)
65 Grek224
 
14.06.08
20:22
Похоже все разругались и обиделись.! Ребята давайте жить жружно уважая друг друга. Кто то более опытен кто то менее, но не надо этим кичиться пройдет пара лет еще и ламусы станут вполне понимающими людьми. Дело не в говне 1С как таковом а в особенностях при работе. Я когда с дельфей на 1С переходил мне казало что без четкой типизации данных вообще невозможно жить и кстати поначалу мне было тяжело перестроить сознание к 1С. А теперь думаю что надо подходить к работе с учетом особенностей 1С. Ну непривычно порой иногда через жопу кое что надо делать а покажите среду разработки где все идельально, опустим данный контекст. Могу обосрать КЛИКОМ ГОВНО парочку языков програмирования, но зная их сильные стороны я все же повременю с этим так как буду изначально неправ:))
66 trdm
 
14.06.08
20:59
(63) вместо того что-бы распускать сопли, научись пользоваться инструментами.
67 BabySG
 
14.06.08
21:06
(66) Угу, не спорю - стоит ВАМ научиться пользоваться инструментами, а то будете в 8-ке изобретать периодические реквизиты :)

Запросы в 8-ке наиболее приближены к реальности и смыслу их использования. А вот если пытаться на них изобрести калькулятор - то, естественно, они будут неудобны.
68 trdm
 
14.06.08
21:43
(67) пока в планах 8-ки нет. Реорганизуем пока свою 7-ю БД. не до 8-ки.
но вот в 7-ке T-SQL рулит реально и конкретно.
69 BabySG
 
14.06.08
22:09
(68)
В семерке есть ALTER TABLE? Или, может, CREATE DATABASE? А, там, наверное, есть триггеры!
Как "нету"? Мне тут уже несколько человек говорили, что в 7-ке полноценный T-SQL!
70 Masquerade
 
15.06.08
02:19
(69)
Не парься, (68)-ой в забытьи и  суровом неадеквате. Он Р.Е.О.Р.Г.А.Н.И.З.У.Е.Т. свою, уже седьмую БД!! Его не остановишь!
71 trdm
 
15.06.08
03:41
(69) Все там есть. Если твои глаза не разучились видеть можешь посмотреть тут:
http://www.1cpp.ru/forum/YaBB.pl?board=query
Обсуждаются прямые запросы.
Странно было бы обсуждать в более чем тысяче тем то чегоо не существует.
72 trdm
 
15.06.08
03:46
(70) че смешного? втыкаем в торговую БД SRM, рефакторю справочники.
ПС. это если конечно понимаешь о чем я.
73 trdm
 
15.06.08
03:52
(70) с вами идиотами уже даже и не смешно...
74 Masquerade
 
15.06.08
04:03
Ну мля, тэрэдэмэ просто убил всех наповал. Он принёс всем СЛОВО!
75 Sadovnikov
 
15.06.08
11:22
(73) +100
(69) И Alter Table есть, и Create Database. (62) про это и написал.
76 Grek224
 
15.06.08
13:11
похоже тема себя изжила и начинет превращаться из ветки в жизненную историю каждого из нас :)))) мне нравиться
77 PR
 
15.06.08
13:15
(76) То есть мне закрыть тему? :))
78 trdm
 
15.06.08
13:18
закрывай.
79 Grek224
 
15.06.08
13:24
видимо да
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой