Имя: Пароль:
1C
1С v8
Ввод на основании. Открытие существующего
0 nAPACEHAK
 
04.06.18
16:45
Доброго всем

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

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

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


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


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

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

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

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

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

Проверяй там если есть открывай, а в этой делай возврат, если нет пусть дальше заполняет.
3 bolobol
 
04.06.18
16:51
Отказ в ПередОткрытием не отрабатывает штолле?
4 Beduin
 
04.06.18
16:55
(3) Она позже чем заполнение вызовется
5 spiller26
 
04.06.18
16:58
(3) Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

Если ПровертьСуществованиеДокумента() = 0 Тогда
Возврат;
КонецЕсли;

    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказНаряд") Тогда
            Автомобиль = ДанныеЗаполнения.Автомобиль;
            СервисныйКонсультант = ДанныеЗаполнения.Диспетчер;
            Мастер = ДанныеЗаполнения.Мастер;
            ЗаказНаряд = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
КонецПроцедуры
6 nAPACEHAK
 
04.06.18
16:59
(3) нет. Точнее в таком виде как выше - он совсем не открывает, в случае когда док существует, ни существующий ни новый

(2) пробовал в ОбработкаЗаполнения открывать - если есть ссылка в выборке (существует) то

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

так тоже открывает существующий + новый
7 spiller26
 
04.06.18
17:00
(5) поправка на ветер

Если ПровертьСуществованиеДокумента() <> 0 Тогда
//тут нужно открыть существующие
Возврат; //уже есть такие, так что болты, дальше не пойду
КонецЕсли;
8 nAPACEHAK
 
04.06.18
17:15
(7) Открывает новый + существующий


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработкаЗаполнения()
  ...если нашел существующий документ...
  Отказ = Истина;
  НайденныйДокумент.ПолучитьФорму().Открыть();
  ДополнительныеСвойства.Вставить("ОтменаОткрытия");
  ... иначе
   ... обработка заполнения
КонецПРОцедуры

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