Имя: Пароль:
1C
1C 7.7
v7: Чем отрефакторить модуль?
,
0 trdm
 
08.10.15
21:20
Поубивать неиспользуемые функции, переменные и т.п.
Есть такое средство?
Хочется мусор повыметать.
Подскажите, плз..
1 Волшебник
 
модератор
08.10.15
21:23
мозгом
2 trdm
 
08.10.15
21:25
долго
3 trdm
 
08.10.15
21:26
Побыстрее бы, чем мозгом.
4 Волшебник
 
модератор
08.10.15
21:26
забить?
5 XLife
 
08.10.15
21:30
мозгом?
6 trdm
 
08.10.15
21:33
забить мозгом?
7 фобка
 
08.10.15
21:34
Ответ прозвучал, тему можно закрывать
8 trdm
 
08.10.15
21:36
Похоже самому писать придется.
9 RomanYS
 
08.10.15
21:39
загони модуль куда-нибудь (в обработку) в 8.3, и там рефактори
10 trdm
 
08.10.15
21:46
А что там за возможности?
11 фобка
 
08.10.15
21:50
(9) ну да, а синтаксис?)
(8) функции которые с форм вызываются потереть хочется?
12 RomanYS
 
08.10.15
21:54
(10) не знаю, но слово такое там видел)

(11) я подобным образом объединял (при обновлении) сильно переписанный глобальник из ЗиК, отличия в синтаксисе не сильно влияли для этих целей.
13 trdm
 
08.10.15
21:56
(11)  >> функции которые с форм вызываются потереть хочется?

Конечно. Еще функции которые из таблиц вызываются и функции которые с пом. 1С++ расшариваются.
Короче хочу прострелить себе коленку.
14 trdm
 
08.10.15
21:57
(12) Если это имеешь ввиду http://v8.1c.ru/o7/201312ref/index.htm , то там все слабенько как-то.
15 Рэйв
 
08.10.15
21:58
(0)Слабоватый вброс:-)
16 RomanYS
 
08.10.15
21:59
(14) да это.
Ну тогда или глазками, либо писать парсер. Хотя может и готовое что найдешь
17 badboychik
 
08.10.15
22:00
на питоне можно написать примитивный парсер и поисковик
18 badboychik
 
08.10.15
22:01
можно даже настоящий парсер написать, там специальная библиотека есть для написания парсеров
19 trdm
 
08.10.15
22:02
(16)  >> Ну тогда или глазками, либо писать парсер. Хотя может и готовое что найдешь

2771 строка.
Тем более это класс, методы которого вызываются извне.
20 Рэйв
 
08.10.15
22:04
(19)>>Тем более это класс, методы которого вызываются извне.

ржунемогу:-)))
А как еще могут вызываться не приватные методы?:-))
21 Рэйв
 
08.10.15
22:05
(19)У низ там наверное public написано
22 trdm
 
08.10.15
22:05
(17) на сях есть тоже много примочек.
лексер у меня есть уже, можно врукопашную нашкрябать, а можно и bison приколошматить.

А новая визуал студия может схавать 1С-ный модуль? И хотябы показать не юзанные переменные?
23 RomanYS
 
08.10.15
22:06
(19)
"методы которого вызываются извне" - глобальный поиск тебе все покажет
2771 строк ~ 100 функций, если однократно то можно и "глазками", пару часиков и готово
24 trdm
 
08.10.15
22:09
(23) да я уже замахался, конца громадная.
если я так буду каждый модуль пропалывать, я до пенсии буду корячиться.
25 trdm
 
08.10.15
22:10
Чета хлопцы умерли в вас программисты.
Программист - это прежде всего тот кого парит делать то, что может машина.
26 Рэйв
 
08.10.15
22:12
(25)Ты не правильно выразился.
Программист- это тот кому лень и просто напишет код.
Как то так.:-
27 trdm
 
08.10.15
22:18
Блин, как на эту тему хорошо в сях, жесткий контроль с матами во всю ивановскую.
28 trdm
 
08.10.15
22:23
(17) Я просто питон не умею.
29 badboychik
 
08.10.15
22:24
(28) че там уметь, за пару часов можно научиться
30 User_Agronom
 
08.10.15
22:25
(0) Извечный вопрос: Зачем?
Есть функция, которая нигде не вызывается. И что? Она же нигде, совсем-совсем нигде не вызывается.
31 trdm
 
08.10.15
22:25
(30) мусор надо выметать периодически.
32 User_Agronom
 
08.10.15
22:25
(27) Или trubo pascakal.
Любой компилируемый язык.
33 User_Agronom
 
08.10.15
22:26
(31) Нафейхоа? Времени полно свободного?
34 RomanYS
 
08.10.15
22:26
(28) зачем питон?
чем 1с не подошел?
35 badboychik
 
08.10.15
22:27
(34) смеюсь тебе в лицо )
36 trdm
 
08.10.15
22:28
(33) >> Нафейхоа? Времени полно свободного?

Тяжело сопровождать. Да и пописать ченить такое хочется.
37 RomanYS
 
08.10.15
22:31
(35) что сказать то хотел?
Не знаешь как в 1С работать со строками?
38 trdm
 
08.10.15
22:32
список задач простой: прибить неиспользуемые переменные, неиспользуемые функции.
Можно конечно еще помечтать типа убрать все копипастовые одинаковые блоки, процедуры и вывести их в глобальники или в классы.
39 badboychik
 
08.10.15
22:34
(37) писать парсер на 1С это как копать карьер саперной лопаткой
40 RomanYS
 
08.10.15
22:34
(38) у тебя 7.7? или это ошибка заголовка?
41 trdm
 
08.10.15
22:35
Еще бы классно сделать контроль ошибок типа:
Форма.блаблабла.чето(), если "блаблабла" - не реквизит диалога.
(40) Она самая.
42 RomanYS
 
08.10.15
22:38
(39) то что ты умеешь "образно" выражаться, я уже понял.
В чем преимущества твоего "карьерного самосвала" питона по сравнению с 1С. Кроме общего развития ТС конечно)
43 RomanYS
 
08.10.15
22:39
*(42) применительно к данной конкретной задаче конечно
44 badboychik
 
08.10.15
22:42
(42) во-первых у питона есть интерактивный интерпретатор, для быстрого тестирования кусочков кода. В принципе этого хватает чтобы 1С сразу слилась, но есть и еще куча преимуществ: куча функций для строк, заточенность под работу с коллекциями, ООП, спец. библиотеки и пр. и пр. ...
45 RomanYS
 
08.10.15
22:46
(44) это всё круто конечно, особенно если ты всем этим умеешь пользоваться (ТС вряд ли умеет).
Но без всего этот можно обойтись, достаточно найти все заголовки методов и посчитать количество их вызовов.
46 User_Agronom
 
08.10.15
22:51
(44) Новая обработка, в модуль формы при нажатии ставь свой кусок. Тестируй. И не нужно обновлять конфу. Будут три действия: сохранить обработку, выбрать обработку и запустить процедуру.
47 RomanYS
 
08.10.15
22:55
(44) можно поподробнее про "интерактивный интерпретатор", он любой язык умеет интерпретировать? у ТСа вроде код 1с.
48 trdm
 
08.10.15
22:57
все, по пивку и баиньки.
49 Garykom
 
гуру
08.10.15
22:58
ну наваяй уже свои скрипты к openconf... только это потребует сначала brain on
50 trdm
 
08.10.15
22:59
(49) да я лучше на сях попишу чуток. воспользуюсь разборкой gcomp-a.
51 Garykom
 
гуру
08.10.15
23:02
(50) скрипты и на сях можно... а можно и плагины туда же
52 vcv
 
09.10.15
05:05
Я тоже на подобными вопросами задумался. Сделал на коленке первичную, примитивную проверку самого мне необходимого.
http://catalog.mista.ru/public/395032/
Как раз подумываю добавлять поиск неиспользуемых переменных и функций.
Не знаю, как у кого, у меня, подозреваю, какие-то ограничения менеджера памяти 7.7. Достаточно регулярно всплывает ситуация типа такой:
Есть глобальная переменная Сервис, есть ей присваивание ПриНачалеРаботыСистемы (единственное присваивание)и использование в куче мест. И вдруг "Поле агрегатного объекта не обнаружено" на строке с Сервис.блаблабла.
53 Web00001
 
09.10.15
05:07
54 VladZ
 
09.10.15
05:10
(31) Озвучь критерии "мусора".
55 Web00001
 
09.10.15
05:57
(54) это же был ответ на (30)
56 фобка
 
09.10.15
06:33
(53) речь о семерке
57 aka AMIGO
 
09.10.15
08:17
Работает? - не трогай! © золотое правило 1с-ника :)
58 ADirks
 
09.10.15
08:30
(57) это отмазка недопрограммистов-дебилов

код надо писать так, чтобы его легко можно было модифицировать
59 DDwe
 
09.10.15
08:39
(58)А, чего хамишь?
60 aka AMIGO
 
09.10.15
08:41
(59) да ладно :)
61 zak555
 
09.10.15
08:41
(57) абсолютно неправильный подход

вот у меня клиент сидел, работал, ничего не трогал, к базе салаг только подпускал
за 5 лет переплатил 1 миллион прибыли
62 aka AMIGO
 
09.10.15
08:43
(61) бушки прохлопали красивыми глазками :)
63 zak555
 
09.10.15
08:46
(62) ты думаешь, что большинство бухов знает бухучёт ?

даже в журнале главбух такую ересть пишут (иногда)
64 DDwe
 
09.10.15
08:47
(61) Значит не работало. Иначе зачем подпускал. А разговор о том что - Работает? - не трогай!
65 zak555
 
09.10.15
08:51
(64) подпускали, чтобы обновиться

а смысл что-то обновлять, если конфа не настроена
66 VladZ
 
09.10.15
08:52
(58) "код надо писать так, чтобы его легко можно было модифицировать" - это да. Но нужно понимать, что сам по себе "рефакинг" кода никакого эффекта не дает. Даже более того, после "рефакинга" обычно перестает работать "что-то важное". В общем, к чему я веду: нужно понимать цель (зачем это делается) и к чему приведет (последствия).  Если цель неясна, а последствия трагичны - то какой смысл в этих "телодвижениях"?
67 aka AMIGO
 
09.10.15
08:54
(63) кхм.. да.. твоя правда.
Квалификакция бухов упала, у большинства за плечиками - курсы в 1месяц длиной. А то и того нет.

Во времена допотопные (мерзопакостные) были или бух-техникум, или трехгодичные курсы.
После таких курсов-техникумов развивалось чутьё к "хомутам" в учете..
И книга была "Экономика предприятия" с элементами бухучета.
Неквалифицированный бух может ой, как сильно наказать предприятие.. Как, впрочем и квалифицированный, но этот - намеренно :)

(66) Если цель неясна, а последствия трагичны - то какой смысл в этих "телодвижениях"?
Так ЧСВ! :)
68 DDwe
 
09.10.15
08:58
Код нужно писать так, чтобы потом не было мучительно больно за бесцельно стёртые клавиши.
69 aka AMIGO
 
09.10.15
08:58
(66) "рефакинг" - это красиво, и по-делу :)
70 aka AMIGO
 
09.10.15
09:00
(68) это дается с опытом.. да и с желанием написать-таки красивую нетленку..
А когда не очень хочется, то не очень и получается. ©
71 TormozIT
 
гуру
09.10.15
09:14
в EDT будет 1Сshaper
72 pumbaEO
 
09.10.15
09:18
(71) пусть сначала edt пережует erp, тогда посмотрим.
73 aka AMIGO
 
09.10.15
09:25
(68) у ТС идея не такая сложная. Просто "повыметать" неиспользуемое.
Тогда "работает не трожь" несколько не применима к сабжу.
Действительно, при этом алгоритм любой сложности не будет затронут.
74 NikVars
 
09.10.15
09:28
Щас поуберет "мусор" из модуля, потом какое-нибудь действие кнопки на икс вкладке отвалится...
75 Salimbek
 
09.10.15
09:38
(0) На сколько я помню, - главное правило рефакторинга - обвязка этого кода тестами.
76 BMW1C
 
09.10.15
09:55
Скопируй модуль в 8-ку и проверь этим http://cloudconf.org/CodeInspector

вроде синтаксис один, может получится
77 trdm
 
09.10.15
10:31
(52) Можешь на почту скинуть? Нема маней на инфостарте.
78 trdm
 
09.10.15
10:35
(73) Правильно сообразил.
(76) Это нужно фраймверки ставить. Не хочу.
79 trdm
 
09.10.15
10:35
(74) Так и надо сделать достаточно мошную рефакторную софтину.
80 Гёдза
 
09.10.15
10:38
Для 7 уже не актуально
81 NikVars
 
09.10.15
12:08
(79) Или делай или бюджет озвучь - тут тебе забацают.
Да и цель этой возни с уборкой мусора не понятна.
Деятельность есть, выхлопа нет, есть вероятность порчи.
82 vcv
 
09.10.15
19:50
К вопросу о необходимости какого-то рефакторинга кода, стиля программирования или еще чего-нибудь подобного, вниманию предлагается вопрос-загадка. Спрашивается, как, в нижеприведенном коде во второй строке, может возникнуть ошибка "Индекс не входит в границы списка значений."

Если СписокОтложенныхДействий.РазмерСписка()<>0 Тогда
    Объект = СписокОтложенныхДействий.ПолучитьЗначение(1, Действие);
83 vcv
 
09.10.15
19:52
Вопрос не теоретический, а практический. Сегодняшний из рабочей базы. Притом возник у двух разных пользователей в разных ПБ на разных серверах.
84 mehfk
 
09.10.15
20:01
СписокОтложенныхДействий - экспортная переменная глобального модуля?
85 vcv
 
