Имя: Пароль:
LIFE
Юмор
OFF: Очередной "шедевр" "нестандартного" кода
🠗 (Волшебник 09.04.2012 21:31)
0 Холст
 
09.04.12
18:40
не называю сразу "быдлокод", дабы не обижать автора

кодом сразу утомлять не буду, смысл - обязательные к заполнению реквизиты табличной части документа должны иметь точку на конце в комментарии к этому реквизиту, т.е.

Для Ин=1 По Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти() Цикл
 Коммент=СокрЛП(Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти(Ин).Комментарий);
 Идент=СокрЛП(Метаданные.Документ(Конт.Вид()).РеквизитТабличнойЧасти(Ин).Идентификатор);
 Если Прав(Коммент,1)<>"." Тогда Продолжить; КонецЕсли; //пропускаем "необязательный" реквизит
//далее проверка заполненности
1 Voronve
 
09.04.12
18:43
Даже не знаю что сказать...
2 Нуф-Нуф
 
09.04.12
18:44
(1)+1
3 Джинн
 
09.04.12
18:44
(1) Ну тогда не говори ничего
4 Нуф-Нуф
 
09.04.12
18:44
(3) так он и так ничего не говорит
5 Voronve
 
09.04.12
18:44
(3) Ты мне рот незатыкай ;)
6 bahmet
 
09.04.12
18:44
(0) перевидите на Си,  а то не понятно...
7 Gantosha
 
09.04.12
18:45
карма быть программистом определяет занятие, но не влияет на код. Поэтому по коду судить нельзя.
8 bahmet
 
09.04.12
18:45
перевЕдите.
9 i-rek
 
09.04.12
18:45
а мне нравится. если это самописка - то креативненько и прогрессивно
10 Джинн
 
09.04.12
18:48
(5) А чего Вы неподготовленным пришли на форум? Тут шедевр, а Вам сказать нечего.
11 Voronve
 
09.04.12
18:49
(10) Бгг ))) второй филя ? оО
12 Jstunner
 
09.04.12
18:49
У кажого, кто написал хотя бы несколько тысяч строк когда, можно найти тупизну в программах.. А тут вполне рабочая идея, доступная и вполне сопровождаемая
13 Ахиллес
 
09.04.12
18:49
(0) Всё замечательно, но можно ещё улучшить. Первая буква должна быть в верхнем регистре. Правила русского языка надо уважать.
Автор настоящий грамма-наци. Уважаю.
14 Джинн
 
09.04.12
18:51
(12) Увы, мы не настолько талантливы :( Наш лоховской быдлокод в подметки не годиться истинным мастерам.
15 smaharbA
 
09.04.12
18:51
и чо ?
16 Voronve
 
09.04.12
18:53
(0) Сделать глобальную функцию по типу "глВсеРеквизитыДокументаЗаполнены" по типу ТиСовской, только для тч.
17 bahmet
 
09.04.12
18:53
ТС не осилил, что делает код, поэтому тупо запостил  и смотрит реакцию..
а еще возможно в случае положительной реакции, напишет что творение его и уже черкает заявку на патент.
18 smaharbA
 
09.04.12
18:53
Для Сч=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
           Рекв=Метаданные.ОбщийРеквизитДокумента(Сч);
           // Признак доп. настройки - "~"
           Если Найти(Рекв.Комментарий,"~")=0 Тогда Продолжить; КонецЕсли;
           тзДокНастр.НоваяСтрока();
19 Ахиллес
 
09.04.12
18:53
Я бы ещё в проверку на капс вставил. Если весь комментарий капсом набран, то безусловное завершение работы системы без сохранения документа. И пусть заново набивают накладушку, пока не научатся хорошим манерам.
20 МурЬка
 
09.04.12
18:54
Некоторые отраслевки в себе такое содержат.
21 smaharbA
 
09.04.12
18:54
Если (ПустаяСтрока(Мет.Комментарий)=1)И(ПоказыватьСлужебнуюИнф=1) Тогда
               Сообщить("Не задан коментарий для объекта "+ТЗ.Вид,"I");
           Иначе ТЗ.Комментарий=Мет.Комментарий;
           КонецЕсли;
22 Обработка
 
09.04.12
18:55
(0) И что тут такого страшного?
Это ведь из 1с77?
23 antgrom
 
09.04.12
18:56
(0) Наверное , сначала была написана обработка.
Без заботы о чистоте кода , о быстродействии и т.п.

А потом код из обработки вырезали и не переписали.
24 Ахиллес
 
09.04.12
18:56
(21) Это твой код что ли в (0)? Чё ты так возбудился то?
25 smaharbA
 
09.04.12
18:57
(24) Кто как возбудился ?
26 Lexxxxx
 
09.04.12
19:01
Хотелось бы услышать об альтернативных, так сказать правильных с точки зрения автора темы, решениях задачи проверки заполнения обязательных реквизитов в масштабах всей конфигурации.
27 Ахиллес
 
09.04.12
19:02
(25) Ну какие то сумбурные посты (18) и (21). Не понятно, что сказать хотел или похвалится.
28 Asmody
 
09.04.12
19:03
я бы ещё в комментарий регулярку бы засунул для проверки на соответствие…
29 Asmody
 
09.04.12
19:04
(28)+ или можно прям кусок кода в комментарий шарахнуть, который истину/ложь возвращает для значения реквизита
30 GreyK
 
09.04.12
19:08
(0) И с какого ..перепугу - это плохой код? Нужно отобрать все доки с определенным комментарием. Зачем гонять цикл по общим реквизитам, если реквизит известен?
31 cathode
 
09.04.12
19:20
(0) Это по ходу какая-то рарусовская отраслевка. А в Рарусе далеко не дураки конфы пишут, уж поверьте.
32 catena
 
09.04.12
19:20
(30)Английский свободно, 1с со словарем?
в (0) никто не отбирает документы с комментарием, там отбирают РЕКВИЗИТЫ с комментарием с точкой в конце.

А чем не вариант?
33 Lexxxxx
 
09.04.12
19:22
Холст, ну где же Вы?! Очень хотелось бы выслушать Ваше авторитетное мнение!
34 Lexxxxx
 
09.04.12
19:25
Единственное мне не ясно, вот эта беготня с поиском точек в комментарии реквизита производится каждый раз при проверке реквизитов? Может при старте системы закешировать их в списочек?
35 Torquader
 
09.04.12
19:28
Так, а в чём проблема - Комментарий - это Description в метаданных реквизита (то есть то, что вводится в строке "Коментарий" в конфигурации.
Кстати, пользователи этот комментарий не видят.
Вот почему бы в него и не запихнуть что-то, что необходимо программе для работы.

P.S. комментарий допускает хранение до 128 символов кода, что позволяет сложить туда даже алгоритм проверки значения на соответствие нестандартному шаблону, а не только признак необходимости заполнения реквизита.

А вы, если не секрет, где признак заполнения храните ?
36 vde69
 
09.04.12
19:33
(31)
------------------------------------------------------
чуток более читатебельно и красивей будет:


мДок = Метаданные.Документ(Конт.Вид());
к = мДок.РеквизитТабличнойЧасти();
Для Ин=1 По к Цикл
  Коммент=СокрЛП(мДок.РеквизитТабличнойЧасти(Ин).Комментарий);
  Идент=СокрЛП(мДок.РеквизитТабличнойЧасти(Ин).Идентификатор);
  Если Прав(Коммент,1)<>"." Тогда Продолжить; КонецЕсли;
37 GreyK
 
09.04.12
19:35
(32) В чём проблема? Ну ищутся комменты с точками в табличных частях в сабже, ну и чем вам мой русский не угодил? Вам косторочки бы выпить грамм 50 и всё как рукой снимет :)
38 cathode
 
09.04.12
19:36
В целом идея, конечно, хорошая. Но составление списков обязательных реквизитов в коде гораздо нагляднее и меньше риск потерять настройки при групповой работе или обновлениях, т.к. текстовые данные сливать вместе легче.
39 GreyK
 
09.04.12
19:38
+(37) косторочки = касторочки, рецепт не мой, но доктор Пилюлькин внушает доверие :)
40 Torquader
 
09.04.12
19:40
(38) В тексте, конечно, лучше, но править текст сложнее, чем убрать точку с реквизита - а конфигурацию в любом случае править - во еже ли хранить в текстовом файле в директории базы, то тогда его можно править, когда пользователи работают - но нужно будет следить, чтобы они сами не поправили.
41 IamAlexy
 
09.04.12
19:41
(0) а чо, прикольное решение....
42 GreyK
 
09.04.12
19:43
Хотя и присутствует проблема с выбранной строкой, но если работает не трожь!
43 cathode
 
09.04.12
19:48
(40) А TurboMD на что? Правим, выгружаем из конфигурации на ходу и ус?. К тому же оптимально управлять обязательностью заполнения группы реквизитов в зависимости, например, от вида операции документа, можно только из текста программы.
44 Один С
 
09.04.12
19:53
автор - дятел. сам то наверное все стандарты соблюдает, все отступы по стандарту Мёбиуса.
не судите, и не судимы будете..
45 DrShad
 
09.04.12
21:05
а где сам ТС? где его решение?
46 mirosh
 
09.04.12
21:17
(0) и чо тут такого?
это нестандартное решение, оно красиво (по крайней мере).
а что можешь предложить ты? следи за своим кодом лучше)
47 DrShad
 
09.04.12
21:21
(46) +100500
если его поместить в модуль поставляемый без текста, то хрен кто догадается почему одни реквизиты ведут себя по другому
48 Guk
 
09.04.12
21:22
а где смеяться то?...
49 andrewks
 
09.04.12
21:27
тонкий английский юмор
50 DrShad
 
09.04.12
21:29
предлагаю забанить ТС, ибо мнение не высказано, своего решения нет, в обсуждении не учавствует
51 NcSteel
 
09.04.12
21:32
(29) Оооо. До такого еще не додумывался. Надо попробовать.
52 Torquader
 
09.04.12
21:32
(43) Проще, когда это можно поменять из интерфейса администратора, и от одних "зверей" требовать, а другим - "прощать".

(50) Пусть лучше расскажет, сколько минут ушло на понимание кода.
53 Torquader
 
09.04.12
21:33
(51) К сожалению, в седьмой версии штатно можно исполнять только код на Visual Basic, а последний не может работать с объектами 1С напрямую.
54 iithethethe
 
09.04.12
21:42
Волшебник опустил ветку пока не узнали его перо
55 France
 
09.04.12
23:16
(0) для 77 норма.. он Раруса есть продукт по управлению правами доступа: сплошь и рядом проверка комментария на соответствие шаблону..