Имя: Пароль:
1C
1С v8
Ввести на основании сразу 2 документа
,
0 stmnf
 
30.10.15
14:45
8.1
Вопрос такой: можно ли при нажатии на стандартную кнопку ввода на основании создать сразу 2 документа?
Если при нажатии на эту кнопку в исходном документе вызывается какая-нибудь функция, типа "ПередВводомНаОсновании", то, понятно, все просто. Но пока что-то подобной функции не нахожу.
1 HawkEye
 
30.10.15
14:49
(0) второе основание открой из первого..
2 anatoly
 
30.10.15
15:10
(1) распишу подробнее:
в обработках заполнения обоих доков, если основание еще не является основанием для другого - вызывать создание на основании этого другого.
3 Alex unde
 
30.10.15
15:16
что-то типа такого

Процедура ОбработкаЗаполнения(Основание)     
    
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
        
        Док = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
        Док.Заполнить(Основание);
        Док.ПолучитьФорму("ФормаДокумента").Открыть();
        
    КонецЕсли;    
    
КонецПроцедуры
4 stmnf
 
30.10.15
15:37
(3) А как сделать так, чтобы не зациклиться? Как я найду, есть ли уже что-то на основании <Основание>, если подчиненные еще не записаны?
5 HawkEye
 
30.10.15
15:39
(4) тыжпрограммист )))
6 runoff_runoff
 
30.10.15
15:41
(4) КритерииОтбораМенеджер
7 anatoly
 
30.10.15
15:49
(4) значит сначала записывай - потом заполняй другой.
8 stmnf
 
30.10.15
16:06
Не знаю, делаю вот так, смотрю в отладчике МассивСсылок, там все время пусто.

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

А может, в исходном документе реквизит специальный добавить?
9 anatoly
 
30.10.15
16:10
(8) есть стандартный реквизит - ДокументОснование
10 stmnf
 
30.10.15
16:42
Ну вот как-то так работает:

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

Комментарий в качестве флага выбран временно, для тестирования.
11 stmnf
 
30.10.15
17:53
А после небольшого допила конфигурации (добавления реквизита ДокументОснование и включения его в критерий отбора) заработало и так:
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения)
        Записать();
        МассивСсылок = КритерииОтбора.СвязанныеДокументы.Найти(ДанныеЗаполнения);
        Если МассивСсылок.Количество() < 2 Тогда
            Док = Документы.ЗаданиеНаПроизводство.СоздатьДокумент();
            Док.Заполнить(ДанныеЗаполнения);
            Док.ПолучитьФорму("ФормаДокумента").Открыть();
        КонецЕсли;
    КонецПроцедуры
Единственный недостаток тут - это то, что подчиненные документы оказываются введенными независимо от действий пользователя, даже если он решить закрыть форму подчиненного документа. Впрочем, может, это и не недостаток.
Программист всегда исправляет последнюю ошибку.