09.10.15
20:10
(84) СписокОтложенныхДействий переменная глобального модуля, не экспортная. Используется в обработке обработке ожидания. Обработка ожидания запускается вот так
ТаймерОтложенногоДействия = СоздатьОбъект("Сервис");
ТаймерОтложенногоДействия.ОбработкаОжидания("ОбработкаОжиданияОтложенногоДействия",100);
Начало процедуры ожидания выглядит так:
Процедура ОбработкаОжиданияОтложенногоДействия()
    Перем Объект, Действие;
    Если ТипЗначенияСтр(СписокОтложенныхДействий) <> "СписокЗначений" Тогда
        СписокОтложенныхДействий = СоздатьОбъект("СписокЗначений");;
    КонецЕсли;
    Если СписокОтложенныхДействий.РазмерСписка() > 0 Тогда
        Объект = СписокОтложенныхДействий.ПолучитьЗначение(1, Действие);
        СписокОтложенныхДействий.УдалитьЗначение(1);

Как-то, по моему, очень маловероятно, что следующий "тик" таймера попадёт между проверкой размера списка и получением из него значения.
86 mehfk
 
09.10.15
20:25
Значит не маловероятно. О наличии аналогичной логики догадывался, поэтому и задал вопрос. Значит в обработке ожидания надо "замораживать" значение переменной и устанавливать в конце.
87 mehfk
 
09.10.15
20:26
Может немного сумбурно высказался, если надо схематично могу поянсить.
88 vcv
 
09.10.15
20:42
(87) В общем-то всё понятно. Просто ни как не укладывалось в голове, что между строчками 7 и 8 может пройти 100 миллисекунд на серьёзном сервере туда попадёт следующий тик таймера. Сейчас, конечно первой строкой в обработке ожидания остановлю таймер, а в конце, если еще остались события в очереди, запущу снова.
89 mehfk
 
09.10.15
20:49
Перечитал еще раз. Мистика. Лучше заведите флаговую переменную, которая указывает, что выполняется обработка ожидания.
90 mehfk
 
09.10.15
20:50
Ой, нет. "Мистику" можно зачеркнуть, это же FormEx.
91 Злопчинский
 
09.10.15
20:55
Очень мне сомнительно что обработка ожидания может прерывать выполняющийся код
Имхо оо может выполняться только в простое системы
Но я не готов подписаться под этим
Так что желательно бы получить однозначное подтвержден е такой работы оо
92 vcv
 
09.10.15
20:59
(91) Штатная не может, из FormEx срабатывает в любой момент.
93 Злопчинский
 
09.10.15
21:06
(92)  тады там где код не должен прерываться устанавливать флаг
В оо если флаг то тупой возврат
94 vcv
 
09.10.15
21:10
(93) Таки хочется, что бы некоторые события, которые не связаны с чем-то визуальным и легки по ресурсам, могли выполняться асинхронно.
Но это ладно, техническое проблемы организации очереди событий. Меня несколько ошарашило именно та догадка, что тик таймера умудрился попасть так близко от начала процедуры обработки ожидания. И совершенно непонятно, куда делось время то ли в вызове процедуры ожидания, то ли в выполнении её первых семи строк.
95 Злопчинский
 
09.10.15
21:19
(94)  генери тем же самым формексом внешние события в нужных местах и все
96 vcv
 
09.10.15
21:32
(95) Идея. Нужно попробовать, как визуальные вещи могут работать из обработки внешнего события.
Одно из назначений этой обработки ожидания, открывать всякие модальные и не только окна.
Например, хочется по некой кнопке открывать в журнале своё окно выбора периода просмотра. Перехватываю в журнале с помощью формэкса нажатие клавиши, в процедуре ПриНажатииКнопкиКлавиатуры дёргаею ОткрытьФормуМодально и всё. Глюки и падения 1С. А если запустить таймер и через сотню миллисекунд сделать то же самое ОткрытьФормуМодально, всё работает.
Нужно попробовать обработку внешнего события, спасибо, про него не подумал.
97 vcv
 
09.10.15
21:36
Боюсь не взлетит
<Источник>,<Событие>,<Данные> - строки для передачи в процедуру ОбработкаВнешнегоСобытия().
А мне нужно передавать объекты и контексты :(
98 vcv
 
09.10.15
21:41
Да, не выходит каменный цветок. В обработку внешнего события передаются исключительно строки. И если объект еще можно в виде строки передать, то контекст уже вряд ли.
99 Злопчинский
 
09.10.15
22:01
Это ты какието стльные колдунства делаешь
Ну
Формексом можно получить контекст формы
Попробовать получить контекст активной формы в овс?
100 trdm
 
10.10.15
08:21
(94) > Таки хочется, что бы некоторые события, которые не связаны с чем-то визуальным и легки по ресурсам, могли выполняться асинхронно.

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