Вход | Регистрация
 

Гуру тест про удаление контрагентов в браузере, можно задавать на собесах.

↓ [Волшебник, 08.04.20 - 16:20]
Гуру тест про удаление контрагентов в браузере, можно задавать на собесах.
Я
   Гений 1С
 
08.04.20 - 15:54
Итак, задача.
В базе есть неизвестное количество контрагентов.
К базе можно выполнять только один вид запроса:
Показать страницу номер N контрагентов (на каждой странице показывается 25 контрагентов).

Запрос выдает количество контрагентов на странице.

Можно выполнить команду "Удалить контрагентов на текущей странице".

Есть один момент - некоторые контрагенты не могут быть удалены. Соответственно, при выдаче команды удаления они останутся и не будут удалены.

Вопрос: Как оптимально выполнить удаление тех контрагентов, которых можно удалить.
   Ёпрст
 
1 - 08.04.20 - 16:00
(0) выполнить  команду удалитьВсехКогоМожно же..
   Aleksey
 
2 - 08.04.20 - 16:01
в браузере нет контрагентов
   ДенисЧ
 
3 - 08.04.20 - 16:01
Если мне такой вопрос зададут на собеседовании - я поинтересуюсь, давно ли вопрошающий был у врача.

ЗЫ. Это же относится и к ТС.
   Гений 1С
 
4 - 08.04.20 - 16:02
(1) (2) (3)  че, салабоны, не работает соображалка? ;-)
   Гений 1С
 
5 - 08.04.20 - 16:03
(2) это я счас как раз решал проблему удаления всех контрагентов в базе books.zoho.com, столкнулся, там аккурат по 25 можно удалять и опять же некоторые не удаляются. ггг.
   ДенисЧ
 
7 - 08.04.20 - 16:05
(5) В какой-то интернет-помойке решать проблему, которая в 1с решается 3мя строчками кода - как-то фу.
   1Снеговик
 
8 - 08.04.20 - 16:07
(0) если ты не можешь проверить сколько на странице осталось после удаления, то никак.
А так, удаляешь всех на 1 странице, как только количество перестает уменьшаться переходишь на следующую.
   PR
 
9 - 08.04.20 - 16:08
Большинство таких специалыстов базовых вещей не умеет (даже не технического плана), зато думают, что их супергуру делает то, что они знают, как в запросе строку превратить в число
Удивляются потом, почему им больше сотки никто не предлагает и кроме как в ларек не берут
   PR
 
10 - 08.04.20 - 16:10
(4) Даже вопрос "Как сделать внешнюю печатную форму минимальной кровью, чтобы она не отваливалась при изменении типовой конфы" и то более насущный, чем твой
   PR
 
11 - 08.04.20 - 16:12
Это не гуру-тест, это тест на бесполезных задротов, оторванных от жизни
   МимохожийОднако
 
12 - 08.04.20 - 16:13
Один дурак может задать столько вопросов, что и сто мудрецов не ответят.
   dezss
 
13 - 08.04.20 - 16:23
Ну кто же еще мог подобный вопрос задать на мисте. Конечно же наш ТС.
   Lama12
 
14 - 08.04.20 - 16:35
(0) Так, с конца. Нет?
   Garikk
 
15 - 08.04.20 - 16:39
(0)
если это обычный rest, у него скорее всего на запрос несуществующей страницы - отдается последняя - геморрой что надо вычислять макс-число страниц
есть ли в выдаче списка контрагентов сортировка - если нет - задача решаема за просто адское количество времени потому что всевремя будет непредсказуемо менятся список контрагентов на страницах и невозмодно узнать - удалился ли контрагент или нет
   Garikk
 
16 - 08.04.20 - 16:39
(15) +не перебирая все страницы
   Гений 1С
 
17 - 08.04.20 - 17:13
(14) подробнее. Как.
(15) количество страниц получить нельзя, собес не прошел, не умеешь читать условие.
(8) можно, прикинь
   Гений 1С
 
18 - 08.04.20 - 17:13
(16) есть красивое решение
   Гений 1С
 
19 - 08.04.20 - 17:14
(11) в микрософт любят такое давать. Типа сколько бензозаправок в москве
   Ботаник Гарден Меран
 
20 - 08.04.20 - 17:17
(19)
Москва в США маленький город, 23700 жителей.
От 5 до 10 заправок.
Не умеешь ты, гуру, правильные задачи находить, всё г из ларьков тащишь.
   Гений 1С
 
21 - 08.04.20 - 17:24
(20) да норм задача, чисто на алгоритмику. Нехай думают, корифеи.. А то не верят, что я Гений 1С
   Ns33
 
22 - 08.04.20 - 17:26
Бесконечно гонять цикл: удалять контрагентов, начиная с последней страницы и до первой.
Условие выхода: за всю переборку (от конца до начала) не поменялся номер последней страницы и кво контрагентов на ней; ибо будут копиться неудаляемые контрагенты, и удаление такой страницы ничего не изменит.
   Ns33
 
23 - 08.04.20 - 17:52
(22) Дополнение: т.к. начиная с первой страницы будут копиться страницы, заполненные неудаляемыми контрагентами, то вводим счетчик, хранящий номер последней забитой неудаляемыми контрагентами страницы, и цикл по страницам будет идти от конца до этого счетчика.
   Гений 1С
 
24 - 08.04.20 - 18:00
(22) что такое "последняя страница", как ты ее найдешь.
   Гений 1С
 
25 - 08.04.20 - 18:01
(23) что такое неудаляемые контрагенты? Ты можешь получить только количество контрагентов на странице.
   experimentator76
 
26 - 08.04.20 - 18:12
(7) а в фузине вообще - одной строкой :)
   Ns33
 
27 - 08.04.20 - 18:14
(24) ну получается перебором всех страниц, до тех пор, пока кво контрагентов на этой странице будет равно 0.
(25) "некоторые контрагенты не могут быть удалены". Такие контрагенты постепенно будут скапливаться, начиная с 0-й страницы и вся страница будет забита ими. При удалении контрагентов на такой странице, ничего не изменится, а именно: последняя страница останется последней и кво контрагентов на ней (последней) не изменится.
   experimentator76
 
28 - 08.04.20 - 18:16
(0) Хитрый способ. Стать путиным. Приказать контрагентам и они удалятся.
   experimentator76
 
29 - 08.04.20 - 18:18
(28) ой. этот способ уже кто-то использует.
   Гений 1С
 
30 - 08.04.20 - 18:31
(27) подробнее... дьявол в деталях
 
 Рекламное место пустует
   Гений 1С
 
31 - 08.04.20 - 19:49
   Garykom
 
32 - 08.04.20 - 20:50
(0)
НомерСтраницы = 0;
КоличествоКонтрагентов = 25;
Пока КоличествоКонтрагентов>0 Цикл
    НомерСтраницы = НомерСтраницы + 1;
    КоличествоКонтрагентов = ПоказатьСтраницу(НомерСтраницы);
    УдалитьКонтрагентовНаТекущейСтранице(НомерСтраницы);
КонецЦикла;
Пока НомерСтраницы>=1 Цикл
    НомерСтраницы = НомерСтраницы - 1;
    КоличествоКонтрагентов = ПоказатьСтраницу(НомерСтраницы);
    УдалитьКонтрагентовНаТекущейСтранице(НомерСтраницы);
КонецЦикла;

   Гений 1С
 
33 - 08.04.20 - 22:17
(32) умница. Метод туда-обратно или хоббит. Именно в этом фишка задачи
   Гений 1С
 
34 - 09.04.20 - 17:57
(32) Хотя в походе назад ты идешь до первой страницы, а в идеале если после удаления текущей страницы осталось столько же сколько и было, прерываем.
   Гений 1С
 
35 - 09.04.20 - 18:02
Что-то типа этого:

НомерСтраницы = 0;

Пока истина Цикл
    НомерСтраницы = НомерСтраницы + 1;
    КоличествоКонтрагентов = ПоказатьСтраницу(НомерСтраницы);
    Если КоличествоКонтрагентов = 0 Тогда
        Прервать;
    КонецЕсли;
    УдалитьКонтрагентовНаТекущейСтранице(НомерСтраницы);
КонецЦикла;

Пока истина Цикл
    ПредКоличествоКонтрагентов = КоличествоКонтрагентов;
    КоличествоКонтрагентов = ПоказатьСтраницу(НомерСтраницы);
    Если ПредКоличествоКонтрагентов = КоличествоКонтрагентов И КоличествоКонтрагентов <> 0 Тогда
        Прервать;
    КонецЕсли;
    Если КоличествоКонтрагентов = 0 Тогда
        НомерСтраницы = НомерСтраницы - 1;
        Если НомерСтраницы = 0 Тогда
            Прервать;
        КонецЕсли;
        Продолжить;
    КонецЕсли;
    УдалитьКонтрагентовНаТекущейСтранице(НомерСтраницы);
КонецЦикла;


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.