- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
Функция РазобратьКодыНеисправностей(СтрокаКодов, ТипКода)
СпрКодов = СоздатьОбъект("Справочник.КодыГарантийныхНеисправностей");
ГруппаТ1 = СпрКодов.НайтиПоКоду("0",0);
ГруппаТ2 = СпрКодов.НайтиПоКоду("00",0);
ГруппаТ3 = СпрКодов.НайтиПоКоду("000",0);
Если СтрокаКодов <> "" Тогда
Разд1 = Найти(СтрокаКодов, ";");
Разд2 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд1), ";") + Разд1;
Разд3 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд2), ";") + Разд2;
Разд4 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд3), ";") + Разд3;
Разд5 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд4), ";") + Разд4;
Разд6 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд5), ";") + Разд5;
Разд7 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд6), ";") + Разд6;
Разд8 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд7), ";") + Разд7;
Разд9 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд8), ";") + Разд8;
Разд10 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд9), ";") + Разд9;
Разд11 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд10), ";") + Разд10;
Если ТипКода = "Т1" Тогда
Если Разд1 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ1);
Если СпрКодов.НайтиПоКоду("0/" + Лев(СтрокаКодов,Разд1-1),2) = 1 Тогда
ПолучТ1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ1;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т2" Тогда
Если Разд2-Разд1 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ2);
Если СпрКодов.НайтиПоКоду("00/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд1), Разд2 - Разд1 - 1), 2) = 1 Тогда
ПолучТ2 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ2;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_1" Тогда
Если Разд3-Разд2 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд2), Разд3 - Разд2 - 1), 2) = 1 Тогда
ПолучТ3_1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_1;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_2" Тогда
Если Разд4-Разд3 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд3), Разд4 - Разд3 - 1), 2) = 1 Тогда
ПолучТ3_2 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_2;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_3" Тогда
Если Разд5-Разд4 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд4), Разд5 - Разд4 - 1), 2) = 1 Тогда
ПолучТ3_3 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_3;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_4" Тогда
Если Разд6-Разд5 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд5), Разд6 - Разд5 - 1), 2) = 1 Тогда
ПолучТ3_4 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_4;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_5" Тогда
Если Разд7-Разд6 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд6), Разд7 - Разд6 - 1), 2) = 1 Тогда
ПолучТ3_5 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_5;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_6" Тогда
Если Разд8-Разд7 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд7), Разд8 - Разд7 - 1), 2) = 1 Тогда
ПолучТ3_6 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_6;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_7" Тогда
Если Разд9-Разд8 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд8), Разд9 - Разд8 - 1), 2) = 1 Тогда
ПолучТ3_7 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_7;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_8" Тогда
Если Разд10-Разд9 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд9), Разд10 - Разд9 - 1), 2) = 1 Тогда
ПолучТ3_8 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ3_8;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипКода = "Т3_9" Тогда
Если Разд11-Разд10 > 1 Тогда
СпрКодов.ИспользоватьРодителя(ГруппаТ3);
ещё один высер от автодилера.
1. начнём сначала, там есть строки:
...
ГруппаТ1 = СпрКодов.НайтиПоКоду("0",0);
..., обращаю внимание автора, что функция НайтиПоКоду не возвращает элемент справочника, она лишь говорит есть он или нет, для позиционирования на элементе не хватает строк типа ГруппаТ1 = СпрКодом.ТекущийЭлемент(); и т.д.
2. дальше. в функцию передаётся параметр СтрокаКодов - это строка с запятыми в качестве разделителей. я конечно понимаю, что в 1С нет встроенной функции для получения массива частей строки типа split в java, но написать свою вообще не сложно, но видимо у автора не хватило мозг..., извините, времени.
3. теперь смотрим на подобные (их несколько в функции) блоки кода типа:
СпрКодов.ИспользоватьРодителя(ГруппаТ1);
Если СпрКодов.НайтиПоКоду("0/" + Лев(СтрокаКодов,Разд1-1),2) = 1 Тогда
ПолучТ1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ1;
КонецЕсли;
строка СпрКодов.ИспользоватьРодителя(ГруппаТ1); не имеет смысла, т.к. ГруппаТ1 содержит значение 1 (см. п.1), а не ссылку на элемент справочника, код работает только благодаря второму параметру - 2, т.к. он заставляет функцию НайтиПоКоду искать по всему справочнику, используя полный код.
Lowezar 02.01.2013 11:19 # −3
VladC 02.01.2013 11:48 # +2
someone 02.01.2013 12:36 # +9
Лев всегда прав!
bormand 03.01.2013 14:59 # +4
http://govnokod.ru/11293#comment144843
eth0 02.01.2013 20:24 # +4
Обычный вывод: проще переписать с нуля.
Не так давно я видел генератор штрихкода EAN13 по коду товара. Хотел запостить отдельным, но не буду изменять своей традиции и занесу в комментарий, благо там поржать и не над чем особо. Комментарии мои.
Тем не менее, неведомый автор сделал все офигеннейшие вкусняшки: это и сложение чётной и нечётной компонент в разные переменные, которые всё равно складываются; также изобрёл дополнение нулями кода аж джва раза, строка вычисления дополнения до десяти - вообще шик, её явно писал человек, незнакомый с оператором остатка от деления %. Если я не ошибаюсь, вменяемый программист переписал чисто генераторную часть в шесть строк.
Надо перестать давать мартышкам бананы, сделать отдел QA, и нещадно трахать без вазелина. Возможно, именно этим можно будет привнести в отрасль немного упорядоченности.
Второй вариант - сделать независимый QA-центр, где за скромную плату специально обученные люди, которые знают всякие там алгоритмыимеют на плечах не пустое ведро, на правах аутсорсинга смогут подсказать, в какую сторону нужно копать. Бухгалтерию же на аутсорс выносят.
myzone 03.01.2013 03:08 # 0
VladC 03.01.2013 04:02 # +1
eth0 03.01.2013 09:26 # +1
RusAlex 04.01.2013 15:33 # 0
RusAlex 04.01.2013 10:42 # +1
Я теперь понимаю почему крутые 1С кодеры так хорошо оплачиваются.
Вероятность получения проекта с кучей говнокода стремиться к бесконечности. Да и нормальный редактор, чтобы всё это удобно было рефакторить, наверное, надо еще поискать.
Труд здесь титанический.
VladC 04.01.2013 11:06 # 0
Lure Of Chaos 05.01.2013 11:12 # 0
guest 05.01.2013 12:01 # 0
eth0 05.01.2013 16:25 # +3
Lure Of Chaos 06.01.2013 12:28 # +2
bormand 07.01.2013 18:29 # +6
Lure Of Chaos 07.01.2013 18:31 # 0
scriptin 07.01.2013 22:52 # +4
roman-kashitsyn 07.01.2013 23:02 # +6
bormand 08.01.2013 07:35 # 0
3.14159265 07.05.2016 00:00 # 0
eth0 08.01.2013 08:03 # 0
Lure Of Chaos 08.01.2013 09:31 # −1
nixel 18.02.2014 15:09 # −1
8.3 же. не скажу, что прям ВАХ, но тоже вполне удобно. по крайней мере перестал лезть в синтаксис-помощник с мыслями "какой, блять, там это параметр по счету"
VladC 18.02.2014 16:32 # 0
nixel 18.02.2014 23:34 # −1
VladC 19.02.2014 01:51 # 0
nixel 25.02.2014 22:25 # 0
VladC 26.02.2014 02:33 # 0
VladC 18.02.2014 16:34 # 0
nixel 18.02.2014 23:35 # 0
после делфи часто не хватало возможности посмотреть исходники и реализации тех или иных процедур. пишешь что-то и не понять, то ли лыжи не едут, то ли я молодец.
VladC 19.02.2014 02:01 # 0
nixel 25.02.2014 22:26 # 0
VladC 26.02.2014 02:39 # 0
guest 07.05.2016 00:41 # 0
вот и придумали иде, по сравнению с которых даже Eclipse обладает подсказками!
eth0 04.01.2013 11:12 # +4
К единице же. Хотя, в военное время и синусы по три-четыре бывают.
На самом деле, очень част подход, когда к делу изначально приходят непрофессионально. Вот пример. Знакомая контора, изначально босс подходил к процессу написания не с той стороны. Под каждую задачу пилил базу из первой подходящей. В итоге, за каких-то пять-десять лет там образовался форменный зоопарк из ни с чем не совместимых версий.
wvxvw 04.01.2013 14:24 # +1
eth0 04.01.2013 17:29 # +2
roman-kashitsyn 04.01.2013 19:43 # +2
3.14159265 06.05.2016 23:56 # 0
π/2-2.064i
ok0504 09.01.2013 16:38 # +2