|
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 ? Нафиг это все....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |