| 
    
        
     
     | 
    
  | 
v7: Пометка на удаление. | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        progaoff    
     10.07.18 
            ✎
    11:09 
 | 
         
        Есть таблица значений, в ней отображены элементы справочника, есть необходимость, удалять записи из таблицы, но и при этом помечать на удаление элемент справочника, подскажите что ни будь по этому поводу.     
         | 
|||
| 
    1
    
        1Сергей    
     10.07.18 
            ✎
    11:15 
 | 
         
        (0) эм... ну, надо взять и сделать. Что тут подсказывать?     
         | 
|||
| 
    2
    
        progaoff    
     10.07.18 
            ✎
    11:21 
 | 
         
        (1) да ладно?)     
         | 
|||
| 
    3
    
        Владимир1С    
     10.07.18 
            ✎
    11:22 
 | 
         
        (0)Внимательно читаем синтаксис помощник.     
         | 
|||
| 
    4
    
        vladko    
     10.07.18 
            ✎
    11:44 
 | 
         
        (0) ничего сложного:
 
        Спр = СоздатьОбъект("Справочник.Контрагенты"); //Перебираем таблицу значений с конца в начало, т.к. надо удалять ненужные строки в ней ТЗконтрагенты.ВыбратьСтроки(); Для н = -ТЗконтрагенты.КоличествоСтрок() по -1 Цикл ТЗконтрагенты.ПолучитьСтрокуПоНомеру(-н); Если <Условие> Тогда Спр.НайтиЭлемент(ТЗконтрагенты.Контрагент); Спр.Удалить(0); ТЗконтрагенты.УдалитьСтроку(); КонецЕсли; КонецЦикла;  | 
|||
| 
    5
    
        progaoff    
     10.07.18 
            ✎
    11:47 
 | 
         
        (4) Спасибо.     
         | 
|||
| 
    6
    
        1Сергей    
     10.07.18 
            ✎
    12:09 
 | 
         
        (4) Вот это зачем:
 
        ТЗконтрагенты.ВыбратьСтроки();  | 
|||
| 
    7
    
        Salimbek    
     10.07.18 
            ✎
    12:28 
 | 
         
        (6) Видимо - по привычке ))) И только потом цикл был переписан, а привычка осталась ))     
         | 
|||
| 
    8
    
        HawkEye    
     10.07.18 
            ✎
    16:47 
 | 
         
        я один не понял, в чем была принципиальная сложность написания кода?     
         | 
|||
| 
    9
    
        uno-group    
     10.07.18 
            ✎
    17:51 
 | 
         
        (8) Предположу, что в обратном обходе ТЗ. если идти в прямом обходе то при удалении строки тз пропускалась следующая за ней строка.     
         | 
|||
| 
    10
    
        Злопчинский    
     10.07.18 
            ✎
    18:03 
 | 
         
        После удаления можно тупо делать ПолучитьСьтрокуПоНомеру(предыдущая строка) или вообще заново иницилизировтаь выборку...     
         | 
|||
| 
    11
    
        Остап Сулейманович    
     10.07.18 
            ✎
    18:07 
 | 
         
        (10) "заново иницилизировтаь выборку" - Феерично.
 
        Особенно если удалить нужно несколько десятков строк.  | 
|||
| 
    12
    
        Базис    
     naïve 
    10.07.18 
            ✎
    18:12 
 | 
         
        (11) Время Злопчинского бесконечно ценней времени сервера. А код простой получается.     
         | 
|||
| 
    13
    
        Остап Сулейманович    
     10.07.18 
            ✎
    18:17 
 | 
         
        (12) Это типа так :
 
        Пока 1=1 Цикл НачатьЗаново = 0; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если <Условие> Тогда ТЗ.УдалитьСтроку(); НачатьЗаново = 1; Прервать; КонецЕсли; КонецЦикла; Если НачатьЗаново = 0 Тогда Прервать; КонецЕсли; КонецЦикла; Нифига себе простой код.  | 
|||
| 
    14
    
        Базис    
     naïve 
    10.07.18 
            ✎
    18:20 
 | 
         
        (13) Метку поставь перед циклом, и никому не говори, "Кто это накодил" (произносится с интонацией воспитателя котёнка).     
         | 
|||
| 
    15
    
        Остап Сулейманович    
     10.07.18 
            ✎
    18:21 
 | 
         
        (14) Птля... За метку я забыл. Сыплю голову пеплом (((     
         | 
|||
| 
    16
    
        Базис    
     naïve 
    10.07.18 
            ✎
    18:29 
 | 
         
        (15) Мне оставь, я посыплю за плохой пример.     
         | 
|||
| 
    17
    
        GreyK    
     10.07.18 
            ✎
    18:30 
 | 
         
        Простенько и без заморочек:
 
        Пока ТЗ.ПолучитьСтроку() = 1 Цикл Пока (ПустоеЗначение(ТЗ.НомерСтроки) = 0) И (здесь условие удаления) Цикл ТЗ.УдалитьСтроку(); КонецЦикла; КонецЦикла;  | 
|||
| 
    18
    
        GreyK    
     10.07.18 
            ✎
    18:33 
 | 
         
        +(17) Пропустил "ТЗ.ВыбратьСтроки();".     
         | 
|||
| 
    19
    
        Djelf    
     10.07.18 
            ✎
    18:36 
 | 
         
        Для смелых - 1sqlite 3.24.0.22
 
        
     | 
|||
| 
    20
    
        Djelf    
     10.07.18 
            ✎
    18:37 
 | 
         
        +(19) Правда без пометки, хрясь и всё!     
         | 
|||
| 
    21
    
        HawkEye    
     10.07.18 
            ✎
    19:30 
 | 
         
        (9) так человек спрашивал как пометить на удаление элемент, а не как удалить строку...  впрочем, кто их поймет этих ЕГЭ-программистов.     
         | 
|||
| 
    22
    
        GreyK    
     10.07.18 
            ✎
    19:35 
 | 
         
        (21) Издеваешься? Пометка на удаление и удаление справочника из ТЗ не сбивает выборку ТЗ.     
         | 
|||
| 
    23
    
        progaoff    
     06.08.18 
            ✎
    12:39 
 | 
         
        (20) нет, так нельзя, (4) получилось что удаляет строку из ТЗ но в справочнике пометку не ставит.     
         | 
|||
| 
    24
    
        Builder    
     06.08.18 
            ✎
    12:48 
 | 
         
        (23) Чего, месяц отлаживал и не удаляет? 
 
        В (4) есть код, который ставит пометку на удаление.  | 
|||
| 
    25
    
        progaoff    
     06.08.18 
            ✎
    12:49 
 | 
         
        (24) Да есть, но толку, ТЗконтрагенты.УдалитьСтроку(); отрабатывает только вот этот метод.     
         | 
|||
| 
    26
    
        Builder    
     06.08.18 
            ✎
    12:51 
 | 
         
        (25) Отладчик открой, там много интересного.
 
        Посмотри что возвращает Спр.НайтиЭлемент(ТЗконтрагенты.Контрагент);  | 
|||
| 
    27
    
        Builder    
     06.08.18 
            ✎
    12:52 
 | 
         
        (25) Что то мне подсказывает что ТЗконтрагенты.Контрагент - это не элемент справочника, а строка.     
         | 
|||
| 
    28
    
        progaoff    
     06.08.18 
            ✎
    13:01 
 | 
         
        (26) 0     
         | 
|||
| 
    29
    
        progaoff    
     06.08.18 
            ✎
    13:03 
 | 
         
        Процедура УдалитьСтроку()    
 
        Спр = СоздатьОбъект("Справочник.БП_УслугиБанку"); СписокРемонта.ВыбратьСтроки(); Для н = -СписокРемонта.КоличествоСтрок() по -1 Цикл СписокРемонта.ПолучитьСтрокуПоНомеру(-н); Спр.НайтиЭлемент(СписокРемонта.Объект); Спр.Удалить(0); СписокРемонта.УдалитьСтроку(); КонецЦикла; Конецпроцедуры  | 
|||
| 
    30
    
        Cthulhu    
     06.08.18 
            ✎
    13:49 
 | 
         
        Процедура УдалитьСтроку()    
 
        Для н = -СписокРемонта.КоличествоСтрок() по -1 Цикл СписокРемонта.ПолучитьСтрокуПоНомеру(-н); //ping! Если ТипЗначения(СписокРемонта.Объект)<>ТипЗначения(Спр) Тогда Сообщить("Ойёо ну и балбес - в справочнике не справочник искать","!!!"); Продолжить; ИначеЕсли СписокРемонта.Объект.Вид()<>Спр.Вид() Тогда Сообщить("Ойёо ну и балбес - в справочнике "+Спр.Вид()+" искать элементы справочника "+СписокРемонта.Объект.Вид(),"!!!"); Продолжить; ИначеЕсли СписокРемонта.Объект.Выбран()<>1 Тогда Сообщить("Ойёо ну и балбес - пустое неизвестно чо в справочник искать и пытаться удалять","!!!"); Продолжить; КонецЕсли; //pong! //....... Спр.НайтиЭлемент(СписокРемонта.Объект); Спр.Удалить(0); СписокРемонта.УдалитьСтроку(); КонецЦикла; Конецпроцедуры  | 
|||
| 
    31
    
        progaoff    
     06.08.18 
            ✎
    16:37 
 | 
         
        Фиг с ней с этой пометкой. 
 
        Процедура УдалитьСтроку() Спр = СоздатьОбъект("Справочник.БП_УслугиБанку"); Спр.ВыбратьЭлементы(); Спр.ИспользоватьВладельца(ТекущийЭлемент()); Спр.ПорядокНаименований(); Если Выбран() = 1 Тогда Спр.УдалитьИзСписка = Перечисление.Булево.Да; СписокРемонта.УдалитьСтроку(); КонецЕсли Конецпроцедуры Реквизит не устанавливает, Не выбран элемент! Не пойму что не так.  | 
|||
| 
    32
    
        HawkEye    
     06.08.18 
            ✎
    16:40 
 | 
         
        (31) нет ПолучитьЭлемент() и нет Записать()     
         | 
|||
| 
    33
    
        Эльниньо    
     06.08.18 
            ✎
    17:08 
 | 
         
        (31) 
 
        Процедура УдалитьСтроку() Спр = СоздатьОбъект("Справочник.БП_УслугиБанку"); Спр.ИспользоватьВладельца(ТекущийЭлемент()); Спр.ПорядокНаименований(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл с = 0; СписокРемонта.НайтиЗначение(Спр.ТекущийЭлемент(), с, "Объект"); Если с > 0 Тогда Спр.УдалитьИзСписка = Перечисление.Булево.Да; Спр.Записать(); СписокРемонта.УдалитьСтроку(с); КонецЕсли; КонецЦикла; КонецЕсли  | 
|||
| 
    34
    
        Cthulhu    
     06.08.18 
            ✎
    17:24 
 | 
         
        (33): вангую ответ:
 
        не корректирует никакие элементы.  | 
|||
| 
    35
    
        progaoff    
     06.08.18 
            ✎
    17:25 
 | 
         
        (34) да  СписокРемонта.НайтиЗначение(Спр.ТекущийЭлемент(), с, "Объект"); = 0     
         | 
|||
| 
    36
    
        Cthulhu    
     06.08.18 
            ✎
    17:27 
 | 
         
        (35): а ты из (30) если-конецесли блок попробуй все-таки...     
         | 
|||
| 
    37
    
        progaoff    
     06.08.18 
            ✎
    17:30 
 | 
         
        (36) Пробовал))     
         | 
|||
| 
    38
    
        progaoff    
     06.08.18 
            ✎
    17:32 
 | 
         
        Сообщить("Ойёо ну и балбес - в справочнике "+Спр.Вид()+" искать элементы справочника "+СписокРемонта.Объект.Вид(),"!!!"); Продолжить;     
         | 
|||
| 
    39
    
        progaoff    
     06.08.18 
            ✎
    17:32 
 | 
         
        (38) Результат     
         | 
|||
| 
    40
    
        DenVaz    
     06.08.18 
            ✎
    17:38 
 | 
         
        Список с пометками, кнопка удалить. Просто кнопка удалить.
 
        СправочникДляУдаления = СоздатьОбъект("Справочник.***"); Функция УдалениеЭлементаСправочника(ЭлементСправочника) СправочникДляУдаления.НайтиЭлемент(ЭлементСправочника); СправочникДляУдаления.Удалить(0); КонецФункции  | 
|||
| 
    41
    
        Эльниньо    
     06.08.18 
            ✎
    17:43 
 | 
         
        Что это было?     
         | 
|||
| 
    42
    
        DenVaz    
     06.08.18 
            ✎
    17:47 
 | 
         
        Ну список с пометками, лажа)... Таблица значений у него. Ну и тему не читал. Я так понял удалить ему надо... Вот функция находи элемент удаляй. А как находить в цикле по пометкам или просто с кнопки - дело хозяйское. В (0) ничего не написано, а дальше я не читал - лень)     
         | 
|||
| 
    43
    
        DenVaz    
     06.08.18 
            ✎
    17:55 
 | 
         
        Если делать отбор из таблицы значений по строки по флагу.
 
        То я бы отсортировал, нашел точку смены флага, вырезал таблицу с искомым флагом - по ней перебрал элементы и грохнул бы справочики. Всегда так делал - работает почти мгновенно. Уверен с наивысшей возможной скоростью... Нежели тупой перебор в цикле.  | 
|||
| 
    44
    
        DenVaz    
     06.08.18 
            ✎
    17:57 
 | 
         
        +(43) Ну это если скорость важна.     
         | 
|||
| 
    45
    
        DenVaz    
     06.08.18 
            ✎
    17:58 
 | 
         
        +(43) Потому что системная сортировка таблицы - всегда круче реализована чем ваши переборы на макроязыке....     
         | 
|||
| 
    46
    
        DenVaz    
     06.08.18 
            ✎
    17:59 
 | 
         
        +(45) И ситемный поиск значения тоже.     
         | 
|||
| 
    47
    
        Cthulhu    
     06.08.18 
            ✎
    18:01 
 | 
         
        (38): это не результат.
 
        если эта ветка сработала - тогда следующий вопрос: ну и? lol  | 
|||
| 
    48
    
        progaoff    
     06.08.18 
            ✎
    18:02 
 | 
         
        (47) СписокРемонта.Объект = Срань     
         | 
|||
| 
    49
    
        Cthulhu    
     06.08.18 
            ✎
    18:02 
 | 
         
        (46): ну системный поиск в тз - тот же тупой перебор...     
         | 
|||
| 
    50
    
        progaoff    
     06.08.18 
            ✎
    18:03 
 | 
         
        Процедура УдалитьСтроку()    
 
        Спр = СоздатьОбъект("Справочник.БП_УслугиБанку"); Спр.ИспользоватьВладельца(ТекущийЭлемент()); Спр.ПорядокНаименований(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл с = СписокРемонта.ТекущаяСтрока(); СписокРемонта.НайтиЗначение(Спр.ТекущийЭлемент(), с, "Объект"); Если с > 0 Тогда Спр.УдалитьИзСписка = Перечисление.Булево.Да; Спр.Записать(); СписокРемонта.УдалитьСтроку(с); КонецЕсли; КонецЦикла; Конецпроцедуры В таком виде изменяет все что есть в таблице  | 
|||
| 
    51
    
        Cthulhu    
     06.08.18 
            ✎
    18:05 
 | 
         
        (50): а это потому, что ты синтакс-помощника не умеешь читать.
 
        номер строки в параметрах ненулевой - поиск віполняется только в єтой строке, и знпчение єтого параметра (номера строки) не изменяется.  | 
|||
| 
    52
    
        progaoff    
     06.08.18 
            ✎
    18:08 
 | 
         
        (51) Хоспади, да как же его слепить то)?     
         | 
|||
| 
    53
    
        DenVaz    
     06.08.18 
            ✎
    18:09 
 | 
         
        (49) Даже если так - не на макроязыке, уж поверь работает кратно быстрее). 
 
        // Пример ТЗ.Сортировать("Флаг+"); НомерСтроки = 0; КоличествоСтрокТЗ = ТЗ.КоличествоСтрок; ТЗ.НайтиЗначение(ФлагУдаления,НомерСтроки , "Флаг"); ТЗДляУдаления = СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(ТЗДляУдаления, НомерСтроки, КоличествоСтрокТЗ); //Далее перебор в цикле ТЗДляУдаления и пометка на //удаление справочника. ТЗ.Выгрузить(ТЗ,1,НомерСтроки-1); // загрузка //результирующей таблицы  | 
|||
| 
    54
    
        HawkEye    
     06.08.18 
            ✎
    18:10 
 | 
         
        (50) какой ужас...
 
        Спр = СоздатьОбъект("Справочник.БП_УслугиБанку"); СписокРемонта.ВыбратьСтроки(); пока СписокРемонта.ПолучитьСтроку() = 1 Цикл Спр.НайтиЭлемент(СписокРемонта.Объект); Спр.УдалитьИзСписка = Перечисление.Булево.Да; Спр.Записать(); КонецЕсли; КонецЦикла; СписокРемонта.УдалитьСтроки()  | 
|||
| 
    55
    
        Cthulhu    
     06.08.18 
            ✎
    18:11 
 | 
         
        (52): ну с самого начала - не надо пробовать лепить из г0вна (как ты это пытаешься сделать).
 
        пункт два - подумать. мне этого обычно хватает. (ты, кстати, так и не дал ответа на то, какое сообщение выдается при проверке типа+вида значения, которое ты пытаешься искать в справочнике)  | 
|||
| 
    56
    
        progaoff    
     07.08.18 
            ✎
    08:41 
 | 
         
        (38) вот здесь же ответил)     
         | 
|||
| 
    57
    
        HawkEye    
     07.08.18 
            ✎
    08:53 
 | 
         
        (56) т.е. тебе написали: "Ойёо ну и балбес - в справочнике "+ХХХХХХ+" искать элементы справочника "+УУУУУУ"
 
        а ты все продолжаешь искать? )))))  | 
|||
| 
    58
    
        DenVaz    
     07.08.18 
            ✎
    10:08 
 | 
         
        (56) Что ты мучишься давай напишу за 500.     
         | 
|||
| 
    59
    
        hhhh    
     07.08.18 
            ✎
    10:18 
 | 
         
        (56) вот это бредятина
 
        с = СписокРемонта.ТекущаяСтрока(); выкинь  | 
|||
| 
    60
    
        progaoff    
     07.08.18 
            ✎
    10:39 
 | 
         
        (58) хочу что бы дошло(     
         | 
|||
| 
    61
    
        progaoff    
     07.08.18 
            ✎
    10:39 
 | 
         
        (59) да вкурсе)     
         | 
|||
| 
    62
    
        DenVaz    
     07.08.18 
            ✎
    12:20 
 | 
         
        (60) Давай за 1000, за + 500 я тебе вобъю в башку что да как.     
         | 
|||
| 
    63
    
        DenVaz    
     07.08.18 
            ✎
    12:20 
 | 
         
        +(62) Пока у меня время есть и ностальгия по коддингу )     
         | 
|||
| 
    64
    
        Kigo_Kigo    
     07.08.18 
            ✎
    12:30 
 | 
         
        Ребят, я что то пока читал всю суть вопроса растерял, что в итоге надо автору то?     
         | 
|||
| 
    65
    
        hhhh    
     07.08.18 
            ✎
    12:47 
 | 
         
        (64) что-то типа (50)     
         | 
|||
| 
    66
    
        HawkEye    
     07.08.18 
            ✎
    12:50 
 | 
         
        (64) забей... он сам не знает что ему надо и не понимает что в окне сообщений выдается.....     
         | 
|||
| 
    68
    
        progaoff    
     07.08.18 
            ✎
    13:26 
 | 
         
        (66) Ну с чего вдруг не пойму, мне нужно каким то способом либо пометить на удаление элемент справочника находящийся в ТЗ либо присвоить реквизит что бы потом при заполнении ТЗ отбирать по нему. Не могу понять как правильно с позиционироваться на элементе.     
         | 
|||
| 
    69
    
        HawkEye    
     07.08.18 
            ✎
    13:29 
 | 
         
        (68) чтобы понять как правильно... надо понять что у тебя есть...
 
        для позиционирования на элементе справочника, есть методы: НайтиЭлемент() НайтиПоКоду() НайтиПоНаименованию() НайтиПоРеквизиту() все они описаны в СП....  | 
|||
| 
    70
    
        catena    
     07.08.18 
            ✎
    13:30 
 | 
         
        (68)Но в (38) же уже выяснили, что в ТЗ не элементы справочника (как минимум, не элементы того справочника, в котором происходит поиск).
 
        Не надо вводить сообщество в заблуждение.  | 
|||
| 
    71
    
        DenVaz    
     07.08.18 
            ✎
    15:57 
 | 
         
        Я еще одного понять не могу зачем автору 77 ? Нафиг это все....     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |