Имя: Пароль:
1C
1С v8
Сторонний аудит кода конфигурации
,
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
да с совалкой легче пойдет
AdBlock убивает бесплатный контент. 1Сергей