Имя: Пароль:
1C
1С v8
Бесконечный цикл, зачем?
,
0 JUST4LOL
 
09.03.21
05:39
Где в 1С может использоваться бесконечный цикл и для чего? Можно ли обойтись без него?
65 Волшебник
 
09.03.21
09:28
(62) Сюда можно добавить предварительный подсчёт максимального количества итераций, например, ВсегоЭлементов / РазмерПорции + 1
66 Dzenn
 
гуру
09.03.21
09:29
(63) Не согласен, зависит от реализации. При таком подходе, при обработке элемента, вне зависимости от результата, нужно делать пометку регистр сведений, что данный элемент обработан.
67 Dzenn
 
гуру
09.03.21
09:33
(65) ВсегоЭлементов / РазмерПорции + 1  - это относительный показатель, а выборка "ПЕРВЫЕ 1000", если это точно необработанные - абсолютный показатель. Ну и "ОбработкаПрерыванияПользователя" можно в цикл добавить, если он на клиенте.
68 dmpl
 
09.03.21
09:59
(39) Ну, например, расчет пооперационного расписания, разузлование, регламентированные отчеты. Сделайте поиск по фразе "Пока Истина". В ERP порядка 800 таких конструкций.

(66) У 1С при таком подходе получается зацикливание, если те предположения, из которых они исходили, не выполняются.
69 Fedor-1971
 
09.03.21
10:03
(59) Адепты ООП, по какой-то причине, забывают, что 1С хранит Объектную модель данных в Реляционной БД
и преобразование БД-1С и обратно выполняется автоматически

И как обеспечить эту радость для произвольного класса выдуманного программером? То же дать возможность самому описывать таблицы хранения? Тут уже надо иметь уверенность в высокой квалификации исполнителя, а её то и нет
70 ДенисЧ
 
09.03.21
10:10
(69) Hibernate же эту проблему решил? И Alchemy тоже
Значит, решение существует (с) математик в отеле при пожаре.
71 Dzenn
 
гуру
09.03.21
10:11
(68) В любом языке, а не только в 1С, бесконечный цикл зацикливается, если предположения по его выходу не выполняются ;-)
72 Irbis
 
09.03.21
10:15
(71) И это и есть основное зло такой конструкции. А в умелых руках и хер балалайка
73 Волшебник
 
09.03.21
10:17
(70) Есть обработки и регистры сведений. Не любите нам мозги.
74 ДенисЧ
 
09.03.21
10:19
(73) Как данные обработки сохранить в базе данных? )))
75 dmpl
 
09.03.21
10:22
(74) Через хранилище значения.
76 Fedor-1971
 
09.03.21
10:26
75+ Это если потом с ними не нужно активно работать
Либо положить в регистр сведений, либо запихнуть в Ссылочные объекты (2 или более связанных по некой логике обработки)
77 Исновая
 
09.03.21
10:26
(0) если рабдата меньше дата Тогда не оплачено
78 Волшебник
 
09.03.21
10:32
(74) с помощью менеджера записи
79 fisher
 
09.03.21
10:36
(0) Используется обычно, когда условие выхода проблематично анализировать в начале/конце итерации. Можно заменить на флаги, но это такой же трейдоф как и использование/неиспользование гоуту для выхода из глубокой вложенности.
80 Волшебник
 
09.03.21
10:40
(79) Руки прочь от GOTO!
81 fisher
 
09.03.21
10:54
Необходимость во всяких гоуту и бесконечных циклах появляется редко. Во всяких там стейт-машинах и иже с ними.
82 ДенисЧ
 
09.03.21
10:54
(81) В стейт-машинах переходы (гото) вообще-то не нужны. Там нужен свитч. И паттерн-матчинг
83 Волшебник
 
09.03.21
11:00
(82) switch-case — это тот же goto с выбором метки
84 ДенисЧ
 
09.03.21
11:02
(83) Так и цикл, и если - тот же переход.
Просто подсахаренный.
85 Масянька
 
