Имя: Пароль:
1C
1С v8
ПометкаУдаления автоматически
0 anikulnikova
 
07.04.16
14:12
День добрый, нобходимо при установке пометки удаления элемента в справочнике ДолжностиОрганизации, чтоб автоматически устанавливалась данная пометка и в справочнике Должности, при условии, что код и наименование совпадает. Как можно реализовать? Наброски вот, но они не пашут:
П.С Процедура выбрана правильно?

Процедура ОбновлениеОтображения()

    Объект = Справочники.ДолжностиОрганизаций.
    ТекДолжность = Справочники.Должности.НайтиПоКоду(Объект.Код);
    Если Объект.ПометкаУдаления = Истина Тогда
        ТекДолжность.ПометкаУдаления = Истина;        
    КонецЕсли;


КонецПроцедуры
1 Игорь Коломойский
 
07.04.16
14:13
при условии, что код и наименование совпадает
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Запросом тут.
2 salvator
 
07.04.16
14:17
В модуле объекта ДолжностиОрганизации в процедуре ПередУдалением думаю лучше это делать.
3 anikulnikova
 
07.04.16
14:22
Что значит "Запросом Тут"?


Модуль объекта пустой.
4 Jonny_Khomich
 
07.04.16
14:28
(3) наполни его знаниями
5 Игорь Коломойский
 
07.04.16
14:29
(3) Запросом найти элемент справочника по коду и наименованию. Если код уникальный во всём справочнике, то достаточно только по коду.
6 marty0701
 
07.04.16
14:30
(0)Запись шеф, где у тебя запись?
7 marty0701
 
07.04.16
14:31
Бл... Какая пометкаудаления = Истина? УстановитьПометкуУдаления()
8 anikulnikova
 
07.04.16
14:34
(4) спасибо, за остроумность. Вы тоже начали заниматься 1с и сразу все знали? (7) Спасибо. Я же сказала, наброски, и про эту функцию я не знала.

Понимающие люди, вы такие умные!
Так лучше доступно поделиться своими знаниями, а не материться и умничать.
9 letni88
 
07.04.16
14:35
записать()
10 marty0701
 
07.04.16
14:36
Объект = Справочники.ДолжностиОрганизаций.
    ТекДолжность = Справочники.Должности.НайтиПоКоду(Объект.Код);
    Если Объект.ПометкаУдаления = Истина Тогда
        ТекДолжность.УстановитьПометкуУдаления(Истина);        
ТекДолжность.Записать();
    КонецЕсли;

Попытки исключения сама расставь, ну и место выбрано неудачно, уже сказали про это.
11 anikulnikova
 
07.04.16
14:36
Окей, если я создам процедуру в модуле объекта, я должна же буду ее вызвать с формы? Вопрос, в какой процедуре?
12 salvator
 
07.04.16
14:37
Хотя нет, лучше в процедуре ПередЗаписью()
Запросом получай все элементы второго справочника и в обходе выборки проверяй пометку удаления текущего объекта. Если она равна Истина, то помечай на удаление второй, если нет, то снимай пометку.
13 salvator
 
07.04.16
14:37
+(12)
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Код",Код);
    Запрос.УстановитьПараметр("Наименование",Наименование);
    Запрос.Текст =
    "ВЫБРАТЬ Спр.Ссылка ИЗ Справочник.Должности КАК Спр ГДЕ Спр.Код = &Код И Спр.Наименование = &Наименование";
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            СпрОбъект = Выборка.Ссылка.ПолучитьОбъект();
            Если ПометкаУдаления Тогда    
                СпрОбъект.УстановитьПометкуУдаления(Истина);
            Иначе
                СпрОбъект.УстановитьПометкуУдаления(Ложь);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
14 marty0701
 
07.04.16
14:37
15 letni88
 
07.04.16
14:37
ТекДолжность.УстановитьПометкуУдаления(Истина);        
ТекДолжность.Записать();


Записать лишнее, т.к.
16 letni88
 
07.04.16
14:37
Синтаксис:

УстановитьПометкуУдаления(<ПометкаУдаления>, <ВключаяПодчиненные>)
Параметры:

<ПометкаУдаления> (обязательный)

Тип: Булево.
Признак установки / снятие пометки на удаление.
Истина - пометка будет установлена; Ложь - пометка будет снята.
<ВключаяПодчиненные> (необязательный)

Тип: Булево.
Если параметр установлен в Истина, то будут помечены на удаление, кроме данного элемента, все его подчиненные элементы в данном справочнике и во всех подчиненных справочниках.
Если параметр установлен в Ложь, то будет помечен на удаление только данный элемент.
Значение по умолчанию: Истина.
Описание:

Устанавливает/снимет пометку на удаление. Объект при этом не удаляется из базы данных. Окончательное удаление помеченных элементов справочника происходит при удалении помеченных объектов.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Применение метода влечет инициирование события ПередЗаписью, т.к. происходит сохранение измененного свойства ПометкаУдаления.
Если объект модифицирован, то выполнение метода вызывает исключение.
Пример:

Объект.УстановитьПометкуУдаления(Истина,Истина);
17 marty0701
 
07.04.16
14:40
Объект получить еще треба.
18 anikulnikova
 
07.04.16
14:42
(12)  Спасибо, попробую воспроизвеси  ваш пример. А почему запросом лучше? (14) спасибо. (15) спасибо
19 salvator
 
07.04.16
14:42
(18) Потому что заодно научишься их писать :)
20 salvator
 
07.04.16
14:44
+(19) А если серьезно, то для того, чтобы если вдруг в справочнике отключен контроль уникальности по коду, то можно было получить все эти элементы.
21 anikulnikova
 
07.04.16
14:50
(20) в процедуре перед записью не выполняется ничего, точка даже не попадает туда. Возможно в другой процедуре выполнять надо?
22 salvator
 
07.04.16
14:52
(21) Процедура "ПередЗаписью" модуля объекта справочника "ДолжностиОрганизации". Все верно?
23 marty0701
 
07.04.16
14:52
(21)Включи отладку, сохрани конфигурацию, etc., сейчас шар протру, еще что-то увижу.
24 anikulnikova
 
07.04.16
14:56
(22) нет ))) я в моделей формы элемента делаю. А если делать в модуле объект, то в модуле формы эту процедуру вызывать надо?
25 anikulnikova
 
07.04.16
14:57
(24) там словарь меня исправил )
26 salvator
 
07.04.16
14:57
(24) А зачем ты делаешь в модуле формы, если написано, что в модуле объекта? В модуле объекта нажми Ctrl+Alt+P и выбери "ПередЗаписью". Остальное уже все написано.
27 anikulnikova
 
07.04.16
19:34
Есть  еще вопрос, чтоб не множить темы,  необходимо было сделать автоматическое создание должности в справочнике "Должности" из справочника "Должности организации", задача выполнена, а как теперь реализовать еще один момент, чтоб при изменении наименования в ДолжностиОрганизации в справочнике Должности оно тоже менялось?
По добавлению данных из одного справочника в другой использовала форму элемента, дополнила процедуру ПослеЗаписи. а здесь как быть? Может как-то модифицировать код с добавлением?
Если он нужен, то вот:
     Объект = Ссылка;
    //Если Объект.Ссылка.Пустая() Тогда
     ТекДолжность = Справочники.Должности.НайтиПоКоду(Объект.Код);
       Если ТекДолжность.Пустая() Тогда
         НовДолжность = Справочники.Должности.СоздатьЭлемент();
          НовДолжность.Код = Объект.Код;
         НовДолжность.Наименование = Объект.Наименование;
         НовДолжность.Записать();
      КонецЕсли;
   //КонецЕсли;


А так пока набросков по изменению наименования нет.
28 hhhh
 
07.04.16
21:01
Процедура НаименованиеПриИзменении(......   ......)

Если Наименование <> Ссылка.Наименование Тогда
ТекДолжность = Справочники.Должности.НайтиПоНаименованию(Ссылка.Наименование, Истина);

Если ЗначениеЗаполнено(ТекДолжность) Тогда
    ТекОбъект = ТекДолжность.ПолучитьОбъект();
    ТекОбъект.Наименование = Наименование;
    ТекОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
29 anikulnikova
 
08.04.16
04:53
(28) в форму элемента вставить? Или в модуль объекта?
30 anikulnikova
 
08.04.16
05:01
(28) программа даже в процедуру не заходит... (
31 hhhh
 
08.04.16
05:22
(29) вы самого главного не усвоили. Есть события на форме. К событиям привязаны процедуры.

то есть на форме у вас есть поле Наименование, по нему щелкаете, справа открываются его свойства, там находите событие ПриИзменении, щелкаете по нему, открывается процедура, в нее вставляете.

(30) привязали ли вы эту процедуру к какому нибудь событию на форме?