|
Сторонний аудит кода конфигурации | ☑ | ||
---|---|---|---|---|
0
Snovy
26.06.12
✎
22:46
|
Отдали нашу нетленку стороннему аудитору (соответствие ТЗ и т.д.). В том числе в заключении нашел раздел по аудиту кода. Обозвали нас непрофессионалами (у нас тоже студенты работают) и привели пример:
У нас: ИначеЕсли Лев(СчетУчетаНоменклатуры.Код,2)="41" Надо по правильному: ИначеЕсли СчетУчетаНоменклатуры.Родитель=ПланыСчетов.Хозрасчетный.Товары Я с одной стороны согласен, но замер производительности в серверном варианте дал картинку (в среднем испытывал раз 10 на разных документах): ИначеЕсли Лев(СчетУчетаНоменклатуры.Код,2)="41" - 0,005145 сек. ИначеЕсли СчетУчетаНоменклатуры.Родитель=ПланыСчетов.Хозрасчетный.Товары - 0, 005285 сек. Т.е. правильный варианот снижает производительность системы почти на 3%? Рассудите - ответ матерный писать аудиторам или ласковый? |
|||
99
Lama12
27.06.12
✎
10:02
|
(0) Вопрос корректности кода должен быть закреплен в документе декларирующим правила определения "корректности". Пусть аудиторы приведут свои критерии отнесения кода к верному / не верному. Если они сошлются на стандарт рекомендованный 1С, то можешь сослаться на то, что у вас в компании он не является стандартом. И к тому же 1С, сама не следует своим рекомендациям. Думаю примеры сам найдешь.
Вообще есть ли требования писать кода корректно? Может у вам в компании корректным является код, который просто выполняет свои функции. Хоть там на обработке строковых переменных все написано. Хоть свои калькуляторы. Если компанию устраивает как код работает, то он корректный. |
|||
100
Lama12
27.06.12
✎
10:03
|
99+
Кстати, причем тут замер производительности? Вы что программу пишите по критерию ее высокой производительности? Если так, и есть документ который это подтверждает, то шли их лесом. |
|||
101
Lama12
27.06.12
✎
10:06
|
И еще.
ИМХО. Я бы написал что критерием качества кода, в компании принято считать, соответствие реализованной функциональности, требованиям к разработке. И слал бы их лесом. |
|||
102
Академик_
Келдыш 27.06.12
✎
10:12
|
в (0) два абсолютно разных условия. если изначально в реквизите будет 41, без родителя, кто ошибку обработает???? пиши им что м-даки, и даже не понимают различий родителя и элемента
|
|||
103
Академик_
Келдыш 27.06.12
✎
10:14
|
ПринадлежитЭлементу - более правильно. по производительности глянь
|
|||
104
iamnub
27.06.12
✎
10:16
|
(0)
Будь мужиком, блеать! Ткнули носом в г_овно - признай и запомни на будущее! А ты цепляешься к каким-то замерам производительности с пятью нулями после запятой - смешно. Сам же знаешь, что со строкой сравнивали не из за производительности. |
|||
105
Турист
27.06.12
✎
10:17
|
(99) ветку почитай
|
|||
106
Турист
27.06.12
✎
10:20
|
А с местных акуеваю - это сейчас вы герои, а как увидели бы это в конфе типовой, так завели бы ветку на сотни постов про "гуанокод" в типовых ))
|
|||
107
mic_net
27.06.12
✎
10:25
|
(0) код похожий на
ИначеЕсли Лев(СчетУчетаНоменклатуры.Код,2)="41" встречал в типовой конфигурации, если не ошибаюсь "Астор: Торговый дом 6.0." |
|||
108
Lama12
27.06.12
✎
10:29
|
(105) Прочитал. Еще больше утвердился в своих убеждениях.
Вопрос правильности кода решается внутренними документами компании. Можно писать код верно с точки зрения методологии рекомендованной 1С, а можно писать быстро по требованию руководства. Код написанный с качеством удовлетворяющим требование руководства будет верным. Пусть он тысячу раз "гуанокод". Я могу вести разработку ПО по лучшим мировым практикам используя различные методики разработки. Стоимость разработки отчета который можно написать за час, при соблюдении методик (лучшие практики), возрастет в 100 раз. Кому нужен будет такой отчет? Что хорошо, что плохо в компании - определяет руководство. Если начальник сказал - мне нужно быстро и что б работало. То ему плевать на возможность поддержки и развития кода, на возможные риски с появлением редких ошибок и т.д. |
|||
109
Турист
27.06.12
✎
10:41
|
(108) плохо читал, один из заказчиков 1С
|
|||
110
MatrosoV AleXXXand_R
27.06.12
✎
10:43
|
(0) Они правы
|
|||
111
Lama12
27.06.12
✎
10:46
|
(109) Еще раз. Когда отдаешь разработку на субподряд, должны быть оговорены требования к коду. Если их в договоре не оговорили, а оговорили только требования к функциональности, то слать лесом.
|
|||
112
Genayo
27.06.12
✎
10:55
|
(94) Можно поподробней про глРеквизит( Ссылка, Путь ), интересно как профи делают...
|
|||
113
pumbaEO
27.06.12
✎
10:57
|
А на орфографические ошибки проверяли?
Типа Для каждого КлючИЗначене Из ? |
|||
114
Stepa86
27.06.12
✎
11:00
|
(112)
Функция глРеквизит( Ссылка, ИмяРеквизита ) Экспорт Возврат упОбщегоНазначенияКлиентСервер.ПолучитьЗначениеРеквизита( Ссылка, ИмяРеквизита ); КонецФункции упОбщегоНазначенияКлиентСервер: // Функция ПолучитьЗначениеРеквизита возвращает значение // реквизита, прочитанного из информационной базы по ссылке на объект. // // Если доступа к реквизиту нет, возникнет исключение прав доступа. // Если необходимо зачитать реквизит независимо от прав текущего пользователя, // то следует использовать предварительный переход в привилегированный режим. // // Параметры: // Ссылка - ссылка на объект, - элемент справочника, документ, ... // ИмяРеквизита - Строка, например, "Код". // // Возвращаемое значение: // Произвольный - зависит от типа значения прочитанного реквизита. // Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт Если Ссылка = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если ПустаяСтрока( ИмяРеквизита ) Тогда Возврат Ссылка; КонецЕсли; этоОбъект = ЭтоОбъект( Ссылка ); этоПустаяСсылка = Не этоОбъект И Ссылка.Пустая(); ЕстьОбращениеЧерезТочку = ( Найти( ИмяРеквизита , "." ) > 0 ); Если ( этоОбъект ИЛИ этоПустаяСсылка ) И Не ЕстьОбращениеЧерезТочку Тогда //если это объект, то все его реквизиты уже получены и можно взять их напрямую //но на клиенте нельзя получить значения ссылки через точку Если этоПустаяСсылка Тогда #Если Клиент Тогда Возврат упОбщегоНазначенияСервер.ПолучитьЗначениеРеквизита( Ссылка, ИмяРеквизита ); #Иначе Возврат Ссылка[ИмяРеквизита]; #КонецЕсли Иначе Возврат Ссылка[ИмяРеквизита]; КонецЕсли; ИначеЕсли ЭтоОбъект И ЕстьОбращениеЧерезТочку Тогда //если это объект, но нужно получить данные через точку, то сначала получим считанные данные с объекта, а остальное рекурсивно лИмяРеквизита = ИмяРеквизита; Префикс = упКоллекции.РазделитьСтроку( лИмяРеквизита , "." ); Если этоПустаяСсылка Тогда #Если Клиент Тогда левЗначение = упОбщегоНазначенияСервер.ПолучитьЗначениеРеквизита( Ссылка, Префикс ); #Иначе левЗначение = Ссылка[Префикс]; #КонецЕсли Иначе левЗначение = Ссылка[Префикс]; КонецЕсли; Возврат ПолучитьЗначениеРеквизита( левЗначение , лИмяРеквизита ); Иначе Возврат упОбщегоНазначенияСервер.ПолучитьЗначениеРеквизита( Ссылка, ИмяРеквизита ); КонецЕсли; КонецФункции Функция ЭтоОбъект( пОбъект ) Экспорт #Если Не ВебКлиент Тогда XMLТипЗнч = XMLТипЗнч(пОбъект); #Иначе XMLТипЗнч = Неопределено; #КонецЕсли Если XMLТипЗнч = Неопределено Тогда ЭтоОбъект = ТипЗнч( пОбъект ) = Тип("ДанныеФормыСтруктура"); Иначе ИмяТипа = XMLТипЗнч.ИмяТипа; ЭтоОбъект = Найти(ИмяТипа, "Object.") > 0; КонецЕсли; Возврат ЭтоОбъект; КонецФункции упОбщегоНазначенияСервер: // работает только по ссылке Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт Если Ссылка = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если ПустаяСтрока( ИмяРеквизита ) Тогда Возврат Ссылка; КонецЕсли; Если ИмяРеквизита = "Ссылка" Тогда Возврат Ссылка; КонецЕсли; Если Ссылка.Пустая() Тогда Возврат Ссылка[ ИмяРеквизита ]; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Таблица." + ИмяРеквизита + " Как ЗначениеРеквизита |ИЗ | " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица |ГДЕ | Таблица.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Возврат Выборка.ЗначениеРеквизита; КонецФункции |
|||
115
Stepa86
27.06.12
✎
11:02
|
+(114) плин, теги забыл...
|
|||
116
Genayo
27.06.12
✎
11:04
|
(114) Это свой код или...? И дает выигрыш в производительности? Чудны дела 1С...
|
|||
117
Stepa86
27.06.12
✎
11:09
|
(116) за основу взял ОбщегоНазначения.ПолучитьЗначениеРеквизита( и дописал "слегка". при получении через точку от ссылки выигрыш большой, особенно если еще через кеш пропускать, при получении от объекта по времени так же + не надо заморачиваться над тем, от чего беру значение через точку. Так же поддерживается получение через несколько точек
|
|||
118
Vladal
27.06.12
✎
11:10
|
Так вы - внедренцы, а заказчик вас проаудировал?
Интересно, какая оценка такому коду: Функция ДБФДляВыгрД(VID,val ВыбДата="",ИмяФ="") Экспорт If ВыбДата="" Then ВыбДата=GetDateOfAP(); If ВыбДата>CurDate() Then ВыбДата=CurDate();EndIf;EndIf; Каталог=IBDir()+"Obmen\Out\"; ИмяФ=Mid(Format(ВыбДата,"DDDMMYY"),7,2)+Mid(Format(ВыбДата,"DDDMMYY"),4,2)+Mid(Format(ВыбДата,"DDDMMYY"),1,2)+ "d"+Строка(VID)+".dbf"; ДБФ=CreateObject("XBase"); ДБФ.CodePage(0); ДБФ.AddField("Karta","S",13,0); ДБФ.AddField("SS","N",2,0); ДБФ.AddField("SP","N",10,2);ДБФ.AddField("KP","N",3,0); ДБФ.AddField("DA","S",8,0); ДБФ.AddField("VID","N",1,0); // код группы в с-ме скидок ДБФ.CreateFile(Каталог+ИмяФ); Возврат ДБФ; КонецФункции |
|||
119
Новенький_2009
27.06.12
✎
11:10
|
(118) "Садись, два" (с)
|
|||
120
Vladal
27.06.12
✎
11:11
|
(119) И такой код по всей конфе. Страшно его читать.
|
|||
121
Stepa86
27.06.12
✎
11:12
|
(118) а смесь русского и нерусского специальна?
|
|||
122
Vladal
27.06.12
✎
11:13
|
Но всяко лучше, когда вся конструкция или процедура/функция в одной строке?
Procedure ЗагрузкаКомпонентыRainbow() Export Try ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\rainbow.dll");Except Сообщить("Не удается загрузить внешнюю компоненту Rainbow.","!");Сообщить("Проверьте расположение необходимых библиотек:"+КаталогИБ()+"DLL\rainbow.dll "+ФС.WindowsКаталог()+" system\mfc42.dll "+ФС.WindowsКаталог()+"system\msvcrt.dll");Возврат;EndTry;EndProcedure Procedure ЗагрузкаКомпонентыWheel() Export Try ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\WheelAddIn.dll");Except Сообщить("Не удается загрузить внешнюю компоненту Wheel.","!");Сообщить("Проверьте наличие "+КаталогИБ()+"DLL\WheelAddIn.dll");Возврат;EndTry;EndProcedure Procedure ЗагрузкаКомпонентыStepVC() Export Try ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\StepVC.dll");Except Сообщить("Не удается загрузить внешнюю компоненту StepVC.","!");Сообщить("Проверьте наличие "+КаталогИБ()+"DLL\StepVC.dll");Возврат;EndTry;EndProcedure Procedure ЗагрузкаКомпонентыNetaInet() Export Try ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\netaInet.dll");Except Сообщить("Не удается загрузить внешнюю компоненту NetaInet.","!");Сообщить("Проверьте наличие "+КаталогИБ()+"DLL\NetaInet.dll");Возврат;EndTry;EndProcedure Procedure ЗагрузкаКомпонентыScanVC() Export Try ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\Scanvc.dll");Except Сообщить("Не удается загрузить внешнюю компоненту ScanVC.","!");Сообщить("Проверьте наличие "+КаталогИБ()+"DLL\ScanVC.dll");Возврат;EndTry;EndProcedure Procedure ЗагрузкаКомпонентыV7PLUS() Export Try ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\V7PLUS.dll");Except Сообщить("Не удается загрузить внешнюю компоненту V7PLUS.","!");Сообщить("Проверьте наличие "+КаталогИБ()+"DLL\V7PLUS.dll");Возврат;EndTry;EndProcedure Function глОтправить(Получатель,Тема,Тело,ИмяФ,Отправитель="") Export If Отправитель="" Then Отправитель=TrimAll(Пользователь.Email);EndIf; ЗагрузитьВнешнююКомпоненту(IBDir()+"DLL\SendMail.dll"); Мыло=CreateObject("AddIn.SendMail"); Мыло.АдресПочтовогоСервера=СокрЛП(Const.АдресSMTPсервера); Мыло.ПочтовыйПользователь=СокрЛП(Пользователь); Мыло.Отправитель = СокрЛП(Отправитель); Мыло.Получатель =СокрЛП(Получатель); Мыло.Subject=Тема; Мыло.ИспользоватьQP=0; If ТипЗначенияСтр(Тело)="Текст" Then Мыло.Сообщение=""; i=1; While i<=Тело.LinesCnt() Do Мыло.Сообщение=Мыло.Сообщение+?(i>1,LineBreak,"")+Тело.GetLine(i);i=i+1;EndDo; ElsIf ТипЗначенияСтр(Тело)="Строка" Then Мыло.Сообщение=Тело; EndIf; Мыло.Вложение=?(СокрЛП(ИмяФ)="","",ИмяФ+";");Состояние("Идет отправка почты");Res=Мыло.ОтправитьПочту(); If Res="0" Then s=Тема+" на "+СокрЛП(Мыло.Получатель);//ЗаписьЖурналаРегистрации(s,"E-mail",Тема,,3); Сообщить("Почта на {"+Мыло.Получатель+"} доставлена! ("+Тема+")",1); Else Сообщить(Res,"!"); Предупреждение("При отправке почты возникли ошибки!",10); EndIf; Возврат Res; EndFunction Function глGetADODB(val ИмяФ) Export db=CreateObject("ADODB.Connection");db.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ИмяФ+";Extended Properties=""Excel 8.0;HDR=NO"""; Возврат db;EndFunction Function глGetRecADODB(db) Export rs=CreateObject("ADODB.Recordset"); rs.ActiveConnection=db; rs.CursorType=3; rs.LockType=2;Возврат rs;EndFunction |
|||
123
Vladal
27.06.12
✎
11:13
|
(121) х.з. Это не моё
|
|||
124
Stagor
27.06.12
✎
11:17
|
(0)
для счетов "410" и "41" условие для нижеприведенного кода будет Истина: ИначеЕсли Лев(СчетУчетаНоменклатуры.Код,2)="41" |
|||
125
Stagor
27.06.12
✎
11:17
|
а счета то разные!
|
|||
126
Vladal
27.06.12
✎
11:18
|
(124) Лев2 = 04, прав2 = 541.
Не будут |
|||
127
Vladal
27.06.12
✎
11:18
|
*прав2 = 41
|
|||
128
Vladal
27.06.12
✎
11:18
|
(124) Лев(КодСчета, 2) используется вообще для всей группы, тянется из нетленных семерок.
|
|||
129
Genayo
27.06.12
✎
11:19
|
(117) Спасибо. А можно еще про практическое использование кэша для начинаюших подсказать...
|
|||
130
Stepa86
27.06.12
✎
11:22
|
(129) да там все просто, ставишь у общего модуля признак "Повторное использование возвращаемых значений" "на время сеанса" и любая функция внутри этого модуля будет выполняться один раз для каждого набора входящих параметров, во всех остальных случаях будет тупо возврат последнего значения.
|
|||
131
Stagor
27.06.12
✎
11:22
|
(128) при наличии Кода счета идентичного в первых 2-х цифрах будет работать неверно!
|
|||
132
Stagor
27.06.12
✎
11:24
|
(130) Это можно использовать только если сама функция внутри себя не обращается к БД и не читает от туда данные! Иначе даже при одинаковых параметрах результат будет разный.
Т.е. только для функций без "побочных" эффектов будет работать! |
|||
133
Genayo
27.06.12
✎
11:26
|
(129) Это понятно. Но как я понял, время жизни полученного значения разработчик контролировать не может, т.е. "время сеанса" есть величина относительная...
|
|||
134
experimentator76
27.06.12
✎
11:27
|
(124)(39)
|
|||
135
Stepa86
27.06.12
✎
11:27
|
(132) есессно, что если написать в кеше
Функция ДайТекущуюДату() Экспорт Возврат ТекущаяДатаСеанса(); КонецФункции то правильно она отработает только один раз, просто писать там надо действительно кешируемые функции |
|||
136
Stepa86
27.06.12
✎
11:28
|
(133) чо?
|
|||
137
experimentator76
27.06.12
✎
11:29
|
(128) истинно так - семерочник в разработке детектед
|
|||
138
experimentator76
27.06.12
✎
11:30
|
(130) я бы поостерегся
вообще 1с СИЛЬНО рекомендует данные получать запросом я проникся... |
|||
139
Stepa86
27.06.12
✎
11:32
|
(138) в (114) как раз замена получения значений через точку запросом
|
|||
140
Stagor
27.06.12
✎
11:33
|
(135) действительно кешируемые функции :)
Чисто К.Ф. может не быть вообще, иначе это были бы Константы! :) |
|||
141
Genayo
27.06.12
✎
11:37
|
(133) В том смысле, что в умных книжках написано, что кэшированное значение "живет" в районе 20 минут, а не пока запущен текущий сеанс...
|
|||
142
gosn1ck
27.06.12
✎
11:41
|
(95) в том что если код поменяется, то придётся переписывать код видимо
|
|||
143
Stepa86
27.06.12
✎
11:42
|
(141) с ПоместитьВоВременноеХранилище не путай, да и ничего страшного, если раз в час будет кеш обновляться при вызове
|
|||
144
Андрей_Андреич
naïve
27.06.12
✎
11:47
|
А в моей нетленке ФИО гендира и ГБ прямо в формах документов прописаны, т.к. если они сменятся - меня один овощ под зад вместе с нетленкой. Причем гендир и ГБ в курсе и считают это правильным.
|
|||
145
Genayo
27.06.12
✎
11:50
|
(143) Ну может быть и ничего страшного, просто жаль что разработчик это контролировать не может...
|
|||
146
ОператорПК
27.06.12
✎
11:52
|
ИМХО аудиторы не правы т.к. если предположить что план счетов меняется и 41 может быть потенциально разбит не только на 41.01 41.02 но и на 41.01.01 41.01.02 b и т.д.(мало ли) тогда их код работать не будет а Ваш будет.... Если бы они это предусматрели то должны были написать например так:
Если СчетУчетаНоменклатуры.Родитель=ПланыСчетов.Хозрасчетный.Товары или СчетУчетаНоменклатуры.Родитель.Родитель=ПланыСчетов.Хозрасчетный.Товары или СчетУчетаНоменклатуры.Родитель.Родитель.Родитель=ПланыСчетов.Хозрасчетный.Товары Тогда //закладываемся что 41 могут еще разбить на несколько уровней При неизменном плане счетов - работать будут оба варианта. |
|||
147
Stagor
27.06.12
✎
12:07
|
(146) если учесть критические изменения плана-счетов, то ни один вариант кода не будет верным!
|
|||
148
Алистар
27.06.12
✎
12:13
|
когда счета созданы в режиме предприятия через точку не получится.
|
|||
149
ОператорПК
27.06.12
✎
12:21
|
(147) я не претендовал на истину в последней инстанции, понятно что если "41"-му счету завтра присвоят код например "141" и назовут "НашиСуперТовары" то ни один вариант работать не будет.
|
|||
150
Конфигуратор1с
27.06.12
✎
12:22
|
(144) а если гб фамилию сменит?
|
|||
151
ОператорПК
27.06.12
✎
12:26
|
(15) ГБ - мужик наверное :)
|
|||
152
Андрей_Андреич
naïve
27.06.12
✎
12:28
|
(150) У нее та же фамилия, что и у гендира. :)
|
|||
153
experimentator76
27.06.12
✎
12:48
|
(146) садись - два
|
|||
154
experimentator76
27.06.12
✎
12:49
|
(147) (16)
будет работать так как не зависит от вложенности и представлений кода |
|||
155
experimentator76
27.06.12
✎
12:50
|
(149) такую куйню может сделать только разработчик если еплан
|
|||
156
Stagor
27.06.12
✎
12:51
|
(154)
Я говорил о (0)! Да, в (16) вариант более верный, чем в (0) любой из вариантов! |
|||
157
experimentator76
27.06.12
✎
12:52
|
(156) просто щас туденты начитаются и будут копрокодить
поэтому мои коменты в контексте всех сообщений темы) |
|||
158
experimentator76
27.06.12
✎
12:52
|
как (146) например))
|
|||
159
Академик_
Келдыш 27.06.12
✎
12:54
|
Если СчетУчетаКод = "10" Тогда
Если Лев(СчетУчета.Код, 5) = "10.09" Тогда Возврат "инвентаря"; ИначеЕсли Лев(СчетУчета.Код, 7) = "10.11.1" Тогда Возврат "спецодежды"; ИначеЕсли Лев(СчетУчета.Код, 7) = "10.11.2" Тогда Возврат "спецоснастки"; Иначе Возврат "материалов"; КонецЕсли; ИначеЕсли СчетУчетаКод = "20" Тогда Возврат "продукции для давальца"; ИначеЕсли СчетУчетаКод = "21" Тогда Возврат "полуфабрикатов"; ИначеЕсли СчетУчетаКод = "41" Тогда Возврат "товаров"; ИначеЕсли СчетУчетаКод = "43" Тогда Возврат "продукции"; ИначеЕсли СчетУчетаКод = "45" Тогда Возврат "отгруженных товаров"; ИначеЕсли СчетУчетаКод = "001" Тогда Возврат "арендованных основных средств"; ИначеЕсли СчетУчетаКод = "002" Тогда Возврат "товаров на ответственное хранение"; ИначеЕсли СчетУчетаКод = "003" Тогда Возврат "материалов в переработку"; ИначеЕсли СчетУчетаКод = "004" Тогда Возврат "товаров комитента"; |
|||
160
Академик_
Келдыш 27.06.12
✎
12:54
|
кусок кода упп последней стандартной
|
|||
161
Академик_
Келдыш 27.06.12
✎
12:55
|
слать лесом!! общий модуль упп бухгалтерский учет строка 417
|
|||
162
experimentator76
27.06.12
✎
12:55
|
круг замкнулся)))))))
|
|||
163
Академик_
Келдыш 27.06.12
✎
12:56
|
Функция ПолучитьНазваниеОбъекта(СчетУчета) Экспорт
|
|||
164
experimentator76
27.06.12
✎
12:56
|
(161) если не секрет а цель сего соотвествия?
|
|||
165
Академик_
Келдыш 27.06.12
✎
12:56
|
параметр СчетУчета там именно счет, не строка еси чо
|
|||
166
experimentator76
27.06.12
✎
12:56
|
1с - копрокодеры
|
|||
167
Академик_
Келдыш 27.06.12
✎
12:56
|
(164) соответствия? не понял вопрос
|
|||
168
izekia
27.06.12
✎
12:57
|
(0) а не покуй ли на снижение производительности в строке, где нет потерь для общей производительности
и второе: ты полез замеры делать чтобы хоть как-то оправдать такой кривой код? |
|||
169
Академик_
Келдыш 27.06.12
✎
12:57
|
короче еще раз: слать лесом аудировать стандартные конфы 1с
|
|||
170
experimentator76
27.06.12
✎
12:58
|
причем как я понимаю
Если Лев(СчетУчета.Код, 5) = "10.09" Тогда Возврат "инвентаря"; ИначеЕсли Лев(СчетУчета.Код, 7) = "10.11.1" Тогда Возврат "спецодежды"; ИначеЕсли Лев(СчетУчета.Код, 7) = "10.11.2" Тогда Возврат "спецоснастки"; Иначе Возврат "материалов"; КонецЕсли; СчетУчетаКод = СчетУчета.Код то есть пипец неоптимально |
|||
171
experimentator76
27.06.12
✎
12:58
|
(167) щас конфы нет под рукой - для чего возврат используется?
|
|||
172
izekia
27.06.12
✎
13:03
|
(95) меньше возможностей ошибиться и указать некорректный код, не говоря уже о возможном варианте со счетом 410, который упоминали в теме
|
|||
173
Академик_
Келдыш 27.06.12
✎
13:03
|
в основном для СОДЕРЖАНИЕ в проводках
|
|||
174
Академик_
Келдыш 27.06.12
✎
13:04
|
(170) это что за 2 минуты в упп нашел. боюсь они так 50/50 определяют счет.
|
|||
175
Академик_
Келдыш 27.06.12
✎
13:06
|
функция из (159) используется в любом движении материалов. напомню - написано так же как у ТС. и ничего - аудит прошла и во всех релизах упп присутствует
|
|||
176
experimentator76
27.06.12
✎
13:07
|
я недавно типовую торговлю 10 оптимизировал на скорость запуска начала работы
тоже был копрокод в смысле неоптимальности |
|||
177
Академик_
Келдыш 27.06.12
✎
13:08
|
Если Сред(Выборка.Счет.Код,5,2) = "62" Тогда
модуль переоценки валютных средств, строка 1541 |
|||
178
Академик_
Келдыш 27.06.12
✎
13:09
|
поступление товаро и услуг модуль объекта строка 4998
Если Лев(СтрокаТЧ.СчетЗатратНУ.Код, 2) = "97" Тогда |
|||
179
Академик_
Келдыш 27.06.12
✎
13:11
|
а запрос на строке 420 отчета Анали состоянию налогового учета вообще песня
|
|||
180
Академик_
Келдыш 27.06.12
✎
13:11
|
(176) так тс утверждает что со строковой функцией быстрей
|
|||
181
experimentator76
27.06.12
✎
13:13
|
(177) видимо выборка из запроса
там же можно было и Код получить |
|||
182
experimentator76
27.06.12
✎
13:14
|
(180) в торговле - там касательно использования результата функции 3-4 раза в пределах 10 строк кода
то есть функция вызывалась несколько раз с одним результатом в пределах одного экрана |
|||
183
experimentator76
27.06.12
✎
13:16
|
(180) видимо 1с забыла как план счетов был несколько лет назад изменен)
то есть таким кодом она закладывает потенциальную временную бомбу так что аудиторы молодцы что обратили внимание быстро небыстро не дело аудитора - но потенциальную угрозу они увидели |
|||
184
Академик_
Келдыш 27.06.12
✎
13:17
|
(182) бреда полно в типовых.
|
|||
185
Академик_
Келдыш 27.06.12
✎
13:18
|
(183) счета учета материалов и товаров 41 и 10 были есть и будут в рбу всегда
|
|||
186
Академик_
Келдыш 27.06.12
✎
13:21
|
А вот 97 как в поступлении - большой вопрос
|
|||
187
experimentator76
27.06.12
✎
13:28
|
(185) я бы не зарекался... вполне возможна реформа бух.учета после включения нас в ВТО
|
|||
188
experimentator76
27.06.12
✎
13:28
|
включение в ВТО уже состоялось
|
|||
189
Академик_
Келдыш 27.06.12
✎
13:35
|
(187) тогда придется помимо счетов еще очень много чего переделывать. Счета-наменьшее зло.
|
|||
190
Aleksey_a_z
27.06.12
✎
13:40
|
недавно сам вычищал конструкции НайтиПоКоду(...
|
|||
191
ОператорПК
27.06.12
✎
13:45
|
(158) ты чудо-дивное, во первых за базаром следи, во вторых на каком релизе платформе работает "будет работать так как не зависит от вложенности и представлений кода"?
|
|||
192
0xFFFFFF
27.06.12
✎
13:49
|
(0) ты ведь знаешь, как правильней. Зачем делал оценку сравнения? Для собственного оправдания?
|
|||
193
Vladal
27.06.12
✎
14:14
|
(131) Где встречал, там проверялась просто принадлежность группе счетов.
Лев(код, 2) вернёт "41" и для группы "41" или для "41.1" и для "41.1.1" |
|||
194
experimentator76
27.06.12
✎
14:15
|
(191) не бзди - будет работать как я сказал
|
|||
195
Vladal
27.06.12
✎
14:16
|
(146) А если исходить из такого:
Если Счет.Принадлежитгруппе(ПланыСчетов.Хозрасчетный.Товары) ? |
|||
196
experimentator76
27.06.12
✎
14:17
|
(195) такого кода в 8-ке нет)
|
|||
197
mrBlutig
27.06.12
✎
14:18
|
Аудиторам - Зачет!
Наверно тут нужно голосовалку прикрутить. |
|||
198
experimentator76
27.06.12
✎
14:18
|
да с совалкой легче пойдет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |