Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ввод на основаниии , Как перехватить событие          
Андрис Подменю пользователя
сообщение 22.06.11, 12:38
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Имеются два документа, один из них вводится на основании другого. Как отменить ввод (создание) нового документа, если на основании первого документа уже был введен документ?
Создал в первом документе реквизит (ЗаявкаНаРемонт) - ссылка на второй документ, заполняется при первом вводе на основании. Во втором документе есть реквизит основание - ссылка на документ-основание. В каком событии проверять на заполнение реквизита ЗаявкаНаРемонт и отказаться от создания нового документа при нажатии на кнопку создать на основании?

Stazy Подменю пользователя
сообщение 22.06.11, 13:14
Сообщение #2

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

В процедуре "Перед открытием" формы документа, вводимого на основании.

Vofka Подменю пользователя
сообщение 22.06.11, 18:03
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Если имеется ввиду именно ввод на основании - тогда
ОбработкаЗаполнения()


А если ввод на основании - это когда определенный реквизит заполнен - тогда можно, как писали выше
ПередОткрытием()

Андрис Подменю пользователя
сообщение 23.06.11, 7:04
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

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

Хотел добавить: ввод на основании осуществляется стандартно. В свойствах документов указано, что один документ является основанием для другого, обработка заполнения построена конструктором. Дальше нужно доработать, отказаться от стандартной обработки и запретить создание документа, если уже введен документ на основании первого документа (это уже писал).

Vofka Подменю пользователя
сообщение 23.06.11, 17:57
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата
Так вот эту ссылку мы никак не имеем в процедуре ПередОткрытием

Почему это? Должны иметь.

Спасибо сказали: Андрис,

Андрис Подменю пользователя
сообщение 24.06.11, 14:29
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 23.06.11, 18:57) *
Почему это? Должны иметь.

Виноват! Все правильно. Сам же создал реквизит ОСНОВАНИЕ у 2-го документа. Его и можно проверять в запросе в процедуре формы ПриОткрытии(), подставляя значение параметра запроса ОБЪЕКТ.ОСНОВАНИЕ. (Или ПриСозданииНаСервере).
Все отлично работает, при нажатии на кнопку создать на основании, новый документ не создается. Но возникла другая проблема: когда я хочу просто просмотреть этот документ, соответственно тоже получаю отказ из события ПриОткрытии().
Надеюсь доступно изъяснился.


//Текст процедуры ПриСозданииНаСервере() (модуль формы 2-го документа)
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЗаявкаНаРемонт.Ссылка
                   |ИЗ
                   |    Документ.ЗаявкаНаРемонт КАК ЗаявкаНаРемонт
                   |ГДЕ
                   |    ЗаявкаНаРемонт.Основание = &СсылкаНаЗаявку";
                  
    Запрос.УстановитьПараметр("СсылкаНаЗаявку", Объект.Основание);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Сообщить("Заявка уже создана!!!"+ "Номер заявки - " + Выборка.Ссылка + Символы.ПС + "Для просмотра кликлите" + Символы.ПС + "на ссылку заявки на форме");
        Отказ = Истина;
        
    КонецЕсли;
Причина редактирования: Выделяем код!

DartRomanius Подменю пользователя
сообщение 24.06.11, 14:46
Сообщение #7

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Андрис @ 24.06.11, 15:29) *
Виноват! Все правильно. Сам же создал реквизит ОСНОВАНИЕ у 2-го документа. Его и можно проверять в запросе в процедуре формы ПриОткрытии(), подставляя значение параметра запроса ОБЪЕКТ.ОСНОВАНИЕ. (Или ПриСозданииНаСервере).
Все отлично работает, при нажатии на кнопку создать на основании, новый документ не создается. Но возникла другая проблема: когда я хочу просто просмотреть этот документ, соответственно тоже получаю отказ из события ПриОткрытии().
Надеюсь доступно изъяснился.


//Текст процедуры ПриСозданииНаСервере() (модуль формы 2-го документа)
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЗаявкаНаРемонт.Ссылка
                   |ИЗ
                   |    Документ.ЗаявкаНаРемонт КАК ЗаявкаНаРемонт
                   |ГДЕ
                   |    ЗаявкаНаРемонт.Основание = &СсылкаНаЗаявку";
                  
    Запрос.УстановитьПараметр("СсылкаНаЗаявку", Объект.Основание);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Сообщить("Заявка уже создана!!!"+ "Номер заявки - " + Выборка.Ссылка + Символы.ПС + "Для просмотра кликлите" + Символы.ПС + "на ссылку заявки на форме");
        Отказ = Истина;
        
    КонецЕсли;



Сделать более сложное сравнение, что-то типа:

Вернуть подчиненный
если подчиненный = неопределено тогда ничего не делаем (или по желанию)
если подчиненный = этот документ (сравнить по ссылке) тогда типа нормально
если подчиненный = не этот документ тогда идем в отказ


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Спасибо сказали: Андрис,

Vofka Подменю пользователя
сообщение 24.06.11, 15:29
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата
Но возникла другая проблема: когда я хочу просто просмотреть этот документ, соответственно тоже получаю отказ из события ПриОткрытии()

Поэтому я изначально и сказал про процедуру
ОбработкаЗаполнения()

Спасибо сказали: Андрис,

DartRomanius Подменю пользователя
сообщение 24.06.11, 16:32
Сообщение #9

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Vofka @ 24.06.11, 16:29) *
Поэтому я изначально и сказал про процедуру
ОбработкаЗаполнения()


Ага.
В данной процедуре установить реквизит основание, ну а дальше в "ПриОткрытии".


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Спасибо сказали: Андрис,

Андрис Подменю пользователя
сообщение 27.06.11, 7:47
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 24.06.11, 16:29) *
Поэтому я изначально и сказал про процедуру
ОбработкаЗаполнения()

А как в ОбработкеЗаполнения отказаться от создания документа? Здесь я только могу заполнить реквизит Объект.Основание.
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
        
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ЗадачаСсылка.ЗаявкаНаРемонт") Тогда
        // Заполнение шапки
        ИнвНомер = ДанныеЗаполнения.ИнвНомер;
        Отдел = ДанныеЗаполнения.Подразделение;
        Основание = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
    
КонецПроцедуры


Цитата(DartRomanius @ 24.06.11, 17:32) *
Ага.
В данной процедуре установить реквизит основание, ну а дальше в "ПриОткрытии".

Надо попробовать ваше более сложное сравнение.

Цитата(DartRomanius @ 24.06.11, 15:46) *
Сделать более сложное сравнение, что-то типа:

Вернуть подчиненный
если подчиненный = неопределено тогда ничего не делаем (или по желанию)
если подчиненный = этот документ (сравнить по ссылке) тогда типа нормально
если подчиненный = не этот документ тогда идем в отказ


Спасибо за наводку.
//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Ключ.Пустая() Тогда  
    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЗаявкаНаРемонт.Ссылка
                   |ИЗ
                   |    Документ.ЗаявкаНаРемонт КАК ЗаявкаНаРемонт
                   |ГДЕ
                   |    ЗаявкаНаРемонт.Основание = &СсылкаНаЗаявку";
                  
    Запрос.УстановитьПараметр("СсылкаНаЗаявку", Объект.Основание);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Сообщить("Заявка уже создана!!!"+ Символы.ПС +Выборка.Ссылка + Символы.ПС + "Для просмотра кликлите" + Символы.ПС + "на ссылку заявки на форме");
        Отказ = Истина;
        
    КонецЕсли;
    
    КонецЕсли;
//

Просто сделал проверку: если форма открывается по кнопке СоздатьНаОсновании, значит создается новый документ, и тогда применяем проверки и отказываемся от создания, если надо.
Если же просто открываем документ для просмотра или редактирования, тогда нестандартного не происходит.
Поправьте меня, если что-то сделал не так.

Спасибо за учебу!
Причина редактирования: Выделяем код!

g789 Подменю пользователя
сообщение 29.06.11, 11:17
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 62
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Андрис @ 22.06.11, 13:38) *
Во втором документе есть реквизит основание - ссылка на документ-основание.


В ОбработкаЗаполнения() заполняяем реквизит

основание = ДанныеЗаполнения.Ссылка;


При сохранении нового документа на основании проверять есть ли уже документ по этому основанию

DartRomanius Подменю пользователя
сообщение 29.06.11, 11:43
Сообщение #12

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(g789 @ 29.06.11, 12:17) *
В ОбработкаЗаполнения() заполняяем реквизит

основание = ДанныеЗаполнения.Ссылка;


При сохранении нового документа на основании проверять есть ли уже документ по этому основанию


Та там не при записи надо было. А при открытии проверять.

Кстати еще вот в голову пришло, проверку на основание делать не всегда при открытии а если это новый не записанный документ.
Например так:
Процедура Приоткрытии(....)
....
Если Параметры.Ключ.Пустая() Тогда // собственно наш случай делаем проверку
    Если ...... Тогда ......
    Иначе.....
    КонецЕсли;
КонецЕсли;
....
КонецПроцедуры


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

g789 Подменю пользователя
сообщение 29.06.11, 13:46
Сообщение #13

Говорящий
***
Группа: Пользователи
Сообщений: 62
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(DartRomanius @ 29.06.11, 12:43) *
Та там не при записи надо было. А при открытии проверять.

Именно при записи - не давать записывать второй документ с одним и тем же основанием. Тогда и при открытии ни чего мудрить не надо

DartRomanius Подменю пользователя
сообщение 29.06.11, 14:18
Сообщение #14

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(g789 @ 29.06.11, 14:46) *
Именно при записи - не давать записывать второй документ с одним и тем же основанием. Тогда и при открытии ни чего мудрить не надо


Вообще ситуация (ранее) выглядела как не давать создать документ на основании, если уже есть такой документ. smile.gif
Читаем внимательно.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 16:45
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!