Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Метод Записать() и предопределенная процедура ПриЗаписи()и
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
nysysimara
конф БухУч для Укр. 7.70.288

Столкнулась с такой ситуёвиной:
На форме документа кнопка ОК, в ней вызов процедуры ДействиеКн()
Процедура ДействиеКн()
    Записать();           // интерактивное проведение????
    Если Вопрос("Провести "+НомерДок+" ("+ДатаДок+") ?",4,0) = 6 Тогда //кнопки Да-6, Нет-7
        Если ДатаДок < ТекущаяДата() Тогда
            Провести(0);
        ИначеЕсли ДатаДок = ТекущаяДата() Тогда
            Ч = 0;
            М = 0;
            С = 0;
            ТекущееВремя(Ч,М,С);
            Если ПолучитьПозицию() > СформироватьПозициюДокумента(ДатаДок,Ч,М,С,) Тогда
                Предупреждение("Проведите документ из ЖУРНАЛА",5);
            Иначе
                Провести(1);
            КонецЕсли;// Если ПолучитьПозицию()
        Иначе        
            Предупреждение("Документ НЕЛЬЗЯ проводить
            |будущей датой!",5);    
        КонецЕсли;// Если ДатаДок ...
    КонецЕсли;
    СтрокаДействийФормы = "Закрыть";
КонецПроцедуры //ДействиеКн


Если док не проводится, либо на вопрос "Провести?" ответ "Нет",
то не срабатывает процедура ПриЗаписи() (проверено отладчиком)

Цитирую описание метода Записать():
"Если этот метод применяется в Модуле формы документа непосредственно к документу локального контекста, то данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой ''#Записать''."
Почему тогда не срабатывает ПриЗаписи() ???

PS в ПриЗаписи() были действия: если док записан впервые, то автор=пользователь
На мой взгляд правильнее в процедуре ВводНового() добавить строку Автор = Пользователь; что я и сделала

Но вопрос остается: Почему не срабатывает ПриЗаписи() ???
g789
Цитата(nysysimara @ 29.09.11, 14:24) необходимо зарегистрироваться для просмотра ссылки
Записать(); // интерактивное проведение????

Мне кажется, что
Записать() - относится к документу как объекту и не требует наличия формы, а ПриЗаписи() - отрабатывает при наличии формы.
Пример:
Док = СоздатьОбъект("Документ.КакойНибудь");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент()=1 Цикл
  Док.Записать(); //Здесь нет формы и соответственно модуль формы не доступен
КонецЦикла;
nysysimara
Экспериментирую. заменила строку
Записать();

на
СтрокаДействийФормы = "Записать";

теперь во всех перечисленных случаях срабатывает ПриЗаписи()
igmig65
Цитата
Если док не проводится, либо на вопрос "Провести?" ответ "Нет",
то не срабатывает процедура ПриЗаписи() (проверено отладчиком)

Цитата
ПриЗаписи
Предопределенная процедура при записи документа.
Синтаксис:
ПриЗаписи()
Англоязычный синоним:
OnWrite
Описание:
Вызов предопределенной процедуры ПриЗаписи производится в системе 1С:Предприятие при интерактивной записи документа. Если в данной предо­пределенной процедуре установить статус возврата — 0 (например, если данно-wy пользователю нельзя изменять реквизиты документа), запись документа не будет выполнена.
Данная предопределенная процедура может располагаться в Модулях фор­мы документов (см. «Виды программных модулей»).

Вы ж его интерактивно то незаписываете.....
nysysimara
Повторюсь:
описание метода Записать():
"Если этот метод применяется в Модуле формы документа непосредственно к документу локального контекста,
то данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой ''#Записать''."

БРЕХНЯ

на форме документа создала две кнопки:
1 "ИнтерЗап" - в формуле "#Записать"
2 "ПроцЗап" - "ПроцЗаписать()"

Процедура ПроцЗаписать()
    Записать();
КонецПроцедуры

и добавила в процедуру ПриЗаписи() сообщение
Процедура ПриЗаписи()   
    Сообщить("сработала процедура ПриЗаписи");


создаю документ№1, жму кнопку "ИнтерЗап" => документ записан, сообщение появилось
создаю документ№2, жму кнопку "ПроцЗап" => документ записан, сообщение НЕ появилось

или я не правильно понимаю фразу "метод применяется в Модуле формы документа непосредственно к документу локального контекста"?
igmig65
Цитата
1 "ИнтерЗап" - в формуле "#Записать"

Цитата
жму кнопку "ИнтерЗап" => документ записан, сообщение появилось

интерактивное нажатие
Цитата
2 "ПроцЗап" - "ПроцЗаписать()"

Цитата
жму кнопку "ПроцЗап" => документ записан, сообщение НЕ появилось

здесь у вас стработала функция Записать() и док в процедуре ПроцЗаписать() и док записался. Но нет интерактивного нажатия.
Что тут непонятно cool.gif .
nysysimara
Вывод такой:
под "те же действия, как интерактивное нажатие пользователем кнопки с формулой ''#Записать''"
подразумевается только запись документа
igmig65
При интерактивном нажатии кнопки с формулой '#Записать''" срабатывает функция Записать() и док записуется, но помимо этого срабатывает процедура ПриЗаписи(), в которой вы можете вернуть СтатусВозврата(0) в каком нибудь условии, и тогда док незапишется. В этом можно сказать разница. Вам дается возможность програмно вставить условия записи документа.
twilight_dream
ребята, шо вы курили? Пришлите плиззз...
XBrut
тю. так вызовите метод "ПриЗаписи()" принудительно. я всегда так делаю, причём заметтье , с большим успехом smile.gif
или вас теоретический аспект интересует?
в 7 платформе сомнительно - кривые места не поддаются исчислению. мне кажется , их следует заботливо заклеивать скотчем (соплями) и всё будет хорошо.
sava1
А не так, как в 8 - для того, чтобы заклеить новую новую дыру, отрывают скотч со старой...
mister-x
некропостери маст дай 32541510.gif
XBrut
Чо "некропостеры" ?
Цитата
Тема важная и актуальная
(ц) Виктор Медведчук
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.