- 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, т.к. он заставляет функцию НайтиПоКоду искать по всему справочнику, используя полный код.