Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Ввод на основании. Открытие существующего

Ввод на основании. Открытие существующего
Я
   nAPACEHAK
 
04.06.18 - 16:45
Доброго всем

Помогите разобраться со вводом на основании - если док. существует, что бы открывался существующий, а не создавался новый.

интернет курил, не помогло. (((( 

Обычные формы
Если документ существует уже, то открывается существующий + новый
Где запретить создание нового?

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


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
//КонецПроцедуры

//Процедура ПриОткрытии()
    
    ДокСсылка =  ПровертьСуществованиеДокумента();
    Если ДокСсылка <> 0 Тогда
        СтандартнаяОбработка = Ложь;
        ОткрытьЗначение(ДокСсылка);
        Отказ = Истина;
    КонецЕсли;     
КонецПроцедуры

Функция ПровертьСуществованиеДокумента()

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

КонецФункции


 
 
   Beduin
 
1 - 04.06.18 - 16:46
(0) Так приоткрытии отработает, когда уже все. Окончен бал
   spiller26
 
2 - 04.06.18 - 16:50
(0) Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

Проверяй там если есть открывай, а в этой делай возврат, если нет пусть дальше заполняет.
   bolobol
 
3 - 04.06.18 - 16:51
Отказ в ПередОткрытием не отрабатывает штолле?
   Beduin
 
4 - 04.06.18 - 16:55
(3) Она позже чем заполнение вызовется
   spiller26
 
5 - 04.06.18 - 16:58
(3) Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ПровертьСуществованиеДокумента() = 0 Тогда
Возврат;
КонецЕсли;
 
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказНаряд") Тогда
            Автомобиль = ДанныеЗаполнения.Автомобиль;
            СервисныйКонсультант = ДанныеЗаполнения.Диспетчер;
            Мастер = ДанныеЗаполнения.Мастер;
            ЗаказНаряд = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
КонецПроцедуры
   nAPACEHAK
 
6 - 04.06.18 - 16:59
(3) нет. Точнее в таком виде как выше - он совсем не открывает, в случае когда док существует, ни существующий ни новый

(2) пробовал в ОбработкаЗаполнения открывать - если есть ссылка в выборке (существует) то
ПараметрыФормы = Новый Структура("Ключ", Выборка.Ссылка);
ОткрытьФорму("Документ.BR_КонтрольКачества.ФормаОбъекта", ПараметрыФормы)

так тоже открывает существующий + новый
   spiller26
 
7 - 04.06.18 - 17:00
(5) поправка на ветер
Если ПровертьСуществованиеДокумента() <> 0 Тогда
//тут нужно открыть существующие

Возврат;//уже есть такие, так что болты, дальше не пойду

КонецЕсли;
   nAPACEHAK
 
8 - 04.06.18 - 17:15
(7) Открывает новый + существующий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказНаряд") Тогда
        ДокСсылка = ПровертьСуществованиеДокумента(ДанныеЗаполнения);    
        Если ДокСсылка <> 0 Тогда
            ПараметрыФормы = Новый Структура("Ключ", ДокСсылка);
            ОткрытьФорму("Документ.BR_КонтрольКачества.ФормаОбъекта", ПараметрыФормы); 
            Возврат;
        КонецЕсли; 
        
        Автомобиль = ДанныеЗаполнения.Автомобиль;
        СервисныйКонсультант = ДанныеЗаполнения.Диспетчер;
        Мастер = ДанныеЗаполнения.Мастер;
        ЗаказНаряд = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
КонецПроцедуры

Функция ПровертьСуществованиеДокумента(ЗаказНаряд) Экспорт

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

КонецФункции


   nAPACEHAK
 
9 - 04.06.18 - 17:18
(7) (8) при чем новый - без заполнения реквизитов. Просто чистый новый док
   Cyberhawk
 
10 - 04.06.18 - 17:21
Так делать не надо.
При открытии связанного объекта проверяй, что связанный документ уже сушествует, сообщай об этом, плюс сообщай что надо сделать, чтобы все-таки ввести новый связанный объект (например, пометить на удаление старый), и отменяй открытие формы нового.
Иначе как ты введешь новый связанный объект?
 
 Рекламное место пустует
   nAPACEHAK
 
11 - 04.06.18 - 17:25
(10) пользовательские сообщения?
   Cyberhawk
 
12 - 04.06.18 - 17:28
Какие сообщения? Что-то ты задаешь ненужные вопросы.
Ответь на мой вопрос.
   Малыш Джон
 
13 - 04.06.18 - 17:31
(9)Отказ в ОбработкеЗаполнения означает отказ заполнения, а не отказ от открытия нового документа, созданного на основании. Новый документ все равно откроется, просто будет незаполненный.

Используй дополнительные свойства:
В ОбработкеЗаполнения() проверяй на существующий, если есть, то открывай существующий, а в ДополнительныеСвойства вставляй свойство типо "ОтменаОткрытия"
А ПередОткрытием() проверяй, если в ДополнительныхСвойтсвах есть свойство "ОтменаОткрытия", то ставь Отказ = Истина.
   nAPACEHAK
 
14 - 04.06.18 - 17:32
эмм....  мож я чего не так понял? точнее я чегото вроде совсем не понял ((((

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
возврат;
итд

создается новый документ

значит наверно всетаки в ПриОткрытии () проверки надо делать

Но в ПриОткрытии - в теме поста

чего то совсем запутался (( 

(10) мож я вопрос не понял. Хочу что бы если документ уже был введен на основании ЗН, то открывался ранее введенный документ. Если нет - то новый

(13) были такие мысли но чего то не получилось разобраться с ДопСвойствами (((
   Cyberhawk
 
15 - 04.06.18 - 17:35
(13) "Используй дополнительные свойства" // Не прокатит - они в форму не передаются
   Fragster
 
16 - 04.06.18 - 17:35
   nAPACEHAK
 
17 - 04.06.18 - 17:35
в ДополнительныеСвойства как "ОтменаОткрытия" добавить?
   Cyberhawk
 
18 - 04.06.18 - 17:35
(14) "Хочу что бы если документ уже был введен на основании ЗН, то открывался ранее введенный документ" // А теперь мой вопрос в (10)
   Cyberhawk
 
19 - 04.06.18 - 17:38
   nAPACEHAK
 
20 - 04.06.18 - 17:47
(10) (18)
плюс сообщай что надо сделать, чтобы все-таки ввести новый связанный объект (например, пометить на удаление старый)// а просто открыть старый не получится?
   Малыш Джон
 
21 - 04.06.18 - 17:51
(15) Если в обычных формах ( а судя по коду - это они)  - то сработает, так как здесь в событии ПередОткрытием доступен и сам объект и его допсвойства.
   nAPACEHAK
 
22 - 04.06.18 - 17:53
(15) ну может через глобальную переменную флаг существования передать можно?

Форма = ПолучитьФорму("Документ.BR_КонтрольКачества.ФормаОбъекта", ПараметрыФормы);
            Форма.УжеСуществует = Истина;
            Форма.Открыть ();
   Малыш Джон
 
23 - 04.06.18 - 17:55
(14) в модуле объекта
Процедура ОбработкаЗаполнения()
  ...если нашел существующий документ...
  Отказ = Истина;
  НайденныйДокумент.ПолучитьФорму().Открыть();
  ДополнительныеСвойства.Вставить("ОтменаОткрытия");
  ... иначе
   ... обработка заполнения
КонецПРОцедуры

в модуле формы:
Процедура ПередОткрытием()
  Если ДополнительныеСвойства.Свойство("ОтменаОткрытия") Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
   Cyberhawk
 
24 - 04.06.18 - 17:57
(21) А, ну для ОФ, наверное, да - не проверял. Для УФ стопудово нет.
   Cyberhawk
 
25 - 04.06.18 - 17:57
(20) Букварь тебе в помощь
   nAPACEHAK
 
26 - 04.06.18 - 18:50
(25) Не спорю. А У Вас сразу всё получалось? С первых шагов?
   Cyberhawk
 
27 - 04.06.18 - 19:31
(26) Сначала надо сдать экзамен на знание букваря
   nAPACEHAK
 
28 - 04.06.18 - 19:59
(27) Спасибо что помогли :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует