Имя: Пароль:
1C
 
Оказывается счетчиком цикла можно управлять внутри цикла?
Ø (Волшебник 19.02.2016 15:22)
0 los_hooliganos
 
19.02.16
09:24
Вот такой код:

    Для Сч = 1 По 10 Цикл
        Сообщить(Сч);
        ГенераторСч = Новый ГенераторСлучайныхЧисел();
        СлучЧисло = ГенераторСч.СлучайноеЧисло(1,10);
        Сообщить(СлучЧисло);
        Если СлучЧисло = Сч Тогда
            Сообщить("сдвигаем!");
            Сч = Сч - 1;
        КонецЕсли;
    КонецЦикла;


Не знал что счетчиком цикла можно управлять внутри цикла. Известная задача удалить по индексу строки таблицы значений можно оказывается решить не только обходом снизу.
1 los_hooliganos
 
19.02.16
09:25
Добавлю: счетчик сдвигается и де-факто остается с новым циклом там же где и был.
2 vicof
 
19.02.16
09:26
Поздравляю, коллега, Вы открыли новую реальность.
3 mistеr
 
19.02.16
09:26
Можно, но не стоит. В случаях, подобных приведенному, лучше использовать цикл Пока.
4 los_hooliganos
 
19.02.16
09:37
(2) А где об этом написано? Скока книжек по 1С не читал не встречал никогда.
5 Dmitry77
 
19.02.16
09:37
Еще можно запросто сделать бесконечный цикл

пока истина цикл


конеццикла;

но делать так не надо.
6 ДенисЧ
 
19.02.16
09:42
(4) А почитай книги по программированию не 1с...
7 eklmn
 
гуру
19.02.16
09:43
(4) "Скока книжек по 1С не читал"
поржал, там вообще ничего нет что связано с пограммированием,
8 los_hooliganos
 
19.02.16
09:44
(5) Такой цикл можно разоравть внутри.
9 eklmn
 
гуру
19.02.16
09:44
+ поэтому 1Сники в большей части не программисты а посмешище
10 los_hooliganos
 
19.02.16
09:44
(6) Какие напремер?
11 ДенисЧ
 
19.02.16
09:45
(10) K&R, например
12 los_hooliganos
 
19.02.16
09:45
(7) Ну ты удивил.
13 los_hooliganos
 
19.02.16
09:45
(11) Что это?
14 ДенисЧ
 
19.02.16
09:46
(13) Классика.
Керниган и Ритчи.
15 los_hooliganos
 
19.02.16
09:47
(14) Ну... я кнута читал, а не K&R
16 DDwe
 
19.02.16
09:48
(15) Звиздеть не мешки ворочать )))
17 DDwe
 
19.02.16
09:49
Представляю какой код пишет человек с такими знаниями.
18 Mikeware
 
19.02.16
09:50
(17) зато прикольно...
19 Alex S D
 
19.02.16
09:50
вспомнил про пятницу) спс ТС)
20 eklmn
 
гуру
19.02.16
09:50
(15) чет бесполезно читал, прерывание цикла это основы изучения циклов
21 los_hooliganos
 
19.02.16
09:51
(20) А ты где в (0) увидел прерывание?
22 DDwe
 
19.02.16
09:52
(20) А кто писал, что он основы изучал?
23 rs_trade
 
19.02.16
09:52
(4) Язык запросов тоже наверное по книжкам 1С учил? Значит не знаешь.
24 Dmitry77
 
19.02.16
09:52
(8) можно конечно, но вот представь случился такой цикл на продуктивной ситеме. Особенно на пример в терминале...

Поэтому про такие циклы, циклы из(0), рекурсии и не рассказывают новичкам.
25 los_hooliganos
 
19.02.16
09:52
Давай зайдем с другой стороны и вспомним классическую задачу: удалять строки в тз. Чет я не видел решений на мисте, которые двигают счетчик.
26 ДенисЧ
 
19.02.16
09:55
(25) А я видел.
27 DDwe
 
19.02.16
09:56
Эти изобретатель великов....
28 DDwe
 
19.02.16
09:57
(27) изобретатели
29 Mikeware
 
19.02.16
10:01
(25) что у вас со зрением?
30 Mikeware
 
19.02.16
10:02
(27) ладно, что колеса не круглые. но почему они перпендикулярны, и не вращаются???
31 DDwe
 
19.02.16
10:05
(30) Потому, что это не колеса.... ну или колеса из параллельной вселенной.. или вообще хз что. Как можно понять, что в голове у изобретателя, когда знаний 0. Его глючит, он пишет.
32 Карупян
 
19.02.16
10:09
Вы открыли новую фичу:
Ваши параметры:
Крутость + 10
Читабельность кода: -100
Скрытые грабли: +1000
33 Bigbro
 
19.02.16
10:10
да ладно вам, ну бывает ведь иногда реально надо счетчик изнутри подправить
ничего страшного, если о своих действиях написать в комментарии рядом с таким циклом.
а вот если не написать - чревато. даже сам забудешь через год что это за хрень и зачем сделано, а уж другой человек и подавно не разберет.
34 Карупян
 
19.02.16
10:12
(33) По минному полю тоже можно пройтись и ничего не задев
35 xxTANATORxx
 
19.02.16
10:13
не, ну что, пятнично
36 spock
 
19.02.16
10:14
От чего восторг? От того, что внутри цикла можно менять значение Сч?
37 Fish
 
19.02.16
10:17
Интересно, что автор откроет для себя следующее из азов программирования?
38 Mikeware
 
19.02.16
10:17
(33) Можно, конечно.
Но правила приличия рекомендуют использовать в таких случаях не счетный цикл, а цикл с условием.
39 eklmn
 
гуру
19.02.16
10:18
(36) детский восторг от детских воспоминаний, циклы, условия, переменные... эххх ах да + пятница
40 Mikeware
 
19.02.16
10:19
(37) а что тут "азы программирования"? то, что "можно менять"? Или то, что он считал, что "нельзя"?
вообще, это зависит от языка (а иногда и от реализации языка).
41 Lama12
 
19.02.16
10:20
(14) Что ж вы ему тяжелые "наркотики рекомендуете"? Можно начать с "128 советов начинающему программисту". Там столько "извращений" рассматривается... Но как ни странно, они до сих пор не устарели.
42 Fish
 
19.02.16
10:21
(40) Работа с циклами - это уже не азы, а верх мастерства? Не знал.
43 mTema32
 
19.02.16
10:23
Млин, а в 1С оказывается есть еще GOTO))) А я и не знал)
ТС, им тоже можно пользоваться, но это в народе "гомнокод".
44 Mikeware
 
19.02.16
10:25
(42) вопрос не в том. вопрос - а что ты считаешь "азами"?
то, что переменную цикла можно менять внутри? так это конкретная реализация языка. Например, в Ада и Модула это на этапе компиляции выясняется и запрещается... а в си - это считается допустимым.
45 Mikeware
 
19.02.16
10:25
(43) даже в какой-то типовой (вродев ЗиК) это использовалось 1 или 2 раза...
46 los_hooliganos
 
19.02.16
10:26
(41) Советы начинающему 1С-нику?
47 Провинциальный 1сник
 
19.02.16
10:26
(8) Вообще, теоретики структурного программирования считают  break и continue таким же злом, как и goto.)
48 DDwe
 
19.02.16
10:26
Действительно и чего только народ не придумает, сто бы пятничную ветку открыть.
49 DDwe
 
19.02.16
10:27
(48) что
50 los_hooliganos
 
19.02.16
10:29
Управления циклами это большое искусство. И поэтому этому надо учится.

Насчет ГоуТу я не знаю. Еще не видел произведений.
51 Mikeware
 
19.02.16
10:30
(47) разве?
я помню только "битву" за право существования счетного цикла... вроде вирт с дейкстрой бились.
52 Лефмихалыч
 
19.02.16
10:31
(0) бобро пожаловать в реальный мир. Следующим шагом ты должен открыть для себя значение модификатора Знач.
53 GROOVY
 
19.02.16
10:33
Я сейчас бомбану!

Послы выхода из цикла переменная счетчик (Сч) остается жива, и она равна последнему значению итератора.

Все, ТС, наверно, в экстазе :)
54 Маратыч
 
19.02.16
10:33
(50) Ага, а рекурсия - знание, доступное лишь Яхве/Аллаху %)

Ну вы, блин, даете (с)
55 Fish
 
19.02.16
10:34
(44) Поясню, для тех кто в танке: работа с циклами в РАЗНЫХ языках - это азы программирования. И не знать, как можно, а как нельзя работать с циклом в том языке, на котором ты пишешь - это имхо верх непрофессионализма.
56 ДенисЧ
 
19.02.16
10:35
(53) А вот в С++ от такого смогли избавиться... )))
57 Провинциальный 1сник
 
19.02.16
10:35
(51) Так фактически break и continue - это и есть goto на предопределенные метки. Или за закрывающую скобку, или перед ней.
58 GROOVY
 
19.02.16
10:35
(56)  Так а там не "переменная-счетчик", а реально итератор.
59 Маратыч
 
19.02.16
10:36
(56) Там итератор.
60 ДенисЧ
 
19.02.16
10:36
(58) (59) с какого перепою?
for (int i = 0; i<10; ++i)
61 Lama12
 
19.02.16
10:39
(46) Нет, именно программисту. Там примеры кода на 6 или 8 языках. Книжка старая, времен когда еще ООП только зарождалось. В фаворе структурное программирование. Но советы, очень даже универсальные. Да и алгоритмы некоторые будут полезны. ;-)
62 los_hooliganos
 
19.02.16
10:41
(61) "Этюды на Бейсике". Оч интересно. Как раз на выходных почитать.
63 dmpl
 
19.02.16
10:43
(4) А где написано, что нельзя? Раз нигде - значит можно ;)
64 dmpl
 
19.02.16
10:45
(33) Если надо править - значит вы просто не тот цикл используете.
65 ObjectRelation Model
 
19.02.16
10:48
(60) это специальное исключение сделали для оператора for
66 ObjectRelation Model
 
19.02.16
10:49
+(65)
ошибка: name lookup of 'i' changed for ISO 'for' scoping
67 dmpl
 
19.02.16
10:50
(60) Если i объявить до цикла - она останется жива и после цикла ;)
68 Mikeware
 
19.02.16
10:56
(57) так фактически и "конец цикла" - без разницы в каком виде - есть безусловный переход...
(53) а по-моему, в Аде - она уничтожается. там вообще "внутри цикла" счетчик "отдельный" - если уже объявлен, то создается новый, "перекрывая" существующую переменную. и исключение при его изменении, если таковое не отловлено н аэтапе компиляции
69 Outlander
 
19.02.16
11:06
(10) епт... для начала можно уделить денек-другой классике :
Дональд Кнут, Искусство программирования в 4 томах..
70 Outlander
 
19.02.16
11:09
параллельно можно полистать Галицину :
"Основы алгоритмизации и программирования"
71 Fish
 
19.02.16
11:09
(68) Не уничтожается. Но счётчик - отдельный.
72 Outlander
 
19.02.16
11:13
потом, ради приколу, можно прочесть
"Что такое Нормализация БД?",
сравнить с типовой торговлей 7.7 у умереть со смеху.
73 ДенисЧ
 
19.02.16
11:15
(72) А потом почитать про оптимизацию БД применением денормализации и воскреснуть от горя осознания, каким ты был необразованным
74 Aleksey
 
19.02.16
11:15
(72) А что не так с нормализации у ТиС?
Конечно не 1 нормальная форма, ну так и 1 форма это мало достижимая.
А вполне себе попадает под определения 3 нормальная форма
75 ДенисЧ
 
19.02.16
11:16
(74) ты порядок путаешь...
1я - это самая примитивная...
76 Outlander
 
19.02.16
11:17
(73) а ссылка есть ? о-о-очень любопытно...
люблю читать.
77 Aleksey
 
19.02.16
11:17
(75) Согласен, давно это было
78 palpetrovich
 
19.02.16
11:17
мой гений дарит вам (цы)  :)
Для Сч = 1 По 2 Цикл
    Сч = 1;
КонецЦикла;
79 Маратыч
 
19.02.16
11:18
(78) Божественно! %)
80 aka AMIGO
 
19.02.16
11:19
И мой (заимствованный) тож дарит :)
Пока 1=1 Цикл
Ы="";
КонецЦикла;
81 igork1966
 
19.02.16
11:20
(0) За такой код прога казнить на месте.
82 Outlander
 
19.02.16
11:20
(80) да... любимая переменная...
или реквизит.
83 Ващета
 
19.02.16
11:23
Кучу кода видел ещё в 7.7 где внутри цикла счетчик меняется:
Пока инд < Кол Цикл
...
инд = инд + 1;
КонецЦикла
84 Мыш
 
19.02.16
11:23
(76) Денормализация: что, зачем и когда?

Денормализация — это процесс достижения компромиссов в нормализованных таблицах посредством намеренного введения избыточности в целях увеличения производительности.

В большинстве случаев необходимость денормализации становится очевидной лишь на этапе проектирования модуля. Другими словами, обычно нельзя принять решение о денормализации на основании одной только модели данных. Учтите — то, что для одного человека полезно, для другого — яд, и решение о денормализации в пользу одного модуля (которое повышает его эффективность и простоту) может иметь пагубные последствия для других модулей (причина этого, как правило, заключается в усложнении обновлений или возникновении конфликтов блокировки). Здесь должен господствовать здравый смысл, и повышение эффективности кода, генерирующего годовой отчет, за счет задач, которые выполняются в диалоговом режиме, грамотным назвать нельзя. Выберите в приложении критичные процессы и принимайте решения о денормализации в основном в пользу этих процессов. Критичные процессы обычно определяют по высокой частоте (т.е. они очень часто выполняются), большому объему (они обрабатывают очень много данных), высокой изменчивости (данные часто меняются) или явному приоритету (пользователи говорят, что они важные).

Конечно, если совершенно другая модель данных позволит превратить 200 часов, необходимых для подготовки годового отчета, в 20 минут, то это веская причина для того, чтобы создавать используемые раз в год таблицы. Но даже такое решение разумно лишь в случае, если есть место на диске и процесс создания таблиц занимает гораздо меньше 200 часов.
85 Провинциальный 1сник
 
19.02.16
11:24
(68) "так фактически и "конец цикла" - без разницы в каком виде - есть безусловный переход"
Неее, у операторных скобках есть структурный смысл, в отличие от перехода)
86 los_hooliganos
 
19.02.16
11:24
(82) Если БД можно поместить в MS SQL значит она уже нормализована.
По другому не бывает, это аксиома.
87 igork1966
 
19.02.16
11:24
(83) Заметь, цикл не for.
88 igork1966
 
19.02.16
11:25
(86) че?  ;-)))
89 ДенисЧ
 
19.02.16
11:27
(86) бред. Полнейший. И очевидное непонимание картины мира.
90 Outlander
 
19.02.16
11:28
де-то высоко в кладовке еще хранится
"Теория реляционных баз данных"...
жалко, достать не могу.
.
это почти как эротика!
91 Outlander
 
19.02.16
11:30
а методы сортировки у Дональда -
просто полный оргазм !
:-))
92 Mikeware
 
19.02.16
11:30
(89) а может, картина мира у него такая? :-)
93 los_hooliganos
 
19.02.16
11:34
Похоже я грипп подхватил, чет глючит меня сегодня.
94 aka AMIGO
 
19.02.16
11:35
(81) (83)

В ТиС (типовой!!) есть ОтчетПоПродажамТМЦ
В этом отчете есть процедура, внутри неё меняется переменная-параметр процы.. Не думаю, что кого-то в фирме 1С надо ставить к стенке из-за этого кода :)

Процедура ВывестиГруппировку(Запрос,Ном)
      
    Если Ном <= КоличествоГруппировок Тогда
        
        НазваниеГруппировки = СписокГруппировок.ПолучитьЗначение(Ном);
....
    Если (какое-то там условие)
        ВывестиГруппировку(Запрос,Ном+1);
...
КонецПроцедуры



(93) выключи монитор.. заразу разносишь по мистянам :)
95 Aceforg
 
19.02.16
11:36
(93) Прикольная фотка в профиле. Что делает девушка?
96 palpetrovich
 
19.02.16
11:38
(93) ты это, не наговаривай на себя... ;)
97 ДенисЧ
 
19.02.16
11:39
(96) В смысле - глючит не только сегодня? )))
98 palpetrovich
 
19.02.16
11:45
(97) не, в смыле лучше лохануться, чем грипом заболеть :)
99 Outlander
 
19.02.16
11:45
и дело не в коде, код - фиг с ним...
дело было в таблицах регистров.
регистр Товары - товары по складам, но без партий
и
регистр Партии - все товары, партии, но без склада!
.
какой там принцип - недублирования и непротиворечивости данных ?
100 palpetrovich
 
19.02.16
11:47
(99) че, нормально
сотко
101 Aleksey
 
19.02.16
11:48
(99) А что не так?
Для получения остатков партии не нужны

А вот с точки зрения ПБУ партии должны храниться в разрезе организации, а не складов (аналогичный пример с 10 счетом в типовой бухгалтери)
102 Ващета
 
19.02.16
11:48
(99) а где регистр партий без складов?
103 Outlander
 
19.02.16
11:49
(101) а АБТ 3.6.3 не помнишь ?
самая нормальная структура...
104 Маратыч
 
19.02.16
11:50
(94) > ВывестиГруппировку(Запрос,Ном+1)

А где тут значение переменной меняется?
105 Outlander
 
19.02.16
11:50
(102) в регистре Партии нету складов !
106 Ващета
 
19.02.16
11:50
+(102) переданные может если только
107 palpetrovich
 
19.02.16
11:51
(105) поправка
не во всяком регистре Партии есть склады :)
108 Ващета
 
19.02.16
11:52
(105) для фифо по идее склад нужен, а для переданных пофиг
109 Outlander
 
19.02.16
11:54
ваще для списания партии склад нужен всегда.
110 Outlander
 
19.02.16
11:56
просто в АБТ 363 регистр был ОДИН!
и товар, и партия и склад!
нак второй огород городить ?
111 Ващета
 
19.02.16
11:56
(109) и я об этом, есть регистры по товарам у нас - тас склад обязательно должен быть, есть регистр партий которые мы передали, там копятся тупо переданные партии
112 Outlander
 
19.02.16
11:58
(108) ну получил ты товар... неважно как.
ты же его куда-то положил ?
или он в воздухе висит ?
113 Outlander
 
19.02.16
11:59
и если у тебя 15 складов...
ты где его искать будешь ?
114 Aleksey
 
19.02.16
12:02
(110) Скорость работы. Скорость получения остатков у чистого регистра выше чем у регистра с партиями
115 Aleksey
 
19.02.16
12:04
(112) Положил, но причем тут себестоимость и партия?
Ты его положил на конкретный склад, который отражается на регистре остатки ТМЦ

Я тебе страшную вещь скажу типовая при перемещении товара не двигает партии
116 palpetrovich
 
19.02.16
12:06
а что, за флуд в тематической ветке по пятницам не наказывают? :)
117 ДенисЧ
 
19.02.16
12:13
(116) А где ты видишь флуд? )
118 1Cancer
 
19.02.16
12:14
(0) это шутка типо? =/
119 Outlander
 
19.02.16
12:14
(114) не у чистого, а у короткого.
Да, скорость в ущерб всем принципам нормализации...
но раз уж есть большой регистр партий -
почему не вписать туда один маленький реквизит/колонку - склад ??
120 Outlander
 
19.02.16
12:16
как в современных конфах 8х ?
есть регистр партии со складами,
и есть регистр товарыНаСкладах (без партий) для скорости ?
121 palpetrovich
 
19.02.16
12:18
(117) тема про цикл, стало-быть про регистры - флуд! ;)
122 Outlander
 
19.02.16
12:19
все, все...
ушол
123 1Cancer
 
19.02.16
12:24
while (!b){
    b=true;
    System.out.println("Управляю");
    Thread.sleep(1000);
while (b){
     b=false;
     System.out.println("Итератором");
     Thread.sleep(1000);
}
}
124 dmpl
 
19.02.16
12:36
(105) Это было сделано специально - чтобы франчи могли заработать на добавлении склада к партиям.
125 palpetrovich
 
19.02.16
12:38
(123) второй while вполне можно заменить на if ;)
126 1Cancer
 
19.02.16
13:14
(125) да действительно, у тса условие, надо на иф =/ просто люблю симметрию :D
127 los_hooliganos
 
19.02.16
13:24
do {
    System.out.println("Управляю");
    Thread.sleep(1000);
do {
     System.out.println("Итератором");
     Thread.sleep(1000);
} while(false);
} while(false);
128 los_hooliganos
 
19.02.16
13:24
(127) вот и так можно
129 Маратыч
 
19.02.16
13:25
(127) На минуточку, а чем ты там управляешь-то?
130 los_hooliganos
 
19.02.16
13:26
(129) командами, которые хотя бы один раз выполнятся.
131 Маратыч
 
19.02.16
13:46
(130) Дык не итератором же.
132 Grekos2
 
19.02.16
13:58
А в управляемых формах тоже можно счетчиком цикла управлять внутри цикла ?
133 GROOVY
 
19.02.16
14:03
(132)  Надо договариваться.
134 ДенисЧ
 
19.02.16
14:04
(133) Только дорого встанет ))
135 Fish
 
19.02.16
14:05
(132) Либо управляешь формами, либо счётчиком. Что-то одно. :)
136 Mikeware
 
19.02.16
14:07
(135) либо формы управляют тобой....
137 palladyi
 
19.02.16
15:21
(0) У 1с есть ГенераторСлучайныхЧисел??? Оо
Как много я еще не знаю... =(((