1. 1C / Говнокод #14520

    −170

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Если Источник.ПометкаУдаления <> Источник.ЭтотОбъект.Ссылка.ПолучитьОбъект().ПометкаУдаления Тогда
    	
    	// Действия
    	
    КонецЕсли;

    Код в конфигурации клиента.
    Условный цикл в подписке "Перед записью" документа.
    Смысл в том, чтобы сравнить изменённую пометку удаления и текущую (хранящуюся в базе).
    Следовало написать:

    Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления

    Запостил: Voittamaton, 07 Февраля 2014

    Комментарии (14) RSS

    • Может иначально было что-то другое?
      Ответить
      • Или проверка на то как оно будет выглядель именно в этом виде?
        Ответить
        • Внутри условного цикла выполняется запись лога в отдельный файл, хранящий список помеченных на удаление документов. По каким-то причинам не устроил журнал регистрации.
          Ответить
          • Со своим-то логом куда удобнее работать!
            Ответить
    • ЭтотОбъект это уже объект, код явно писал норкоман.
      Ответить
      • если ПолучитьОбъект() из Ссылка ПередЗаписью, то будет зачитан другой объект - тот, который лежит в базе данных.
        Ответить
        • Этого я и боялся
          Ответить
        • Пометка удаления, как мне кажется, предзаписанному объекту принадлежать не может. Но спорить не буду.
          Ответить
          • Что значит "предзаписанному объекту"?
            Ответить
    • Предложенный вариант тоже не очень хорош - вообще что-либо получать через точку из ссылки не стоит.
      Ответить
      • Каковы будут Ваши предложения насчёт сравнения текущей пометки удаления с хранящейся в базе данных?
        В принципе, можно объявить экспортную переменную модуля документа и помещать в неё значение пометки удаления, хранящейся в базе. Таким образом код будет выглядеть следующим образом:

        НЕ Источник.ПометкаУдаления = Источник.врПометкаУдаления
        Ответить
        • Но в таком случае экспортную переменную модуля "врПометкаУдаления" и обработку её заполнения придётся писать для всех документов, к которым подключена подписка.
          Ответить
          • Если в транзакции до этого не было обращения к ссылке через точку, то запросом с выбором конкретно поля ПометкаУдаления.
            Обращение через точку на 6 секунд кладет в кэш _все_ реквизиты и ТЧ объекта. и да, ХранилищеЗначений с многомегабайтным файлом тоже.
            Ответить

    Добавить комментарий