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


1С:Предприятие ::

Метки: 

v7: Пометка на удаление.

Я
   progaoff
 
10.07.18 - 11:09
Есть таблица значений, в ней отображены элементы справочника, есть необходимость, удалять записи из таблицы, но и при этом помечать на удаление элемент справочника, подскажите что ни будь по этому поводу.
 
 
   1Сергей
 
1 - 10.07.18 - 11:15
(0) эм... ну, надо взять и сделать. Что тут подсказывать?
   progaoff
 
2 - 10.07.18 - 11:21
(1) да ладно?)
   Владимир1С
 
3 - 10.07.18 - 11:22
(0)Внимательно читаем синтаксис помощник.
   vladko
 
4 - 10.07.18 - 11:44
(0) ничего сложного:
Спр = СоздатьОбъект("Справочник.Контрагенты");
//Перебираем таблицу значений с конца в начало, т.к. надо удалять ненужные строки в ней

ТЗконтрагенты.ВыбратьСтроки();
Для н = -ТЗконтрагенты.КоличествоСтрок() по -1 Цикл
 ТЗконтрагенты.ПолучитьСтрокуПоНомеру(-н);
 Если <Условие> Тогда
  Спр.НайтиЭлемент(ТЗконтрагенты.Контрагент);
  Спр.Удалить(0);
  
  ТЗконтрагенты.УдалитьСтроку();

 КонецЕсли;
КонецЦикла;
   progaoff
 
5 - 10.07.18 - 11:47
(4) Спасибо.
   1Сергей
 
6 - 10.07.18 - 12:09
(4) Вот это зачем:

ТЗконтрагенты.ВыбратьСтроки();
   Salimbek
 
7 - 10.07.18 - 12:28
(6) Видимо - по привычке ))) И только потом цикл был переписан, а привычка осталась ))
   HawkEye
 
8 - 10.07.18 - 16:47
я один не понял, в чем была принципиальная сложность написания кода?
   uno-group
 
9 - 10.07.18 - 17:51
(8) Предположу, что в обратном обходе ТЗ. если идти в прямом обходе то при удалении строки тз пропускалась следующая за ней строка.
   Злопчинский
 
Ведущий
10 - 10.07.18 - 18:03
После удаления можно тупо делать ПолучитьСьтрокуПоНомеру(предыдущая строка) или вообще заново иницилизировтаь выборку...
 
  Рекламное место пустует
   Остап Сулейманович
 
11 - 10.07.18 - 18:07
(10) "заново иницилизировтаь выборку" - Феерично.
Особенно если удалить нужно несколько десятков строк.
   Базис
 
12 - 10.07.18 - 18:12
(11) Время Злопчинского бесконечно ценней времени сервера. А код простой получается.
   Остап Сулейманович
 
13 - 10.07.18 - 18:17
(12) Это типа так :
Пока 1=1 Цикл
  НачатьЗаново = 0;
  ТЗ.ВыбратьСтроки();
  Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Если <Условие> Тогда
      ТЗ.УдалитьСтроку();
      НачатьЗаново = 1;
      Прервать;
    КонецЕсли;
  КонецЦикла;
  Если НачатьЗаново = 0 Тогда
    Прервать;
  КонецЕсли;
КонецЦикла;

Нифига себе простой код.
   Базис
 
14 - 10.07.18 - 18:20
(13) Метку поставь перед циклом, и никому не говори, "Кто это накодил" (произносится с интонацией воспитателя котёнка).
   Остап Сулейманович
 
15 - 10.07.18 - 18:21
(14) Птля... За метку я забыл. Сыплю голову пеплом (((
   Базис
 
16 - 10.07.18 - 18:29
(15) Мне оставь, я посыплю за плохой пример.
   GreyK
 
17 - 10.07.18 - 18:30
Простенько и без заморочек:
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
    Пока (ПустоеЗначение(ТЗ.НомерСтроки) = 0) И (здесь условие удаления) Цикл
        ТЗ.УдалитьСтроку();
    КонецЦикла;
КонецЦикла;
   GreyK
 
18 - 10.07.18 - 18:33
+(17) Пропустил "ТЗ.ВыбратьСтроки();".
   Djelf
 
19 - 10.07.18 - 18:36
Для смелых - 1sqlite 3.24.0.22
DELETE FROM Справочник_Контрагенты
WHERE CODE  in( 'Ц01002513','Ц01002095')

   Djelf
 
20 - 10.07.18 - 18:37
+(19) Правда без пометки, хрясь и всё!
   HawkEye
 
21 - 10.07.18 - 19:30
(9) так человек спрашивал как пометить на удаление элемент, а не как удалить строку...  впрочем, кто их поймет этих ЕГЭ-программистов.
   GreyK
 
22 - 10.07.18 - 19:35
(21) Издеваешься? Пометка на удаление и удаление справочника из ТЗ не сбивает выборку ТЗ.
   progaoff
 
23 - 06.08.18 - 12:39
(20) нет, так нельзя, (4) получилось что удаляет строку из ТЗ но в справочнике пометку не ставит.
   Builder
 
24 - 06.08.18 - 12:48
(23) Чего, месяц отлаживал и не удаляет?
В (4) есть код, который ставит пометку на удаление.
   progaoff
 
25 - 06.08.18 - 12:49
(24) Да есть, но толку, ТЗконтрагенты.УдалитьСтроку(); отрабатывает только вот этот метод.
   Builder
 
26 - 06.08.18 - 12:51
(25) Отладчик открой, там много интересного.
Посмотри что возвращает Спр.НайтиЭлемент(ТЗконтрагенты.Контрагент);
   Builder
 
27 - 06.08.18 - 12:52
(25) Что то мне подсказывает что ТЗконтрагенты.Контрагент - это не элемент справочника, а строка.
   progaoff
 
28 - 06.08.18 - 13:01
(26) 0
   progaoff
 
29 - 06.08.18 - 13:03
Процедура УдалитьСтроку()    
Спр = СоздатьОбъект("Справочник.БП_УслугиБанку");
СписокРемонта.ВыбратьСтроки();
Для н = -СписокРемонта.КоличествоСтрок() по -1 Цикл
 СписокРемонта.ПолучитьСтрокуПоНомеру(-н);

  Спр.НайтиЭлемент(СписокРемонта.Объект);
  Спр.Удалить(0);
  
  СписокРемонта.УдалитьСтроку();

КонецЦикла;

Конецпроцедуры
   Cthulhu
 
30 - 06.08.18 - 13:49
Процедура УдалитьСтроку()    
Для н = -СписокРемонта.КоличествоСтрок() по -1 Цикл
 СписокРемонта.ПолучитьСтрокуПоНомеру(-н);
//ping!

 Если ТипЗначения(СписокРемонта.Объект)<>ТипЗначения(Спр) Тогда
  Сообщить("Ойёо ну и балбес - в справочнике не справочник искать","!!!"); Продолжить;
 ИначеЕсли СписокРемонта.Объект.Вид()<>Спр.Вид() Тогда
  Сообщить("Ойёо ну и балбес - в справочнике "+Спр.Вид()+" искать элементы справочника "+СписокРемонта.Объект.Вид(),"!!!"); Продолжить;
 ИначеЕсли СписокРемонта.Объект.Выбран()<>1 Тогда
  Сообщить("Ойёо ну и балбес - пустое неизвестно чо в справочник искать и пытаться удалять","!!!"); Продолжить;
 КонецЕсли;
//pong! 

//.......

  Спр.НайтиЭлемент(СписокРемонта.Объект);
  Спр.Удалить(0);
  
  СписокРемонта.УдалитьСтроку();

КонецЦикла;

Конецпроцедуры
   progaoff
 
31 - 06.08.18 - 16:37
Фиг с ней с этой пометкой.
Процедура УдалитьСтроку()    
    Спр = СоздатьОбъект("Справочник.БП_УслугиБанку");
    Спр.ВыбратьЭлементы(); 
    Спр.ИспользоватьВладельца(ТекущийЭлемент());
    Спр.ПорядокНаименований();
Если Выбран() = 1 Тогда    
    Спр.УдалитьИзСписка = Перечисление.Булево.Да;
    СписокРемонта.УдалитьСтроку();
КонецЕсли    
Конецпроцедуры    
Реквизит не устанавливает,  Не выбран элемент! Не пойму что не так.
   HawkEye
 
32 - 06.08.18 - 16:40
(31) нет ПолучитьЭлемент() и нет Записать()
   Эльниньо
 
33 - 06.08.18 - 17:08
(31)
Процедура УдалитьСтроку()    
    Спр = СоздатьОбъект("Справочник.БП_УслугиБанку");
    Спр.ИспользоватьВладельца(ТекущийЭлемент());
    Спр.ПорядокНаименований();
    Спр.ВыбратьЭлементы(); 
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        с = 0;
        СписокРемонта.НайтиЗначение(Спр.ТекущийЭлемент(), с, "Объект");
        Если с > 0 Тогда
            Спр.УдалитьИзСписка = Перечисление.Булево.Да;
            Спр.Записать();
            СписокРемонта.УдалитьСтроку(с);
        КонецЕсли;
    КонецЦикла;
КонецЕсли
 
  Рекламное место пустует
   Cthulhu
 
34 - 06.08.18 - 17:24
(33): вангую ответ:
не корректирует никакие элементы.
   progaoff
 
35 - 06.08.18 - 17:25
(34) да  СписокРемонта.НайтиЗначение(Спр.ТекущийЭлемент(), с, "Объект"); = 0
   Cthulhu
 
36 - 06.08.18 - 17:27
(35): а ты из (30) если-конецесли блок попробуй все-таки...
   progaoff
 
37 - 06.08.18 - 17:30
(36) Пробовал))
   progaoff
 
38 - 06.08.18 - 17:32
Сообщить("Ойёо ну и балбес - в справочнике "+Спр.Вид()+" искать элементы справочника "+СписокРемонта.Объект.Вид(),"!!!"); Продолжить;
   progaoff
 
39 - 06.08.18 - 17:32
(38) Результат
   DenVaz
 
40 - 06.08.18 - 17:38
Список с пометками, кнопка удалить. Просто кнопка удалить.

СправочникДляУдаления = СоздатьОбъект("Справочник.***");

Функция УдалениеЭлементаСправочника(ЭлементСправочника)
СправочникДляУдаления.НайтиЭлемент(ЭлементСправочника);
СправочникДляУдаления.Удалить(0);
КонецФункции
   Эльниньо
 
41 - 06.08.18 - 17:43
Что это было?
   DenVaz
 
42 - 06.08.18 - 17:47
Ну список с пометками, лажа)... Таблица значений у него. Ну и тему не читал. Я так понял удалить ему надо... Вот функция находи элемент удаляй. А как находить в цикле по пометкам или просто с кнопки - дело хозяйское. В (0) ничего не написано, а дальше я не читал - лень)
   DenVaz
 
43 - 06.08.18 - 17:55
Если делать отбор из таблицы значений по строки по флагу.
То я бы отсортировал, нашел точку смены флага, вырезал таблицу с искомым флагом - по ней перебрал элементы и грохнул бы справочики.  Всегда так делал - работает почти мгновенно. Уверен с наивысшей возможной скоростью... Нежели тупой перебор в цикле.
   DenVaz
 
44 - 06.08.18 - 17:57
+(43) Ну это если скорость важна.
   DenVaz
 
45 - 06.08.18 - 17:58
+(43) Потому что системная сортировка таблицы - всегда круче реализована чем ваши переборы на макроязыке....
   DenVaz
 
46 - 06.08.18 - 17:59
+(45) И ситемный поиск значения тоже.
   Cthulhu
 
47 - 06.08.18 - 18:01
(38): это не результат.
если эта ветка сработала - тогда следующий вопрос: ну и?
lol
   progaoff
 
48 - 06.08.18 - 18:02
(47) СписокРемонта.Объект = Срань
   Cthulhu
 
49 - 06.08.18 - 18:02
(46): ну системный поиск в тз - тот же тупой перебор...
 
 
   progaoff
 
50 - 06.08.18 - 18:03
Процедура УдалитьСтроку()    
    Спр = СоздатьОбъект("Справочник.БП_УслугиБанку");
    Спр.ИспользоватьВладельца(ТекущийЭлемент());
    Спр.ПорядокНаименований();
    Спр.ВыбратьЭлементы(); 
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        с = СписокРемонта.ТекущаяСтрока();
        СписокРемонта.НайтиЗначение(Спр.ТекущийЭлемент(), с, "Объект");
        Если с > 0 Тогда
            Спр.УдалитьИзСписка = Перечисление.Булево.Да;
            Спр.Записать();
            СписокРемонта.УдалитьСтроку(с);
        КонецЕсли;
    КонецЦикла;



Конецпроцедуры    
В таком виде изменяет все что есть в таблице
   Cthulhu
 
51 - 06.08.18 - 18:05
(50): а это потому, что ты синтакс-помощника не умеешь читать.
номер строки в параметрах ненулевой - поиск віполняется только в єтой строке, и знпчение єтого параметра (номера строки) не изменяется.
   progaoff
 
52 - 06.08.18 - 18:08
(51) Хоспади, да как же его слепить то)?
   DenVaz
 
53 - 06.08.18 - 18:09
(49) Даже если так - не на макроязыке, уж поверь работает кратно быстрее).
// Пример

ТЗ.Сортировать("Флаг+"); 
НомерСтроки = 0;
КоличествоСтрокТЗ = ТЗ.КоличествоСтрок;
ТЗ.НайтиЗначение(ФлагУдаления,НомерСтроки , "Флаг");


ТЗДляУдаления = СоздатьОбъект("ТаблицаЗначений");
ТЗ.Выгрузить(ТЗДляУдаления, НомерСтроки, КоличествоСтрокТЗ);

//Далее перебор в цикле ТЗДляУдаления и пометка на 

//удаление справочника.
ТЗ.Выгрузить(ТЗ,1,НомерСтроки-1);// загрузка 

//результирующей таблицы
   HawkEye
 
54 - 06.08.18 - 18:10
(50) какой ужас...
Спр = СоздатьОбъект("Справочник.БП_УслугиБанку");
 СписокРемонта.ВыбратьСтроки();
пока  СписокРемонта.ПолучитьСтроку() = 1 Цикл
  Спр.НайтиЭлемент(СписокРемонта.Объект);
Спр.УдалитьИзСписка = Перечисление.Булево.Да;
            Спр.Записать();
КонецЕсли;

КонецЦикла;
СписокРемонта.УдалитьСтроки()
   Cthulhu
 
55 - 06.08.18 - 18:11
(52): ну с самого начала - не надо пробовать лепить из г0вна (как ты это пытаешься сделать).
пункт два - подумать.
мне этого обычно хватает.
(ты, кстати, так и не дал ответа на то, какое сообщение выдается при проверке типа+вида значения, которое ты пытаешься искать в справочнике)
   progaoff
 
56 - 07.08.18 - 08:41
(38) вот здесь же ответил)
   HawkEye
 
57 - 07.08.18 - 08:53
(56) т.е. тебе написали: "Ойёо ну и балбес - в справочнике "+ХХХХХХ+" искать элементы справочника "+УУУУУУ"
а ты все продолжаешь искать? )))))
   DenVaz
 
58 - 07.08.18 - 10:08
(56) Что ты мучишься давай напишу за 500.
   hhhh
 
59 - 07.08.18 - 10:18
(56) вот это бредятина
      с = СписокРемонта.ТекущаяСтрока();
  

выкинь
   progaoff
 
60 - 07.08.18 - 10:39
(58) хочу что бы дошло(
   progaoff
 
61 - 07.08.18 - 10:39
(59) да вкурсе)
   DenVaz
 
62 - 07.08.18 - 12:20
(60) Давай за 1000, за + 500 я тебе вобъю в башку что да как.
   DenVaz
 
63 - 07.08.18 - 12:20
+(62) Пока у меня время есть и ностальгия по коддингу )
   Kigo_Kigo
 
64 - 07.08.18 - 12:30
Ребят, я что то пока читал всю суть вопроса растерял, что в итоге надо автору то?
   hhhh
 
65 - 07.08.18 - 12:47
(64) что-то типа (50)
   HawkEye
 
66 - 07.08.18 - 12:50
(64) забей... он сам не знает что ему надо и не понимает что в окне сообщений выдается.....
   progaoff
 
68 - 07.08.18 - 13:26
(66) Ну с чего вдруг не пойму, мне нужно каким то способом либо пометить на удаление элемент справочника находящийся в ТЗ либо присвоить реквизит что бы потом при заполнении ТЗ отбирать по нему. Не могу понять как правильно с позиционироваться на элементе.
   HawkEye
 
69 - 07.08.18 - 13:29
(68) чтобы понять как правильно... надо понять что у тебя есть...
для позиционирования на элементе справочника, есть методы:
НайтиЭлемент()
НайтиПоКоду()
НайтиПоНаименованию()
НайтиПоРеквизиту()

все они описаны в СП....
   catena
 
70 - 07.08.18 - 13:30
(68)Но в (38) же уже выяснили, что в ТЗ не элементы справочника (как минимум, не элементы того справочника, в котором происходит поиск).

Не надо вводить сообщество в заблуждение.
   DenVaz
 
71 - 07.08.18 - 15:57
Я еще одного понять не могу зачем автору 77 ? Нафиг это все....



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