|
Мощь LINQ-а, или 1С и не снилось. | ☑ | ||
---|---|---|---|---|
0
iamnub
19.05.14
✎
18:35
|
Получив на вход "ООО Гарамов К.Е. Анг 18" надо вернуть букву "Г".
Как индекс. ООО ИП ЗАО - "запрещенные слова". Слова с точкой - тоже надо выкинуть. Все что останется - вернуть первую букву от самого длинного слова. |
|||
276
Serginio1
20.05.14
✎
13:58
|
(274) Теперь осталось только в 1С это ввести.
У линка есть еще и SQL нотация. Выбирай какую хочешь. Многие выберут и 265, так как коментариев даже писать не нужно. |
|||
277
Asmody
20.05.14
✎
13:58
|
(274) а самое длинное слово?
|
|||
278
Asmody
20.05.14
✎
14:04
|
(276) ну, т.е. чтобы в 1С появилась "мощь", достаточно добавить в язык лямбды и операции с коллекциями?
|
|||
279
Serginio1
20.05.14
✎
14:07
|
(278) Не только. Нужны еще сочетание в клиентской части серверного кода и модального оповещения. Все остальное можно решать через библиотеки .Net
|
|||
280
iamnub
20.05.14
✎
14:09
|
(278)
Функции первого порядка не забудь, ага. |
|||
281
iamnub
20.05.14
✎
14:09
|
Они то сразу мощщщщщи дадут
|
|||
282
Asmody
20.05.14
✎
14:10
|
(279) а вот .NET приплетать не надо. не хватало еще в 1С зависимостей от этого
|
|||
283
rsv
20.05.14
✎
14:12
|
(282) Да почему .Можно и NET.... за ту же ЗП :)
|
|||
284
rsv
20.05.14
✎
14:13
|
Понаписали до жути... и все за бесплатно ..:)
|
|||
285
Serginio1
20.05.14
✎
14:13
|
(282) Почему? Если доступ к нет будет интегрирован в 1С ты этим не будешь пользоваться?
|
|||
286
rsv
20.05.14
✎
14:14
|
(285) А разве он не доступен сейчас ?
|
|||
287
Serginio1
20.05.14
✎
14:14
|
285 я вот эти v8: v8: Использование сборок .NET в 1С 7.x и 8.x пользуюсь и в 7 ке и в 8 ке.
|
|||
288
rsv
20.05.14
✎
14:15
|
(287) А говорите не доступен ....
|
|||
289
Asmody
20.05.14
✎
14:16
|
(285) нет конечно! зачем мне лишняя завязка на ещё одну платформу?
|
|||
290
Serginio1
20.05.14
✎
14:17
|
(286) Доступен, но не интегрирован. Нужно самому регистрировать, копировать. Кроме того неудобно работать со свойствами массивами v8: v8: Использование сборок .NET в 1С 7.x и 8.x
|
|||
291
Serginio1
20.05.14
✎
14:18
|
(289) Не хочешь не пользуйся.
|
|||
292
rsv
20.05.14
✎
14:18
|
(290) А надо ? Интегрировать то ...
|
|||
293
rsv
20.05.14
✎
14:19
|
(291) Да собственное никто особо и не пользуется . Если надо для факультатива - можно мозг повыносить
|
|||
294
Serginio1
20.05.14
✎
14:19
|
291 Пиши ВК. Сравни функционал библиотек .Net и 1С. Где почеловечески работу с Веб не могут сделать. Но это так отступление.
|
|||
295
rsv
20.05.14
✎
14:20
|
(294) Ну ывот на уровне ВК пусть и остается .. на инфостате за недорого ...
|
|||
296
Serginio1
20.05.14
✎
14:20
|
(292) А зачем отказываться от расширения функционала?
|
|||
297
Serginio1
20.05.14
✎
14:21
|
(295) И на каждый чих писать свою ВК?
|
|||
298
rsv
20.05.14
✎
14:22
|
(296) Патамушта Р-7 полетела по причине простоты и надежность конструкции была под 100 т.к. проектировалась по принципу топора а он простой :)
|
|||
299
rsv
20.05.14
✎
14:23
|
(297) реализуйте все в одной ВК и поехали...
|
|||
300
rsv
20.05.14
✎
14:23
|
Анонсируйте на инфостате .... будем скачивать..
|
|||
301
ЗлобнийМальчик
20.05.14
✎
14:23
|
(1)нуб.
ну ниче, старшие товарищи за такой код по рукам еще надают... |
|||
302
Serginio1
20.05.14
✎
14:24
|
(298) А в чем сложность использовать .Net. Тебе нужно выкопать большую яму и есть три инструмента совок,лопата и экскаватор. Ты будешь совком работать?
|
|||
303
rsv
20.05.14
✎
14:24
|
Описание листов на дцать .. методы ... ну ит ак далее. Курсы опять же ...
|
|||
304
Serginio1
20.05.14
✎
14:25
|
(300) Так есть по ссылке http://infostart.ru/public/238584/
или http://rsdn.ru/?forum/flame.politics/5611518 |
|||
305
Serginio1
20.05.14
✎
14:26
|
(303) Если ты знаком с Net то там вообще никаких проблем не возникает.
|
|||
306
rsv
20.05.14
✎
14:26
|
(304) Отлично . Буду иметь в виду .
|
|||
307
Serginio1
20.05.14
✎
14:27
|
304 Тьфу Вот ссылка на файлhttp://files.rsdn.ru/19608/FilesForNetObjectToIDispatch.zip
|
|||
308
dmpl
20.05.14
✎
14:28
|
(296) Потому что за все приходится платить.
|
|||
309
rsv
20.05.14
✎
14:29
|
(307) Надо выходить уже с пердолжением к вендору на включение в штатный двжок. Открыть финансирование.. Штаты опять же ..
|
|||
310
Serginio1
20.05.14
✎
14:29
|
(308) Чем например?
|
|||
311
dmpl
20.05.14
✎
14:29
|
(302) Археологи совком работают. И даже кисточками.
|
|||
312
dmpl
20.05.14
✎
14:30
|
(310) Например, требованием установки .NET нужной версии.
|
|||
313
dmpl
20.05.14
✎
14:30
|
+(312) Ну и глюками, как обычно.
|
|||
314
Serginio1
20.05.14
✎
14:31
|
(309) Не знаю, как там насчет лицензирования, но ведь ты же не платишь за использование Win API?
|
|||
315
Serginio1
20.05.14
✎
14:33
|
(312) Вообще то на Win 7 и выше она уже включена, и установить в дистрибутив тоже не проблема. Ладно это уже их проблемы. Пусть сами решают.
|
|||
316
dmpl
20.05.14
✎
14:37
|
(315) У меняWin 8.1. Скачал AS SSD проверить скорость SSD - требует .NET (3.5, ЕМНИП). Та, что в составе Windows 8.1 ему не подходит. Ну и нафиг мне систему замусоривать?
|
|||
317
rsv
20.05.14
✎
14:40
|
(315) Поехали.........
|
|||
318
dmpl
20.05.14
✎
14:41
|
Вот зачем вот серьезным организациям такая хрень:
http://msdn.microsoft.com/ru-ru/library/hh506443(v=vs.110).aspx Загрузить .NET Framework 3.5 для Windows 8 или Windows 8.1 невозможно. Включите .NET Framework 3.5 в панели управления, следуя приведенным в этой статье инструкциям. Если устанавливается приложение, которому требуется конкретная версия .NET Framework, программа установки приложения может автоматически установить платформу .NET Framework на ваш компьютер или предложить вам установить ее самостоятельно. Например, .NET Framework 3.5 не устанавливается автоматически на компьютеры с Windows 8 и Windows 8.1. Для запуска приложений на основе платформы .NET Framework 3.5 в Windows 8 или более поздней версии платформу 3.5 необходимо включить на компьютере. Это можно сделать одним из двух способов: установить/запустить приложение, которому требуется .NET Framework 3.5 (приложение выдаст запрос об установке .NET Framework 3.5) или включить .NET Framework 3.5 в панели управления. ОБА ВАРИАНТА ТРЕБУЮТ ПОДКЛЮЧЕНИЯ К ИНТЕРНЕТУ. |
|||
319
dmpl
20.05.14
✎
14:44
|
Ну и еще круче:
Платформа .NET Framework 1.1 не поддерживается в операционных системах Windows 8, Windows 8.1, Windows Server 2012 и Windows Server 2012 R2. Нафига мне надо такое? Чтобы потом к старой ОС оказаться привязанным? |
|||
320
iamnub
20.05.14
✎
14:44
|
(301)
Пока что "старшие товарищи" мычат что-то невразумительное. ))) |
|||
321
rsv
20.05.14
✎
14:47
|
(320) Так этож для избранных . Кто с инфостата уже скачал. А я так понял большинство и не качало еще. Как то недосуг все ...
|
|||
322
Serginio1
20.05.14
✎
14:54
|
(319) Ну зато 4.5 уже кроме WIN XP везде поддерживается.
|
|||
323
dmpl
20.05.14
✎
14:57
|
(322) 4.5 - предустановлена только в Windows 8. Более того, что там с Linux'ом? Ну и Win XP много где еще стоит. И самый главный вопрос - что будет через 5-10 лет?
|
|||
324
Serginio1
20.05.14
✎
15:00
|
(319) Опять же если есть выбор, это уже твое право использовать или не использовать.
|
|||
325
quest
20.05.14
✎
15:00
|
(277)
(defun return-first-char(input-string) (subseq (sort (find-if-not #'(lambda (x) (or (gethash x *forbidden_words*) (uppercase? (nth 0 x)) (split input-string #\Space ))) #'<) 0 1)) Тогда так. Еще про большую букву забыл |
|||
326
Serginio1
20.05.14
✎
15:02
|
(323) Ну вообще то есть совместимость старых версий с новыми. Так, что через 10 лет легко можно отрефакторить Net45 на Net145
|
|||
327
dmpl
20.05.14
✎
15:03
|
(324) Если оно будет интегрировано - выбора не будет.
(326) Только вот будет ли это бесплатно для пользователя? |
|||
328
Serginio1
20.05.14
✎
15:04
|
323 То же относится и к используемых тобой ВК или разного рода скриптам.
|
|||
329
Serginio1
20.05.14
✎
15:04
|
(327) Ну а сейчас Вин АПИ что стоит?
|
|||
330
Asmody
20.05.14
✎
15:05
|
(325) опять сортировка. ну не нужна она тут
|
|||
331
dmpl
20.05.14
✎
15:07
|
(329) 1С 7.7 до сих пор работает. Даже в Windows 8.
|
|||
332
MMF
20.05.14
✎
15:11
|
истинные знатоки плохоподдерживаемого гЪовнокода предпочитают MUMPS
Q N R,Q,C,D,E,W,B,G,H,S,T,U,V,F,L,P,N,J,A S N=$G(N),Q='N,F=Q+Q,P=F+F,W=$L($T(Q)) S W=$E(W,Q),S='N_+N,W=W-F*S,L=$G(L),R=$C(Q_F_P),R(F)=$C(F+Q_F),R(P)=$C(W-F) W # S T=$E($T(Q+F),F,W\S)_$C(W+S+F) X T S B=$P(T,$C(P_P),F),C=B\(W*W),D=B-(C*W*W)\W F G=S-Q:F:S+F+Q S E=B-(C*W*W+(D*W)),H=$E($T(Q),G),@H=$S(@H<S:'Q,Q:N)_@H,T=C_D_E F A=Q:Q:W\S S J=$E(T,A),C(F)=$S(J>(F+Q)&(J<(S-F)):Q,Q:+N),C(P)=$S(J#F:Q,Q:+N) D .S C(Q)=$S(J<(S-F):+N,Q:Q),C(F+Q)=$S(J>Q&(J<(S-F))&(J'=(P+'L))&(J'=(P)):Q,Q:+N) .S H('L)=L F S H(N?.E)=$O(C(H('$G(N)))) Q:H('+L)=L S F(A,H('L))=C(H(W[(W\S))) F U=Q:Q:P W !,R F V=Q:Q:P+F W $S(F(V,U):'Q,Q:$C(P_(W\S))) W:'(V#F) $C('N_F_F+F) W !!,R(F)_C_R(P)_D_R(P)_E_R(F) X $RE($E($T(Q),Q+F,P+Q))_R(P)_'N W # G:N=L Q+F Q |
|||
333
Serginio1
20.05.14
✎
15:12
|
(330) Ну можно условин на Max поставить
запрос= name.разложить(' ').Где(p => не ЗапретныеСлова .Содержит(p, StringComparer.InvariantCultureIgnoreCase)) .Где(p => не p.ВМассивБукв.Содержит('.')); возврат Запрос.Где(p => pet.Длина== Запрос.Max(н => н.Длина)) .ПервыйИлиПоУмолчанию() .ВМассивБукв().Первый().ВСтроку(); |
|||
334
quest
20.05.14
✎
15:12
|
(330) а без сортировки как?
|
|||
335
iamnub
20.05.14
✎
15:13
|
(333)
Ну, это треш. |
|||
336
Serginio1
20.05.14
✎
15:14
|
(331) Ну и 4.5 тоже долго стоять будет. Пока платформу менять не будут. Но это уже твое решение и твой риск.
Я уже говорил про совместимость внутри Net и рефакторинг. |
|||
337
quest
20.05.14
✎
15:22
|
(336) как-то после твоих постов складывается впечатление что для тебя рефакторинг - главный смысл работы. Но забываешь что рефакторинг без юнит-тестов - это беготня по минному полю под бомбежкой.
И второе - почему ты думаешь что рефакторинг в С# делается просто, а в 1С - нет? Третье - зачем тебе вообще рефакторинг? Если ты франч или фри - бесплатная работа. Если фикси - лишняя головная боль. |
|||
338
dmpl
20.05.14
✎
15:22
|
(336) У Microsoft 5 лет от даты выпуска. 10 - если решат расширенную поддержку сделать. С 7.7 не сравнить.
|
|||
339
Asmody
20.05.14
✎
15:28
|
(334) ребят, ну это же основы! чтобы получить один максимальный (минимальный) элемент из коллекции, сортировка не нужна! сортировка, да еще с вычислением функции, — это тяжёлая операция.
|
|||
340
iamnub
20.05.14
✎
15:41
|
(339)
Позёр. |
|||
341
quest
20.05.14
✎
15:43
|
(339) покажи на примере
|
|||
342
Asmody
20.05.14
✎
15:57
|
(341) на примере чего? поиск максимального элемента — это один проход. сортировка в один проход делается очень в редких случаях
|
|||
343
NikVars
20.05.14
✎
16:06
|
(98) А как в LINQ будет выглядеть план счетов РСБУ?!
|
|||
344
NikVars
20.05.14
✎
16:07
|
(98) Если не влом, нарисуй РСВ-1 образца 2014 согласно утвержденному порядку заполнения, научи 1С.
|
|||
345
Serginio1
20.05.14
✎
16:29
|
(339) Основы основами, но есть еще и оптимизатор который компилирут в нормальный запрос. Linq это ленивые вычисления.
Ты же в SQL Top(1) тоже используешь. Ну и для тебя переписано в 333 |
|||
346
Asmody
20.05.14
✎
17:04
|
(345) в SQL есть max() для таких случаев
|
|||
347
Serginio1
20.05.14
✎
17:26
|
(346) Так ты прочитай 333 и увидишь max
|
|||
348
Asmody
20.05.14
✎
17:46
|
(347) в (333) как минимум 2 лишних прохода
|
|||
349
Serginio1
20.05.14
✎
17:50
|
(348) Где?
|
|||
350
Serginio1
20.05.14
✎
17:51
|
(347) Ты не забывай про ленивость вычислений.
|
|||
351
Serginio1
20.05.14
✎
17:53
|
||||
352
Asmody
20.05.14
✎
17:54
|
(350) ленивость тебе тут не поможет, точнее ее тут не будет
|
|||
353
Serginio1
20.05.14
✎
17:56
|
(352)
// Вот здесь ленивое вычисление запрос= name.разложить(' ').Где(p => не ЗапретныеСлова .Содержит(p, StringComparer.InvariantCultureIgnoreCase)) .Где(p => не p.ВМассивБукв.Содержит('.')); // А вот здесь окончательный возврат Запрос.Где(p => pet.Длина== Запрос.Max(н => н.Длина)) .ПервыйИлиПоУмолчанию() .ВМассивБукв().Первый().ВСтроку(); |
|||
354
Asmody
20.05.14
✎
18:01
|
(353) даже если оно там есть (в чем я не уверен), оно нисколько не помогает решению, а даже наоборот
|
|||
355
Serginio1
20.05.14
✎
18:02
|
(354) Так ты объясни чем тебе не нравится запрос?
|
|||
356
Serginio1
20.05.14
✎
18:06
|
(354) Будь уверен, я же тебе ссылку давал
|
|||
357
Serginio1
20.05.14
✎
18:31
|
Есть еще let
http://msdn.microsoft.com/ru-ru/library/bb383976.aspx var categories = from p in products group p by p.Category into g let minPrice = g.Min(p => p.UnitPrice) select new { Category = g.Key, CheapestProducts = g.Where(p => p.UnitPrice == minPrice) }; |
|||
358
Serginio1
20.05.14
✎
18:32
|
string[] strings =
{ "A penny saved is a penny earned.", "The early bird catches the worm.", "The pen is mightier than the sword." }; // Split the sentence into an array of words // and select those whose first letter is a vowel. var earlyBirdQuery = from sentence in strings let words = sentence.Split(' ') from word in words let w = word.ToLower() where w[0] == 'a' || w[0] == 'e' || w[0] == 'i' || w[0] == 'o' || w[0] == 'u' select word; |
|||
359
Serginio1
20.05.14
✎
18:44
|
Кстати есть еще и PLINQ http://www.rsdn.ru/article/dotnet/Threading_In_C_Sharp_Part_3.xml#E3HAC
|
|||
360
Asmody
20.05.14
✎
19:12
|
красотень:
def getChar(q: String, bw: List[String]) = (q split ' ').foldLeft((0, ' '))( op = (ac: (Int, Char), e: String) => { if ((e contains '.') || (bw contains e) || e.length < ac._1) ac else (e.length, e.charAt(0)) } )._2 val r=getChar("ООО Гарамов К.Е. Анг 18", List("ооо", "ип", "зао", "оао")) |
|||
361
Serginio1
20.05.14
✎
20:47
|
(360) Здесь уже зависит от того какой синтаксис выбирать.
Многим кстати нравится SQL нотация. И не нужно писать комментарии к коду |
|||
362
IGOR_777
20.05.14
✎
22:01
|
LINQ самый лучший способ обрабатывать Таблицы в оперативной памяти.
Это лучше чем стандартное решение 1c - обход всех строк Таблицы значений (циклы всегда замедляют работу) а вот запросы к базе при помощи LINQ- строятся не самым оптимальным образом (LINQ переводится в Лямда синтаксис потом переводится в SQL - и во многих случаях джойны превращаются в подзапросы - Select в Select ) Лучше использовать SQL А еще есть класная утилита SQLtoLINQ Переводит запрос из синтаксиса SQL в Linq - вообще даже думать не надо над синтаксисом |
|||
363
iamnub
21.05.14
✎
01:05
|
(362)
Можно подумать, что LINQ 2 Objects это не циклы, а магия вуду. Каждый оператор после точки - обыкновенный цикл. С лямбдой в параметре и с новой коллекцией на выходе. |
|||
364
Ненавижу 1С
гуру
21.05.14
✎
10:48
|
(363) это отложенный до выполнения цикл
|
|||
365
Serginio1
21.05.14
✎
11:38
|
(362) Ну вообще то многое меняется со временем http://www.rsdn.ru/forum/flame.comp/4954991?tree=tree
Кроме того можно писать объектные запросы в стиле 1С Ну вообщето в том же Linq to EF это можно делать в том числе и для запросов аля 1С OjectQuery string entitySQL = " SELECT p, p.Filling " + "FROM PartyContext.Pinatas AS p " "WHERE p.Filling.Description='Candy'"; var query=context.CreateQuery<DbDataRecord>(entitySQL); query.MergeOption = System.Data.Objects.MergeOption.NoTracking; var pinatasWithFilling=query.ToList(); |
|||
366
Serginio1
21.05.14
✎
12:31
|
||||
367
iamnub
21.05.14
✎
12:41
|
(364)
Это не отменяет того факта - что LINQ 2 OBJs - это куча циклов. objs.where(x=>x>1).where(x=>x=5) - два цикла objs.where(x=>x>1 && x=5) - один цикл. |
|||
368
Serginio1
21.05.14
✎
12:53
|
(367) Нет запрос может оптимизироваться и выполниться в 1 цикл
именно из-за ленивости objs.where(x=>x>1).where(x=>x=5) прекрасно превращается в objs.where(x=>x>1 && x=5) - один цикл. |
|||
369
Serginio1
21.05.14
✎
15:57
|
http://msdn.microsoft.com/ru-ru/library/bb669121.aspx
public static class LocalExtensions { public static IEnumerable<string> ConvertCollectionToUpperCase(this IEnumerable<string> source) { foreach (string str in source) { Console.WriteLine("ToUpper: source >{0}<", str); yield return str.ToUpper(); } } public static IEnumerable<string> AppendString(this IEnumerable<string> source, string stringToAppend) { foreach (string str in source) { Console.WriteLine("AppendString: source >{0}<", str); yield return str + stringToAppend; } } } class Program { static void Main(string[] args) { string[] stringArray = { "abc", "def", "ghi" }; IEnumerable<string> q1 = from s in stringArray.ConvertCollectionToUpperCase() where s.CompareTo("D") >= 0 select s; IEnumerable<string> q2 = from s in q1.AppendString("!!!") select s; foreach (string str in q2) { Console.WriteLine("Main: str >{0}<", str); Console.WriteLine(); } } } Этот пример выводит следующие данные: Копировать ToUpper: source >abc< ToUpper: source >def< AppendString: source >DEF< Main: str >DEF!!!< ToUpper: source >ghi< AppendString: source >GHI< Main: str >GHI!!!< |
|||
370
rsv
21.05.14
✎
16:07
|
(369) Какой смысл сюда копипастить MSDN ?
|
|||
371
Serginio1
21.05.14
✎
16:15
|
смысл в том, что несмотря на два запроса и один цикл в итоге все разворачивается в один цикл.
|
|||
372
iamnub
21.05.14
✎
16:23
|
(369)
Я не понял примера. Главным образом из-за "where s.CompareTo("D") >= 0" - зачем это тут? И - как видно - что цикл-то один? Три цикла - всё ровно. |
|||
373
Serginio1
21.05.14
✎
16:30
|
(372) сравнение строк
"def", "ghi" .ToUpper()>="D" Анализируй Console.WriteLine ToUpper: source >abc< // не попадает под Where и отбрасывается ToUpper: source >def< // попадает под условие идет дальше AppendString: source >DEF< // создается строка Main: str >DEF!!!< // Выодится из foreach (string str in q2) ну и дальше ToUpper: source >ghi< AppendString: source >GHI< Main: str >GHI!!!< |
|||
374
Serginio1
21.05.14
✎
16:33
|
В данном примере метод Where вызывается до вызова метода ConvertCollectionToUpperCase. Метод Where действует практически так же, как отложенные методы, использовавшиеся в предыдущих примерах, приведенных в этом учебнике, ConvertCollectionToUpperCase и AppendString.
Отличие заключается в том, что в этом случае метод Where просматривает свою исходную коллекцию, определяет, что первый элемент не передает предикат, а затем переходит к следующему элементу, который предикат передает. После этого метод выдает второй элемент. |
|||
375
Serginio1
21.05.14
✎
21:21
|
(372) Там на самом деле не 2 запроса а 4 учитывая
ConvertCollectionToUpperCase() и AppendString("!!!") Так что 4 запроса и 1 цикл превращаются в 1 цикл |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |