Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запретить проведение документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
alexk
Добрый день! Скажите как запретить проведение одного документа, пока не будет проведен другой. То есть два документа - Договор и Заявление. Как сделать так, чтобы пока не проведен документ на имя какого-то человека в заявлении, на него его же имя нельзя будет провести документ - Договор? Скажите пожалуйста, как это сделать?
Vofka
В модуле объекта есть событие ОбработкаПроведения. В нём есть параметр Отказ. Если Отказ установить в значение Истина, то документ проводиться не будет. Устанавливайте Отказ в Истина по нужным вам условиям.
logist
Цитата(Vofka @ 03.02.13, 11:47) необходимо зарегистрироваться для просмотра ссылки
В модуле объекта есть событие ОбработкаПроведения.

Лучше использовать в ПередЗаписью. Если РежимЗаписи = Проведение И НекоеУсловие... Что бы проведение не вызывалось вообще.
Vofka
Цитата(logist @ 03.02.13, 12:03) необходимо зарегистрироваться для просмотра ссылки
Лучше использовать в ПередЗаписью. Если РежимЗаписи = Проведение И НекоеУсловие... Что бы проведение не вызывалось вообще.

Сказать честно, чем это лучше - я не знаю, но такой вариант решения тоже приемлемый smile.gif
pablo
Это лучше тем, что не вызывает откат транзакции записи.
Ardi
Цитата(pablo @ 04.02.13, 10:50) необходимо зарегистрироваться для просмотра ссылки
Это лучше тем, что не вызывает откат транзакции записи.

А разве откат транзакции это не новый тренд в рекомендациях 1с?
pablo
А откат транзакции - это лучше, чем вообще транзакцию не создавать?
logist
Цитата(Vofka @ 04.02.13, 9:21) необходимо зарегистрироваться для просмотра ссылки
Сказать честно, чем это лучше - я не знаю

Это лучше тем, что если в результате проверки документ проводить не надо, то и вызывать обработку проведения вообще ни к чему.
alexk
Да, они у меня связаны между собой, так как одно заполняется на основании другого. И насчет ОбработкаПроведения я знаю, хотелось бы подробнее узнать каким образом организовать тот самый запрос или функцию, который позволил бы мне проверить наличие уже существующего документа, записанного на имя того человека который в данный момент варьирует у меня в Договоре. То есть если В заявлениях такого человека нету, то Договор мы не проводим, а если есть - проводим. Вот, если Вам не сложно скажите как именно организовать этот самый запрос или функцию проверки?
pablo
Ожидается приезд телепата для угадывания структуры Вашей конфигурации. Пока он не прибудет, ничем помочь не можем.
svinuk
alexk

Цитата
Как сделать так, чтобы пока не проведен документ на имя какого-то человека в заявлении, на него его же имя нельзя будет провести документ - Договор?


Запрос:
ВЫБРАТЬ 
Документ.Ссылка
ИЗ Документы.Заявление КАК Документ
ГДЕ Документ. Контрагент = &Контрагент


Далее результат этого запроса обрабатывается

Если НЕ Результат.Следующий Тогда
Сообщить("По данному контрагенту нет заявления");
КонецЕсли;


В чем сопсна проблема?

pablo Мне кажется телепат здесь будет безсилен icon_cuss.gif
alexk
Хорошо, хорошо. Вот пожалуйста два документа - Заявление. В нем реквизиты есть Курсант (СправочникСсылка.Курсанты). И документ - Договор, который заполняется на основании Заявления (там тоже Курсант есть, тоже имеет ссылку на справочник). Вот, конфигурация самописная. Какие еще Вам данные желательно бы узнать?
pablo
В документе Договор есть поле ДокументОснование с типом ДокументСсылка.Заявление?
Если нет - советую его добавить.
Тогда условие будет выглядеть так:
Если Не ДокументОснование.Проведен тогда
Отказ=истина;
КонецЕсли;

Можно обойтись и без этого поля, но тогда возможны неприятные коллизии, когда один и тот же курсант будет писать несколько заявлений, но не по каждому будет оформлять договор.
Vofka
pablo, сейчас придет logist и скажет, что можно так:
Отказ = Не ДокументОснование.Проведен;

smile.gif

ЗЫ. Но я лично предпочитаю вариант pablo. smile.gif
logist
необходимо зарегистрироваться для просмотра ссылки
Цитата(Vofka @ 06.02.13, 10:17) необходимо зарегистрироваться для просмотра ссылки
ЗЫ. Но я лично предпочитаю вариант pablo.

Интересно почему? Ведь когда-то мы обсуждали исходные коды модулей, и выявили, что чем меньше кода тем быстрее производительность. Даже если опустить это обсуждение и так понятно, что присвоение значения пройдет быстрее, чем проверка условия, а затем присвоение значения, т.е. зачем выполнять лишнюю операцию?
Vofka
Цитата(logist @ 06.02.13, 10:37) необходимо зарегистрироваться для просмотра ссылки
Интересно почему?

Воспринимается легче.

Цитата(logist @ 06.02.13, 10:37) необходимо зарегистрироваться для просмотра ссылки
Ведь когда-то мы обсуждали исходные коды модулей, и выявили, что чем меньше кода тем быстрее производительность. Даже если опустить это обсуждение и так понятно, что присвоение значения пройдет быстрее, чем проверка условия, а затем присвоение значения, т.е. зачем выполнять лишнюю операцию?

Можете провести эксперимент, но я уверен, что прироста производительности, в данном случае, вы не получите.
pablo
Почему я использую такой вариант:
Как правило, я внутрь условия добавляю дополнительные строчки, а ля Сообщить("Галактика в опасносте!!!111")
logist
Цитата(pablo @ 06.02.13, 11:35) необходимо зарегистрироваться для просмотра ссылки
Почему я использую такой вариант:
Как правило, я внутрь условия добавляю дополнительные строчки

В таком случае да. Но если это одно присвоение значения, то не вижу смысла добавлять условие.
В общем, чего спорить, каждый делает так как хочет.
alexk
Скажите, то есть я добавляю в Документы "Договор" новый реквизит, который называется Основание (ДокументыСсылка.Заявление), и уже исходя из этого реквизита я делаю обработку?
alex040269
Цитата(logist @ 03.02.13, 12:03) необходимо зарегистрироваться для просмотра ссылки
Лучше использовать в ПередЗаписью. Если РежимЗаписи = Проведение И НекоеУсловие... Что бы проведение не вызывалось вообще.

Если документ проводится из журнала или программно ПередЗаписью вызывается?
это дырка.
logist
Цитата(alex040269 @ 07.02.13, 8:17) необходимо зарегистрироваться для просмотра ссылки
Если документ проводится из журнала или программно ПередЗаписью вызывается?

Ну да, это же модуль объекта, а не формы.

Цитата(alex040269 @ 07.02.13, 8:17) необходимо зарегистрироваться для просмотра ссылки
это дырка.

подробнее можно?

5000
pablo
Цитата(alexk @ 06.02.13, 18:42) необходимо зарегистрироваться для просмотра ссылки
Скажите, то есть я добавляю в Документы "Договор" новый реквизит, который называется Основание (ДокументыСсылка.Заявление), и уже исходя из этого реквизита я делаю обработку?

Да. Заполняете этот реквизит в процедуре ОбработкаЗаполнения модуля объекта и анализируете его в соответствующей процедуре.
alex040269
Цитата(logist @ 07.02.13, 8:38) необходимо зарегистрироваться для просмотра ссылки
подробнее можно?


Если запретить проведение документа в событии передзаписью, то док можно записать без проведения закрыть и провести в журнале.
где-то на этом форуме уже обсуждалось.
logist
Цитата(alex040269 @ 07.02.13, 9:16) необходимо зарегистрироваться для просмотра ссылки
Если запретить проведение документа в событии передзаписью, то док можно записать без проведения закрыть и провести в журнале.

Что значит запретить проведение перед записью? Если в модуле объекта ПередЗаписью вызвать Отказ, то и запись не произойдет, и не важно из какого места будет инициирована запись, до проведения в любом случае не дойдет.
Vofka
Цитата(alex040269 @ 07.02.13, 9:16) необходимо зарегистрироваться для просмотра ссылки
и провести в журнале

Не даст провести и в журнале. Событие возникает откуда бы и как бы вы его не проводили.
pablo
alex040269, Вы, вероятно, путаете событие ПередЗаписью формы элемента и аналогичное событие модуля формы. Ваши замечания справедливы только для случая события из модуля формы.
alex040269
Цитата(logist @ 07.02.13, 9:56) необходимо зарегистрироваться для просмотра ссылки
Что значит запретить проведение перед записью? Если в модуле объекта ПередЗаписью вызвать Отказ, то и запись не произойдет, и не важно из какого места будет инициирована запись, до проведения в любом случае не дойдет.


жаль 1С другого мнения!

необходимо зарегистрироваться для просмотра ссылки

Если открыть док и провести, то болт.
Если нажать "все действия" - провести, то все ОК

smile.gif
Vofka
alex040269, ещё раз, с чувством, с толком, с расстановкой: событие ПередЗаписью есть в модуле формы и в модуле объекта! Мы все тут говорим про событие модуля объекта, а не модуля формы. 32542460.gif

Кстати, а шо это за плагиаторский сайт такой?
alexk
Цитата(pablo @ 07.02.13, 10:06) необходимо зарегистрироваться для просмотра ссылки
Да. Заполняете этот реквизит в процедуре ОбработкаЗаполнения модуля объекта и анализируете его в соответствующей процедуре.

Скажите, а как сделать чтобы данный реквизит автоматически заполнялся ссылкой на соответствующее заявление? Не могли бы вы пожалуйста помочь мне в этом вопросе?
pablo
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    ДокументОснование= ДанныеЗаполнения.Ссылка;
...
КонецПроцедуры
alexk
спасибо Вам всем большое!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.