|
Мощь LINQ-а, или 1С и не снилось. | ☑ | ||
---|---|---|---|---|
0
iamnub
19.05.14
✎
18:35
|
Получив на вход "ООО Гарамов К.Е. Анг 18" надо вернуть букву "Г".
Как индекс. ООО ИП ЗАО - "запрещенные слова". Слова с точкой - тоже надо выкинуть. Все что останется - вернуть первую букву от самого длинного слова. |
|||
1
iamnub
19.05.14
✎
18:35
|
public String index_letter
{ get { return name. Split(' ').Where(p => !forbidden_words.Select(pp=>pp.ToLower()).Contains(p.ToLower())).Where(p => !p.ToCharArray().Contains('.')).OrderByDescending(p => p.Length).FirstOrDefault().ToCharArray().First().ToString(); } } |
|||
2
iamnub
19.05.14
✎
18:35
|
Одна строчка!
|
|||
3
Jaap Vduul
19.05.14
✎
18:40
|
Чем больше возможностей у языка, тем забористей г-код.
|
|||
4
SUA
19.05.14
✎
18:41
|
не факт,
"Заоблачный А.К. Ленина 27" что вернет? и лови потом все варианты |
|||
5
iamnub
19.05.14
✎
18:42
|
(3)
Это так кажется. Мне представить страшно - во что это разворачивается. |
|||
6
iamnub
19.05.14
✎
18:42
|
(4)
Вернет З |
|||
7
SUA
19.05.14
✎
18:43
|
||||
8
iamnub
19.05.14
✎
18:44
|
(3)
Какой нибудь RegExp, а еще лучше ORACLE-овский SQL с подобной функциональностью - вот где АТ и НАПАЛМ. |
|||
9
iamnub
19.05.14
✎
18:47
|
(4)
Я понял. В этом случае - Зао - он будет искать по полному соотвествию. А точку будет искать внутри слова. (7) Эта строчка пишется за две минуты. Инкапсулирована в свойство. Не понравилось? Нашел сложным? Перепиши за минуту - и всего делов. |
|||
10
orefkov
19.05.14
✎
18:47
|
Вспоминая старенькое - "У меня была одна проблема в проекте, и я решил использовать для ее устранения регулярные выражения. Теперь у меня в проекте две проблемы.", думается, что это применимо и к LINQ :)
|
|||
11
iamnub
19.05.14
✎
18:48
|
LINQ - элита!
|
|||
12
Новиков
19.05.14
✎
18:48
|
Поднять бы Сталина сейчас...
|
|||
13
iamnub
19.05.14
✎
18:48
|
)))
|
|||
14
vcv
19.05.14
✎
19:35
|
(1) В приличных местах за такой код могут и по шапке дать. Потому что читабельность кода ниже плинтуса. Сложность поддержки и модифицирования кода в условиях текучки программистского состава слишком высока.
|
|||
15
vcv
19.05.14
✎
19:38
|
А что этот код вернёт для "ИП Кац Аврам Моисеевич, пр. им. Патриса Лумумбы 315" ?
Савоя большая ловушка - простой код, работающий правильно в БОЛЬШИНСТВЕ случаев. |
|||
16
xReason
19.05.14
✎
20:03
|
8.3.5 уже часть LINQ-а релизовали в части ActiveRecord
|
|||
17
iamnub
19.05.14
✎
20:19
|
(14)
У каждого свой потолок, милейший. Намек понятен? В коде нет ни одной "инородной" функции. Что может быть сложного в стандартных методах расширения для строк и массивов; еще и записанных в одну строку? Чудно. |
|||
18
iamnub
19.05.14
✎
20:21
|
(15)
Вернет М. Прелесть в том, что пользователь, зная о правилах формирования индекса - сможет без проблем найти объект. |
|||
19
0xFFFFFF
19.05.14
✎
20:29
|
(0) "Получив на вход "ООО Гарамов К.Е. Анг 18" надо вернуть букву "Г"."
А нафейхуа? (18) Вернет "М", а надо "К" - Кац ведь! |
|||
20
0xFFFFFF
19.05.14
✎
20:29
|
В чем мощь то я так и не понял.
|
|||
21
0xFFFFFF
19.05.14
✎
20:31
|
Я думаю, если в линке-шминке реализовать
|
|||
22
0xFFFFFF
19.05.14
✎
20:32
|
Я думаю, если в линке-шминке реализовать
Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений То будет миллион строк кода. А в 1С всего 2 слова! Вот это силаааа! А вообще ветка - полный бред. |
|||
23
skeptik_m
19.05.14
✎
20:33
|
(1) За такой код нужно руки отрывать.
|
|||
24
iamnub
19.05.14
✎
20:44
|
(23)
Без базара. Мастер-класс будет? |
|||
25
iamnub
19.05.14
✎
20:45
|
(20)
-- В чем мощь то я так и не понял. Реализуй тоже самое в любимом 1С |
|||
26
Фокусник
19.05.14
✎
20:51
|
(25) Для 1С это не частая задача, а любой инструмент больше заточен под более частые задачи... ;)
|
|||
27
vcv
19.05.14
✎
20:58
|
(25) Задача в постановке (1) не имеет смысла.
Ставлю другие требования: - учесть несколько десятков возможных организационно правовых форм - для лучшего выявления первых букв фамилий и наименований организаций: - - учитывать адресный классификатор (для отбрасывания названий улиц) - - учитывать нормативно-справочную информацию по именам и фамилиям - - учитывать типичные ошибки ввода. - - предусмотреть возможность ведения списков исключений имён и наименований, которые неправильно воспринимаются алгоритмом В такой постановке вопроса будем меряться? Я не спорю против мощности LINQ, но подобные вырожденные примеры имеют разве что академическую ценность. |
|||
28
Serg_1960
19.05.14
✎
21:04
|
Пусть автор банальную задачу УПП (например, распределение материалов на продукцию) распишет. Тогда и ржать будем дружно :)
|
|||
29
vcv
19.05.14
✎
21:04
|
(17) "У каждого свой потолок, милейший"
Я даже спорить не буду. Соглашусь с этим высказыванием. Потому что оно отлично демонстрирует ситуацию, когда компания теряет разработчика, заменяя его менее опытным в, по крайней мере, обсуждаемой технологии. Или, по крайней мере, не имеющим привычки писать такие длинные строки кода. И ваш код тут-же начинает приносить убытки компании. |
|||
30
Serg_1960
19.05.14
✎
21:08
|
Дело даже не в языке, имхо, а в отношении к нему. Точнее - области применения. Это же не естественный язык - универсализм для него далеко не достоинство. Вон, на великом и могучем можно и "Войну и мир" написать... но для многих дальше мата на заборе дело не клеится :)
|
|||
31
iamnub
19.05.14
✎
21:10
|
(29)
И что? Вы сами понимаете что говорите? Типа надо писать код в расчете на полного дауна? Я еще раз говорю - в приведенном примере - мощь в простоте и выполняемой работе. (28) С чего ты ржать то собрался я в толк не возьму? На C# нельзя написать рапсределение материалов a la УПП? Да вы в уме ли? |
|||
32
iamnub
19.05.14
✎
21:12
|
(29)
--не имеющим привычки писать такие длинные строки кода Вы просто такое читать не умеете. Это не беда. Беда - что вы не хотите учится, но ярлык повесить надо. Это характеризует. |
|||
33
iamnub
19.05.14
✎
21:14
|
1C-ники совсем офигели - LINQ компании убытки приносит - нормально?
Умники - показать вам сложный код? Нате. |
|||
34
iamnub
19.05.14
✎
21:14
|
SELECT TRIM(' ' FROM UPPER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))), TRIM(' ' FROM INITCAP(LOWER(DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,FULLNAME,SUBSTR(FULLNAME,1,INSTR(FULLNAME,' '))))))||' '||TRIM( ' ' FROM((DECODE(SUBSTR(FULLNAME,1,INSTR(FULLNAME,' ')),NULL,NULL,SUBSTR(FULLNAME,INSTR(FULLNAME,' ')))))) FROM MINEUSERS
|
|||
35
iamnub
19.05.14
✎
21:15
|
Вот это - НЕчитаемо. Функционал - намного меньше чем у выражения в (1).
Кто-то скажет - что он делает? |
|||
36
Serg_1960
19.05.14
✎
21:16
|
(31) Не передергивай. Этого я не говорил - это ты предположил и сделал далеко идущие выводы.
(32) Опять демагогия. ТС, ты только что открыл/изучил для себя новый язык и восторгу нет предела? Это пройдёт. Когда изученных языков счет пойдёт на десятки. |
|||
37
0xFFFFFF
19.05.14
✎
21:20
|
(34)
Тухлые понты. какие то. Ну вот делает этот код в 1С что то определенно полезное. Дальше что? z5=Найти(z1,"-");z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4));z1=?(z5=0,z1,Лев(z1,z5-1));//под составные слова z1=НРег(?((z2<0)и(z4>1)и(z1<>""),Лев(z1,1)+".",z1)); z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1); z2=?(((z4=2)и((z3="а")или(z3="ы"))и(Найти("бвгджзклмнопрстфхцчшщъиеу",z9)>0))или((z4=2)и(z3="ч")и(Найти("оиеу",z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),1,Макс(z2,-z2)); z5=СтрДлина(z1); z10=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8); z11=?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,-1,?((z3="а")или(z3="ы"),?(z10=1,8,?(z9="а",?(z10>18,3,9),-1)),?(((Найти("ой ый",z8)>0)и(z5>4))или(Найти("гий жий кий ний чий хий ший щий",z7)>0),10,0))),0); z11=?(z11=0,?(z10=4,7,Найти(".чайяь",z9)), z11); z12=Найти("лец вей дец пец мец нец рец вец аец иец ыец бер бей",z7); z14=?((z11=10)и(z2<>5),?(Найти("чшщ",Лев(z7,1))+Найти("жий ний",z7)>0,"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))+Найти("аеёийоуэюя",Лев(z7,1))=0)и(z12<>41),"",?(z10=7,"л",?(z10=10,"к",?(z10=13,"йц",?(z12=0,"",?((z12<9)или(z12=49),"ь"+?(z12=1,"ц",""),?(z12<33,"ц",?(z12<45,"йц","р")))))))))); z14=?((z2=1)или(z11<0)или((z4=3)и(z3="ы")или(""=z1)),z1,Лев(z1,z5-?((z11=8)или(z14<>"")или(z11=10),2,?(z11>2,1,0)))+z14+СокрП(Сред("а у а "+Сред("оыыыоео",Найти(" внтчц",z9)+1,1)+"ме а у а еме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(z10=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойуюойойойойу ойойгомуго"+?((z14="е")или(z10=16)или(Найти("гой хой кой",z7)>0),"и","ы")+"мм",10*?((z11=6)и(z3="ч"),4,z11)+2*z2-3,2))); Возврат ?(z4>0,ВРег(Лев(z14,1))+Сред(z14,2),z14)+z6; |
|||
38
iamnub
19.05.14
✎
21:21
|
(36)
Навряд ли счет пойдет на десятки. Боюсь - прямой путь неудачника, который "в прошлом назывался программистом, а теперь 1С-ник". |
|||
39
iamnub
19.05.14
✎
21:22
|
(37)
Мля, ну 1С-ия на марше. Ты мне приводишь обфусцированный код, против кода написанного руками? Вот уж и правда - тухляк. О чем с тобой разговаривать? |
|||
40
0xFFFFFF
19.05.14
✎
21:29
|
(39) Я хз. У меня в жизни другие радости... Вместо того, чтобы на код дрюкать.
" Ты мне приводишь обфусцированный код, против кода написанного руками?" И ЧО??? ты не ответил на вопрос. В чем круть? |
|||
41
iamnub
19.05.14
✎
21:35
|
(40)
см (31) --Я еще раз говорю - в приведенном примере - мощь в простоте и выполняемой работе. |
|||
42
Serg_1960
19.05.14
✎
21:36
|
(38) Можешь сам посчитать языки, если не лень.
Начни с машин ЕС-1022 и далее. Нее, - с PDP-11 начни. Это ближе к эре персоналок. Или ты реально думаешь, что я начал писать на ассемблере, а потом вдруг, трахтибитох, - и перешел на 1С? :) |
|||
43
Лефмихалыч
19.05.14
✎
21:38
|
(0) в v8 я то же самое могу регэспами сделать, получится даже читабельнее. Если это твое адовое проклятие разбить на строки согласно логике, то тоже получится читабельнее
(2) если из любого общего модуля УПП вынуть Символы.ПС, то тоже одна строка получится. |
|||
44
iamnub
19.05.14
✎
21:39
|
(43)
Давай, потрать две минуты. Покажи. |
|||
45
Лефмихалыч
19.05.14
✎
21:40
|
хотя, если эту (1) кристаллическую анафему можно в запрос всунуть, то регэкспы в v8, конечно, обделаются кирпичом
|
|||
46
Лефмихалыч
19.05.14
✎
21:42
|
на вскидку
^[ООО|ИП|ЗАО]*\s*(\w) |
|||
47
vcv
19.05.14
✎
21:44
|
(31) "Вы сами понимаете что говорите? Типа надо писать код в расчете на полного дауна?"
Писать надо в расчете на то, что вместо вас в компанию может придти другой человек. И он должен в приемлимые строки разобраться с вашим кодом, поддерживать и развивать его в приемлимые сроки. Я не могу вспомнить ни одного набора рекомендаций об оформлении кода, который бы допускал строки, как смысловую единицу кода, длиной более 200 символов. "Я еще раз говорю - в приведенном примере - мощь в простоте и выполняемой работе." Мощь есть. Еще бы разумно её использовать. Мне всё же не кажется, что при совместной разработке ваши методы кодирования где-то встретят одобрение. (33) "1C-ники совсем офигели - LINQ компании убытки приносит - нормально?" Не технологии приносят доходы или убытки, а разумное или неразумное их применение. |
|||
48
Лефмихалыч
19.05.14
✎
21:44
|
(31) Написать код, который в состоянии понять машина, может практически кто угодно. Настоящий профессионализм состоит в написании кода, который понятен человеку
|
|||
49
iamnub
19.05.14
✎
21:45
|
(45)
Ага)) И знаешь в какой? var indexed_clients = clients.GroupBy(client=>client.index_letter). Получаем контрагентов сгруппированных по первой значимой букве. Да, сервак будет молотить числа по полной. Но, лучше его нагружу я, чем какой-нить дядя из 1С. |
|||
50
iamnub
19.05.14
✎
21:46
|
(46)
Берет меня сомнение... |
|||
51
vcv
19.05.14
✎
21:47
|
Ваш код не имеет смысла потому, что он не выполняет нужную работу.
"Прелесть в том, что пользователь, зная о правилах формирования индекса - сможет без проблем найти объект." Недостаток в том, что пользователь ожидает индекс по наименованию/фамилии. Или по имени. Или по адресу. Но не по "самому длинному слову". Ваше самое длинное слово пользователю не нужно, а значит и сам код, и результат его работы никому не нужны. Обсуждать крутизну и мощь нафиг никому не нужного кода... оставили бы вы тему до пятницы. |
|||
52
iamnub
19.05.14
✎
21:48
|
(47)
Странный подход. Подразумевает, что вы знаете _разумный_ предел. Знаете, и на нём находитесь. Всё что ниже - ламерье. Всё что выше - неэффективная заумь. |
|||
53
vcv
19.05.14
✎
21:49
|
+(51) Против мощи и крутизны LINQ в частности и функциональщины с лямбда-выражениями в общем ничего не имею :)
|
|||
54
Лефмихалыч
19.05.14
✎
21:51
|
(49) ну, да. А если эта граната елданет, то у тебя еще есть :)
(50) результат будет такой же - букву Г найдет и в "ИП Гена Булкин" и в "Гена ООО". Только вот в запрос его не всунешь - что верно, то верно (51) на самом деле подобная магия крови имеет практическое приложение, например, в деле всяких смс-рассылок по имеющейся базе номеров. Когда уже есть овер 9000 номеров телефонов, которые забиты хрен пойми как. Это только то, что первое в голову приходит |
|||
55
Serg_1960
19.05.14
✎
21:51
|
Разделяю восторг тс. Но при чём тут 1С и v8?
|
|||
56
Лефмихалыч
19.05.14
✎
21:52
|
(55) при том, что форум по 1С наверное
|
|||
57
vcv
19.05.14
✎
21:52
|
(52) Человеческий фактор сейчас самый ценный и дорогой финансово. Улучшение читабельности с расчетом на средний уровен разработчиков в компании или на рынке сберегает много денег. А ваши многострочные заклинания больше годятся для олимпиадного программирования.
|
|||
58
Chai Nic
19.05.14
✎
21:55
|
Я давно предсказывал.. в 1с идут пэхэписты со своими привычками писать нечитаемый и несопровождаемый код...
|
|||
59
0xFFFFFF
19.05.14
✎
21:56
|
(57) да дайте вы ТСу удовлетворить юношеские амбиции.
Давайте все вместе признаем просто, что он нереально крут. Ну просто нереально. |
|||
60
vcv
19.05.14
✎
21:57
|
Гляньте хотя бы в википедию в статью "Качество программного обеспечения". Там не зря первым пунктом поставлена читаемость кода. Сейчас она важнее (за исключением отдельных критичных мест) и быстродействия, и использования ресурсов и всего прочего.
Ваш код разбить на несколько строк и отформирировать правильным образом, и стал бы он гораздо лучше. А то сейчас так и хочется эту строчку снабдить комментарием строк на несколько. |
|||
61
iamnub
19.05.14
✎
22:05
|
Я - нуб, прошу не забывать.
(54) --на самом деле подобная магия крови имеет практическое приложение, Драть HTML-ные ответы на части - что анекдоты писать в пятничную ветку. Просто и ненапряжно. Вообще я не совсем понял - почему некоторые так возбудились. Лямбда-выражения появилась только в 8-ой Яве. Вы видели ЧТО они (явисты) там городили, для универсальной сортировки примитивной коллекиции примитивных же объектов? Теперь вот появились. |
|||
62
iamnub
19.05.14
✎
22:11
|
Код в (1) реально нубский. Там нет ничего из-ряда-вон.
Операторы, перечисленные через точку. В мире 1С - это банальный запрос с левым соединением спр.Номенклатуры с остатками. Кому-то тоже комментарии понадобятся. ))) |
|||
63
vcv
19.05.14
✎
22:16
|
(61) "Вообще я не совсем понял - почему некоторые так возбудились".
Почему бы не потрепать языком перед сном :) И всё же, по моему глубокому убеждению, в среде 1Сников гораздо актуальнее проблемы поддержки наследственного кода, оставшегося от прошлых десяти поколений одинэсников. И вот с этой точки зрения код в (0) представляет собой отличный пример плохого кода. |
|||
64
iamnub
19.05.14
✎
22:17
|
||||
65
iamnub
19.05.14
✎
22:19
|
(63)
Это запрос на 15 страниц - плохой код. В (1) - отличный код. Зашивается в сборку, работает всегда - и ни от чего не зависит. |
|||
66
Dedal
19.05.14
✎
22:32
|
(65)
Хороший код это да круто. for(B=i=y=u=b=i=5-5,x=10,I=[],l=[];B++<304;I[B-1]=B%x?B/x%x<2|B%x<2?7:B/x&4?0:l[i++]="ECDFBDCEAAAAAAAAIIIIIIIIMKLNJLKM@G@TSb~?A6J57IKJT576,+-48HLSUmgukgg OJNMLK IDHGFE".charCodeAt(y++)-64:7);function X(c,h,e,s){c^=8;for(var o,S,C,A,R,T,G,d=e&&X(c,0)>1e4,n,N=-1e8,O=20,K=78-h<<9;++O<99;)if((o=I[T=O])&&(G=o^c)<7){A=G--&2?8:4;C=o-9?l[61+G]:49;do if(!(R=I[T+=l[C]])&&!!G|A<3||(R+1^c)>9&&G|A>2){if(!(R-2&7))return K;n=G|(c?T>29:T<91)?o:6^c;S=(R&&l[R&7|32]*2-h-G)+(n-o?110:!G&&(A<2)+1);if(e>h||1<e&e==h&&S>2|d){I[T]=n;I[O]=0;S-=X(c,h+1,e,S-N);if(!(h||e-1|B-O|T-b|S<-1e4))return W(),c&&setTimeout("X(8,0,2),X(8,0,1)",75);I[O]=o;I[T]=R}if(S>N||!h&S==N&&Math.random()<.5)if(N=S,e>1)if(h?s-S<0:(B=O,b=T,0))break}while(!R&G>2||(T=O,(G||A>2|(c?O>78:O<41)&!R)&&++C*--A))}return-K+768<N|d&&N}function W(){i="<table>";for(u=18;u<99;document.body.innerHTML=i+=++u%x-9?"<th width=60 height=60 onclick='I[b="+u+"]>8?W():X(0,0,1)'style='font-size:50px'bgcolor=#"+(u-B?u*.9&1||9:"d")+"0f0e0>&#"+(I[u]?9808+l[67+I[u]]:160):u++&&"<tr>")B=b}W() Вот только с такой конструкцией не всякий может разобраться. А в программировании такие финты нужны только для того чтобы доказать длину органа. И в очень редких и уникальных случаях. В общем сходи к любому преподавателю и он тебе объяснит. |
|||
67
Serg_1960
19.05.14
✎
22:33
|
В 1С этот "отличный" код можно собрать за десяток строк... Ну и стоит ради этого копья ломать? Это риторический вопрос, ответа не требуется.
:( ушёл с ветки играть в wow :) |
|||
68
NcSteel
19.05.14
✎
22:36
|
(65) Запрос на 15 страниц оформенный через временные таблице круче чем (1).
|
|||
69
iamnub
19.05.14
✎
22:37
|
(67)
Собери! Я свой код показал, покажи свой за десяток строк. |
|||
70
iamnub
19.05.14
✎
22:38
|
(68)
Запрос на 15 страниц - не имеет отношения к программированию. И мне не интересен. |
|||
71
NcSteel
19.05.14
✎
22:41
|
(70) Ничего когда подрастешь, будет интересно. Впереди тебя еще длинный путь, эх завидую
|
|||
72
iamnub
19.05.14
✎
22:51
|
(71)
Ты наверное не понял - мне не интересна логика на стороне СУБД. Она органичена, не выразительна.. Опять же - не интересна. Я этим наелся. |
|||
73
iamnub
19.05.14
✎
22:52
|
(71)
А то, что тебе нужен 15-страничный запрос, чтобы повторить код в (1) - лишь потверждает это. Строчку кода не осилить, но запрос мы напишем, конечно... |
|||
74
Сияющий Асинхраль
19.05.14
✎
23:16
|
(39) Нет, в этом коде нет никакой обфускации, этот код маленькой процедурки, которая склоняет слова. Падеж-крохотулька, если мне память не изменяет (можешь погуглить). Там строчек двести на 1С, а работает не сильно хуже многословных динамических библиотек...
|
|||
75
iamnub
19.05.14
✎
23:24
|
(74)
Ну тогда я так понимаю - образчик суперчитаемого кода. |
|||
76
Steel_Wheel
19.05.14
✎
23:27
|
(0) А почему бы не сравнить время написания и объем кода, который регламентирует работу небольшого склада? Например, торговал я табуретками месяц, хочу понять, в минус или в плюс?
|
|||
77
Jaap Vduul
19.05.14
✎
23:32
|
Кстати, если в данном случае вместо лямбды использовать "запросную" нотацию, то уже будет гораздо читабельнее:
var word = (from words in name.Split(' ') where !forbidden_words.Contains(words) && !words.Contains(".") orderby words.Length descending select words).Take(1).SingleOrDefault(); |
|||
78
iamnub
19.05.14
✎
23:33
|
(76)
Иопта. Я что, где-то сказал, что учетную конфу быстрее написать на ASP.NET MVC/WPF/SL/WinForms/WebForms быстрее, чем на 1С? Нет, склад за пару часов пишется на 1С. С правами, со всей фигней. И если оставаться в рамках склада - то 1С - да бест. |
|||
79
Сияющий Асинхраль
19.05.14
✎
23:34
|
Ну, вот тоже самое на 1С, причем даже на семерке :-)
Стр = СтрЗаменить(Стр," ",РазделительСтрок);Колво = КолвооличествоСтрок(Стр);Рез = "";Для i = 1 По Колво Цикл Рез = ?(СтрДлина(СтрПолучитьСтроку(Стр,i)) > СтрДлина(Рез),СтрПолучитьСтроку(Стр,i),Рез) КонецЦикла; |
|||
80
Сияющий Асинхраль
19.05.14
✎
23:35
|
+(79) По количеству кода, примерно как в (0), и результат тот же. Вопрос, в чем тогда кайф (0)
|
|||
81
iamnub
19.05.14
✎
23:36
|
(77)
Забыл .ToCharArray().First().ToString(); |
|||
82
Сияющий Асинхраль
19.05.14
✎
23:37
|
+(79) Да, КолвооличествоСтрок(Стр), естественно КоличествоСтрок(Стр)
|
|||
83
iamnub
19.05.14
✎
23:41
|
КоличествоСтрок(Стр)
Я этого не помню. |
|||
84
Сияющий Асинхраль
19.05.14
✎
23:43
|
(83) Причем заметь, это написано в русской нотации. На латинице будет короче :-)
|
|||
85
Сияющий Асинхраль
19.05.14
✎
23:45
|
(83) Да, автозамену пользовал, там СтрКоличествоСтрок(Стр)
|
|||
86
iamnub
19.05.14
✎
23:45
|
(80)
Куда ты смотришь. Ты не убрал запрещенные слова. Не убрал слова с точкой. Не разложил строку на символы и не взял первый. |
|||
87
Сияющий Асинхраль
19.05.14
✎
23:52
|
Вот тебе первый символ после цикла:
Рез = Лев(Рез,1); Остальное примерно также, десяток-два символов. Итого все равно длина практически та же, особенно если написать в латинской нотации. Причем, если внятно разложить по строкам, это еще и понимается проще... |
|||
88
iamnub
19.05.14
✎
23:52
|
Тот же LINQ в данном контексте можно эмулировать конечно, кто же спорит.
Но при определенной практике использование LINQ 2 OBJECTS превращается... В отдых, что ли? Быстро и приятно. Тут такие г_овно бурления из примитивного примера, а если чуть... Даже не по серьезнее - а подальше отойдем от 1С? |
|||
89
Jaap Vduul
19.05.14
✎
23:54
|
(81) Не, это уже г-код. Д.б. проверка на null:
if (!string.IsNullOrEmpty(word)) { return word[0]; } |
|||
90
Сияющий Асинхраль
19.05.14
✎
23:58
|
(88) Ты привел пример удобства, я тебе написал такой же длины на 1С, но более читаемо.
Собственно, никто не спорит, что специализированные проги, часто удобнее в задачах, на которые они рассчитаны, но как никто не будет учетную систему писать не линке, так и пользовать 1С под сложный разбор текста вряд ли имеет смысл. А посему смысл топика? Каждой задаче свой инструмент... |
|||
91
iamnub
20.05.14
✎
00:01
|
(87)
Ты решил локальную задачу. ЛОКАЛЬНУЮ. |
|||
92
iamnub
20.05.14
✎
00:03
|
Есть список заказов.
Нужно выбрать один заказ каждого контрагента в каждом месяце. Тот же LINQ |
|||
93
iamnub
20.05.14
✎
00:03
|
Та же строчка кода.
|
|||
94
iamnub
20.05.14
✎
00:03
|
var res = orders.GroupBy(p => new { clientID = p.clientID, month = p.date.Month }).Select(orderGR => orderGR.OrderByDescending(doc=>doc.date).FirstOrDefault());
|
|||
95
iamnub
20.05.14
✎
00:04
|
У меня появился новый (раньше не было) оператор groupBy
|
|||
96
iamnub
20.05.14
✎
00:05
|
Тебе же, (90) надо переписать весь код полностью.
|
|||
97
Сияющий Асинхраль
20.05.14
✎
00:05
|
(91) Ты тоже привел ЛОКАЛЬНУЮ задачу. Заметь все задачи являются Локальными.
Ты ведь выкапывая на даче ямку 30*30 не вызываешь экскаватор? Хотя мог бы, коли денег много. А посему зачем сравнивать несравнимое? Что лучше подъемный кран или легковой мерседес? Вот ты умудряешься это сравнивать... |
|||
98
iamnub
20.05.14
✎
00:07
|
(97)
Смотри - я решил другую задачу, но с тем механизмом. Время? Да минуты не было. Ты? P.S. Не сочти за менторство, но тебе респект и уважуха. Единственный, кто слова подкрепил кодом. |
|||
99
Steel_Wheel
20.05.14
✎
00:09
|
(78) Просто, ты не те вещи сравниваешь, имхо.
Ты сравниваешь один из мощных аспектов .net с одним из не самых удачных 1с. Сравнивать уместно в тех категориях, в которых оппоненты сильны оба |
|||
100
Сияющий Асинхраль
20.05.14
✎
00:12
|
(98) Да, вторую задачу я буду решать по-другому, я просто зайду в построитель запроса, тот же СКД и по сути не напишу вообще ни строчки, только мышой пощщелкаю :-(
|
|||
101
iamnub
20.05.14
✎
00:15
|
(100)
Забавно, что щелкать придется дооооооооолго |
|||
102
Jaap Vduul
20.05.14
✎
00:16
|
(98) В 1цэ это решается запросом, внешне будет на (77) похоже.
С помощью конструктора также не больше минуты потребуется, как правильно в (100) отмечено, мышью несколько раз кликнуть. |
|||
103
iamnub
20.05.14
✎
00:17
|
(99)
Я ничего не сравниваю. Я лишь сказал, что обожаю "один из мощных аспектов .net". Он экономит мне время, он прост в поддержке. Там где мы оказались - я пришел туда не один. |
|||
104
iamnub
20.05.14
✎
00:18
|
(102)
Запросы, запросы, везде запросы. Не получится несколько раз кликнуть мышкой. В такой формулировке - не получится |
|||
105
Сияющий Асинхраль
20.05.14
✎
00:19
|
(101) Да нет, прощелкал, та же минута. Да в сформированном виде, это чуток длиннее чем (94), но тут код пишу не я - 1С...
|
|||
106
Jaap Vduul
20.05.14
✎
00:20
|
(104)Чой-то не получится?
|
|||
107
iamnub
20.05.14
✎
00:21
|
(105)
По одному заказу от каждого контрагента в пределах месяца? Пакажь |
|||
108
Artful Den
20.05.14
✎
00:25
|
Ох, черт, подумал уже, что пятница! Тем не менее пошел за попкорном!
|
|||
109
Сияющий Асинхраль
20.05.14
✎
00:30
|
(107) Ну смотри, типовой код сформированный мышой:
Пока ВыборкаМесяц.Следующий() Цикл ОбластьМесяц.Параметры.Заполнить(ВыборкаМесяц); ТабДок.Вывести(ОбластьМесяц, ВыборкаМесяц.Уровень()); ВыборкаКонтрагент = ВыборкаМесяц.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент); ТабДок.Вывести(ОбластьКонтрагент, ВыборкаКонтрагент.Уровень()); ВыборкаДетальныеЗаписи = ВыборкаКонтрагент.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЦикла; КонецЦикла; КонецЦикла; Меняешь в этом коде 3 слова руками :-) Если ВыборкаДетальныеЗаписи.Следующий() Тогда ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЕсли; Т.е. Пока...Цикл...КонецЦикла меняешь на Если...Тогда...КонецЕсли. Все, ручные изменения закончены, все остальное сформировано мышой... |
|||
110
Сияющий Асинхраль
20.05.14
✎
00:31
|
+(109) :-))))
|
|||
111
iamnub
20.05.14
✎
00:33
|
(109)
Да это ХАК! |
|||
112
iamnub
20.05.14
✎
00:33
|
Из (94)
var res = orders.GroupBy(p => new { clientID = p.clientID, month = p.date.Month }).Select(orderGR => orderGR.OrderByDescending(doc=>doc.date).FirstOrDefault()); |
|||
113
iamnub
20.05.14
✎
00:33
|
Не, я пожайлуй себе на подушке LINQ вышью!
|
|||
114
Сияющий Асинхраль
20.05.14
✎
00:37
|
(11) Можно даже еще короче :-). В цикле сразу после:
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); Достаточно вставить ОДНО слово: Прервать; Как видишь. Писанины получается гораздо меньше :-) |
|||
115
iamnub
20.05.14
✎
00:37
|
(109)
И главное молодец такой - в макет типа вывел. Вся жизнь 1С-ника - от БД до отчета. Мне бы объект какой, типа универсальной коллекции. В общем, как и ожидалось - чуть в сторону - и получаем ТАКОЕ. Потому что получить данные запросом - это не каждый 1С-ник на собеседовании изобразит. |
|||
116
iamnub
20.05.14
✎
00:38
|
-- Писанины получается гораздо меньше
Меньше чем в (112)? |
|||
117
Сияющий Асинхраль
20.05.14
✎
00:42
|
(116) Кода больше, а писанины меньше. Я сформировал ПОЛНЫЙ отчет, при этом руками написал следующие слова:
НАЧАЛОПЕРИОДА(ЗаказПокупателя.Дата, МЕСЯЦ) и Прервать; Все остальное мышка. Вот и сравнивай, где кода написано больше - пять названных мной русскоязычных слов или в (112) |
|||
118
iamnub
20.05.14
✎
00:49
|
(117)
Ты ведь это всё серьезно, да? |
|||
119
Сияющий Асинхраль
20.05.14
✎
00:52
|
Абсолютно, я зашел в построитель отчета, пощелкал мышой, в построителе написал руками:
НАЧАЛОПЕРИОДА(ЗаказПокупателя.Дата, МЕСЯЦ) В сформированном построителем тексте процедуры, написал одно слово: Прервать; Собсно на этом я получил полный отчет, готовый к работе в 1С, реально написав при этом пять слов :-) |
|||
120
iamnub
20.05.14
✎
00:53
|
(119)
А ты бы и в жизни (production) так же бы сделал? |
|||
121
iamnub
20.05.14
✎
00:54
|
(119)
--Абсолютно, я зашел в построитель отчета, пощелкал мышой, в построителе написал руками: Я имею ввиду - ты выдаешь это за решение? Кривой запрос + работа конструктора? |
|||
122
Сияющий Асинхраль
20.05.14
✎
00:58
|
Я тебе показал, что Почти всегда можно написать короче и проще, так что не стоит восхищаться как ты это делаешь коротким кодом :-)
|
|||
123
iamnub
20.05.14
✎
00:58
|
Ясно
|
|||
124
Сияющий Асинхраль
20.05.14
✎
01:01
|
Кроме того, я так же без проблем могу попросить тебя изобразить с помощью любимого тобой ПО, скажем процесс формирования, или хотя бы отображения для пользователя этих самых заказов, которые ты считаешь. И посчитай количество строк кода для этой задачи...
|
|||
125
Сияющий Асинхраль
20.05.14
✎
01:06
|
(124) Ну и еще, кривой код не зависит от языка программирования, кривой код зависит от программиста. На том же Линке можно написать не менее криво, чем я тебе предложил в (114). Так что надо восхищаться не языками программирования, каким бы они не были крутыми, надо восхищаться квалифицированными программистами. А мерятся крутизной языков это детство...
|
|||
126
iamnub
20.05.14
✎
02:21
|
(124)
Ты можешь меня попросить без проблем? LOL --изобразить с помощью любимого тобой ПО Показать? Боюсь, что если в (1) не читаемо, то XAML-овский код вообще покажется сигналами из космоса. Скажи честно, ты что-нибудь кроме 1С уверено знаешь? А что у меня что-то сомнения после твоих телег. (125) Это в точку. Только не пойму - как сочетаются рассуждения о квалифицированных программистах\предложенные тобой решения\и занятая тобой позиция? Программировать ты не умеешь, да тебе я так понял это и не нужно. Кривой код на страницу всерьез сравниваешь с одной строчкой. Квалифицированные программисты? Ты о ком? |
|||
127
Злопчинский
20.05.14
✎
02:52
|
хз...
делал в свое время "нормализатор" наименований клиентов для автоввода новых клиентов при загрузке баноквских выписок. . http://screencast.com/t/A7qDSOoodMSj . сейчас в этой табличке строк 50, в итоге всякие ЗАО ПО "Торговый дом "Сигма" превращается в Сигма ТД ЗАО ПО . и фигли толку? . все это как шмагия... никто этим не пользуется кроме меня (пополнение правил). потому как это надо хоть чуть-чуть ПОДУМАТЬ. а подавляющее большинстов привыкло думать только в узко отведенных рамках своей задачи. Где чуть надо напрячься, все - это не моя задача, пусть думают/делают другие . вообще нафиг надо всю эту автоматизацию отменить. . свести ее к блокнотно тетрадному типу... простых линейных записей. а сборку и обработку этих записей ПРИНЦИПИАЛЬНО ОТДЕЛИТЬ от тех, кто эти записи вносит. Короче должны быть морлоки и элои, только с точностью до наоборот. . миром правит майонез!!! http://www.youtube.com/watch?v=yWm1CNmbgj8 |
|||
128
dmpl
20.05.14
✎
08:17
|
(0) Ты где такую траву нашел? В чем практический смысл этого?
|
|||
129
dmpl
20.05.14
✎
08:21
|
(1) Кстати, что этот метод вернет для ЗАО "Cиний Вечер Анапы"? Почему? Как это соотносится с ТЗ из (0)?
|
|||
130
dmpl
20.05.14
✎
08:23
|
(17) На олимпиадах по программированию за запись в 1 строку слишком многого сразу серьезные штрафные баллы лепят.
|
|||
131
ivanovnm
20.05.14
✎
08:45
|
(0) Чувак, ты нереально крут! Теперь напиши свою СУБД на асме, будь мужиком!
|
|||
132
senior
20.05.14
✎
08:52
|
На самом деле очень странно, что в 1с нет аналога LINQ to SQL, учитывая, что все метаданные уже определены в конфигурации. Это автоматом бы дало автокомплит выражений для языка запросов, имхо.
|
|||
133
senior
20.05.14
✎
08:54
|
(132) ... а так же синтакс контроль запросов, наравне с остальным кодом, а не когда он парсится конструктором.
|
|||
134
Salimbek
20.05.14
✎
09:06
|
Тема - фигня какая-то.
Автор в (0) увидел "новейшее" языковое расширение. Которое воспринимается им как магия. При этом уже в самом названии явно выражено, что это "расширение", т.е. конструкции, которые при компиляции разворачиваются в более мрачный код. Так и в 1С-ке оно точно так же работает. Просто заточенность у каждого продукта своя. Сравнивать их при этом - странно. Кроме того, автор преподносит именно LINQ как священный источник, хотя мне явно видно наследие Ruby в этом коде. Отдельный вопрос - это производительность полученной системы на нескольких миллионах строк. P.S. Во всех вменяемых учетных системах - название (по которому происходит быстрый поиск) отделено от "Полного наименования" - которое используется в печатных формах документов. |
|||
135
ivanovnm
20.05.14
✎
09:10
|
(134) Не то. Поддержи эго автора.
|
|||
136
vcv
20.05.14
✎
09:11
|
(134) Хорошо, что слово "новейшее" в кавычках. А то, помнится, еще в прошлом веке в Клиппере что-то подобное писал :)
Автор наелся синтаксического сахара, ему сладко и хорошо стало. Ура! Порадуемся за человека. |
|||
137
senior
20.05.14
✎
09:13
|
ну все прям набросились на автора) но никого не напрягает, что когда правишь руками запрос, то система относится к нему как к обычной строке, не контролируя и не подсказывая вообще ничего?
|
|||
138
djekting
20.05.14
✎
09:33
|
мышка-программисты они такие мышка-программисты
|
|||
139
Крошка Ру
20.05.14
✎
09:39
|
(113) Ты себе это на том, чем ты меряешься вытатуируй... Поместится? ))
|
|||
140
dmpl
20.05.14
✎
09:50
|
(137) Ты либо гуру, и подсказки тебе не нужны, либо пользуйся конструктором ;)
|
|||
141
iamnub
20.05.14
✎
09:54
|
Мрачняк....
|
|||
142
iamnub
20.05.14
✎
09:58
|
(139)
Если 1С-ник и придет в ветку о незнакомой ему технологии, то только для того, что обсудить гениталии. Не свои. Крошка, что ж тебе неймется? |
|||
143
dmpl
20.05.14
✎
10:03
|
(141) Программисты - лентяи. Соответственно, если он усложняет код - то только для того, чтобы что-то не делать. А в отношении типичных задач, решаемых в 1С, не было показано ни одного реального жизненного примера, где это можно применить так, чтобы потом что-то не делать.
|
|||
144
Serg_1960
20.05.14
✎
10:04
|
(с умным видом) В каждом языке есть отличие от другого языка в ту или иную сторону.
А если без шуток и подначек, то и в такой конструкции есть своя прелесть... "Моя прелесть"(с) :)) МногоСтрочное = "ООО Гарамов К.Е. Анг 18"; МногоСтрочное = СтрЗаменить(СтрЗаменить(ВРег(МногоСтрочное),".", " ")," ",Символы.ПС); НужноеСлово = ""; Для х = 1 По СтрЧислоСтрок(МногоСтрочное) Цикл ТекущееСлово = СтрПолучитьСтроку(МногоСтрочное, х); НужноеСлово = ?(СтрДлина(ТекущееСлово) >= СтрДлина(НужноеСлово), ТекущееСлово, НужноеСлово); КонецЦикла; Сообщить("Буква """ + Лев(НужноеСлово,1) + """ в слове """ + НужноеСлово + """ (кол-во букв - " + СокрЛ(СтрДлина(НужноеСлово)) + ")"); |
|||
145
wade25
20.05.14
✎
10:09
|
Стареете, я LINQ еще 4 года назад осваивал когда еще в на нашем не было литературы)
Тогда суть была в типовом запросе к разным источникам данных) Ща, что то изменилось?) |
|||
146
iamnub
20.05.14
✎
10:13
|
(145)
Ничего. (144) Ну и славно. Осталось выбросить запрещенные слова (еще цикл) и убрать слова с точкой (условие). А так да - то что нужно. |
|||
147
Сияющий Асинхраль
20.05.14
✎
10:15
|
(126) А как тебе еще показать то, что ты упорно не хочешь слышать? Упорно сравнивая специализированные языки, направленные на совершенно разную аудиторию. Когда тебе надо выкопать яму 30*30 см ты экскаватор зовешь? Или таки лопатой махаешь? Ну, напиши с помощью Линка учетную систему. Или все-таки слабо?
Еще раз, каждому языку своя область применения. Когда я писал серьезные квантовомеханические расчеты атомной структуры твердого тела, то пользовал вообще Фортран. Хотя может быть тебе это захотелось бы на Линке написать. Ну, флаг тебе в руки. А что касается моей программистской квалификации, ну, я никогда не считал себя суперпрограммистом, причем, даже на 1С, потому что программист, по-моему, это процесс, нельзя выучить один язык и сказать, ну вот, теперь я супер - все меняется слишком быстро... Но уж на ассемблере, фортране, дельфях и джаве попрограммировать чуток пришлось. И, хотя в каждом из перечисленных, языков есть свои достоинства и недостатки, мне никогда в голову не приходило сделать как ты сделал в (0) - сравнить бабу с коровой... |
|||
148
iamnub
20.05.14
✎
10:15
|
(143)
Группировка объектов по произвольному признаку. И навигация по ним. |
|||
149
Serg_1960
20.05.14
✎
10:18
|
(146) Хмм... слова "с точкой" убраны втрой строкой алгоритма. А "запрещенные" слова не реализованы в твоём алгоритме (1)
|
|||
150
iamnub
20.05.14
✎
10:20
|
(147)
--напиши с помощью линка учетную систему.. Слушай, кончай народ смешить. Это уже просто нелепо. |
|||
151
Сияющий Асинхраль
20.05.14
✎
10:21
|
(150) Нелепо сравнивать 1С с Линком. Это ты народ смешишь, а не я
|
|||
152
Сияющий Асинхраль
20.05.14
✎
10:22
|
+(151) "v8: Мощь LINQ-а, или 1С и не снилось" - это твой заголовок, а не мой...
|
|||
153
iamnub
20.05.14
✎
10:23
|
(149)
Ты уверен? Ты убираешь точки, но не слова с точками. А запрещенные слова в (1) есть - смотри внимательней. Они там так и называются. |
|||
154
dmpl
20.05.14
✎
10:25
|
(148) Пользователям бы обычную сортировку освоить... вот честно - зачем в реальной жизни ТЗ из (0)? Почему не привести более реальный пример вместо общих фраз?
|
|||
155
vcv
20.05.14
✎
10:26
|
Предлагаю двинуть встречную тему "Мощь 1С, или всем прочим языкам и не снилось", в которой обсудить СКД. А еще лучше "создание тиражного отраслевого решения на базе типовой конфигурации".
|
|||
156
dmpl
20.05.14
✎
10:27
|
(153) И где же они задаются?
|
|||
157
iamnub
20.05.14
✎
10:33
|
Так, всем по пунктам.
(152) Твоя упертость в вопросах, где ты зеро - даже уже не поражает. Цепляешься за выдуманную тобой же фигню. LINQ 2 Objects - это способ работы с коллекциями! Это всё равно что сказать - "напиши учетную систему на цикле "Для Каждого", слабо?! Вот то-та!" В 1С НЕТ! нормальных инструментов для работы с коллекциями! Так тебе понятней?? |
|||
158
iamnub
20.05.14
✎
10:34
|
(155)
Про СКД - спорить не буду даже. Отличное решение. И "бесплатное", в контексте купленных 1С. За тот же QlikView надо платить. Хотя говорят - офигенная штука. |
|||
159
Сияющий Асинхраль
20.05.14
✎
10:40
|
(157) Пилять, еще раз, 1С специализированная среда разработки рассчитанная на свой круг задач, СВОЙ, там нет многого, там нет внятной подсистемы работы с графикой, с текстами, неоптимизирована скорость, очень слабая математика. Там много чего нет и НИКОГДА не будет. Будем теперь сравнивать все специализированные инструменты с одним не менее специализированным? Именно ты занимаешься этой хней, а не я. Причем с самого первого поста и дойдя до 160-го поста там и не признал, что уже первый пост, был не к месту. Не к месту вообще сравнение. Ну нравится тебе эти возможности, да ради бога, какое отношение сюда имеет 1С? Зачем ты его сюда вообще приплел?
|
|||
160
Сияющий Асинхраль
20.05.14
✎
10:42
|
(156) forbidden_words - он типа передал сюда, где-то там, далеко присвоенное...
|
|||
161
vcv
20.05.14
✎
10:44
|
(157) А они там нужны так уж, нормальные инструменты для работы с коллекциями? В подавляющем большинстве задач, возникающих в рамках предметной области 1С, задача третьей нужности.
|
|||
162
Serg_1960
20.05.14
✎
10:47
|
(офф)
"Я твоих мыслей не разделяю! Преступник! На свете не было, нет и не будет никогда более великой и прекрасной для людей власти 1С, чем власть императора Бориса Нуралиева." (пятый прокуратор Иудеи, всадник Понтийский Пилат по поводу 1С:Патриотизма) |
|||
163
fisher
20.05.14
✎
10:49
|
(2) Все когда-то увлекались однострочными программами. Это пройдет.
|
|||
164
Serginio1
20.05.14
✎
10:50
|
(158) Ты главное не нервничай. Многие здесь не хотят воспринимать ничего нового.
(160) Так 1С и работает в основном с коллекциями (наборами данных). Так что Linq как раз в тему. А есть еще Linq to DB который значительно удобнее работы с текстовым запросом. (161) Я вот например постоянно пользуюсь группировкой по полю полям v8: Возможно ли ТаблицуЗначений по одной колонке свернуть, а по остальным сложить? |
|||
165
Asmody
20.05.14
✎
10:50
|
(161) нужны. или у тебя в коде редко используется
Пока Выборка.Следующий() Цикл ? |
|||
166
Ненавижу 1С
гуру
20.05.14
✎
10:51
|
(161) вообще то 1С постоянно работает с коллекциями (выборки, списки, табличные части, наборы записей)
|
|||
167
vcv
20.05.14
✎
10:56
|
(164) Коллекция коллекции рознь. Вот смотри, что, формально делается в (1)
1. Разделили строку по пробелам в коллекцию 2. Отфильтровали коллекцию по условию, получили фильтрованную коллекцию. 3. Преобразовали элементы коллекции к нижнему регистру. 4. ... И если тут представить, что на шаге 1 есть вероятность получить коллекцию с мощностью элементов этак в миллионы, то большое сомнение берёт, что компилятор справится с оптимизацией, а не будет несколько раз перебирать все элементы коллекции, создавать анонимные коллекции и всё прочее. |
|||
168
vcv
20.05.14
✎
11:01
|
+(167) Я могу сделать в 1С коллекцию, обращение к элементу которой вызовет выполнение запроса к базе. И во что тогда выльется исполнение кода типа (1)?
Аккуратней надо с подобными инструментами. А не кричать "тут МОЩЬ, там ФУ". |
|||
169
Адинэснег
20.05.14
✎
11:01
|
(0) и обфускация не нужна
|
|||
170
Serginio1
20.05.14
✎
11:04
|
(167) Ну у него можно и оптимизировать
return name. Split(' ').Where(p => !forbidden_words.Contains(p, StringComparer.InvariantCultureIgnoreCase)).Where(p => !p.ToCharArray().Contains('.')).OrderByDescending(p => p.Length).FirstOrDefault().ToCharArray().First().ToString(); |
|||
171
Адинэснег
20.05.14
✎
11:08
|
LINQ — это набор появившихся в Visual Studio 2008 функций, который значительно расширяет возможности синтаксиса языков C# и Visual Basic.
|
|||
172
Asmody
20.05.14
✎
11:08
|
(168) [обращение к элементу которой вызовет выполнение запроса к базе] — использование DSL не отменяет использование головы
|
|||
173
Serginio1
20.05.14
✎
11:09
|
(167) А здесь уже ты сам выбирай, что для тебя важнее выразительность и удобство или скорость. Все таки в .Net сейчас много работают над оптимизацией. Для 1С это не актуально, так как рукопашная оптимизация может быть еще медленнее, так как самому предется делать циклы сравенение итд. Как раз для 1С Linq очень даже необходим. Другое дело, что любым инструментом нужно уметь пользоваться
|
|||
174
Адинэснег
20.05.14
✎
11:11
|
бугогага...
ТаблицаОстатковАвансов = ПолучитьТаблицуОстатковАванса( СтруктураШапкиДокумента, ТаблицаЗачетаАвансов, СтруктураПараметров, Отказ, Заголовок); 1C умеет в одну строку получить таблицу остатков авансов нука нука, как на Linq в одну строку? |
|||
175
iamnub
20.05.14
✎
11:11
|
(167)
Но ты даже не понимаешь, что делается в (1). ))))) Что ты споришь? А еще можно винт отформатировать. Ну как-то аккуратнее надо с подобными инструментами! |
|||
176
vcv
20.05.14
✎
11:13
|
(170) Давай дальше оптимизируй. Сейчас ты сначала всю коллекцию фильтруешь по списку ненужных слов, потом сортируешь по длине и берёшь первый элемент. А было бы эффективней просто обойти коллекцию один раз, пропуская ненужные слова и запоминая самое длинное слово. Получится совсем другая оценка сложности алгоритма. :)
Естественно, это не для коллекций из трёх слов. |
|||
177
dmpl
20.05.14
✎
11:14
|
(175) Никому не нужная фигня в (1) делается. Тут и понимать не надо.
|
|||
178
Ненавижу 1С
гуру
20.05.14
✎
11:14
|
(167) вообще то там цимус в ленивых вычислениях, чего нет в 1С
|
|||
179
vcv
20.05.14
✎
11:16
|
(172) Активное использование синтаксического сахара повышает вероятность попадания туловища без головы в код. А оно нам надо?
|
|||
180
Ненавижу 1С
гуру
20.05.14
✎
11:18
|
(179) ну может и циклы отменить, можно ведь писать
Если ... Тогда Перейти ... |
|||
181
iamnub
20.05.14
✎
11:20
|
(176)
Двойные стандарты во всей красе. Быстрота типового решения в 1С - это тру. Дофига нету, ну и ладно, зато мини-склад за два часа. Быстрота разработки в .NET - это не тру, потому что надо одним циклом. Ну и что, что вычисления парралелятся по ядрам одним выражением, а ты мини-склад напиши! Как-то скучно, что ли... |
|||
182
Serginio1
20.05.14
✎
11:20
|
(176) Ну на данном примере это из 5 ти слов. Вполне себе нормальный вариант. Но ты забываешь про ленивость. Компилятор будет оптимизировать Linq уже из готового выражения как это делается и в SQL запросе.
Это тоже самое как Top(1) |
|||
183
Serginio1
20.05.14
✎
11:22
|
||||
184
dmpl
20.05.14
✎
11:22
|
(180) Можно и так. А можно просто развернуть цикл - и дело с концом. Кстати, когда речь идет о повышении производительности, то именно так и делают.
(181) Покажи хоть одну серьезную учетную систему на .Net. |
|||
185
igork1966
20.05.14
✎
11:22
|
(181) сравнивать нужно сравнимое
|
|||
186
rsv
20.05.14
✎
11:25
|
(0) 1C причем ? Так и не понял ...
|
|||
187
igork1966
20.05.14
✎
11:26
|
(186) +10000
|
|||
188
iamnub
20.05.14
✎
11:27
|
(186)
Ну значит не судьба. |
|||
189
rsv
20.05.14
✎
11:28
|
(188) Можно начать рассуждать о Xquery ...
|
|||
190
rsv
20.05.14
✎
11:28
|
+(189)И почему этого нет в 1С ..... Только опять не пойму - причем здесь 1С ..
|
|||
191
igork1966
20.05.14
✎
11:29
|
Кстати не кто не мешает написать часть кода для 1С на C#
:-) |
|||
192
rsv
20.05.14
✎
11:30
|
(188)Записать в поле таблицы километровую хрень и городить огород как вытаскивать невытаскиваемое .... :)
|
|||
193
Ashtray
20.05.14
✎
11:30
|
(0) Буква = ПолныеПрава.ПолучитьПервуюБуквуСамогоДлинногоСловаВПредложении(Предложение);
Мощь, красота. |
|||
194
Serginio1
20.05.14
✎
11:30
|
(184) Ну Linq to EF используется повсеместно. Особенно Code First в Entity Framework
http://msdn.microsoft.com/ru-ru/data/jj193542.aspx |
|||
195
dmpl
20.05.14
✎
11:35
|
(189) И о интринсиках порассуждать тоже можно...
|
|||
196
rsv
20.05.14
✎
11:36
|
(195) Ну а 1С то здесь причем ..... если база не файловая и стоит сиквел - "1С" будет уметь делать многое. Но вопрос - зачем этот огород ...
|
|||
197
Ненавижу 1С
гуру
20.05.14
✎
11:37
|
(196) это фантазии, не хочешь не обсуждай
|
|||
198
dmpl
20.05.14
✎
11:38
|
(196) Да я все жду реальный жизненный пример от автора вместо высосанного из пальца...
|
|||
199
Сияющий Асинхраль
20.05.14
✎
11:39
|
Ну, в некотором смысле, я тоже согласен, что можно было сделать все гораздо удобнее и быстрее, но смысла рассуждать о том, что было БЫ, если БЫ не вижу совершенно. Я, скажем, достаточно сильно жалею, что 1С пошла по пути SQL, а не выбрала несиквельный путь развития, но опять таки мне ли осуждать направление развития 1С. В конце концов это они зарабатывают деньги, и тратят на разработку тоже они...
А полный код (1) на 1С со всеми проверками: Рез = "";Для i = 1 По Строк Цикл Темп = СокрЛП(StrGetLine(Стр,i)); j = 0; j=?(Найти(Запрет,Темп) = 0,?(Найти(Темп,".") = 0,j,1),1); if j=1 then Продолжить; EndIf; Рез = ?(СтрДлина(Темп) > СтрДлина(Рез),Темп,Рез) КонецЦикла; Рез = Лев(Рез,1); |
|||
200
rsv
20.05.14
✎
11:41
|
(180) Кстати обратите внимание штааа в целях надежности пишут ВЫборка.Следующий()=1 а не Ыборка.Следующий(). Так что насчет Если ... Тогда Перейти нельзя быть категоричным :)
|
|||
201
stix2010
20.05.14
✎
11:46
|
(0), (1) ты в итоге, что сказать то хотел в ветке V8? Что ты умный, а мы идиоты? или срач устроить, что 1С гамно?
|
|||
202
iamnub
20.05.14
✎
11:46
|
(199)
Фиговый код. Он банально нечитаемый. |
|||
203
Serginio1
20.05.14
✎
11:47
|
||||
204
iamnub
20.05.14
✎
11:48
|
(201)
Это совсем не то, что я хотел сказать. То что ты написал - это то, что ты хотел подумать. |
|||
205
Сияющий Асинхраль
20.05.14
✎
11:50
|
(202) Вот тут я согласен, и в реальной задаче я никогда писать такое не буду, и даже переменные обзывать так как в (199) не буду, но в плане читабельности он почти таков как и (1). Без обид, но (1) тоже нечитаемо. Хотя, конечно, понятно, после некоторого количества времени потраченного на его разбор, но в данном случае время - деньги...
|
|||
206
stix2010
20.05.14
✎
11:51
|
(204) пока я вижу очередной срач
|
|||
207
iamnub
20.05.14
✎
11:53
|
(205)
Непоэтому. Он фиговый и нечитаемый потому - что даже ты его не контролируешь. |
|||
208
iamnub
20.05.14
✎
11:54
|
(206)
Ты его и начал. |
|||
209
Serginio1
20.05.14
✎
11:56
|
(205) Вообще хорошим тоном считается такое написание
eturn name. Split(' ').Where(p => !forbidden_words.Contains(p, StringComparer.InvariantCultureIgnoreCase)) .Where(p => !p.ToCharArray() .Contains('.')) .OrderByDescending(p => p.Length) .FirstOrDefault() .ToCharArray().First().ToString(); |
|||
210
Крошка Ру
20.05.14
✎
11:56
|
(202) Дык... У каждого свой потолок...
|
|||
211
Serginio1
20.05.14
✎
11:59
|
вернее даже так
eturn name. Split(' ').Where(p => !forbidden_words .Contains(p, StringComparer.InvariantCultureIgnoreCase)) .Where(p => !p.ToCharArray().Contains('.')) .OrderByDescending(p => p.Length) .FirstOrDefault() .ToCharArray().First().ToString(); |
|||
212
Ненавижу 1С
гуру
20.05.14
✎
12:00
|
(209) или даже в нотации LINQ-запроса
from ... in ... where ... select ... |
|||
213
Сияющий Асинхраль
20.05.14
✎
12:01
|
(207) В каком смысле не контролирую?
(211) Это уже лучше, но тоже очень далеко от идеала :-( |
|||
214
Serginio1
20.05.14
✎
12:03
|
(212) Согласен
|
|||
215
Сияющий Асинхраль
20.05.14
✎
12:03
|
+(213) По сути самое непонятное в (199) это:
j=?(Найти(Запрет,Темп) = 0,?(Найти(Темп,".") = 0,j,1),1); Все остальное понятно сразу же... |
|||
216
Serginio1
20.05.14
✎
12:05
|
(211) А что тебе непонятно в 211?
|
|||
217
Сияющий Асинхраль
20.05.14
✎
12:05
|
(212) Такой вариант мне тоже нравится больше...
|
|||
218
Serginio1
20.05.14
✎
12:07
|
Nmae 216 r 215
|
|||
219
Serginio1
20.05.14
✎
12:07
|
Тьфу 216 к 215
|
|||
220
Сияющий Асинхраль
20.05.14
✎
12:07
|
(216) Если я понял (1), то и (211) понятно. Вся проблема, сколько тратится времени на это понимание. Вот о чем речь...
|
|||
221
iamnub
20.05.14
✎
12:08
|
(213)
--В каком смысле не контролирую? Там банально ошибка. Никто как-то не обратил внимания в полемическом задоре, что Serginio1 давно предложил свой вариант выражения (а значит - путем какого-то нечеловеческого усилия сумел прочитать запрос), а мастистые 1С-ники к (200)-му посту так и не сподобились написать корректный код? Полноте-с, программисты.. )))) |
|||
222
dmpl
20.05.14
✎
12:10
|
(203) Реальных примеров задач, решаемых с помощью 1С, не нашел.
(211) Блин, ну ведь бага же - я еще в (129) багу описал - и до сих пор никто ничего не сказал. Что делать, если нет самого длинного слова? Результат будет как попало - в зависимости от реализации сортировки в платформе. |
|||
223
rsv
20.05.14
✎
12:10
|
(221) 1C ники должны писАть ? Может быть вам поупражнятся на форумах RSDN :)
|
|||
224
Сияющий Асинхраль
20.05.14
✎
12:10
|
(219) Я к тому, что понять (199) ничуть не сложнее, чем (211)
(221) Прежде чем положить сюда, я проверил работу кода :-( |
|||
225
dmpl
20.05.14
✎
12:10
|
(221) Багу-то исправь.
|
|||
226
Serginio1
20.05.14
✎
12:18
|
(220) Очень даже легко. Если еще на русском языке то
Возврат name.разложить(' ').Где(p => !ЗапретныеСлова .Содержит(p, StringComparer.InvariantCultureIgnoreCase)) .Где(p => !p.ВМассивБукв.Содержит('.')) .УПОРЯДОЧИТЬ_ПО_Уменьшению (p => p.Длина) .ПервыйИлиПоУмолчанию() .ВМассивБукв().Первый().ВСтроку(); |
|||
227
iamnub
20.05.14
✎
12:19
|
(224)
Код не соответствует условиям. Назван полным - со всеми проверками. 1. Переменная Строк - не определена. 2. Строки получаем - не пойми из чего. 3. Запретных слов должно быть несколько. 4. Условие НЕ на соответствие части слова запретному, а на соответствие целиком. |
|||
228
Serginio1
20.05.14
✎
12:21
|
(224) Не согласен. Твой код без пояснения нечитаем.
Код в 211 не требует пояснения. А в 226 вообще читается легко и понятно правда ! надо заменить на НЕ |
|||
229
dmpl
20.05.14
✎
12:22
|
(227) Код из (1) тоже не соответствует условиям.
|
|||
230
Сияющий Асинхраль
20.05.14
✎
12:22
|
(227) Извини друг, но кода ты не понял. Хорошо, вот развернутый вариант:
Стр = "ООО Гарамов К.Е. Анг 18"; Запрет = "ООО;ОАО;ИП"; Стр = СтрЗаменить(Стр," ",РазделительСтрок); Строк = СтрКоличествоСтрок(Стр); Рез = ""; Для i = 1 По Строк Цикл Темп = СокрЛП(StrGetLine(Стр,i)); j = 0; j=?(Найти(Запрет,Темп) = 0,j,1); J=?(Найти(Темп,".") = 0,j,1); if j=1 then Продолжить; EndIf; Рез = ?(СтрДлина(Темп) > СтрДлина(Рез),Темп,Рез); КонецЦикла; Рез = Лев(Рез,1); Сообщить(Рез); |
|||
231
iamnub
20.05.14
✎
12:22
|
(229)
Это тебе кажется |
|||
232
dmpl
20.05.14
✎
12:24
|
(231) Ну так что он вернет для ООО "Синий Вечер Анапы"?
|
|||
233
iamnub
20.05.14
✎
12:27
|
(232)
Длину случайно выбранного слова из трех. Если это не устраивает, то .OrderBy(word=>word) - гарантирует возврат "А". Какой длины написать комментарий? |
|||
234
iamnub
20.05.14
✎
12:28
|
(230)
--Хорошо, вот развернутый вариант: А почему в "полном со всеми проверками" не было этого: Стр = СтрЗаменить(Стр," ",РазделительСтрок); Строк = СтрКоличествоСтрок(Стр); ?? |
|||
235
dmpl
20.05.14
✎
12:29
|
(233) А теперь читай ТЗ из (0). Там надо вернуть первую букву САМОГО ДЛИННОГО слова. Самое длинное слово может быть только одно. Если таких нет - возвращаться должно пустое (незаполненное) значение.
|
|||
236
Сияющий Асинхраль
20.05.14
✎
12:30
|
(234) Потому же почему в (1) не видно, что же такое forbidden_words
|
|||
237
iamnub
20.05.14
✎
12:32
|
(236)
Не равнозначно |
|||
238
iamnub
20.05.14
✎
12:32
|
(235)
--Если таких нет - возвращаться должно пустое (незаполненное) значение. Это ты сам выдумал. |
|||
239
Сияющий Асинхраль
20.05.14
✎
12:34
|
(237) Достаточно равнозначно, причем, заметь, даже когда тебя русским языком спросили, а где же у тебя эти самые слова "ООО", "ИП" и другие, ты предпочел отмолчаться...
|
|||
240
dmpl
20.05.14
✎
12:35
|
(238) Это правила русского языка. "Самое" - может быть только одно. Либо ни одного. Ты даже ТЗ не смог правильно под свой код составить, а на 1С бочку катишь...
|
|||
241
Сияющий Асинхраль
20.05.14
✎
12:36
|
+(239) это имелся ввиду пост (156)
|
|||
242
iamnub
20.05.14
✎
12:39
|
(241)
Так это ж тролль галимый. Какая ему разница - где они задаются - банальный массив. В развернутом варианте - я вижу. Я ошибся - 3.4. пункты не валидны. |
|||
243
iamnub
20.05.14
✎
12:50
|
(241)
Кстати, как имплементируешь безделицу в (233)? |
|||
244
dmpl
20.05.14
✎
12:53
|
(243) Вообще-то, в контексте возможной решаемой задачи в том случае надо возвращать С, либо массив из 3 букв.
|
|||
245
GANR
20.05.14
✎
12:58
|
(0) Совершенно верно - не снилось, ибо у 1С назначение другое.
|
|||
246
Сияющий Асинхраль
20.05.14
✎
13:02
|
(243) Сказать честно (233), мне кажется тоже не решение проблемы, потому что одинаковых по длине слов может быть много, и какое из них надо брать, однозначно не скажет ни один, даже самый запутанный код. Поэтому пока даже пробовать не буду - убегаю к клиенту... Удачи...
|
|||
247
Asmody
20.05.14
✎
13:11
|
вот (1) на javascript:
var getChar=function(q,bw){ return q.filter(function(e){return e.indexOf('.')==-1 && bw.indexOf(e.toLowerCase())==-1}).reduce(function(ac,w){retrun (ac.m<w.length ? {'m':w.length, 's': w[0]} , ac)},{'m':0,'s':''}).s; }; не благодари |
|||
248
Asmody
20.05.14
✎
13:16
|
(247)+ там пара синтаксических ошибок для самостоятельного поиска
|
|||
249
Asmody
20.05.14
✎
13:24
|
поправочка:
function(q,bw){ return q.split(' ').filter(function(e){return e.indexOf('.')==-1 && bw.indexOf(e.toLowerCase())==-1}).reduce(function(ac,w){return (ac.m<w.length ? {'m':w.length,'s':w[0]} : ac)},{'m':0,'s':''}).s}; |
|||
250
trdm
20.05.14
✎
13:30
|
> Мощь LINQ-а, или 1С и не снилось.
Что такого? Просто выражение может возвращать значение. И методы расширены. можно и на 1С++ такое замутить. Но только безумец пишет как в (1) потому что иногда надо делать проверки, на пустоту списка. Это не мощь, а комикадзевость. |
|||
251
iamnub
20.05.14
✎
13:34
|
Кто еще не отметился с ценным мнением?
|
|||
252
Asmody
20.05.14
✎
13:36
|
в (249) можно один проход убрать, если перенести условие из filter в reduce. а код в (1) еще оптимизировать и оптимизировать
|
|||
253
Asmody
20.05.14
✎
13:37
|
(251) так в чём "мощь LINQ"?
|
|||
254
iamnub
20.05.14
✎
13:37
|
(253)
Относительно чего? |
|||
255
Asmody
20.05.14
✎
13:38
|
(254) относительно заголовка ветки
|
|||
256
DailyLookingOnA Sunse
20.05.14
✎
13:38
|
"Прелесть в том, что пользователь, зная о правилах формирования индекса - сможет без проблем найти объект."
У меня для подбора договоров при обмене правила проще - и кроме меня никто их знать не хочет. |
|||
257
iamnub
20.05.14
✎
13:38
|
(255)
А ты ветку вообще не читал? |
|||
258
Asmody
20.05.14
✎
13:40
|
(257) читал. основной смысл стенаний "в 1С хреново реализована работа с коллекциями".
|
|||
259
iamnub
20.05.14
✎
13:41
|
(258)
"В .NET хорошо организована работа с коллекциями через LINQ". |
|||
260
Serginio1
20.05.14
✎
13:42
|
(247) Сравни с 211 или 226
|
|||
261
Asmody
20.05.14
✎
13:43
|
(259) это реализовано в любом функциональном языке. при чём тут "мощь linq"? с тем же успехом можно было написать про "мощь scala" или "мощь лиспа"
|
|||
262
iamnub
20.05.14
✎
13:45
|
(261)
С таким же успехом про скала или лисп напишет кто-нибудь другой. Я написал про LINQ. Какие-то проблемы с этим? |
|||
263
Asmody
20.05.14
✎
13:46
|
(260) а что мне сравнивать? я могу эту задачку, например, на clojure написать. и тоже будет в непонятно, круто, "мощьно", и с дохренам скобочек
|
|||
264
Serginio1
20.05.14
✎
13:46
|
(261) Потому, что здесь народ не то что скала, лисп, хаскель но даже и C# не знают
|
|||
265
Serginio1
20.05.14
✎
13:47
|
(263) Так что тебе в 260 то не нравится. Все понятно не надо даже пояснений писать
Возврат name.разложить(' ').Где(p => не ЗапретныеСлова .Содержит(p, StringComparer.InvariantCultureIgnoreCase)) .Где(p => не p.ВМассивБукв.Содержит('.')) .УПОРЯДОЧИТЬ_ПО_Уменьшению (p => p.Длина) .ПервыйИлиПоУмолчанию() .ВМассивБукв().Первый().ВСтроку(); |
|||
266
Asmody
20.05.14
✎
13:48
|
(262) меня интересует слово "мощь". от того, что ты нашел задачу, которая офигенно решается на языке для этого заточенном, 1С не становится менее "мощьной"
|
|||
267
Asmody
20.05.14
✎
13:48
|
(265) "УПОРЯДОЧИТЬ_ПО_Уменьшению" — сортировка в этой задаче не нужна.
|
|||
268
iamnub
20.05.14
✎
13:49
|
(267)
Да ты шо. |
|||
269
Asmody
20.05.14
✎
13:49
|
(268) прикинь, да?
|
|||
270
Serginio1
20.05.14
✎
13:50
|
.Где(p => не p.ВМассивБукв.Содержит('.'))
можно заменить на .Где(p => p.IndexOf('.')==-1) |
|||
271
iamnub
20.05.14
✎
13:50
|
(266)
Можно на третей сотне постов наконец-таки спросить. На каком языке я офигенно решил эту задачу, и под что этот язык заточен? |
|||
272
Serginio1
20.05.14
✎
13:51
|
(267) Почему же у него аналог SQL Тоp(1)
|
|||
273
Serginio1
20.05.14
✎
13:53
|
(266) Дело в том, что C# это гибридный язык который сочетает в себе императивность и функциональность. И Linq на самом деле значительно облегчил работу с коллекциями. А Linq to EF облегчил работу с Базами данных.
|
|||
274
quest
20.05.14
✎
13:54
|
(0) Лови. Читается намного проще чем твое безумие
(defun return-first-char(input-string) (subseq (find-if-not #'(lambda (x) (gethash x *forbidden_words*) (split input-string #\Space ))) 0 1)) |
|||
275
iamnub
20.05.14
✎
13:57
|
(274)
Не могу оценить, сорри. |
|||
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 цикл |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |