Имя: Пароль:
IT
 
Удалить каждое 3 число
0 Kostyaaa
 
17.07.18
15:10
Подскажите, пожалуйста. мне нужно что бы пользователь ввел ряд чисел от 1 до 30(допустим), и при каждом нажатии кнопки удалялось каждое 3е число. как сделать, ума не приложу. помогите пожалуйста!
32 r_p
 
17.07.18
15:33
(26) Если удалять в первом цикле, то порядок цифр изменится же и мы удалим не то. Не?
33 Tonik992
 
17.07.18
15:33
ТС! Сам поспорил, сам алгоритм и пиши :-)
А мы ответили, что такое на 1С можно сделать.
34 Kostyaaa
 
17.07.18
15:33
(28) в 1с я сперва сам начал делать через оработку, там создал реквизит(строка) и пытался сделать. ничего не вышло
35 bolobol
 
17.07.18
15:37
Не смог ввести числа от 1 до 30 ?
36 Timon1405
 
17.07.18
15:39
Коллеги, зрите в корень,
Друг = злой препод, который не проставляет зачет
37 Kostyaaa
 
17.07.18
15:40
(35) не смог сделать, что бы программа удаляла их, и удаленные сразу удаляла в строке
38 Kostyaaa
 
17.07.18
15:40
(36) я уже 3 года работаю электриком, 1с хобби)
и сессия в июле не идет)
39 Tonik992
 
17.07.18
15:41
(37) Значит вы проиграли спор :-)
40 DeeK
 
17.07.18
15:44
Сч = ТабличнаяЧасть1.Количество();
    Пока Сч > 0 цикл
        Если Цел(Сч / 3) = Сч/3 тогда
            ТабличнаяЧасть1.Удалить(Сч-1);
        КонецЕсли;
        Сч = Сч - 1;
    КонецЦикла;
41 Asmody
 
17.07.18
15:44
В типовой ERP точно должно быть.
Или писать ВК.
42 Tonik992
 
17.07.18
15:46
(41) рулетка при закрытии месяца?
43 Малыш Джон
 
17.07.18
15:47
в ERP точно такая функция есть, сам видел

ОбщегоНазначения.УдалитьКаждыйТретийЭлемент(Строка);
44 Asmody
 
17.07.18
15:49
(43) ОбщегоНазначенияКлиентСерверПереопределяемый.УдалитьКаждыйТретийЭлемент(Строка);
45 r_p
 
17.07.18
15:49
(40) легче сч%3=0
46 Малыш Джон
 
17.07.18
15:49
причем тянется она - с самых первых дней 1С. Сам БГ однажды пророчески сказал: "Настанет день и придет человек, называемый Константин, и понадобится ему такая функция, чтоб перед другом не оплошать". И вот. Как в воду глядел.
47 Asmody
 
17.07.18
15:50
(46) Точно! Сейчас глянул - там код ещё шестёрочный.
48 Kostyaaa
 
17.07.18
15:51
(40) это таблица. а мне строку надо...
49 r_p
 
17.07.18
15:51
(40) ну и запусти посмотри, при первом удалении будет сдвиг строк, и дальше удалять будет неправильно. Поэтому надо массив строк для удаления копить.
50 Малыш Джон
 
17.07.18
15:51
(49) с конца ж удаляет-то, как сдвиг повлияет на то, что к началу ближе?
51 r_p
 
17.07.18
15:52
(50) Согласен, ступил
52 Tonik992
 
17.07.18
15:53
Жаль только в ERP есть.
53 Малыш Джон
 
17.07.18
15:53
(48) РазложитьСтрокуВМассивПодстрок() и работай в свое удовольствие
54 Tonik992
 
17.07.18
15:55
(53) Старье ведь :-) Надо СтрРазделить()
55 hawksib
 
17.07.18
15:57
а слабо на 1с сделать игру футбол? вот я понимаю спор, а тут...
56 DeeK
 
17.07.18
15:57
(48) ну разложи строку в таблицу, делов то, хоть кубиком хоть пирамидкой ее уложи, как тебе надо
57 ERWINS
 
17.07.18
15:58
"ВЫБРАТЬ
|    ТЗ.ЧСЛ КАК ЧСЛ,
|    АВТОНОМЕРЗАПИСИ() КАК Поле1
|ПОМЕСТИТЬ ТТ
|ИЗ
|    &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТТ.ЧСЛ КАК ЧСЛ
|ИЗ
|    ТТ КАК ТТ
|ГДЕ
|    (ВЫРАЗИТЬ(ТТ.Поле1 / 3 КАК ЧИСЛО(10, 0))) = ТТ.Поле1 / 3"
58 DeeK
 
17.07.18
15:58
(48) либо драконь строку напрямую, методика та же, только в глазах рябить будет
59 Tonik992
 
17.07.18
15:59
(57) что еще за АВТОНОМЕРЗАПИСИ()  ?
Это не 1С.
60 Kostyaaa
 
17.07.18
16:01
(54) как ее разделить?
61 ERWINS
 
17.07.18
16:02
(59) 1с. только что сделал в конструкторе запросов
62 Малыш Джон
 
17.07.18
16:04
(59) 8.3.13

(57) если данные из ТЗ тащить, там номер строки изначально есть
63 Timon1405
 
17.07.18
16:06
Функция ЫшелПышелНахерВышел(Строка,НомерУдаления)
    СтрокаЧисел=СтрЗаменить(СтрокаЧисел," ",Символы.ПС);
    ТДД = Новый ТекстовыйДокумент;
    ТДД.УстановитьТекст(СтрокаЧисел);
    Для Сч =-ТДД.КоличествоСтрок()  По 1 Цикл
        Если -Сч%НомерУдаления=0 Тогда
            ТДД.УдалитьСтроку(-Сч);
        КонецЕсли;
    КонецЦикла;
    СтрокаЧисел= ТДД.получитьТекст();
    СтрокаЧисел=СтрЗаменить(СтрокаЧисел,Символы.ПС," ");
    Возврат СтрокаЧисел;
КонецФункции
64 fedoss
 
17.07.18
16:10
Вариант с использованием только строк. Можно переделать, чтобы прам из текущей строки символы удалял

КоличествоЗпт = 0; Результат = "";
Для Х = 1 По СтрДлина(ИсходнаяСтрока) Цикл
    ТекСимвол = Сред(ИсходнаяСтрока, Х, 1);
    КоличествоЗпт = КоличествоЗпт + ?(ТекСимвол = ",", 1, 0);
    Если КоличествоЗпт % 3 <> 2 Тогда
        Результат = Результат + Символ;
    КонецЕсли;     
КонецЦикла;
65 dezss
 
17.07.18
16:15
народ, да напишите ему уже обработку)
66 Kostyaaa
 
17.07.18
16:17
(65) да) Пожалуйста...
67 Garykom
 
гуру
17.07.18
16:25
Сегодня же вроде не пятница?
68 Kostyaaa
 
17.07.18
16:25
(67) вторник
69 bolobol
 
17.07.18
16:29
Неправильный студент... Задачей пятницы озадачился уже во вторник...
70 Kostyaaa
 
17.07.18
16:30
(69) завтра зачет)) (Шутка)
71 hawksib
 
17.07.18
16:31
строка = "1921о2392-02=";
счет= 0;
индекссимвола = 0;
для и = по строка.количествосимволов() цикл
индекссимвола++;
счет++;
Если счет = 3 Тогда
строка.Удалить(индекссимвола);
счет = 0;
КонецЦикла;
КонецЕсли;
72 hawksib
 
17.07.18
16:32
идите в .опу
73 Kostyaaa
 
17.07.18
16:33
(71) "СТрока = " что за символы после =?
74 hawksib
 
17.07.18
16:35
(73) это не кириллические и не латинские символы, тебе не понять уже
75 uno-group
 
17.07.18
16:36
Мельчает народ. Раньше забивались, что 1с в шахматы не хуже 2 разряда будет играть, а тут пару чисел из строки не знают как написать. ;(
76 Kostyaaa
 
17.07.18
16:37
(74) чт оже вы с таким упреком...
77 hawksib
 
17.07.18
16:37
(75) я ж говорю, что надо футбол на 1с запрограммировать, вот это спор, а шахматы я и на калькуляторе сделаю
78 Kostyaaa
 
17.07.18
16:39
(77) не работает. ошибки выдает при запуске в отладке
79 Kostyaaa
 
17.07.18
16:43
(77) {Обработка.ЧислаВРяду.Форма.Форма.Форма(21,5)}: Ожидается имя переменной
для <<?>>и = по строка.количествосимволов() цикл  (Проверка: Сервер)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(23,5)}: Неопознанный оператор
счет<<?>>++;  (Проверка: Сервер)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(27,1)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецЦикла;  (Проверка: Сервер)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(28,1)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure')
<<?>>КонецЕсли; (Проверка: Сервер)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(21,5)}: Ожидается имя переменной
для <<?>>и = по строка.количествосимволов() цикл  (Проверка: Тонкий клиент)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(23,5)}: Неопознанный оператор
счет<<?>>++;  (Проверка: Тонкий клиент)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(27,1)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецЦикла;  (Проверка: Тонкий клиент)
{Обработка.ЧислаВРяду.Форма.Форма.Форма(28,1)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure')
<<?>>КонецЕсли; (Проверка: Тонкий клиент)
80 hawksib
 
17.07.18
16:43
(78) ещё б оно работало xD
81 hawksib
 
17.07.18
16:45
(79) пройди до 10 урока на javarush, до 10 уровня бесплатно, а с 1с завязывай, плохое это хобби
82 hawksib
 
17.07.18
16:47
бесполезое
83 Kostyaaa
 
17.07.18
16:47
(81) ты не поможешь?
84 Kigo_Kigo
 
17.07.18
16:48
Процедура Сформировать()
    СчетчикЦикла = 0;
    СтрокаНеНаформе = "";
    Для А = 1 По СтрДлина(СтрокаНаФорме) Цикл
        СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
        СтрокаНаФорме = Сред(СтрокаНаФорме,4);
    КонецЦикла;
    СтрокаНаФорме = СтрокаНеНаформе;
КонецПроцедуры
85 Kigo_Kigo
 
17.07.18
16:49
По факту всегда останется первые 2 символа :)
ПыСы код выше клюшек
86 Kostyaaa
 
17.07.18
16:52
(85) Спасибо. Вот только пишет, что переменная не определена...
87 hawksib
 
17.07.18
16:53
(81) а на сколько вы поспорили?
88 hawksib
 
17.07.18
16:54
(87) ой, (83)
89 Garykom
 
гуру
17.07.18
16:54
(84) В задании просят удалить числа, не просят их сдвигать.

1 2 3 4 5 6 7 8 9
1 2   4 5   7 8
1 2     5   7
1 2         7
90 Kostyaaa
 
17.07.18
16:55
(89) совершенно верно!!!
91 Kigo_Kigo
 
17.07.18
16:56
(89) Да не сдвигайте, лепите туда пробел :)
92 Kostyaaa
 
17.07.18
16:56
(91) не работает у меня в общем...(((
93 Garykom
 
гуру
17.07.18
16:57
(91) Числа до 30, иногда придется лепить два пробела
94 hawksib
 
17.07.18
16:58
блин, ну вот реально, половина форума знает, что сделать можно, просто не дает рабочий код, потому что задача - шлак. вопрос, на сколько денег спор? готов дать код за 5$, если работать не будет, сделаю кэшбэк
95 Kigo_Kigo
 
17.07.18
16:59
(92) Я же сказал, что это код для 7.7
96 Kostyaaa
 
17.07.18
17:01
(94) с чего вы взяли, что спор на деньги? мы спорили на то что, кто проиграет побежит 10км.
97 hawksib
 
17.07.18
17:03
(96) и в чем выгода победителя? я каждый день по 10 км бегаю, при этом ни с кем не спорю
98 dezss
 
17.07.18
17:03
(96) ну вот...тогда вопрос другой, сколько ты готов заплатить, чтобы не бежать 10 км?))))
99 Kigo_Kigo
 
17.07.18
17:03
(89) Читаем задание
"и при каждом нажатии кнопки удалялось каждое 3е число"
в моем пониманиее удалить, это удалить
100 hawksib
 
17.07.18
17:07
в общем, коллективным голосованием думаю надо решить, что бы оба спорщика бежали по 100 км. и факт пробежки выложили на youtube. я за. Здесь голосуем или на change петицию будем писать?
101 Kostyaaa
 
17.07.18
17:13
(98) я изначально хотел выйграть этот спор, и побежать с ним
102 bolobol
 
17.07.18
17:23
(101) Это делается не так: программа там - беги, проверяй
103 bolobol
 
17.07.18
17:24
Хоть сдвигай, хоть не сдвигай - всё равно получишь х... не подходит, короче - два числа останутся, первых два числа.
104 dezss
 
17.07.18
17:25
(103) это если много раз нажать.
а если один раз, то будет больше 2-х чисел..
105 Tonik992
 
17.07.18
17:28
(104) на самом деле можно запилить универсальную удалялку каждого третьего числа..
Добавить вторую кнопку которая бы добавляла случайное число в каждое удаленное третье число.
И с этой обработкой потом на собеседование.
106 Lama12
 
17.07.18
18:02
(101) Да нету спора. Хватит уже тут всех за идиотов считать. Не дадут тебе готового решения. Точнее его дадут, но не готовое, а с ошибками. Ошибки будут сделаны специально что б понять что ты ничего не умеешь в 1С. Причем ошибки будут примитивные, но ты их исправит не сможешь, т.к. ты вообще в 1С ничего не смыслишь.
107 Lama12
 
17.07.18
18:03
(101) Врут только глупые люди (с).
108 hawksib
 
17.07.18
18:07
(106) не в 1с, а в программировании ниче не смыслит он, ибо он электрик
109 hawksib
 
17.07.18
18:07
1С ТУТ НИ ПРИ ЧЕМ
110 Lama12
 
17.07.18
18:08
(108) Согласен.
111 hawksib
 
17.07.18
18:12
(110) у меня отец старший электромеханик а мама программист, оба уже на пенсии, мама думаю голову поломает, но решит, а папа почти сразу ответ даст
112 Dotoshin
 
17.07.18
18:13
(108) Программист-электрик? Коллекция пополняется?
Интересно кто следующий?
113 Lama12
 
17.07.18
18:31
(112) Ой да ладно. Я тоже программист-электромеханик. :-) Только второе образование как-то связано с информатикой.
114 Ching Woo
 
17.07.18
19:20
(12) Жаль тебя огорчать, но твой друг выиграл спор. В 1С такого нельзя сделать.
115 Ching Woo
 
17.07.18
19:22
После первого нажатия удалится только одно число - 3-е.
Дальше сколько ни нажимай, ничего не изменится, потому что удалять нечего, 3-го числа больше нет.
116 ColonelAp4u
 
17.07.18
20:17
(84) твой код рабочий строго если строка "123456789"
117 ColonelAp4u
 
17.07.18
20:18
для двухзначных числе твой алгоритм не подойдет.
118 Kostyaaa
 
17.07.18
21:12
Спасибо. Помогли... не знаю как благодарить.
119 dezss
 
18.07.18
08:39
(118) просто не надо обманывать друзей, оно того не стоит...
не можешь сам, даже с подсказками, беги 10 км...
120 Segate
 
18.07.18
08:59
Функция УдалитьКаждыйNэлемент(Строка, разделитель, n)

МассивЭлементов = стрРазделить(Строка, разделитель);

Для каждого индекс = 0 по массивЭлементов.Количество()-1 цикл
Если Индекс%n = 0 тогда
Продолжить;
Конецесли;

Строка = Строка+Разделитель+МассивЭлементов[индекс];

Конеццикла
Возврат строка;
Конецфункции

Я думаю как то так должно работать.Но с тебя 10км
121 dezss
 
18.07.18
09:06
(120) ага...тока ему еще надо реквизит на форме и команду, да еще и вызов твоей функции определить...в общем, готовую обработку...
так что не в коня корм...
122 Segate
 
18.07.18
09:08
(120) ууу, ну это же надо целый мануал в интернете найти!
123 Kigo_Kigo
 
18.07.18
09:45
(116) С какого перепугу?
он рабочий для лубой строки, хоть для"рсмдшывкрдывгаритдлывагритдыыварпдлыюваортиыд"
но результат всегда будет
"рс"
другое дело если в задании проходить с начало - слева на право строку, потом с право налево
124 ColonelAp4u
 
18.07.18
17:50
(123) Я сегодня заморочился исходя из твоего кода и что цифры в строке будут строго вот так расположены "123456789101112131415161718192021222324252627282930" допилил обход циклов, лев 2 и сред 4 не сработает на двухзначных цифрах, можешь проверить просто при первом проходе твоего кода  1 2 4 5 7 8 10 12 а это уже не правильно
125 ColonelAp4u
 
18.07.18
17:52
12 должна была исчезнуть так как он взял лев 2  10 и отрезал 4 символа 1011 и начал с 12, дальше думаю ты понимаешь что вся последовательность нарушена будет.
126 ColonelAp4u
 
18.07.18
17:54
ТС если в падлу бежать скину код)
127 Kigo_Kigo
 
18.07.18
17:58
(125) В таком случае - если число, а не сивол, как таковой, должен быть отделено каким то разделителем, а если его нет, как понять что 12 один и два, а не 12-двенадцать?
128 ColonelAp4u
 
18.07.18
18:22
Перем Один;
Перем Два;
Перем Три;
Перем Четыре;
Перем ВсеПоследние;

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    СчетчикЦикла = 0;
    СтрокаНеНаформе = "";
    Для А = 1 По СтрДлина(СтрокаНаФорме) Цикл
        Если Один Тогда
            Если А = 4 ИЛИ А = 6 ИЛИ А = 8 ИЛИ А = 10 ИЛИ А = 12 ИЛИ А = 14 ИЛИ А = 16 ИЛИ А = 18 ИЛИ А = 20  Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,3);
            ИначеЕсли А = 5 ИЛИ А = 7 ИЛИ А = 9 ИЛИ А = 11 ИЛИ А = 13 ИЛИ А = 15 ИЛИ А = 17 ИЛИ А = 19  Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,5);
            Иначе
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,4);
            КонецЕсли;
        ИначеЕсли Два тогда
            Если А = 3 ИЛИ А = 5 ИЛИ А = 7 ИЛИ А = 9 ИЛИ А = 11 ИЛИ А = 13 ИЛИ А = 15 ИЛИ А = 17 ИЛИ А = 19  Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,3);
            ИначеЕсли А = 4 ИЛИ А = 6 ИЛИ А = 8 ИЛИ А = 10 ИЛИ А = 12 ИЛИ А = 14 ИЛИ А = 16 ИЛИ А = 18 ИЛИ А = 20  Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,5);
            Иначе
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,4);
            КонецЕсли;
        ИначеЕсли Три Тогда
            Если А = 2 Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,3);
                СтрокаНаФорме = Сред(СтрокаНаФорме,6);
            ИначеЕсли  А >= 3  Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,4);
                СтрокаНаФорме = Сред(СтрокаНаФорме,7);
            Иначе
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,4);
            КонецЕсли;
        ИначеЕсли Четыре Тогда
            Если А >= 2 Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,4);
                СтрокаНаФорме = Сред(СтрокаНаФорме,7);
            Иначе
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,4);
            КонецЕсли;            
        ИначеЕсли ВсеПоследние Тогда
            Если А >= 2 Тогда
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,4);
                СтрокаНаФорме = Сред(СтрокаНаФорме,7);
            Иначе
                СтрокаНеНаформе = СтрокаНеНаформе + Лев(СтрокаНаФорме,2);
                СтрокаНаФорме = Сред(СтрокаНаФорме,5);
            КонецЕсли;            
        КонецЕсли;
    КонецЦикла;
    
    Если Один Тогда
        Один = Ложь;
        Два = Истина;
    ИначеЕсли Два Тогда
        Два = Ложь;
        Три = Истина;
    ИначеЕсли Два Тогда
        Два = Ложь;
        Три = Истина;
    ИначеЕсли Три Тогда
        Три = Ложь;
        Четыре = Истина;
    ИначеЕсли Четыре Тогда
        Четыре = Ложь;
        ВсеПоследние = Истина;
    КонецЕсли;    
    
    СтрокаНаФорме = СтрокаНеНаформе;
    
КонецПроцедуры

Процедура ПриОткрытии()
    
    СтрокаНаФорме = "123456789101112131415161718192021222324252627282930";
    
КонецПроцедуры

Один = Истина;
Два = Ложь;
Три = Ложь;
Четыре = Ложь;
ВсеПоследние = Ложь;;
129 ColonelAp4u
 
18.07.18
18:22
(127) Вставь код в обработку на 8 и получишь результат
130 ColonelAp4u
 
18.07.18
18:23
По другому сделать вариков нет.
131 ColonelAp4u
 
18.07.18
18:25
Один Два Три Четыре ВсеПоследние это нажатие кнопки выполнить
Закон Брукера: Даже маленькая практика стоит большой теории.