09.03.21
11:09
Каждый настоящий программист должен в своей жизни минимум один раз написать бесконечный цикл (С)
Ответ: чтобы почувствовать себя настоящим программистом.
86 Волшебник
 
09.03.21
11:11
(85) Языки, в которых нет бесконечных циклов, нельзя считать полноценными. Суть компьютера в том, что он постоянно крутится в бесконечном цикле, ожидая событий от пользователя или клиентов.
87 Irbis
 
09.03.21
11:11
(84) Особенно хорошо это заметно было в программировании микрокалькулятора. Или следующий шаг программы (действие), или переход по какому либо условию.
88 fisher
 
09.03.21
11:12
(82) В общем случае - да. Просто запутанные циклы, из которых может возникнуть потребность "выпрыгивания", чаще возникают в рамках задач, которые требуют и стейт-машин тоже. Такое у меня сложилось ощущение.
89 acht
 
09.03.21
11:21
(88) > Просто запутанные циклы, из которых может возникнуть потребность "выпрыгивания",
А вот нехер писать запутанные циклы, которые можно отрефакторить на отдельные методы с возвратом в нужной точке.
90 Garykom
 
гуру
09.03.21
11:30
(54) Там не доли а десятки %
Просто в платформе 1С бага с обработкой пустых строк и строк комментариев - оно при исполнении циклы по ним крутит
91 fisher
 
09.03.21
11:34
(89) Если это будут абсолютно синтетические методы, единственная задача которых - избавиться от переходов, то большой вопрос - что из этого будет меньшим злом.
92 Garykom
 
гуру
09.03.21
11:36
93 acht
 
09.03.21
11:37
(91) А ты попробуй. Напиши запутанный цикл, а потом разбей его на синтетические методы. Потом отвлекись на денек, вернись и прочитай код. А вот потом уже философствуй про "большой вопрос" и "меньшее зло".
94 dmpl
 
09.03.21
11:43
(81) В ERP без этого никуда. Там даже GOTO используется.
95 fisher
 
09.03.21
11:44
(93) Рад встретить программиста, постигшего абсолютный дзен. А вот у разработчиков джавы не поднялась рука выпилить гоуту из циклов. Не просветлились до твоей стадии.
96 Hmster
 
09.03.21
11:45
Окно в программе это уже по сути бесконечный цикл

//Инициализация
Пока Истина Цикл
   //отработка событий //+проверка на закрытие окна

   //ожидание, чтобы цикл не грузил процессор, и рабочий цикл выполнялся не постоянно, а "фиксированное" количество раз в секунду
КонецЦикла;
//Завершение работы
97 Serg_1960
 
09.03.21
11:50
Погуглил в конфигурации "Пока Истина Цикл" - использовалось около 1500 раз. «И эти люди запрещают ковыряться мне в носу»(с)
98 Кирпич
 
09.03.21
11:51
Так никто и запрещает вроде.
99 Кирпич
 
09.03.21
11:52
не
100 Волшебник
 
09.03.21
11:53
Руки прочь от бесконечных циклов!
101 Масянька
 
09.03.21
11:53
Сто
102 acht
 
09.03.21
11:53
(95) > у разработчиков джавы
А причем тут разработчики языка? Ты еще рассмотри выход из цикла выбрасыванием исключения и сошлись, ну например на Гвидо ван Россума.
103 ДедМорроз
 
09.03.21
11:57
В языке 1с нет цикла с постусловием,поэтому,или извращаться с вводом дополнительной переменной,которую сбрасывают в ложь где-то внутри цикла или условие Истина и выход по Прервать.
С переменной имеет право на существование,когда условие проверяется во вложенном цикле,т.к.там явно Прервать наружу не выведет.
Опять же Пока НЕ Отказ Цикл тоже неплохо смотрится,хотя,по сути та же переменная.

Ну и реально бесконечный цикл это всем нелюбимый GoTo и метка вначале.
104 fisher
 
09.03.21
11:58
(102) Притом, что при разработке джавы не самые глупые люди очень вдумчиво подходили к вопросу, чего бы выбросить лишнего и вредного. И тот же "свободный" гоуту выпилили. А вот в циклах специально оставили с особым синтаксисом. Это я к тому, что вопрос не такой однозначный, как ты пытаешься показать, апеллируя к моей якобы неопытности.
105 Волшебник
 
09.03.21
12:00
(103) О-хо-хо:

~НачалоБесконечногоЦикла:
   //...
   Если УсловиеПрерывания Тогда Перейти ~КонецБесконечногоЦикла; КонецЕсли;
   //...
Перейти ~НачалоБесконечногоЦикла;
~КонецБесконечногоЦикла:
106 Garikk
 
09.03.21
12:01
(103) <это всем нелюбимый GoTo и метка вначале.>
не устано повторять, что goto в данном контексте ничего общего с 'всем нелюбимым goto' не имеет
107 ДедМорроз
 
09.03.21
12:01
Исключения как раз можно имитировать через цикл.
Пока Истина Цикл
Если Исключение Тогда
  Прервать;
КонецЕсли;
Действие1();
//..
ДействиеВКонце;
Прервать;
КонецЦикла;

На языке 1с выглядит смешно,а в языках,где нет исключений и GoTo вполне себе терпимо
108 Irbis
 
09.03.21
12:02
(103) Цикл с пост условием легко делается копи пастом тела цикла и циклом с предусловием.
109 dmpl
 
09.03.21
12:03
(108) Копи-паста плоха тем, что можно в одной части поменять, а в другой забыть.
110 Irbis
 
09.03.21
12:58
(109) Есть такая бяка, но легко оформляется выделением тела цикла в процедуру. Правится после этого в одном месте.
111 Hmster
 
09.03.21
13:12
Что лучше читается?
Пока Истина Цикл
  Если Условиие_1() Тогда
     Прервать;
  КонецЕсли;
  ...
  Если Условиие_N() Тогда
     Прервать;
  КонецЕсли;  
КонецЦикла;

или

Работаем = Истина;
Пока Работаем Цикл
  Если Условиие_1() Тогда
     Работаем = Ложь;
     Продолжить;
  КонецЕсли;
  ...
  Если Условиие_N() Тогда
     Работаем = Ложь;
     Продолжить;
  КонецЕсли;  
КонецЦикла;
112 Hmster
 
09.03.21
13:14
(110) то еще решение (нынче модно): дробить код на невменяемые процедуры и функции, гонять между ними контекст
113 Irbis
 
09.03.21
13:18
(112) Меня после фортрана ничем не напугаешь. Все эти заморочки по поводу удобочитаемости и идеальности кода не более чем понты.
114 fisher
 
09.03.21
13:23
(113) "Ректальное программирование - путь состоявшегося программиста"? :)
115 Irbis
 
09.03.21
13:29
(114) Я думаю, что тру-программистом я так и не стал. Всё время работал решателем каких-то проблем, по случаю занесло в 1С. Чисто программирование само по себе не особо и интересно.
116 Волшебник
 
09.03.21
13:34
(113) Меня после регулярных выражений PERL тоже ничем не напугаешь.
117 Irbis
 
09.03.21
13:35
(116) Так и название у языка само за себя говорит.
118 novichok79
 
09.03.21
13:48
(69) причем здесь адепты ООП?
действительно было бы удобно иметь структуры с встроенными в них функциями.
неважно как оно называется. сейчас всю логику приходится писать в общих модулях.
и мне кажется, это логичное продолжение развития 1С.
как записывать в базе? а ORM зачем придумано?
в hibernate привязывается к полю аннотацией, то есть через метаданные.
есть внешние источники данных, там используется явная связь поле в метаданных - колонка в базе.
и ничего - справляется.
119 novichok79
 
09.03.21
13:50
(69) квалификация исполнителя?
то есть вы считаете, что выучить базовые принципы ООП и SQL - слишком сложно для обычного 1Сника?
тогда зачем идти в программирование, в принципе?
нет, поскольку 1С - фреймворк (или RAD-система), которая по сути предствляет собой ORM и GUI, это все для чего оно проектировалось. оно это делает и делает это хорошо.
для других целей придуманы ЯП общего назначения, коим 1С не является.
не надо ждать от самосвала скорости болида формулы 1.
120 fisher
 
09.03.21
14:10
(119) Если обычному 1Снику несложно выучить ООП и SQL (и что там еще в нагрузку по вкусу), то какой смысл ему вообще идти в 1С? 1С обслуживают программисты-неудачники. И чем ниже порог входа - тем больше у 1С потенциальных адептов. Отток из 1с специалистов УЖЕ налицо, в связи с увеличением за последние годы доступного спроса на программистов других профилей. А ты его ускорить что ли хочешь? :)
121 Почему 1С
 
09.03.21
14:24
(120) Что то как не очень хочется в джуны из 1с уходить если тебе не до 25 лет.
122 fisher
 
09.03.21
14:26
Хотя, вполне может быть, что 1С пойдет по этому пути (усложнения платформы). Растущая сложность типовых конфигураций и без усложнения платформы значительно поднимает порог входа. Растет качество и размер продуктов, растут требования и ожидания пользователей. Так что и без усложнения платформы "специалистов 1С", способных на серьезную разработку, будет становиться все меньше и меньше. Будет просто постепенно падать спрос на них. Центры разработки будут укрупняться, но их будет становиться меньше. Феномен ранних 1С уже не повторить. Рынок видоизменяется, такого количества "писателей" уже не нужно будет. Так что вполне может статься, что 1С таки плюнет "на доступно и всерьез". Ну, как плюнет. Перестанет слишком крепко этого держаться.
123 laby1
 
09.03.21
14:29
Каждый день после обеда открываешь мисту и так каждый день.
124 fisher
 
09.03.21
14:29
(121) Добро пожаловать в клуб :)
125 Малыш Джон
 
09.03.21
14:34
(111) ну цикл по-человечески преобразовывать, тогда и выглядеть прилично будет:

Работаем = Истина;

Пока Работаем Цикл
  Если Работаем Тогда
     //делаем свое дело
     Работаем = Условие_1();    
  КонецЕсли;
  ...
  Если Работаем Тогда
     //делаем свое дело
     Работаем = Условие_N();    
  КонецЕсли;  
КонецЦикла;
126 novichok79
 
09.03.21
14:39
(121) даже если вам немного за 30 ... (с) поющие сиськи.
если вы только в 1С можете, то да, вам только в джуны.
если вы в курсе каких-то общих технологий, типа всяких MQ систем, Hadoop'а, что-то помните по алгоритмам, и даже пилите всякие домашние проектики, то почему сразу джун?
хожу иногда на собесы по Java, на последнем предлагали учить Kotlin :)
127 novichok79
 
09.03.21
14:41
(120) ладно, я - самоучка, но ведь ООП и SQL в этих ваших институтах учат.
дело в другом, многие в регионах в начале 10-х (мой случай) идут в 1С, просто потому что других вакух нет.
128 novichok79
 
09.03.21
14:43
(127) других вакух со словом "программист", имею в виду.
129 dmpl
 
09.03.21
15:01
(118) Модуль менеджера чем не катит?

(119) Если он это выучит - он будет стоить дороже. Что неинтересно ни 1С, ни ее клиентам.
130 fisher
 
09.03.21
15:02
(128) Ну вот основная масса "старой волны" в 1С так и попала. Либо вакух было мало, либо вообще не со стороны ИТ пришли. А сейчас ситуация другая. Совсем со стороны заходить становится все сложнее, вакух  (не одинэсных) становится больше (рынок все еще перегрет и остывать пока не спешит) и выбор именно 1С со стороны айтишников стал значительно менее оправдан. Да и не знать тот же английский сейчас уже становится попросту неприличным для образованного человека.
131 novichok79
 
09.03.21
15:03
(129) модуль менеджера - это разновидность общего модуля, имхо.
а так да, обычно туда тащу функционал тесно связанный с объектом МД.
какая разница, что интересно 1С?
чем больше я знаю того, что умеют немногие, тем больше я стою.
это универсальная формула, что в Россиюшке, что за ее пределами.
132 novichok79
 
09.03.21
15:08
(122) для меня кроме инкапсуляции, еще один плюс в пользу ООП, в том, что если бы были контракты методов, описанные до имплементации, то проблем после обновлений, когда меняется порядок или типа параметров в функции общего модуля, было бы меньше.
в остальном, можно и без ООП.
133 Александр Б
 
09.03.21
15:14
(0) для паузы.
134 antgrom
 
09.03.21
15:18
(0) Считаю что выполнение регламентных заданий - это своего рода бесконечный цикл.
Вы ставите расписание например "выполнять 1 раз в день" и не ставите "дату окончания"
Получается что этот цикл - бесконечный ?
135 fisher
 
09.03.21
15:29
(132) Тут еще вопрос - что понимать под "ООП". ООП как в плюсах и джаве - фактически уже ископаемое и так больше не носят (в более свежих языках). В том же golang реализованы более прикольные концепции, которые позволяют не имея классов как таковых использовать и инкапсуляцию и контракты, давая при этом гораздо больше гибкости и избавляя от лишних приседаний.
136 Garikk
 
09.03.21
15:30
(135) вот уж в голанг извратились конечно, очень я сомневаюсь что они правильным путем пошли с неявными интерфейсами
137 Garikk
 
09.03.21
15:32
вообще я уже видел два примера когда 'ненужно и перегружено' выливается 'а теперь имеющимися костылями мы будем делать почти как в яве'...я уже и с питоном и с голангом с этим сталкивался, когда проект разрастается
138 Почему 1С
 
09.03.21
15:32
(132) Ну если мне когда то и не хватало ОПП в 1С то это наследования, это решилось вводом расширений конфигурации. Полиморфизм можно реализовать, инкапсуляция никогда особо не впечатляла как принцип, можно его придерживаться и без реализации этого принципа в яп. А контракты так это вообще не ООП, хотя честно признаюсь встретил их в Котлине, и не понял для чего они могут понадобится.
139 fisher
 
09.03.21
15:38
(136) Ты про утиную типизацию интерфейсов? ИМХО, гениальная штука. Куча приседаний в классическом ООП и ряд многострадальных костылей называемых "шаблонами проектирования" - только из-за того, что там в этом месте строгая типизация через классы.
(137) Интересно. А можно поподробнее про костыли типизации в голанге на больших проектах. Питон - понятно. Но в голанге же строгая статическая типизация?
140 Garikk
 
09.03.21
15:41
(139) <ИМХО, гениальная штука.>
гениальная штука скомпилить запуск ядерной ракеты вместо открывания двери только потому что у них интерфейс void open() ?

За это надо руки ноги и еще чтото отрывать

(139) я не про типизацию в голанге, а в том что выкинутое ненужное, начинают обратно придумывать...теже исключения многострадальные
141 Garikk
 
09.03.21
15:41
(140) *и не надо про тесты, тесты у нас в отрасли пишутся через одно место, в т.ч. и в ракетной технике
142 ДенисЧ
 
09.03.21
15:42
(139) утиная типизация в современном с++ это нечто...
auto a: "тут бешеная цепочка темплейтов"
И без отладчика фиг поймёшь, а что туда вывелось...

Мне кажется - это уже не то что перебор...
143 Волшебник
 
09.03.21
15:42
(138) Наследование уже неактуально. Это была генетическая пародия. В моду входит компоновка.
144 ДенисЧ
 
09.03.21
15:43
(141) "в т.ч. и в ракетной технике"
Ага.. То бак сомнётся от внешнего (!) давления, то двигателю топлива не хватит...
145 ДенисЧ
 
09.03.21
15:43
(143) компоновка? Имени Бориса Георгиевича?
146 fisher
 
