Имя: Пароль:
1C
1С v8
Сторонний аудит кода конфигурации
0 Snovy
 
26.06.12
22:46
Отдали нашу нетленку стороннему аудитору (соответствие ТЗ и т.д.). В том числе в заключении нашел раздел по аудиту кода. Обозвали нас непрофессионалами (у нас тоже студенты работают) и привели пример:

У нас:
ИначеЕсли Лев(СчетУчетаНоменклатуры.Код,2)="41"

Надо по правильному:
ИначеЕсли СчетУчетаНоменклатуры.Родитель=ПланыСчетов.Хозрасчетный.Товары

Я с одной стороны согласен, но замер производительности в серверном варианте дал картинку (в среднем испытывал раз 10 на разных документах):

ИначеЕсли Лев(СчетУчетаНоменклатуры.Код,2)="41" - 0,005145 сек.

ИначеЕсли СчетУчетаНоменклатуры.Родитель=ПланыСчетов.Хозрасчетный.Товары - 0, 005285 сек.

Т.е. правильный варианот снижает производительность системы почти на 3%?

Рассудите - ответ матерный писать аудиторам или ласковый?
1 Krendel
 
26.06.12
22:48
У вас должен быть регламент проведения аудита, какие замеры делались, что проверялось, на каких правилах основывалось ;-)
2 Smit1C
 
26.06.12
22:49
(0) а для чего отдавали на аудит ? небось и денег им заплатили...
3 Snovy
 
26.06.12
22:50
Не у нас - мне дали документ в котором я вижу пример хреновости. Мне нужно написать ответ. Хотел было согласиться и исправить замечания, но... Вот такое но! Теперь думаю, может мне не нужно объясняться, а просто отправить их лесом и замерить производительность, прежде чем писать "что при таком коде страдает производительность..."?
4 Snovy
 
26.06.12
22:51
(2) Не мы отдавали - Заказчик отдавал...
5 andrewks
 
26.06.12
22:51
с одной стороны, они правы.
а с другой стороны - для нетленки вполне нормально
6 Snovy
 
26.06.12
22:52
(5) В чем правы?
7 eses
 
26.06.12
22:52
Причем тут скорость ?
8 andrewks
 
26.06.12
22:53
думаю, резон такой: завтра сменят коды в плане счетов, например, вместо 41 сделают 041, и всё, поплыла нетленка
9 eses
 
26.06.12
22:53
первая строчка - гавн0код , вторая грамотное сравнение
10 IamAlexy
 
26.06.12
22:54
(4) напиши следующее:

"Как профессионалы с многолетним опытом работы мы в курсе рекомендаций 1С по поводу оформления кода и прочих методик разработки, так же мы знаем как методологически более правильно решаются те или иные задачи. Но в целях повышения быстродействия системы мы намерено применяем не совсем методологически верные решения так как по нашим тестам оные дают прирост производительности системы"
11 IamAlexy
 
26.06.12
22:54
(8) вероятность ровно такая же как если они сменят подчиненность счета
12 Snovy
 
26.06.12
22:54
(5) Нетленка - тирах на всю страну для бух.учета, нал. учета, консолидированной и управленческой отчетности всей (ого-го). Плюс плнируется всю (ого-го) перевести на нетленку с соответствующими дальнейшими доработками и оставить САП только в самой (ого-го). Поэтому и аудит и вся прочая хрень (документация, тех.проект и т.д. и т.п.)
13 Mnemonic1C
 
26.06.12
22:54
(0) Забиваете гвозди не правильными молотками, или на оборот, как там... хотя я бы выбрал вариант кода все таки 2
14 Snovy
 
26.06.12
22:56
(10) Здорово. Преклоняюсь... Простите, ссылку на копирайт в тесте ответа вставлять не буду...
15 IamAlexy
 
26.06.12
22:56
(14) не надо :) не обижусь.
16 experimentator76
 
26.06.12
22:58
(0) ну во первых - замер производителности после цикла 1000 делается
во вторых правильно
ИначеЕсли СчетУчетаНоменклатуры.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.Товары) Тогда
17 Snovy
 
26.06.12
22:58
(9) Я согласен. Но эта строчка быстрее работает, чем "кошерный код".
18 experimentator76
 
26.06.12
22:59
аудиторы плин))
19 Конфигуратор1с
 
26.06.12
23:00
а аудиторы по какому принципу выбирались?
20 IamAlexy
 
26.06.12
23:00
(14) а на будущее все же г.внокод оставлять неследует :)
вам тупо повезло что это работает быстрее реокмендованного кода, собственно по этому есть возможность очень красиво "отмазаться" и макнуть аудиторов головой в фекальки..

типа "вы, как теоретические специалисты не разрабатыввающие решения для реальной работы на реальных предприятиях конечно можете придераться к неточному соблюдению теории, но практика показывает что иногда от общепринятых теорий стоит отходить"



(16) бгыыыы а ведь верно...

(0) исправляй (10) на:

"Как профессионалы с многолетним опытом работы мы в курсе рекомендаций 1С по поводу оформления кода и прочих методик разработки, в частности мы знаем что правильно данный участок кода должен выглядеть так:

ИначеЕсли СчетУчетаНоменклатуры.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.Товары) Тогда

так же мы знаем как методологически более правильно решаются некоторые остальные задачи. Но в целях повышения быстродействия системы мы намерено применяем не совсем методологически верные решения так как по нашим тестам оные дают прирост производительности системы"


мокните их в фекальки поглубже...иш, непрофессионалами обзываются ироды
21 Asmody
 
26.06.12
23:01
(0) за код Лев(СчетУчетаНоменклатуры.Код,2)="41"  надо руки отрывать
22 Snovy
 
26.06.12
23:01
(16) - 0,005453 - документы почти все с одной двуся строками. Еще медленнее...
23 ks_83
 
26.06.12
23:02
позорище
24 experimentator76
 
26.06.12
23:02
(20)))) дада - помакать студентов в гагно милое дело)
25 IamAlexy
 
26.06.12
23:03
(24) иш.. распечатали рекомендации с ИТС и пошли аудитить...
26 Asmody
 
26.06.12
23:03
[снижает производительность системы почти на 3%] — за такие утверждения на таких тестах тоже
27 andrewks
 
26.06.12
23:03
по законам жанра следующий выход за гоуту
28 AlexTim03
 
26.06.12
23:03
Вариант аудиторов правильный, но падение производительности с 0,0052 на 0,0051 - это вообще ничто. Меньше сотой секунды вообще не смысла в оптимизации - только время тратить
29 experimentator76
 
26.06.12
23:04
(22) в контексте 8.2 обращение через точку к реквизитам приводит к расстрелу прога
так что метод - лучше а еще лучше все это перенести в запрос
и там сравнивать)
30 IamAlexy
 
26.06.12
23:04
(26) да автор сразу сказал что там у них студенты пишут..
другое дело что в этом конкретном примере автору повезло и он может отмазаться :)
31 Snovy
 
26.06.12
23:04
(21) - Что не так? Прошу учесть - разовая специфичная процедура в одном документе - по требованию заказчика весь учет НДС разбит на самые мелкие типы учета - товары, спецодежда, материалы, топливо, ОС, оборудование, НМА, РБП, просто услуги, ТЗР и т.д. - приходится по счету ловить принадлежность... Очень мелкая мелочь...
32 experimentator76
 
26.06.12
23:05
(22) ты по одному доку смотришь время?
33 Asmody
 
26.06.12
23:06
(31) за сравнение значения объекта учета с константой или, по-научному, за "хардкодинг"
34 Snovy
 
26.06.12
23:07
ОК. Я не против. Я согласен. Я ккаждому причастному кодеру завтра вставлю по первое число (жалко первое число уже недалеко, сегодня 26...). Но тем не менее - красота и правильность кода и все-таки снижение производительности, пусть и милисекундное - ???
35 experimentator76
 
26.06.12
23:08
(28) он уперся (22)
36 andrewks
 
26.06.12
23:08
(33) не с константой, а с литералом
37 experimentator76
 
26.06.12
23:09
(30) ну тады в студию с чем не повезло автору))
38 Snovy
 
26.06.12
23:09
(32) Нет, я разные доки гоняю. Общая тенденция одна. Неправильный код быстрее, чем правильный в общем случае. Всегда быстрее, только милисекунды пляшут...
39 experimentator76
 
26.06.12
23:10
(0) забалансовый "410" введут ручками и каюк проге))
40 Snovy
 
26.06.12
23:10
(37) Прикол - это единственный пример в заключении...
41 experimentator76
 
26.06.12
23:10
(31) щас твои 22 на кону
42 IamAlexy
 
26.06.12
23:11
(34) нужно выбирать то что выгодно лично тебе

аудиторам выгодно чтобы "красота и правильность" - они покажут что не зря аудители конфу и нашли "типа недочеты"

тебе выгодно быстродействие - ибо ты отмажешся от претензий


но будь готов что найдут других косяков которые не дадут выигрыша по быстродействию...
43 IamAlexy
 
26.06.12
23:11
(40) ыыыыыыыыыы
ну тогда полюбому исправленный текст из (20)
44 IamAlexy
 
26.06.12
23:11
(41) гильотина уже взведена ?
45 experimentator76
 
26.06.12
23:11
(34) это некрасивость - это семерочность лезет)
46 experimentator76
 
26.06.12
23:12
(38) с новой платформой показатели производительности могут поменяться на том же коде
47 andrewks
 
26.06.12
23:13
кстати, а нетленка-то на УФ, или на обычных?
48 experimentator76
 
26.06.12
23:14
(44) у того гения что им аудит навязал надо спросить)
49 Snovy
 
26.06.12
23:15
(43) Прицепились к тому, чтю в каждом документе своя процедура контроля, а нужно использовать типовую универсальную и передавать в нее структуру реквизитов для проверки. Но там отмазка есть нормальная - при нетиповых документах типовая универсальная процедура превращается в выдачу сообщений, все равно по операциям и сюжету документа нужно ее готовить в каждом случае по разному... Ну и беда всех начинающих программистов - в модулях документов и обработок вставить вопрос или предупреждение :).
50 experimentator76
 
26.06.12
23:15
(0) намекни аудиторам что отсутсвие результат тоже результат и что ты знаешь три варианта решения
когда они удивленно спросят - открой ПринадлежитЭлементу в СП
51 experimentator76
 
26.06.12
23:17
(49) при проведении вопросов у тебя не задает?))
52 Snovy
 
26.06.12
23:18
Т.е. все таки главный совет - принять замечание и покаяться, указать срок исправления? Или все-таки в ответе написать - сами вы козлы?
53 experimentator76
 
26.06.12
23:19
(52) = > (50)
54 IamAlexy
 
26.06.12
23:19
(49) следовать типовым рекомендациям не всегда следует..
простой пример: БСП: Подсистема "Запрет редактирования реквизитов" тормозит просто жутко
55 experimentator76
 
26.06.12
23:19
имхо по производительности ни к чему упираться - мала разница
56 Snovy
 
26.06.12
23:19
(51) Нет Это процедуры заполнения форм, вынесенные в модули. Ну и вопросы :) Соответственно серверная проверка ругается. Кстати - конфа уже с января на пяти предприятиях пилотниках работает на серверах - ошибок не выскакивает...
57 experimentator76
 
26.06.12
23:20
кроме того ты несколько раз сделай замер и все поймешь
58 experimentator76
 
26.06.12
23:22
(56) директивы препроцессору вставь - не придерутся
типа - а вдруг на клиенте будут работать
59 Snovy
 
26.06.12
23:22
(57) Я же написал - что несколько раз делаю замеры. Мне не нужны абсолютные цифры. Мне нужна тенденция...
60 experimentator76
 
26.06.12
23:23
ну мне тут больше делать нечего - успехов!
61 Конфигуратор1с
 
26.06.12
23:23
(52)ну главный совет покаятся, при этом подколов проверяющих на предмет их некомпетентности
62 IamAlexy
 
26.06.12
23:23
(59) да напиши ты им письмо типа (20) а далее я бы все же поправил на канонический вид код..
63 Snovy
 
26.06.12
23:23
(58) Вот целый день сегодня студенты и вставляли. Зато сейчас красота... Я вот думаю. Оставить ошибки, которые из типовой основы лезут или тоже править?
64 andrewks
 
26.06.12
23:24
(63) например?
65 andrewks
 
26.06.12
23:25
(50) четыре. ещё запросом можно
66 experimentator76
 
26.06.12
23:26
(65) => (29)
самый оптимальный вариант
но ТС врядли решится переписать
да и для аудиторов это будет шоком навреное)
67 experimentator76
 
26.06.12
23:27
(63) пожалуй соглашусь со второй частью письма
68 experimentator76
 
26.06.12
23:27
(67)(62)
69 Snovy
 
26.06.12
23:29
(64) Проверка конфигурации, включить все флаги. Смотреть типовую. Нам так и сделали... выползли наши ошибки и куча типовых. Это все в приложении выставили нам. Мы по ТЗ на основе КОРП делали...
70 andrewks
 
26.06.12
23:31
(66) шок - это по-нашему.  по крайней мере, пусть ТС замеры этого варианта тоже произведёт.
71 IamAlexy
 
26.06.12
23:32
(69) бгыыыыыы
я бы у них попросил пример типовой конфигурации где подобная проверка бы не выдала бы никаких ошибок...
72 experimentator76
 
26.06.12
23:32
(70) дада интересно
я бы вынес эту функцию в серверный модуль и реализовал ПринадлежитЭлементу запросом
хотя бы до второго родителя вложенностью
73 Snovy
 
26.06.12
23:33
А вообще - аудитор - нексия пачоли консалтинг.
74 experimentator76
 
26.06.12
23:34
(73) спроси между делом - сколько аудитору платят
а то у меня второе аудит) + 1С наверное будет от 200 тыщ)
75 Snovy
 
26.06.12
23:35
(74) А оно мне надо?
76 experimentator76
 
26.06.12
23:39
(75) правильно - это надо мне... можно забить
77 experimentator76
 
26.06.12
23:41
чет я у них не нашел услуги такой
есть только

Консультации по созданию, развитию и модернизации учетных систем
       
   

Контактное лицо:

Данилова
Ольга Владимировна

заместитель
генерального директора

телефон  +7 (495) 640-64-52
 [email protected]
   
       

• постановка и внедрение корпоративной системы единых стандартов бухгалтерского учета, как в отношении всего учета, так и по отдельным его элементам (Основные средства, дебиторская задолженность и т.п.)

• разработка единого рабочего плана счетов  и инструкций по его применению для холдингов, позволяющего всем членам холдингов формировать аналитические данные в едином формате

• разработка единых принципов учетной политики по бухгалтерскому учету, являющихся базовыми методическими документами, регулирующими ведение учета всеми предприятиями холдинга

• постановка и внедрение единой системы методологии организации и ведения налогового учета, с учетом отраслевой спецификации и структуры холдинга. Разработка документации по налоговому учету (ПБУ 18/02)
78 experimentator76
 
26.06.12
23:42
если по договору от них не требовалось такой услуги то это суть - навязывание услуги
можно пободаться
79 Сияющий Асинхраль
 
26.06.12
23:48
По поводу если, думаю, аудиторы правы, а вот все проверки для разных доков в одном модуле делать не люблю очень. Мне ближе подход семерочной бухи - надо поменять док - его и меняешь, а не изучаешь код на несколько тысяч строчек с целью определить в каком доке твои изменения могут отозваться
80 Snovy
 
26.06.12
23:51
(79) Так и у нас - в каждом доке своя проверка в зависимости от специфики документа. А то что в каждом доке нужно проверять наличие заполненгости даты и организации - так копи-паст спасает. К этому и придрались...
81 Snovy
 
26.06.12
23:54
(78) Мы субподрядчики у 1С для разработки нетленки. 1С закрыла глаза - делайте что хотите - деньги вам, слава нам.. Заказчик - куча департаментов, скидывающих ответственность друг на друга. Я даже не знаю, сколько нам платят за этот проект. Мне как-то фиолетово. Мое дело - что бы работало и было лучше, чем типовая подделка...
82 Snovy
 
26.06.12
23:58
(64) Типовая КОРП дает 955 ошибок (не влияющих на работу конфы) при проверке конфигурации. Хорошо, что мы почти две трети типовых документов из конфы усрели удалить - нам выставили меньше ошибок...
83 Сияющий Асинхраль
 
26.06.12
23:58
(80) сам грешу таким подходом, поэтому покаялся бы и оставил все как есть - таким подходом тоже грешу :-)
84 ПиН
 
27.06.12
00:01
(0) отличный быдлокод, никаких проблем не вижу... аудиторы малолетние далба..ы
85 Krendel
 
27.06.12
00:09
(0) Вот у Вас проблема какая? Показать что вы крутой специалист(свой нрав или что?

Цель аудита какая- получить 2-е мнение о состоянии продукта- вполне себе благовидная цель.

Вам указали что это нечитаемый код- вполне обосновано, ибо надо залазить и смотреть процедуру. Хотите быть лучшим стрелком на деревне- пошлите нахер аудиторов, скажите что такие преписки нахрен не нужны, и вы просто потеряли время и деньги. И я уверен что вашу конфу до битов разберут, уточняя отчет.

Или скажите нейтрально что они не критичны и на работу не влияют. хотя несколько методов мы возьмем на вооружение- и будете спокойно работать дальше
86 orefkov
 
27.06.12
00:12
(0)
У аудитора не хватает на новую ауди, и детки голодные сидят. Понять и простить.
87 Snovy
 
27.06.12
00:18
(85) Да не собираюсь я бодаться за то, что я самый лучший... Я обычный... И контора моя обычная... За три месяца запустить тиражный продукт, окгда все говорили, что будет опытная эксплуатация, а один из из пилотов ушел сам по себе в промышленную? И все силы были брошены на поддержку пром. эксплуатации системы... А остальные тоже сказали - ваша конфа фигня, но она лучше, чем вся остальная фигня и тоже перешли на пром. эксплуатацию раньше срока. А потом вываливают заключение о соответствии конфы ТЗ, хотя как водится - это ТЗ никто не читал и в нем тупое описание БП КОРП, даже за уши не притянутое к тому, что нужно было делать.? Теперь нужно аккуратно отмазаться. Я привел только пример одной странички. остальное я сам разберу... Основное лежит в другой поверхности - мы не успели сделать то, что на фиг никому не нужно :)
88 Krendel
 
27.06.12
00:28
(87) ТОгда есть реальный шанс увеличить бюджет
89 rs_trade
 
27.06.12
00:33
(0) копрокодить ради сомнительных 3%. бугагага. аудиторы правы.
90 rs_trade
 
27.06.12
00:34
(89) было бы 30%, правы были бы вы.
91 quest
 
27.06.12
00:37
(0)немного некоретная постановка вопроса. Ты не сказал - как этот этот счет появляется в докуметнте. вводит ли его пользователь или он присваивается как константа.  Ведь счет счет 50.41 тоже пройдет эту проверку. И не факт что этому будут рады твои клиенты...
92 ПиН
 
27.06.12
00:45
(91) ггг, не пройдет...
93 mikeA
 
27.06.12
02:15
(87) толоько
"мы намерено применяем не совсем методологически верные решения так как по нашим тестам оные дают прирост производительности системы"
замени на
"мы сознательно изменяем методологически верные решения, когда это увеличивает производительность системы и не снижает её устойчивость"
94 Stepa86
 
27.06.12
09:22
(0) оооо, волшебные значения в коде... такое надо или инкапсулировать или переписывать по нормальному, как в (16)

если это единственный пример аудиторов, то херовые они аудиторы, я могу придраться почти к любому коду, просто прагматичный код и качественный код - разные вещи, и конфа по проверке на 1С:Совместимо в моей нетленке находит где то 6000 ошибок, на 60клоков то, из которых я не нашел ни одной достаточно серьезной, чтоб переписать.

По поводу обращения через точку - давно использую функции глРеквизит( Ссылка, Путь ) и глРеквизит_Кэш( Ссылка, Путь ), которые могут весьма сильно повысить производительность при обращении через точку
95 orefkov
 
27.06.12
09:41
(94)
А чем принципиально отличается "ПланыСчетов.Хозрасчетный.Товары" от "41" ?
Все это магические слова в коде.
Тогда бы уж хотя бы

омНазначенияСчетов.ЭтоСчетУчетаТоваров(СчетУчетаНоменклатуры);
96 Stepa86
 
27.06.12
09:49
(95) вот не поверю, что ты не знаешь, почему не рекомендуется использовать волшебные числа в коде (не нельзя, а не рекомендуется)

>>омНазначенияСчетов.ЭтоСчетУчетаТоваров(СчетУчетаНоменклатуры);

это я и называю инкапсулированием, а как внутри считается - вообще пох
97 Конфигуратор1с
 
27.06.12
09:50
(95)+100500
что один вариант, что второй - при изменении в плане счетов (не знаю как в России, но в Украине раз в год что нибудь та меняют ) все равно придется перелопачивать весь программный код, а так вынесли в общий модуль процедуру и радуемся жизни
98 Конфигуратор1с
 
27.06.12
09:52
(97)видел одну конфу, где все проводки вынесены вообще в справочник и пользователь сам как хочет так и корректирует их. Правда конфа на 7ке.
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
да с совалкой легче пойдет