7.7 Учет изменений в документе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Vodovolfram, 30 авг 2006.

  1. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Доброго всем дня!!!

    Вопрос!!! №1 Как програмно узнать каким именно реквизитом формы была запущена процедура...
    Например ... Процедура ИзмКонтрагент() - запускается реквизитом контрагент.

    Вопрос № 2 . Есть ли возможность узнать какие именно изменения вносились в документ????
    метод При открытии документа - выгружать все данные и потом при записи сравнивать --- не подходит
  2. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Передавай в параметрах процедуры имя реквизита
    Код:
    глПересчетТаблЧасти(Контекст,Форма.ТекущаяКолонка())
    
    
    
    а потом анализируй его в процедуре
    Код:
    Если ИмяРеквизита = "Номенклатура" Тогда
    Номенклатура=Конт.Номенклатура;
    
    
    Почему не подходит? Так и делают обычно.
  3. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Есть несколько документов с одинаковыми реквизитами шапки, (табличная часть пока что не интересует). При открытии документа каждый раз выгружать все данные долго (Главное условие - скорость работы). Идея заключается в следующем при изменении одного из интересующих реквизитов запускается процедура типа
    ДокПр=создатьОбъект("Документ."+Вид());
    ДокПр.ВыбратьПоНомеру(СокрЛП(Строка(НомерДок)), ДатаДок, Вид());
    а вот теперь мне надо знать к какому именно реквизиту обратится (каким именно мы запустили даную процедуру) П.С. можно конечно для каждого реквизита указать свою процедуру - но хочеться автоматизировать :)

    например
    изминили контрагента тогда
    старыйКонтрагент=ДокПр.контрагент
    новыйКонтрагент=контрагент

    можно ли передать в процедуру наименование или номер на форме - реквизита
  4. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Пусть процедура одна будет даже в глобальном модуле, но привязка к реквизитам документов всё равно должна быть, ведь нету же предопределенной процедуры ПриИзмененииРеквизита(). Поэтому в каждый реквизит на форме в поле Формула нужно будет прописать вызов этой процедуры. А там уже предусмотреть параметр в котором будет явно передаваться имя этого реквизита.
    Например на форме есть реквизит Контрагент. Тогда обращение к процедуре будет
    глЗаписьИзмененийРеквизита(Контекст,"Контрагент")
    для договора будет
    глЗаписьИзмененийРеквизита(Контекст,"Договор")
    и т.д.
    Процедура по этим параметрам будет знать и документ и реквизит, который надо проверить на факт изменения.
  5. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Все даную задачу решил следующим способом

    Процедура Изменения();
    начальное=докПр.ПолучитьАтрибут(Форма.АктивныйЭлемент());
    конечное=ПолучитьАтрибут(Форма.АктивныйЭлемент());
    сообщить("начальное "+начальное+" текущее "+конечное);
    КонецПроцедуры

    Теперь хотелосьбы чтото похожее и для табличной части но без выгрузки :)
    есть идеи???
  6. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    НомерСтроки надо попробовать использовать
  7. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Есть идеи как можна сделать так, что бы не забивать в каждый реквизит вызов процедуры????
  8. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Если только проверку делать в процедуре ПриЗаписи() оптом для всех реквизитов.
    Кстати насчет табличной части ещё одна закавыка. Там могут быть не только изменения, но и удаления и добавления. Как протоколировать данные действия? Вобщем вот ещё пища для размышления :)
  9. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Для табличной части
    Процедура Изменения1()
    докПр.ПолучитьСтрокуПоНомеру(НомерСтроки);
    нал1=докПр.ПолучитьАтрибут(Форма.ТекущаяКолонка());
    нал=ПолучитьАтрибут(Форма.ТекущаяКолонка());
    сообщить("начальное "+нал1+" текущее "+нал);
    КонецПроцедуры
  10. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    По таблице проблема в том что изменения в ручную параметра ведет за собой изменения програмно других параметров
    например изменения количества (по процедуре получаем) но програмно у нас меняется сумма ... Какие будут мысли как с этим бороться???
  11. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Более того, иногда изменения реквизита шапки документа меняют реквизиты табличной части по всем строкам. Пример: реквизит ТипЦен документа Реализация в конфигурации Торговля и склад
  12. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    При использовании даного метода не получиться использовать ПриЗаписи() - не получим каким именно реквизитом вызывали процедуру :-(

    есть ли возможность дописать на с++ предопределенную процедуру при измененииреквизита(), если да - то как это можна реализовать ????
  13. Tiger
    Offline

    Tiger Опытный в 1С

    Регистрация:
    12 июл 2006
    Сообщения:
    489
    Симпатии:
    0
    Баллы:
    26
    Ты наверно имел ввиду 1С++? С этой штукой я ещё не разбирался. Привык пользоваться стандартными методами.
  14. TopicStarter Overlay
    Vodovolfram
    Offline

    Vodovolfram

    Регистрация:
    30 авг 2006
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Как програмно узнать какая именно процедура прописана в реквизите???
    Как програмно определить описанна ли данная процедура в каком нить реквизите и если да - то в каком???
Похожие темы
  1. nokia
    Ответов:
    7
    Просмотров:
    972
  2. Юджин
    Ответов:
    8
    Просмотров:
    3.631
  3. rom_strizh
    Ответов:
    0
    Просмотров:
    715
  4. baksan
    Ответов:
    9
    Просмотров:
    758
  5. nomad_irk
    Ответов:
    9
    Просмотров:
    422
Загрузка...

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