|
Можно ли "сократить" вот такой вот код? | ☑ | ||
---|---|---|---|---|
0
1398
14.03.12
✎
11:10
|
Встретил у коллеги в обработке для БП (2.0.33.8) вот такой вот кусок кода (середина из него убрана):
"Вопрос к знатокам", как говориться – можно ли как-то код этот переписать в одну-две строки? Справочники.ДокументыУдостоверяющиеЛичность.ИМНС27 – предопределенный элемент, естественно. У справочника нет кода, и нет каких-либо используемых реквизитов. Коду "27" - однозначно соответствует этот предопределенный элемент. Функция ПолучитьДокументУдостоверяющийЛичность(КодДокумента) _КодДокумента = СокрЛП(КодДокумента); Если ЗначениеЗаполнено(_КодДокумента) Тогда // да, я "индус" :-( Если _КодДокумента = "1" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС01; ИначеЕсли _КодДокумента = "2" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС02; ИначеЕсли _КодДокумента = "27" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС27; ИначеЕсли _КодДокумента = "91" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС91; Иначе Результат = Справочники.ДокументыУдостоверяющиеЛичность.ПустаяСсылка(); КонецЕсли; Иначе Результат = Справочники.ДокументыУдостоверяющиеЛичность.ПустаяСсылка(); КонецЕсли; Возврат Результат; Справочники.ДокументыУдостоверяющиеЛичность.ИМНС27 |
|||
1
1398
14.03.12
✎
11:11
|
последняя строка в коде ("Справочники.ДокументыУдостоверяющиеЛичность.ИМНС27") опечатка, если чо
|
|||
2
Fish
14.03.12
✎
11:11
|
Комментарий зачётный :)))
|
|||
3
mikecool
14.03.12
✎
11:12
|
соответствие
|
|||
4
Wobland
14.03.12
✎
11:12
|
Справочники.ДокументыУдостоверяющиеЛичность[ИМНС+Формат(_КодДокумента]
или пустая ссылка |
|||
5
luckyluke
14.03.12
✎
11:12
|
(0) Может лучше регистр сведений сделать?
|
|||
6
Wobland
14.03.12
✎
11:12
|
(4) ["ИМНС"+Формат()], конечно
|
|||
7
Дикообразко
14.03.12
✎
11:13
|
мда....
|
|||
8
Ненавижу 1С
гуру
14.03.12
✎
11:14
|
(4) проблема только в том, что будет если я передам код другой, например "66"
|
|||
9
pumbaEO
14.03.12
✎
11:14
|
(6) ну соответствие будет универсальней, для случаев Код "1" и "2" для ИМНC100/
|
|||
10
zelebobi4
14.03.12
✎
11:14
|
Можно. Но зачем?
Все прост ои понятно. Работает. |
|||
11
Wobland
14.03.12
✎
11:14
|
(8) предлагаю не передавать ;)
|
|||
12
Wobland
14.03.12
✎
11:15
|
(11) в смысле контролировать такое снаружи
|
|||
13
Maxus43
14.03.12
✎
11:15
|
да пусть так будет... собсно в типовых НДС аналогично считает, Если Тогда Иначе...
|
|||
14
pumbaEO
14.03.12
✎
11:15
|
(11) А если кто-то пидераст?
|
|||
15
Fish
14.03.12
✎
11:15
|
(8) Можно Попытку сделать
|
|||
16
Wobland
14.03.12
✎
11:15
|
(12) или попытку употребить, а в исключении пустую ссылку
|
|||
17
Maxus43
14.03.12
✎
11:16
|
(13) + пример неудачный правда)
|
|||
18
pumbaEO
14.03.12
✎
11:16
|
(14) *передаст
|
|||
19
Steel_Wheel
14.03.12
✎
11:17
|
(18) палишься )
|
|||
20
Ненавижу 1С
гуру
14.03.12
✎
11:17
|
перечисление СтавкиНДС это зло
|
|||
21
Дикообразко
14.03.12
✎
11:18
|
(20) как будто вся архитектура учет ндс в типовых конфах добро
|
|||
22
pumbaEO
14.03.12
✎
11:18
|
(21) +10050
|
|||
23
Maxus43
14.03.12
✎
11:19
|
(21) если к ней по хорошему - и она к тебе по хорошему)
|
|||
24
Дикообразко
14.03.12
✎
11:19
|
(23) дело не в том как с ней работать,
дело в том какими руками она сделана |
|||
25
Дикообразко
14.03.12
✎
11:20
|
+(с) по мотивам анекдота
|
|||
26
Fragster
гуру
14.03.12
✎
11:20
|
нужно посмотреть, откуда этот код дергается. если из загрузки данных, то в принципе, нормально, просто я б сделал НайтиПоКоду или через [] и попытку... а вот если из формы какой-нибудь - то тут надо сразу выбирать элемент справочника
|
|||
27
D_Pavel
14.03.12
✎
11:24
|
(0) Нормальный код. Оставь так. Зачем экономить?
|
|||
28
Wobland
14.03.12
✎
11:28
|
первые две строки лишние?
функция НазваниеМесяца(НомерМесяца)экспорт // мда... Возврат НРег(Формат(ДобавитьМесяц('19700101', НомерМесяца-1), "ДФ=MMMM")); Если НомерМесяца=1 Тогда Возврат("январь"); иначеЕсли НомерМесяца=2 Тогда Возврат("февраль"); иначеЕсли НомерМесяца=3 Тогда Возврат("март"); иначеЕсли НомерМесяца=4 Тогда Возврат("апрель"); иначеЕсли НомерМесяца=5 Тогда Возврат("май"); иначеЕсли НомерМесяца=6 Тогда Возврат("июнь"); иначеЕсли НомерМесяца=7 Тогда Возврат("июль"); иначеЕсли НомерМесяца=8 Тогда Возврат("август"); иначеЕсли НомерМесяца=9 Тогда Возврат("сентябрь"); иначеЕсли НомерМесяца=10 Тогда Возврат("октябрь"); иначеЕсли НомерМесяца=11 Тогда Возврат("Ноябрь"); иначеЕсли НомерМесяца=12 Тогда Возврат("декабрь"); иначе Возврат("деопределен"); КонецЕсли; конецфункции |
|||
29
Дикообразко
14.03.12
✎
11:29
|
(28) 3 строки
|
|||
30
Wobland
14.03.12
✎
11:30
|
(29) ну да. тело функции имел в виду
|
|||
31
acsent
14.03.12
✎
11:34
|
Это
ДобавитьМесяц('19700101', НомерМесяца-1) конечно тот еще индусский код |
|||
32
nicxxx
14.03.12
✎
11:35
|
(31) но лучше чем продолжение функции
|
|||
33
Wobland
14.03.12
✎
11:35
|
(31) не настолько, как в (0) или ниже ;)
|
|||
34
vmv
14.03.12
✎
11:39
|
херня все это, согласно (0) есть четкая ключевая структура
Если _КодДокумента = "1" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС01; ИначеЕсли _КодДокумента = "2" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС02; ИначеЕсли _КодДокумента = "27" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС27; ИначеЕсли _КодДокумента = "91" Тогда Результат = Справочники.ДокументыУдостоверяющиеЛичность.ИМНС91; Иначе Результат = Справочники.ДокументыУдостоверяющиеЛичность.ПустаяСсылка(); КонецЕсли; СтруктураПоказателей = Новый Структура; СтруктураПоказателей("2", Справочники.ДокументыУдостоверяющиеЛичность.ИМНС02); ... СтруктураПоказателей("91", Справочники.ДокументыУдостоверяющиеЛичность.ИМНС91); имеем Если ЗначениеЗаполнено(_КодДокумента) Тогда СтруктураПоказателей.Свойство(_КодДокумента, Результат); КонецЕсли; Если Результат = Неопределено Тогда Результат = ПустаяСсылкаТипа; |
|||
35
zelebobi4
14.03.12
✎
11:45
|
По сути тот же код, но уже с использованием структуры.
|
|||
36
Wobland
14.03.12
✎
11:46
|
блин, с попыткой пять строк выходит. и гораздо ясней
|
|||
37
pumbaEO
14.03.12
✎
11:50
|
(36) где нибудь в транзакции...
СтруктураПоказателей = Новый Структура("2,91, ... бла-бла", Справочники.ДокументыУдостоверяющиеЛичность.ИМНС02, Справочники.ДокументыУдостоверяющиеЛичность.ИМНС91); Если ЗначениеЗаполнено(_КодДокумента) Тогда СтруктураПоказателей.Свойство(_КодДокумента, Результат); КонецЕсли; Если Результат = Неопределено Тогда Результат = ПустаяСсылкаТипа; КонецЕсли; в 7 строк. :) |
|||
38
Steel_Wheel
14.03.12
✎
11:50
|
(0) Кстати, можно все это руками загнать в соответствие. Код получишь более струткурированный
|
|||
39
Snorkler
14.03.12
✎
11:55
|
(0) Истинно кошерно так:
Результат = Справочники.ДокументыУдостоверяющиеЛичность.НайтиПоРеквизиту("КодИМНС",Формат(Число(КодДокумента), "ЧЦ=2; ЧДЦ=0; ЧВН="),,); |
|||
40
Ахиллес
14.03.12
✎
12:01
|
Ну, всё, пипец одинэсникам и их "отстатыщь". Китайские крестьяне освоили программирование на 1С. Теперь неделя работы одинэсника будет стоить 1,5 бакса
|
|||
41
pumbaEO
14.03.12
✎
12:11
|
(40) тебе сюда http://www.forum.mista.ru/topic.php?upd&id=600358
|
|||
42
Ахиллес
14.03.12
✎
12:15
|
(41) По твоему в (0) не китайский код? А по моему, так чистейший образец.
|
|||
43
pumbaEO
14.03.12
✎
12:18
|
Китайский, где плата за строки кода, вот человек решил сэкономить... :)
Кто не без греха, пускай первым кинет в меня камень. |
|||
44
Ахиллес
14.03.12
✎
12:20
|
(43) Кстати у тебя в (37) тоже китайский код, потому, что если кодов документов будет хотя бы пара тысяч... ну ты понял ;-)
|
|||
45
pumbaEO
14.03.12
✎
12:36
|
(44) Дети иногда кушать просят, а если буду всегда правильно добавлять объекты в конфигурацию, за что же мне деньги будут то платить? :) (это и для фикси актуально и для франя)
Кто не понял: лопата. Если без шуток, то такой код имеет место быть, причем как обычно начинается с малого и в дальнейшем приходит понимание, хотим еще, самое большое умение в этом случаи найти золотую середину, когда еще можно переписать, предпочитаю до золотой середины не доводить дело. Но бывает и такое. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |