Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 дек 2024, 13:28

Удаление элемента справочника с помощью документа

Автор AlexKag, 18 сен 2012, 17:50

0 Пользователей и 1 гость просматривают эту тему.

AlexKag

Добрый вечер. Помогите пожалуйста с таким вопросом. Создал документ, в документе есть поле флажка, и допустим поле ученик (справочник.ссылка.ученики), и нужно чтобы при нажатии на это поле флажка (допустим называется "отчислить") и проведении документа, в справочнике помечался на удаление этот самый элемент ученик. Подскажите, если не сложно как организовать такой код?

Dethmontt

ИмяРеквизитаДокумента.ПолучитьОбъект().УстановитьПометкуУдаления(Истина); //ИмяРеквизитаДокумента - твой ученик - тип справочникСсылка.ученики
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ГК

В модуле объекта вашего документа:
Процедура ОбработкаПроведения(Отказ, Режим)
   
   Если Флаг Тогда
      СпрУченик = Ученик.ПолучитьОбъект();
      СпрУченик.ПометкаУдаления = Истина;
      СпрУченик.Записать();
   КонецЕсли;
КонецПроцедуры

Только зачем вам помечать элементы справочника на удаление, если удалить вы их не сможете? Ведь как минимум на этот документ будет ссылка у помеченной записи справочника.

AlexKag

Вот сделал так, но почему-то элемент не помечается. Подскажите пожалуйста в чем ошибка?

Процедура ОбработкаПроведения(Отказ, Режим)
   Если Отчислить Тогда
   Ученики = Объект.Ученик.ПолучитьОбъект().УстановитьПометкуУдаления(истина);
   Ученики.Записать();
   Сообщить("Пометка на удаление установлена!");
   КонецЕсли;
КонецПроцедуры

Public_enemy

Попробуй вот так:

Процедура ОбработкаПроведения(Отказ, Режим)
   Если Отчислить Тогда
   Ученики = Объект.Ученик.ПолучитьОбъект();
   Ученики.ПометкаУдаления = Истина;
   Ученики.Записать();
   Сообщить("Пометка на удаление установлена!");
   КонецЕсли;
КонецПроцедуры

mixqn

почаще читайте синтаксис-помощник и вот таких конструкций
Ученики = Объект.Ученик.ПолучитьОбъект().УстановитьПометкуУдаления(истина);
не будет. метод УстановитьПометкуУдаления() не возвращает никакого значения и у вас на этой строке должна быть ошибка и уж точно, работать такой код не должен.
делайте одним из предложенных выше способов:
либо
Ученики = Объект.Ученик.ПолучитьОбъект();
Ученики.ПометкаУдаления = Истина;
Ученики.Записать();

Либо
Ученики = Объект.Ученик.ПолучитьОбъект();
Ученики.УстановитьПометкуУдаления(Истина);

, либо, что тоже самое, только в 1 строку:
Ученик.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);

А вообще, ГК задал правильный вопрос: какой смысл в установке пометки удаления, если элементы все равно не удалятся? как минимум потому, что будут ссылки из вашего документа. Опишите стоящую задачу подробнее, вам посоветуют решение лучше, чем установка пометки удаления, например, ненужные элементы можно помещать в отдельную папку, либо добавить специальный реквизит, что-то вроде "архивный" или "не использовать".

AlexKag

Вот подскажите пожалуйста, я сравнительно недавно занимаюсь программированием в 1с, поэтому некоторые моменты, мне еще сложно понимать. Задачу я хочу поставить такой - есть справочник, допустим студенты, и я хочу с помощью документа "Отчислить" сделать так, чтобы этот студент, который указан в справочнике, каким - то образом отчислялся, (будь то либо пометка удаления, либо еще что-нибудь)... Вот на самом деле хотел такой вариант, чтобы в справочнике студенты был какой то реквизит, например, статус, и чтобы при проведении этого документа, статус менялся допустим с "учится" на "отчислен". Каким образом, подскажите пожалуйста это можно сделать, если вам не сложно?

ГК

Для заполнения реквизита "СтатусСтудента" надо в конфигурацию добавить Перечисление СтатусыСтудента, где значениями будут "Отчислен", "Учится" и др.

Но если менять статус студента в справочнике - это неподходящий вариант. В этом случае в любой момент уже из элемента справочника пользователь может поменять флажок с "Отчислен" на "Учится", например. Можно, конечно, сделать его недоступным, только видимым... А отчеты будете строить по документам?
Если такой вариант подходит, тогда все просто: в приведенном выше коде меняете строчку
Ученики.ПометкаУдаления = Истина;
на
Ученики.ПометкаУдаления = Перечисления.СтатусыСтудента.Отчислен;

Для вашей задачи больше подходит РегистрСведений, где измерения - Студент (СправочникСсылка.Студенты), а ресурс - Статус (Перечисления.СтатусыСтудента). В качестве Регистратора надо указать ваш Документ "Отчисление". Также регистраторами для этого регистра могут быть документы зачисления, оформления академического отпуска и прочие.

mixqn

однозначно регистр, при чем периодический. статус студента может меняться со временем. сначала он "зачислен" (или "учится"), потом в какой-то момент может стать "отчислен", а потом восстановиться и снова иметь такой же статус. кроме того, могут быть дополнительные варианты "академический отпуск" и т.п.

AlexKag

Спасибо, я создал РегистрСведений, периодичность я указал - по позиции регистратора, регистратором пока у меня документ Отчисление является. Скажите пожалуйста, надо ли теперь писать какой-то код или еще что-нибудь в документе, или в Регистре?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск