С Новым годом! Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266

Подписка на событие

12.04.2016, 20:46. Показов 3695. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Стоит задача создать подписку на событие для 2х справочников- должности и должности организации.

И при добавлении, изменении или удалении должности в справочнике "Должности Организаций", чтоб в справочнике "Должности" выполнялись аналогичные действия. Именно с "должности организаций" в "должности".

Подписку создала, источник - справочник Должности организаций, событие: при записи, обработчик - новый общий модуль, в нем прописала код:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Процедура ДИТ_СинхронизацияДолжностейПриЗаписи(Источник, Отказ) Экспорт
    
                ТекДолжность = Справочники.Должности.НайтиПоКоду(Источник.Код);
 
                Если Источник.ЭтоНовый() Тогда
 
       Если ТекДолжность.Пустая() Тогда
 
                       НовДолжность = Справочники.Должности.СоздатьЭлемент(); 
 
                       НовДолжность.Код = Источник.Код;    
 
                       НовДолжность.Наименование = Источник.Наименование;                                           
 
           НовДолжность.Записать();
 
                  КонецЕсли;
 
  ИначеЕсли  Источник.ПометкаУдаления Тогда
 
                  Объект = ТекДолжность.Ссылка;
 
                  Объект.УстановитьПометкуУдаления(Истина);       
 
                КонецЕсли;            
 
КонецПроцедуры
Вопрос:
1) в первом условии где Источник.ЭтоНовый() не попадает сюда, пишет - Ложь, хотя, я создаю новый. Это потому что у меня событие при записи? И программа считает, что объект уже записан? Если да, то как можно решить, и если нет, то почему?
2) во втором условии, если помечаю объект на удаление, видит, что у источника пометкаУдаления - истина, видит ссылку текдолжности, но выдает ошибку - "Метод объекта не обнаружен (УстановитьПометкуУдаления)", почему? это опять же и-за события при записи? Его надо было делать Перед записью, или возможно проблема в другом?

Спасибо заранее!

Добавлено через 31 минуту
Изменила событие, сделала перед записью, первый вопрос исчерпан, это было из-за события. а вот второй, все-равно ошибку выдает ту же самую. Изменила даже условие с момента пометкиудаления:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
              ИначеЕсли  Источник.ПометкаУдаления Тогда
                  Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Код",Источник.Код);
    Запрос.УстановитьПараметр("Наименование",Источник.Наименование);
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Должности.Ссылка
    |ИЗ
    |   Справочник.Должности КАК Должности
    |ГДЕ
    |   Должности.Код = &Код
    |   И Должности.Наименование = &Наименование";
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
                    Пока Выборка.Следующий() Цикл
                        Объект = Выборка.Ссылка.ПолучитьОбъект();  
                        Объект = ТекДолжность.Ссылка;  
                       Объект.УстановитьПометкуУдаления(Истина); 
                   КонецЦикла;
    КонецЕсли;
            Иначе 
                  Объект.УстановитьПометкуУдаления(Ложь);
 
            КонецЕсли;
Все нормально видит отладкой, а вот на УстановитьПометкуУдаления все-равно ругается.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2016, 20:46
Ответы с готовыми решениями:

Подписка на событие
Всем доброго времени суток! Знакомлюсь с подпиской на события... И первый вопрос возник - создала ОбщийМодуль и подписку на событие....

Подписка На Событие
Здравствуйте. Может кто сталкивался с таким вопросом: документ стоит на поддержке, а мне нужно сделать ему еще одну форму списка и через...

Подписка на событие, Общий модуль, глобальное перепроведение документов
Добрый день. Создала подписку на событие: Источник - Документ "Поступление из переработки" Событие - При записи. ...

10
Эксперт 1С
 Аватар для GreenkA
3064 / 2011 / 525
Регистрация: 25.06.2009
Сообщений: 6,964
12.04.2016, 20:51
nastena_r_v, а зачем вы дважды определяете Объект?
1C
1
2
  Объект = Выборка.Ссылка.ПолучитьОбъект();  
  Объект = ТекДолжность.Ссылка;
Сделайте
1C
1
2
Объект = Выборка.Ссылка.ПолучитьОбъект();  
Объект.УстановитьПометкуУдаления(Истина);
И так же для снятия.
1
 Аватар для nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.04.2016, 08:04  [ТС]
GreenkO, на счет дважды определяла объект, это моя невнимательность.
И на счет снятия пометки удаления,что то не выходит. Может что-то не так делаю? Он даже в условие не заходит тогда.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
   Процедура ДИТ_СинхронизацияДолжностейПриЗаписи(Источник, Отказ) Экспорт
 
ТекДолжность = Справочники.Должности.НайтиПоКоду(Источник.Код);
 
Если Источник.ЭтоНовый() Тогда
 
Если ТекДолжность.Пустая() Тогда
 
 НовДолжность = Справочники.Должности.СоздатьЭлемент();
 
 НовДолжность.Код = Источник.Код;
 
 НовДолжность.Наименование = Источник.Наименование;
 
НовДолжность.Записать();
 
 КонецЕсли;
 
ИначеЕсли Источник.ПометкаУдаления Тогда // если ПометкаУдаления ложь, то он не заходит сюда, и не выполняет условие
 
 Запрос = Новый Запрос;
 
 Запрос.УстановитьПараметр("Код",Источник.Код);
 
Запрос.УстановитьПараметр("Наименование",Источник.Наименование);
 
Запрос.Текст =
 
 "ВЫБРАТЬ
 
 | Должности.Ссылка
 
 |ИЗ
 
 | Справочник.Должности КАК Должности
 
|ГДЕ
 
 | Должности.Код = &Код
 
 | И Должности.Наименование = &Наименование";
 
Результат = Запрос.Выполнить();
 
Если НЕ Результат.Пустой() Тогда
 
 Выборка = Результат.Выбрать();
 
 Пока Выборка.Следующий() Цикл
 
Объект = Выборка.Ссылка.ПолучитьОбъект();
 
Если Источник.ПометкаУдаления Тогда
 
Объект.УстановитьПометкуУдаления(Истина);
 
Иначе
 
Объект.УстановитьПометкуУдаления(Ложь);
 
КонецЕсли;
 
Иначе
 
Если Источник.Наименование <> ТекДолжность.Наименование Тогда
 
Если ЗначениеЗаполнено(ТекДолжность) Тогда
 
 ТекОбъект = ТекДолжность.ПолучитьОбъект();
 
ТекОбъект.Наименование = Источник.Наименование;
 
 ТекОбъект.Записать();
 
 КонецЕсли;
 
КонецЕсли; 
 
КонецЕсли;
 
КонецПроцедуры
Добавлено через 33 минуты
И все-таки первый вопрос все-равно остался. Событие я вернула при записи, чтоб можно было сделать изменение наименования. А Источник.ЭтоНовый() все-равно в ложь идет. Как быть? И с пометкой удаления предыдущий пост еще.
0
Эксперт 1С
 Аватар для GreenkA
3064 / 2011 / 525
Регистрация: 25.06.2009
Сообщений: 6,964
13.04.2016, 09:45
Цитата Сообщение от nastena_r_v Посмотреть сообщение
ИначеЕсли Источник.ПометкаУдаления Тогда // если ПометкаУдаления ложь, то он не заходит сюда, и не выполняет условие
ну так правильно. Если условие = Ложь и не должно заходить.
1
 Аватар для nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.04.2016, 10:33  [ТС]
GreenkO, тогда как сделать для снятия условие? Если так оно не срабатывает?
0
Эксперт 1С
 Аватар для GreenkA
3064 / 2011 / 525
Регистрация: 25.06.2009
Сообщений: 6,964
13.04.2016, 10:35
Цитата Сообщение от nastena_r_v Посмотреть сообщение
Событие я вернула при записи, чтоб можно было сделать изменение наименования.
Вот это непонятно. Вы же делаете изменения со справочником Должности, а не с Источником(типа Должности Организаций)
1
 Аватар для nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.04.2016, 10:42  [ТС]
GreenkO, с изменением наименования я разобралась, последнее услове срабатывает, если наименования разные . Я все-таки поставила перед записью. Теперь у меня проблема со снятием пометкиудаления
0
Эксперт 1С
 Аватар для GreenkA
3064 / 2011 / 525
Регистрация: 25.06.2009
Сообщений: 6,964
13.04.2016, 10:49
Лучший ответ Сообщение было отмечено nastena_r_v как решение

Решение

nastena_r_v,

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Код",Источник.Код);
Запрос.УстановитьПараметр("Наименование",Источник.Наименование);
Запрос.Текст = "ВЫБРАТЬ
| Должности.Ссылка
|ИЗ
| Справочник.Должности КАК Должности
|ГДЕ
| Должности.Код = &Код
| И Должности.Наименование = &Наименование";
 
Результат = Запрос.Выполнить();
    
Выборка = Результат.Выбрать();
 
Пока Выборка.Следующий() Цикл
//просто проверим изменилась ли пометка удаления у соответствующих элементов  
    Если Источник.ПометкаУдаления <> Выборка.Ссылка.ПометкаУдаления Тогда  
        Объект = Выборка.Ссылка.ПолучитьОбъект();
        Если Источник.ПометкаУдаления Тогда
            Объект.УстановитьПометкуУдаления(Истина);
        Иначе
            Объект.УстановитьПометкуУдаления(Ложь);
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
1
 Аватар для nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.04.2016, 11:34  [ТС]
GreenkO, спасибо, я сделала по другому. В общем получилось так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  
Процедура СинхронизацияДолжностейПередЗаписью(Источник, Отказ) Экспорт
ТекДолжность = Справочники.Должности.НайтиПоКоду(Источник.Код);
Если Источник.ЭтоНовый() Тогда
    Если ТекДолжность.Пустая() Тогда
        НовДолжность = Справочники.Должности.СоздатьЭлемент();
        НовДолжность.Код = Источник.Код;
        НовДолжность.Наименование = Источник.Наименование;
        НовДолжность.Записать();
    КонецЕсли;
ИначеЕсли
    Источник.Наименование <> ТекДолжность.Наименование Тогда
    Если ЗначениеЗаполнено(ТекДолжность) Тогда
        ТекОбъект = ТекДолжность.ПолучитьОбъект();
        ТекОбъект.Наименование = Источник.Наименование;
        ТекОбъект.Записать();
    КонецЕсли;
ИначеЕсли Источник.ПометкаУдаления Тогда
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Код",Источник.Код);
    Запрос.УстановитьПараметр("Наименование",Источник.Наименование);
    Запрос.Текст = 
    "ВЫБРАТЬ
    | Должности.Ссылка
    |ИЗ
    | Справочник.Должности КАК Должности
    |ГДЕ
    | Должности.Код = &Код
    | И Должности.Наименование = &Наименование";
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            Объект = Выборка.Ссылка.ПолучитьОбъект();
            Объект.УстановитьПометкуУдаления(Истина);
        КонецЦикла;
    КонецЕсли;
ИначеЕсли Не Источник.ПометкаУдаления Тогда
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Код",Источник.Код);
    Запрос.УстановитьПараметр("Наименование",Источник.Наименование);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Должности.Ссылка
    |ИЗ
    | Справочник.Должности КАК Должности
    |ГДЕ
    | Должности.Код = &Код
    | И Должности.Наименование = &Наименование";
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            Объект = Выборка.Ссылка.ПолучитьОбъект();
            Объект.УстановитьПометкуУдаления(Ложь); 
        КонецЦикла;
    КонецЕсли;
КонецЕсли;
КонецПроцедуры
0
Эксперт 1С
 Аватар для GreenkA
3064 / 2011 / 525
Регистрация: 25.06.2009
Сообщений: 6,964
13.04.2016, 11:40
nastena_r_v, то же самое, только кода больше.
1
 Аватар для nastena_r_v
47 / 47 / 1
Регистрация: 03.05.2012
Сообщений: 266
13.04.2016, 11:45  [ТС]
GreenkO, согласна )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2016, 11:45
Помогаю со студенческими работами здесь

Подписка на событие "Запрет копирования"
стоит задача для пары платежных документов-поставить запрет на создание их путем копирования. В модуле формы документов при событии...

Подписка на событие
Дорогие форумчане, крик души! Помогите пожалуйста новичку с созданием подписки! Ситуация такова: есть регистр сведений...

Подписка на событие
Как в подписке на событие проверить что в определенном справочнике один из реквизитов был изменен. Я так понял понял нужно выбрать...

Таймер. Подписка на событие
В общем, использую я таймер из System.Timers.Timer Мне требуется сделать некое вот такое: static void TimerStop(Object sender, ...

Подписка на событие + делегаты
Доброй вечер. задача: &quot;Написать класс Method, содержащий метод Integrate численного интегрирования функции f(x) одной переменной методом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru