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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем 19yellow92, 12 апр 2016.

  1. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    День добрый. Стоит задача создать подписку на событие для 2х справочников- должности и должности организации, и при добавлении, изменении или удалении должности в справочнике Должности Организаций, чтоб в справочнике Должности выполнялись аналогичные действия. Именно с должности организаций в должности.
    У меня Тема была про должности, но процедуры выполнялись в форме элемента. А теперь надо в подписке.
    Вопрос, при создании новой подписки на событие, что я должна указать в поле обработчик? Необходимо создавать новый общий модуль, или использовать уже возможно существующий?

    П.С. с подписками не работала, для меня это темный лес.

    В статьях пишут создавать новый общий модуль. Возможно кто-то знает, может есть уже что-то аналогичное в общем модуле.
    База УПП
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    лучше создавать свой отдельный общий модуль и там все писать.
  3. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Хорошо, спасибо.
    А в дальнейшем как по отдельности обращаться к источнику, если у меня составной тип данных? 2 справочника. А мне надо из одного справочника в другой добавить данные
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А зачем Вам два источника? вы же четко в теме написали чсто только при изменени Должности организаций в должностях менят.
    знаячит только на должности организаций подписка
    если вы хотите что бы если и при изменении должности менялось то тогда да - составной- оно как бы зацикливанеи не получилось
  5. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Я немного не поняла последнее сообщение, без знаков.
  6. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Вы последнее предложение без знаков припинания написали, не понятно что имели ввиду.)
  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Я имел ввиду что если вы так же хотите что бы и при изменении Должности менялось в Должности организаций - ттогда да - составной тип. Но при таком раскладе зацикливание может быть
    Т.е подписка на событие ПриЗаписи()
    Записали Долности орг - сделались изменения в Должности и идет запись. а раз запись такие же изменения делаем в Долности Орг и пошло по кругу
  8. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Т.е, для того, чтоб при добавлении,изменении и установки пометки на удаление должностей в должности организации переносились в должности, надо выбрать источник только Должности организаций?
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Подписка на событие она для объекта
    т.е есть событие При Записи() вы указываете для каких объектов при событи при записи будет чтото делаться

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

    если укакзали справочник Должности организаций и справочник Должности то при записи и в первом и при записи во втором справочниках будет выполняться каод прописанный в общем модуле
  10. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Т.е. в моем случае необходимо источником указать справочник Должности? Т.к. при изменении должности организации данные должны записываться в должности.
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    наоборот Должности Организации надо указать
    У Вас же при Записи Долдности Организаций (источник) должно меняться в долности а менять уже кодом то будете
  12. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Ну я так и сделала. )))

    Смотрите, создала процедуру, но она не срабатывает. Почему-то не видит Выборка.Код и Выборка.Наименование
    Код:
    Процедура ДИТ_СинхронизацияДолжностейПриЗаписи(Источник, Отказ) Экспорт
        Если Источник.ЭтоНовый() Тогда
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ДолжностиОрганизаций.Ссылка,
            |    ДолжностиОрганизаций.Код,
            |    ДолжностиОрганизаций.Наименование,
            |    ДолжностиОрганизаций.ПометкаУдаления
            |ИЗ
            |    Справочник.ДолжностиОрганизаций КАК ДолжностиОрганизаций
            |ГДЕ
            |    ДолжностиОрганизаций.Ссылка = &Ссылка
            |    И ДолжностиОрганизаций.Код = &Код
            |    И ДолжностиОрганизаций.Наименование = &Наименование
            |    И ДолжностиОрганизаций.ПометкаУдаления = &ПометкаУдаления";
        Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
        Запрос.УстановитьПараметр("Код", Источник.Код);
        Запрос.УстановитьПараметр("Наименование", Источник.Наименование);
        Запрос.УстановитьПараметр("ПометкаУдаления", Источник.ПометкаУдаления);
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
        ТекДолжность = Справочники.Должности.НайтиПоКоду(Выборка.Код);
           Если ТекДолжность.Пустая() Тогда
              НовДолжность = Справочники.Должности.СоздатьЭлемент();
              НовДолжность.Код = Выборка.Код; 
              НовДолжность.Наименование = Выборка.Наименование;          
               НовДолжность.Записать();
            //ИначеЕсли Выборка.ПометкаУдаления Тогда
            //     ТекДолжность.УстановитьПометкуУдаления(Истина);
            // Иначе
            //    ТекДолжность.УстановитьПометкуУдаления(Ложь);
         КонецЕсли;
    
        //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //    // Вставить обработку выборки ВыборкаДетальныеЗаписи
        //КонецЦикла;
        Иначе
         Возврат;
        КонецЕсли;
    
    КонецПроцедуры
  13. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Можно спросить у Вас сколько опыт в программировании 1С.

    я просто смотрю уже который раз и вижу что вы не понимаете сами что пишите

    вот объясните мне зачем Вам тут запрос
  14. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Мало опыта.
    Ну я считаю, что это лучше, чем выпрашивать решение проблемы. Так вы хоть меня можете "пнуть" на ошибки.

    Запрос, чтоб выбрать данные из справочника. По Вашим словам, я поняла, что это можно сделать и без запроса? Источник.код и источник.наименование?
  15. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Именно...
    я Вам советую просто почитать литературу, а не методом проб и ошибок делать.

    Протсо Запрос это обращение к БД. ПриЗаписи на до посмотреть, я уже так ждосканально не помню в БД может еще элемента и нет и Ваш запрос всегда будет пустой. После записи он уже да но у Вас же процедура ПриЗаписи.

    у Вас же есть Источник - это ваш элемент вот и работайте с ним.
    --- Объединение сообщений, 12 апр 2016 ---
    "Лучше день потерять(на чтение) потом за 3 часа долелеть" Мультик прикольный был такой
  16. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    И еще вопрос, почему отладчик даже не заходит в условие в начале? Где
    Если Источник.ЭтоНовый ()
    Он выдает, что это значение - ложь. Хотя я создаю новый.
  17. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну видно подписка отрабатывает уже после записи элемента.
    Можете попробовать сделать подписку ПередЗаписью и тм проверить Там скорее всего ЭтоНовый() Будет истина
  18. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Я делаю подписку при записи. И если я ее сделаю перед записью, то при изменении наименования, оно будет изменено в должности, даже если я нажму отмену. Так что скорее всего надо именно при записи.
    А если вариант перед Источник.ЭтоНовый() поставить "Не"?
  19. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    ПриЗаписи (OnWrite)
    Синтаксис:

    ПриЗаписи(<Отказ>)
    Параметры:

    <Отказ>

    Тип: Булево.
    Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина, то запись выполнена не будет.
    Значение по умолчанию: Ложь
    Описание:

    Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.

    В типовых на новый проверяют передЗаписью т.к при записи вызывается когда уже записан.
  20. TopicStarter Overlay
    19yellow92
    Offline

    19yellow92

    Регистрация:
    29 мар 2016
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Т.е. лучше создать подписку на событие перед записью?
    А как же быть тогда с изменением при наименовании? Перед записью оно не пойдет (((

Поделиться этой страницей