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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем RuslanKhanow, 27 май 2015.

  1. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    Всем привет, и снова с новым вопросом)
    Суть задачи:
    При проведении документа “Поступление товаров и услуг” нужно сделать проверку по реквизиту(контрагент), реквизиту(ВХодящийНомер) и реквизиту(ВходнаяДата)
    Сделать сказали можно через "Подписку на событие"
    Но столкнулся с следующими проблемами
    С источником все понятно
    Но есть также Событие и Обработчик.
    Конкретно в моем случае я думаю надо использовать событие "Обработка проведения" может я заблуждаюсь?
    А вот насчет Обработчика вообще не понятно.
    Кто имеет опыт работы с этими Подписками на событие
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    А что с ними не так ? Обработчики срабатывают при определенном событии. Все предельно просто :)
  3. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Ответ в вашей же фразе. Не нужна Вам подписка на событие.
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Подписка на собитие. Событие у вас ПриПроведении
  5. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Если у вас это будет в одном документе - использовать подписку на событие - смысла нет.
  6. rshakiro
    Offline

    rshakiro Профессионал в 1С Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.236
    Симпатии:
    144
    Баллы:
    104
    Нужно добавить(создать) общий модуль. В обработчике жмакаете по лупе, выбираете добавленный модуль, система создаст Процедуру автоматом. Обратиться к реквизитам можно:
    Код:
    Источник.НужныйРеквизит
    --- Объединение сообщений, 28 май 2015 ---
    хм, а почему? Если конфа на поддержке, лучше создать подписку, чем "ковыряться" в документе
  7. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Алекс, в таких случаях всегда удобнее создаватьподписку на событие т.к при этом типовой документ не трогается
  8. Николаич87
    Offline

    Николаич87 Опытный в 1С

    Регистрация:
    1 апр 2015
    Сообщения:
    122
    Симпатии:
    4
    Баллы:
    29
    господа, подписка же отрабатывает после процедуры в модуле объекта. дык получается, что событие нужно перед записью
  9. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Источник - это документ который будет вызывать событие (В вашем случае поступление товаров и услуг)
    Событие - это событие которое будет обрабатываться в подписке(при проведение, перед записью и т.д)
    Обработчик - Это процедура которая будет выполняться при возникновение данного события.


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

    Что по поводу проведения, никто не убирал в подписке на событие Отказ и проведение можно отменить если что то не так с выполнением условий.
  10. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    как уже сказали что если будет Отказ истина в подписке то транзакция откатся на первоначальный вариант перед проведением.
    Тут просто надо думать когда Вам действительно надо проверять.
    может же такое что сотрудник копированием наделал шаблоном, а затем проводит половину из них.
    Тогда вопрос зачем провеять при записи если этот документ еще не проведен и может не будет проведен.
  11. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    Уже разобрался
    Возник вопрос,может кто сможет помочь?
    Код:
    Процедура ПоступелниеТоваровИУслугОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
       НомерВходящегоДокумента = Источник.НомерВходящегоДокумента;
       Ссылка = Источник.Ссылка;
       Запрос = Новый Запрос;
       Запрос.Текст = "ВЫБРАТЬ
                      |    ПоступлениеТоваровУслуг.Ссылка,
                      |    ПоступлениеТоваровУслуг.Контрагент,
                      |    ПоступлениеТоваровУслуг.НомерВходящегоДокумента,
                      |    ПоступлениеТоваровУслуг.ДатаВходящегоДокумента
                      |ИЗ
                      |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                      |ГДЕ
                      |    ПоступлениеТоваровУслуг.Ссылка <> &Ссылка
                      |    И ПоступлениеТоваровУслуг.НомерВходящегоДокумента ПОДОБНО &НомерВходящегоДокумента
        Запрос.УстановитьПараметр("Ссылка",Ссылка);
        Запрос.УстановитьПараметр("НомерВходящегоДокумента",НомерВходящегоДокумента);
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
        Если не Результат.Пустой() тогда
          Сообщить("Имеются документ c таким же входящим номерм,Ошибка проведения!!" );
          Отказ = Истина;
       КонецЕсли; 
    КонецПроцедуры
    
    А как сделать проверку для Контрагента и ДатаВходящегоДокумента
    Контрагент имеет ссылочный тип
    А ПОДОБНО работает только для строки
    --- Объединение сообщений, 28 май 2015 ---
    Для нескольких
  12. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    |ГДЕ
    | ПоступлениеТоваровУслуг.Ссылка <> &Ссылка
    |И ПоступлениеТоваровУслуг.Контрагент = &Контрагент
    | И ПоступлениеТоваровУслуг.НомерВходящегоДокумента ПОДОБНО &НомерВходящегоДокумента
    Запрос.УстановитьПараметр("Контрагент",Источник.Контрагент);
  13. TopicStarter Overlay
    RuslanKhanow
    Offline

    RuslanKhanow Опытный в 1С

    Регистрация:
    18 фев 2015
    Сообщения:
    145
    Симпатии:
    0
    Баллы:
    26
    Уже пробовал через = делать,документ будет проводиться даже если не уникальный
  14. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Подписки на события используются для того, чтобы не писать один и тот же код в 100500 документах и справочниках. Я не считаю целесообразным использовать подписку всего лишь для одного документа и облегчения работы кодера при обновлении :)
  15. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Хм... а что лучше сделать 25 подписок на 25 документов или при обновление руками переносить модуль проведения в 25 документах? при условии что технологический перерыв составляет 30-60 минут в связи со спецификой деятельности предприятия? не вижу логики в этом. Нигде строго не регламентировано что подписку можно использовать только для одного объекта. При этом второй минус если обработку проведения переписал другой программист да еще и не оставил комментариев.
  16. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    НУ это уже надо поотладчику смотреть что за параметры передаются. и что в базе есть

    Алекс, я тоже с тобой не согласен.
    Обычно создают свой общий модуль со своими процедурами и функциями и там все ваяют и потом когда тебе надо найти ты всегда знаешь что вошел в свой модуль и там правишь а не бегать по всем документам и искать.
  17. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Существует всего четыре вида подписки, так что это не страшно.
    Да я согласен с вами, ребята, что через подписку можно все сделать. Я хочу донести просто, для чего ввели вообще этот механизм подписок. К тому же, другому кодеру будет проблемотично понять, почему код отрабатывает именно так, про то, что нужно еще и в подписках посмотреть - об этом как правило начинающие кодеры вообще не думают.
  18. Draco
    Offline

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

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

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Согласен :)
  20. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Почему бы не воспользоваться подпиской на событие "ОбработкаПроверкиЗаполнения"
    Подписки срабатывают, согласно туториалу от 1С, всегда после отработки аналогичных событий в модуле объекта. Кроме этого, если существует несколько однотипных подписок, то 1С не дает гарантий в какой последовательности они выполнятся, но на моей практике 8.3.5 выполняются в последовательности в которой они размещены в конфигурации

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