Имя: Пароль:
1C
 
Как узнать имя ЗНАЧЕНИЯ перечисления через Запрос
0 Alexey_Morov
 
18.05.11
20:34
1. Можно 0% (0)
2. Нельзя 0% (0)
3. Можно, но через плохое место 0% (0)
4. Как же так??? 0% (0)
Всего мнений: 0

У меня есть запрос вида

SELECT ВыдачаДенежныхДокументов.ВидОперации
FROM Документ.ВыдачаДенежныхДокументов AS ВыдачаДенежныхДокументов

поле ВидОперации - ссылка на перечисление ВидыОперацийВыдачаДенежныхДокументов.

Мне нужно используя объект Запрос вытащить у ЗНАЧЕНИЯ перечисления:
имя
синоним
комментарий
порядок

Работаю через COM-соединение.
Как же так???

Таким образом вопрос - можно ли вытащить через Запрос эти данные?
1 Живой Ископаемый
 
18.05.11
21:16
нет
2 Fragster
 
гуру
18.05.11
21:19
нафига?
3 Immortal
 
18.05.11
21:20
ВЫБОР КОГДА блаБла = ЗНАЧЕНИЕ() ТОГДА
КОГДА блаБла = ЗНАЧЕНИЕ() ТОГДА
4 Immortal
 
18.05.11
21:21
с порядком надо подумать, да
5 Живой Ископаемый
 
18.05.11
21:21
ну да, то есть чтобы через запрос узнать указанные совйства значения перечисления нужно их знать наперед еще до выполнения запроса. :)
6 Immortal
 
18.05.11
21:29
посмотрел, порядок и так запросом можно вытащить
синоним - представление
7 Immortal
 
18.05.11
21:30
перечисление - такая же таблица - обратился и вытащил все значения
8 Alexey_Morov
 
19.05.11
10:55
Immortal, нужно вытащить именно в запросе и обязательно поля "имя", "синоним", "комментарий". Ссылку и порядок можно вытащить. Я уже посмотрел.
Как быть?
9 Живой Ископаемый
 
19.05.11
10:58
если ты в запрос передаешь ЗНАЧЕНИЕ() и внутри значение перечисления - то ты либо формируешь запрос динамически либо передаешь туда парметр - то есть так или иначение значение уже знаешь, снаружи запроса.. а раз так, то ты знаешь и все остальное.. и все это остальное можешь таким же манером передать в запрос
10 asady
 
19.05.11
11:02
11 Alexey_Morov
 
19.05.11
11:09
(10)

А можно ли как-нибудь так?

Запрос=новый запрос;
  запрос.Текст="ВЫБРАТЬ
           |    ВидыОС.Ссылка,
           |    ВидыОС.Порядок КАК Индекс,
           |    ВидыОС.Имя,
           |    ВидыОС.Комментарий
           |ИЗ
           |    Перечисление.ВидыОС КАК ВидыОС";
  Выборка=Запрос.Выполнить().Выбрать();
  Пока Выборка.Следующий() цикл
    Сообщить(""+Выборка.ссылка+" : "+Выборка.индекс);
  конецЦикла;

Как же вытащить Имя и комментарий через запрос?
До запроса я не знаю ничего про перечисление.
12 Живой Ископаемый
 
19.05.11
11:12
нет
13 guitar_player
 
19.05.11
11:30
(0) Сделай до запроса ВТ со всеми свойствами, передай в запрос. либо после запроса сделай все что тебе надо...
14 Alexey_Morov
 
19.05.11
11:33
(13)
Остаётся только так. Последую Вашему совету.
15 Alexey_Morov
 
19.05.11
14:44
Господа, а ещё такой вопрос.
Как в запросе преобразовать ссылку в строку?

То есть вот так:
ВЫРАЗИТЬ ВЫРАЗИТЬ(ВидОперации.Ссылка КАК СТРОКА) КАК ВидОп
ИЗ Документ.ВыдачаДенежныхДокументов КАК ВыдачаДенежныхДокументов

поле ВидОперации - ссылка на перечисление ПеречислениеСсылка.ВидыОперацийВыдачаДенежныхДокументов

Мне нужно лишь строковое представление этой ссылки.
По сведениям, полученным от asady, у 1С нет преобразователя типов (аналога cast в MS SQL). В частности, нужно генерировать 2 промежуточных запроса, как asady доложил тут:
v8: Как в запросе преобразовать ссылку в строку, и прибавить к этой строке ещё строку..
16 Живой Ископаемый
 
19.05.11
14:46
да, нет, поэтому никак...
может быть ПРЕДСТАВЛЕНИЕ
17 Alexey_Morov
 
19.05.11
14:54
(16)
Пробовал ПРЕДСТАВЛЕНИЕ.
Выдаётся ошибка:
Неверные параметры в операции приведения. Нельзя преобразовывать поля неограниченной длины.
18 Живой Ископаемый
 
19.05.11
14:54
тогда все.
19 qwerty09
 
19.05.11
14:55
(16) пытаешся представление строки получить? о_0
20 Alexey_Morov
 
19.05.11
14:56
(19)

Да, нужно привести ссылку к строке. Почему-то cast и convert не работкают в 1С.
21 Живой Ископаемый
 
19.05.11
14:58
опять же, зная значения перечисления, можно типа так:
ВЫБОР КОГДА ВидОперации=ЗНАЧЕНИЕ(Перечисления.МоеПречисление.МоеЗначение) Тогда "МоеЗначение"
22 qwerty09
 
19.05.11
14:58
ПРЕДСТАВЛЕНИЕ() применимо к ссылочным типам, НО к сожалению недопускает последующей обработки полученной строки в запросе. Полученную таким образом строку конкатенировать с другой строкой не получится, что само по себе печально : (
23 qwerty09
 
19.05.11
14:59
(21) +1024, я так и выкручивался
24 Живой Ископаемый
 
19.05.11
15:00
что значит "почему-то" - потому что никто не говорил что будут работать
25 Лефмихалыч
 
19.05.11
15:04
Загробный адов сотонинский велосипед:

ЗначенияПеречисления = Новый ТаблицаЗначений;
ЗначенияПеречисления.Колонки.Добавить("Значение",Новый ОписаниеТипов("ПеречислениеСсылка.АмортизационныеГруппы"));
ЗначенияПеречисления.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", ,
                                                Новый КвалификаторыСтроки(128, ДопустимаяДлина.Переменная)));
ЗначенияПеречисления.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка", ,
                                                Новый КвалификаторыСтроки(128, ДопустимаяДлина.Переменная)));
ЗначенияПеречисления.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка", ,
                                                    Новый КвалификаторыСтроки(256, ДопустимаяДлина.Переменная)));

МетаданныеЗнаений = Метаданные.Перечисления.АмортизационныеГруппы.ЗначенияПеречисления;
Для СчЦ=0 по МетаданныеЗнаений.Количество() Цикл
   Строка = ЗначенияПеречисления.Добавить();
   Строка.Значение = Перечисления.АмортизационныеГруппы[СчЦ];
   ЗаполнитьЗначенияСвойств(Строка, МетаданныеЗнаений[СчЦ]);
КонецЦикла;