09.03.21
15:44
(140) Не, ну возможность подсунуть ненадлежащий метод удовлетворяющий интерфейсу - это однозначно меньшее зло.
(145) Композиция, вероятно, имелась в виду.
147 Garikk
 
09.03.21
15:44
(146) ничесе меньшее...когда только в рантайме всё рухнет и хорошо если не на голову
148 Garikk
 
09.03.21
15:45
и всё ради чего? ради того чтобы 'писанины поменьше'
149 Почему 1С
 
09.03.21
15:48
(143) А как композицией переопределить скажем проведение документа на поддержке?
150 fisher
 
09.03.21
15:49
(147) Профит уж очень велик. А это прогу нужно серьезно накосячить с закрытыми глазами и не используя даже юнит-тестов. Зато никакой головной боли со всякими адаптерами и "чужими" классами.
151 Irbis
 
09.03.21
15:57
Походу зациклилась тема
152 fisher
 
09.03.21
15:57
(148) Так в том-то и беда, что в классическом ООП обвязка хоронит под собой бизнес-логику и код становится сложнее и грязнее. За что все скриптовые языки и любят (пока проекты небольшие). В голанге, ИМХО, смогли достигнуть отличного компромисса. Минимум писанины при статической строгой типизации компилируемого языка.
153 Garikk
 
09.03.21
16:49
(150) <А это прогу нужно серьезно накосячить с закрытыми глазами и не используя даже юнит-тестов.>
тоесть надо работать как обычно в подавляющем большинстве проектов, ага

за что я люблю яву, большая часть косяков отваливается на этапе компиляции.

а тесты...эх тесты, когда я в крупной конторе работал околобанковской, тестов у нас вообще не было, в других проектов процентов 80 было покрытия, сейчас процентов 60..

так что пусть уж лучше язык следить если тимлиды не могут
154 fisher
 
09.03.21
17:41
(153) Ну, такое. Аргумент понятен. Но наши оценки все равно разнятся. Возможно, если бы я был ленивым синьором на проекте, где лемминги пилят фичи, я бы тоже топил за джаву как за чуток более "леммингоустойчивый" инструмент "из коробки".
155 brainguard
 
09.03.21
20:08
(0) Например, надо написать программу:
"всех впускать, никого не выпускать"
156 brainguard
 
09.03.21
20:21
(86) Полноценным языком считается язык, обладающий полнотой по Тьюрингу. А это значит, что на этом языке можно написать машину Тьюринга. А это, в свою очередь, значит, что нет способа заранее определить остановится эта машина или нет
157 dmpl
 
09.03.21
21:42
(131) Ну так 1С не нужно, чтобы для сопровождения ее кода требовались уникумы. И бизнесу это тоже не нужно. Поэтому как-то решать общие задачи должен уметь даже тот, кто на джуна не тянет.
158 Волшебник
 
09.03.21
21:49
(156) На машине Тьюринга далеко не уедешь...
159 ViSo76
 
10.03.21
00:30
(95) Есть варианты, к примеру множественные вложенные циклы,где go to оправдан, что бы вывалиться из всех циклов без извращений
160 valerivp
 
10.03.21
03:02
(46) нет лучшего варианта - с фоновым заданием
161 ДенисЧ
 
10.03.21
04:34
(46)
Пауза Пингом
Станет нам гимном
Заданий примеры
Злят нас без меры
Даёшь ооп!
Опять грабли в лоб...

/////

Разлилась ширОко Яуза
ой-да через пинги наша пауза.
162 fisher
 
10.03.21
10:17
(160) Он там в комментах есть. Ну и пауза фоновым заданием годится только для относительно больших пауз. Микропаузы до сих пор приходится бесконечными циклами делать.
163 fisher
 
10.03.21
10:18
Не бесконечными - холостыми, конечно же.
164 Волшебник
 
10.03.21
11:45
Все научились программировать. А дальше-то что?
https://habr.com/ru/company/htmlacademy/blog/546268/