Запрос = новый Запрос("ВЫБРАТЬ
                     |    ВТ.Значение,
                     |    ВТ.Имя,
                     |    ВТ.СИноним,
                     |    ВТ.Комментарий,
                     |    ВТ.Порядок
                     |ПОМЕСТИТЬ ВТ
                     |ИЗ
                     |    &ВТ КАК ВТ
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    АмортизационныеГруппы.Ссылка,
                     |    ВТ.Имя,
                     |    ВТ.СИноним,
                     |    ВТ.Комментарий,
                     |    АмортизационныеГруппы.Порядок
                     |ИЗ
                     |    ВТ КАК ВТ
                     |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Перечисление.АмортизационныеГруппы КАК АмортизационныеГруппы
                     |        ПО ВТ.Значение = АмортизационныеГруппы.Ссылка");
Запрос.УстановитьПараметр("ВТ", ЗначенияПеречисления);
Запрос.Выполнить().Выгрузить().ВыбратьСтроку();
26 Живой Ископаемый
 
19.05.11
15:04
интересует ограничение - почему все это нужно делать в запросе.
27 Лефмихалыч
 
19.05.11
15:05
ну, там два бага есть...
28 Alexey_Morov
 
19.05.11
15:21
Лев Михайлович!

Здорово у Вас получилось перехитрить 1С!

Нельзя
29 Лефмихалыч
 
19.05.11
15:22
(28) только науя оно тебе надо, я до сих пор понять не могу
30 Alexey_Morov
 
19.05.11
15:23
Живой Ископаемый.

Ограничение такое - приведение к строке необходимо по причине динамического генерирования запроса средствами XSLT-преобразования и отсутствия понимания у "движка" будет ли в результате запроса присутствовать поле, ссылающееся на перечисление или нет.
Кроме того, приведение к строке необходимо для семантического поиска, подобие которого мы сейчас генерируем средствами C# + MS SQL 2008 + 1C.
31 Alexey_Morov
 
19.05.11
15:25
Лев Михайлович, механизм преобразования к строке необходим для получения метаданных путём запроса, а не тупого дёргания свойств через COM-коннектор.
32 Ахиллес
 
19.05.11
15:38
(31)Стесняюсь спросить, а сколько раз на дню у вас перечисления меняются?
33 Alexey_Morov
 
19.05.11
15:42
Не часто. Но вот пихать в запрос временную таблицу с расшифровкой перечисления, а потом с ней джойниться - самый плохой знак. Как минимум это приводит к падению производительности на 30-40%. Посмотрите профайлером и увидите!
34 Ахиллес
 
19.05.11
15:47
(33) Тебе результат в виде строки нужен? Ну и дёрни его 1 раз через метаданные по ком. Или ты боишься, что за время генерирования текста запроса у тебя перечисления поменяются?
35 Лефмихалыч
 
19.05.11
16:02
не нарушая лицензионного соглашения, вариантов мало

Можно
36 Alexey_Morov
 
19.05.11
16:05
Слушаюсь, Лев Михайлович.

Можно
37 Ахиллес
 
19.05.11
16:07
(35) Если лицензионное соглашение нарушает закон, то такое соглашение сворачивается в трубочку и запихивается в (_._) тому кто его придумал.
38 Лефмихалыч
 
19.05.11
16:09
(37) конкретика будет или влужупуком ограничимся? какой закон нарушает лицензионное соглашение 1С?
39 Ахиллес
 
19.05.11
16:10
(38) Ок. Давай тогда, какой пункт лицензии и как ты можешь нарушить. Я догадываюсь о чём ты, но хочу услышать это от тебя.
40 Лефмихалыч
 
19.05.11
16:11
(39) чтение напрямую из SQL или 1CD нарушает лицензионное соглашение. Я об этом говорил.
41 Лефмихалыч
 
19.05.11
16:12
(39) кстати, ты стрелки-то не переводи. Сказал А, говори и Б. Или это был таки-влужупук
42 Ахиллес
 
19.05.11
16:12
(40) Я понял, что ты об этом говорил, я хочу чтоб ты запостил этот пункт соглашения, мне самому лень. А, я откоменчу.
43 Alexey_Morov
 
19.05.11
16:13
Лев Михайлович, вот поэтому-то мы и думкаем, как обойтись стандартными средствами. Но в большинстве задач 1С нещадно тормозит. Поэтому ысоконагруженному приложению требется изредка убрать эту самую прослойку в виде 1С.
44 Живой Ископаемый
 
19.05.11
16:18
как только убираете прослойку, нарушаете лиц.соглашение...
45 Ахиллес
 
19.05.11
16:18
Если Лефмихалыч вернётся, передайте ему, что я на обед пошёл.
46 Alexey_Morov
 
19.05.11
16:24
Ахиллес

Слушаюсь.
Всё-таки было-бы интересно узнать пункт соглашения в соответствии с которым нарушается лицензионная целостность контракта.
47 Живой Ископаемый
 
19.05.11
16:26
http://v8.1c.ru/predpriyatie/questions_licence.htm

4. Для реализации своих задач Организация предполагает изменить структуру некоторых таблиц базы данных. Также предполагается использовать хранимые процедуры и триггеры для реализации обработки данных, реализовать экспорт данных путем прямого чтения таблиц, добавить новые индексы и изменить структуру некоторых индексов. Имеет ли Организация право вносить в систему перечисленные изменения?

Лицензионное соглашение не позволяет использовать недокументированные фирмой "1С" средства для построения решений на платформе 1С:Предприятие. Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки "1С:Предприятие" (включая ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.

Во всех остальных случаях лицензионное соглашение позволяет использовать для построения решений только штатные средства платформы. В частности, можно обращаться к данным информационной базы только при помощи объектов "1С:Предприятия", специально предназначенных для работы с данными (запросы, справочники, документы и т.д.). Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными "1С:Предприятия" - например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных "1С:Предприятия".

Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии "1С:Предприятия".
48 Живой Ископаемый
 
19.05.11
16:29
но это конечно не лиц. соглашение...
49 Лефмихалыч
 
19.05.11
16:51
(42) вот копипаста из %programfiles%\1cv82\8.2.11.229\licenses\1CEnterprise_ru.htm

Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:

*распространять ПРОГРАММНЫЙ ПРОДУКТ или отдельные его компоненты;

*вносить какие-либо изменения в код ПРОГРАММНОГО ПРОДУКТА, содержимое баз данных и других наборов данных, в которых система хранит информацию, за исключением тех изменений, которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;

* {!!!ВНИМАНИЕ БЛЕАТЬ!!!!} доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА и построение систем на основе ПРОГРАММНОГО ПРОДУКТА с помощью средств и технологических решений, не предусмотренных в сопроводительной документации;

совершать действия, результатом которых является устранение или снижение эффективности технических средств защиты авторских прав, применяемых Правообладателем, включая применение программных и технических средств "мультиплексирования", средств, изменяющих алгоритм работы программных или аппаратных средств защиты ПРОГРАММНОГО ПРОДУКТА, а также использовать ПРОГРАММНЫЙ ПРОДУКТ с устраненными или измененными без разрешения Правообладателя средствами защиты;

восстанавливать исходный код, декомпилировать и/или деассемблировать программную часть системы, за исключением тех случаев и лишь в той степени, в какой такая деятельность специально разрешена действующим законодательством.
50 Ахиллес
 
19.05.11
16:58
(48) Вот именно. Фирма 1С запрещает мне доступ к МОИМ данным, которые лежат в МОЕЙ СУБД (MSSQL)
Если учесть, что сервер бд и сервер 1С запросто могут жить на разных компьтерах (да хоть на разных континентах) и админится разными людьми, то вообще не понятно, какое отношение программа 1С имеет к совершено посторонним для неё программам и данным. Кроме того лицензия ограничивает тебя в праве пользоваться всеми возможностями ДРУГОЙ программы. Микрософт разрешил мне профайлером пользоваться, а 1С запретил, при этом профайлер 1С не принадлежит.
(48)ВСЁ СОДЕРЖИМОЕ, то бишь ВСЕ ДАННЫЕ принадлежат МНЕ и только МНЕ, имею право делать с ними всё, что захочу, никакая 1С не в праве ограничивать меня в доступе к МОЕЙ информацией.
>доступ к информационной базе ПРОГРАММНОГО ПРОДУКТА это вообще бред сивой кобылы. Никакой базы ПРОГРАММНОГО ПРОДУКТА в природе не существует. Базой данных является в данном случае программа MSSQL. Одинэс это всего лишь оболочка дешёвая. Нашлёпка на БАЗУ ДАННЫХ.
51 Лефмихалыч
 
19.05.11
16:58
Кстати, более у*бищного лицензионного соглашения я, пожалуй не видел. Оно опирается на понятие "Клиентская лицензия", отличное от понятия "Аппаратный ключ защиты", а определения этого понятия нет вообще ни где.
52 Живой Ископаемый
 
19.05.11
17:00
ну... короче, лиц. соглашение - это дело 10-е... я не думаю что это кто-то когда-то проверит, разве что решение будет тиражным...
просто суть в том, что язык запросов напрямую получить желаемое (0) не позволяет.
53 Лефмихалыч
 
19.05.11
17:05
(50) все верно - сноси 1С:Предприятие и пользуйся своими данными, как хочешь. Как этот идиотизм 1С себе представляет - ума не приложу, но в случае чего оправдаться будет довольно затратно по деньгам и времени.
54 Alexey_Morov
 
19.05.11
17:08
Господа, как же так? Ведь получается что 1С запрещает МНЕ получать доступ к МОИМ данным, которые лежат в МОЕЙ СУБД!!!
Это же противозаконно!!! Как же так??
55 Ахиллес
 
19.05.11
17:08
(53) Прикинь. Снесу 1С а данные то останутся. А если на компьютере 1С даже не ночевало никогда? Имею, я тогда право написать прямой скуль запрос и вытянуть из базы всё, что мне надо? Оттож! Мои права это мои права, а мои данные это мои данные.
56 Ахиллес
 
19.05.11
17:11
(54) Подай на них в суд. С требованием признать данный пункт соглашения недействительным.
57 Лефмихалыч
 
19.05.11
17:23
(55) можешь. Ты не можешь использовать 1С:Предприятие и одновременно прямые запросы к базе запрашивать. При этом если она у тебя установлена, значит используешь:

Лицензирование рабочего места

1. Доступ к ПРОГРАММНЫМ ПРОДУКТАМ осуществляется в один момент времени с такого количества рабочих мест, которое обозначено в Клиентской лицензии "1С:Предприятия 8", правомерно приобретенной Лицензиатом. При этом считается, что к ПРОГРАММНЫМ ПРОДУКТАМ получен доступ с данного компьютера и что они используются в тех случаях, когда осуществляется запись ПРОГРАММНЫХ ПРОДУКТОВ или их частей в память компьютера, а также в иных случаях, когда имеет место прямая или косвенная связь между компьютером, рабочей станцией, карманным персональным компьютером или иным цифровым электронным устройством и ПРОГРАММНЫМИ ПРОДУКТАМИ.
58 Лефмихалыч
 
19.05.11
17:24
(54) использовать 1С:Предприятие и получать доступ одновременно, вот, что запрещает лиц. соглашение. Не используй 1С:Предприятие и делай с данными, что хочешь.
59 Ахиллес
 
19.05.11
17:35
(58) Ты уж договаривай. Доступ к ЧЕМУ? Ещё раз. Если на компьютере не установлено 1С, фирма 1С тогда претензий иметь не будет? Например прямые запросы пишет программист аудитора. Разрешение аудитору на ознакомление с моей информацией я дал.
Есди дядя Боря сдвинет брови и скажет НИЗЯЯЯ, то это не означает, что его НИЗЯЯЯ будет иметь силу закона и обязательным к исполнению. Вполне может оказаться, что в ответ он услышит - АЙ-ЯЙ-ЯЙ! И пойдет лесом.
60 Лефмихалыч
 
19.05.11
17:37
(59) слушай, ты уже покажешь хоть одну копипасту закона или статьи и пункта закона, который нарушается лиц.соглашением или так и будешь общечеловеческими досужими соображениями рассуждать?
61 Живой Ископаемый
 
19.05.11
17:39
я прошу прощения - это по-прежнему технологическая ветка или уже казуистическая?
62 hhhh
 
19.05.11
17:44
(43) а почему нельзя вытащить имя перечисления прямым запросом к SQL? Зачем вам 1С понадобилась для этого?
63 Лефмихалыч
 
19.05.11
17:45
(61) тебе жалко штоле?
(62) патамушта (49)
64 Ахиллес
 
19.05.11
17:47
(62) Дядя Боря сказал - низя! Иначе - твой дом турма :-)
Но поскольку я не юрист, сын юриста, то объяснить со ссылками на конкретные статьи закона Лефмихалычу всю бредовость этого запрета у меня пока не получается.
65 Лефмихалыч
 
19.05.11
17:48
(64) ну, так бы сразу и сказал - влужупук. Время бы сэкономили.
66 Живой Ископаемый
 
19.05.11
17:49
чуваки, просто делайте скидку на то что это написано в Лиц.соглашении исключительно как защита от тиражных решений.. Если ты у себя будешь что-то там получать прямым запросом - никто тебя не будет проверять.
67 Лефмихалыч
 
19.05.11
17:49
Вообще, в целом, если взять это ебанистическое лицензионное соглашение, соединить его полным внешним соединением с еще более бессмысленным и беспощадным бляццким законодательством РФ в области защиты авторских и смежных прав, то можно всю страну без трусов в коленно-локтевой оставить
68 Лефмихалыч
 
19.05.11
17:50
(66) если бы смысл бы в тиражных решениях, это было бы не в лицсоглашении, а в требованиях 1С:Совместимо
69 Лефмихалыч
 
19.05.11
17:54
(64) вот пришли к тебе дяди в погонах и говорят: "Ты, как видно, грешишь нарушением лицензионного соглашения посредством чтения данных прямыми запросами из базы 1С:предприятия. Пойдем сидеть турьма"
Что ты им скажешь? Что "это всё бред" и "это мои данные"?
Ну, судить-то тебя будут по законодательству, которое этот бред допускает. И похрену там будет сын ты юриста или сам юрист. Твоя задача будет доказать, что ты не верблюд, а для этого пустых лозунгов: "это всё противоречит здравому смыслу" зело недостаточно.
70 hhhh
 
19.05.11
17:55
(63) вроде (49) этим не нарушается.
71 Лефмихалыч
 
19.05.11
17:57
(70) прямые запросы и манипулирование данными не средствами платформы относится к категории "средств и технологических решений, не предусмотренных в сопроводительной документации"
Так что нарушает со свистом
72 hhhh
 
19.05.11
18:00
(71) но я не собираюсь получать ДОСТУП с помощью технологических решений. Доступ я получу как обычно через ввод пароля.
73 Ахиллес
 
19.05.11
18:16
(65) Кто то припрёрся ко мне и заявит, что, я не имею права распоряжаться моими данными по моему усмотрению. Я уверен, что мои права нарушены, конкретную статью адвокат пусть знает.
74 Immortal
 
19.05.11
18:18
(72) поищи в партнерке, нельзя так.
75 kiruha
 
19.05.11
18:30
(33)
>>Не часто. Но вот пихать в запрос временную таблицу с расшифровкой перечисления, а потом с ней джойниться - самый плохой знак. Как минимум это приводит к падению производительности на 30-40%. Посмотрите профайлером и увидите!

Это с какого перепоя джойн с временной таблице снижает производительность на 40% ?
Запихал в начале соединения и успокоился.

Объясните  ка.

Только не надо "я мерял, посмотрите, зуб даю"
76 kiruha
 
19.05.11
18:40
+
Сколько тысяч значений у вашего перечисления ?
77 akostrov
 
19.05.11
18:41
А причем здесь запрос вообще? Речь идет о метаданных в базе, работать надо с объектом метаданных.
78 Живой Ископаемый
 
19.05.11
18:48
а раз решение не тиражное, раз  данные свои, то откуда нарисовалась необходимость динамически строить запрос да еще и с синонимом и со всем свистом?
79 kiruha
 
19.05.11
18:54
К (25)
добавить

ИНДЕКСИРОВАТЬ ПО

если много значений
80 Злобный Фей
 
19.05.11
18:58
(69) Вообще-то в случае "Пойдем сидеть турьма" доказывать будут дяди в погонах. Презумпция невиновности, етить.

Как же так???
81 Alexey_Morov
 
19.05.11
22:33
(76)

Перечислений у нас много - около 300.
У каждого перечисления - 14-20 значений.
Что же делать? Всё же так тормозить будет, если надо будет джойниться с временной таблицей, куда запихну перечисление и его значения.
82 kiruha
 
20.05.11
00:08
(81)
Модифицируй (25) Индексировать

|ВЫБРАТЬ
                     |    ВТ.Значение,
                     |    ВТ.Имя,
                     |    ВТ.СИноним,
                     |    ВТ.Комментарий,
                     |    ВТ.Порядок
                     |ПОМЕСТИТЬ ВТ
                     |ИЗ
                     |    &ВТ КАК ВТ
                     |Индексировать По ВТ.Значение

если соединяешься по значению
83 kiruha
 
20.05.11
00:10
|ВЫБРАТЬ
                     |    ВТ.Значение,
                     |    ВТ.Имя,
                     |    ВТ.СИноним,
                     |    ВТ.Комментарий,
                     |    ВТ.Порядок
                     |ПОМЕСТИТЬ ВТ
                     |ИЗ
                     |    &ВТ КАК ВТ
                     |Индексировать По Значение
84 Immortal
 
20.05.11
00:23
(81)моя думать, что ваша нерационально напроектировала структуру БД
85 Alexey_Morov
 
20.05.11
00:23
kiruha

Что-то MS SQL 2008 сильно поплохело после того, как я попытался так сделать. План запросов просто кошмарный....
Как же так????
86 Alexey_Morov
 
20.05.11
00:24
Immortal

У нас хитрая система. Развивается почти 5 лет. Кода написано около 9 млн строчек.
А у Вас какая была самая большая система?
87 Immortal
 
20.05.11
00:30
(86)хз, по строчкам не считал, нет данных
вполне возможно, я с более "мелкими" системами работаю
что то меня даже заинтересовала эта система,
область применения какая?
88 kiruha
 
20.05.11
00:32
(86)
Нельзя ли полный запрос ?
89 H A D G E H O G s
 
модератор
20.05.11
00:33
(87) "Сделать и забыть"
90 Alexey_Morov
 
20.05.11
00:42
Immortal

Областей применения несколько
1. Риск-менеджмент финансовых потоков с онлайн прогнозированием некоторых зон методом Рунге-Кутта и с применением финансово-аналитических методик Фуллмера, Чессера.
Ядро написано на С±
2. Интеграция с системами 3D-моделирования и средствами векторной графики (сейчас это AutoCAD, CorelDraw, Unity3D)
3. Инженерные расчёты (подбор из номенклатуры узлов и компонентов на основе сложнопараметрических данных и на основе усталостной прочности, электротеплопроводности, стоимости и т.д..) Как внешнее ядро расчётов используем Mechanical Desktop.
4. Мониторинг персонала (не только с применением отчётности о движении, но и с прогнозированием на основе методик Леонтьева, Вежбицкой и Льва Выгодского).
5. Сложные конструкторы по динамической самосборке модулей и плагинов в зависимости от внешних факторов (от прав пользователя, от регионального расположения пользователя, времени года, типа переданных данных и метаданных)....
ну и описывать систему можно часами.
В целом она служит сразу для решения комплексных задач.
Сейчас система стоит в РАН, РАМН и кое-где в инженерных лабораториях по производству.
91 H A D G E H O G s
 
20.05.11
00:44
(90) Сходу! Что делает метод Рунге-Кутта?
92 Immortal
 
20.05.11
00:45
(90)я все понимаю(вернее часть не понимаю, но имею представление), но что то часть задач далека от учета на предприятии, а 1с - именно под это
93 kiruha
 
20.05.11
00:47
Что такое
"прогнозированием на основе методик Леонтьева, Вежбицкой и Льва Выгодского" ???

Леонтьев , я так понимаю психолог, а не экономист
94 Ахиллес
 
20.05.11
10:51
(86) Я лучше лишних два часа посижу подумаю, а потом напишу пятьсот строк кода, чем эти два часа колотить бездумно по клаве.
Выдавливай из себя семёрошника по капле. Перечисление с 20 значениями в снеговике называется регистром сведений. Смотря для чего эти перечисления, может там и пяти регистров хватит.
95 Лефмихалыч
 
20.05.11
11:00
+(93) а Выгодский - педагог
96 Alexey_Morov
 
20.05.11
16:32
Как в параметр запроса добавить значение перечисления через COM-соединение?

Т.е.

string request = "SELECT
T.Комментарий,
T.КратностьВзаиморасчетов,
T.КурсВзаиморасчетов,
T.ВидОперации,
T.ВалютаДокумента.НаименованиеПолное
FROM Документ.ВыдачаДенежныхДокументов AS T where (ВидОперации = &p0)";

object oQuery = Connector.CreateObject("Query", null);
               Connector.SetProperty(oQuery, "Text", new object[] {request});
Connector.SetProperty(oQuery, "Text", new object[] { request });

// устанавливаем параметр p0 - ссылку на значение перечисление
object reference = Connector.GetProperty(Connector.Connection, "Перечисления");
                       reference = Connector.GetProperty(reference, "ВидыОперацийВыдачаДенежныхДокументов");
                       reference = Connector.GetProperty(reference, "ВыдачаПодотчетномуЛицу");

Connector.InvokeMethod(oQuery, "УстановитьПараметр", new object[] { "p0",  reference});

Параметр вроде бы добавляется без ошибок, запрос отрабатывает нормально. Но ни одной строки не возвращается. Хотя должны возвращаться строки!

Как правильно загнать в параметры запроса значение перечисления через C#? Читал
Книга знаний: v8: Получение ссылки по GUIDу в COMConnector;
http://help1c.hdd1.ru/index.php?t=38&hl=
v8: перенос даных через COM-соедиенение 1с

Нельзя
97 Лефмихалыч
 
20.05.11
16:33
(96) в том и прелесть перечислений, что параметр тут не нужен чуть более, чем наиух

"FROM Документ.ВыдачаДенежныхДокументов AS T where (ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийВыдачаДенежныхДокументов.ИмяЗначенияПеречисления))"; "
98 Alexey_Morov
 
20.05.11
16:38
Лев Михайлович, нНе будет ли проблем в таком случае с SQL-injection? То есть с попыткой вставить небезопасный код?
Дело в том, что название перечисление и его значение на которое нужно повесить фильтр в звпросе берется у меня из строкового значения, которое пользователь ввёл в поле ввода в приложении (TextBox).
99 Alexey_Morov
 
20.05.11
16:43
Докладываю, в принципе получилось выбирать записи.
Но всё-таки тревожит проблема возможной попытки вставки плохого кода.

Спасибо, Лев Михайлович. Где тут Вам можно поставить плюсик, чтобы поднять Ваш рейтинг?
100 Grusswelle
 
20.05.11
16:52
100
101 Alexey_Morov
 
20.05.11
17:02
Grusswelle

Как же так???

Как же так???
102 Rabbit
 
20.05.11
17:22
(98) красиво заливаешь
103 H A D G E H O G s
 
20.05.11
17:23
(101) Что там с Рунге-Куттом? А то ситуация напоминает "Сердечник трансформатора сделан из дерева"...
104 Лефмихалыч
 
20.05.11
17:30
(98) ты там программист или кто? замени TextBox на ComboBox - значения известны заранее и их можно через метаданные все получить.
Вообще "название перечисление и его значение на которое нужно повесить фильтр в звпросе берется у меня из строкового значения, которое пользователь ввёл в поле ввода" - это называется индийским кодом