Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Формування і відкриття документа (його форми) із іншого документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
mister-x
Ітак, є док-и ПродажаТоваров и ЗаявкаНаТранспорт. ЗаявкаНаТранспорт формується на основі ПродажаТоваров. Причому, якщо сума в ПродажаТоваров >= 1000 є можливість (через запитання) формувати док-т ЗаявкаНаТранспорт.

Код в док-ті ПродажаТоваров:


&НаСервере
Функция ЗаявкаНаТранспорт()
    
    НовДок = Документы.ЗаявкаНаТранспорт.СоздатьДокумент();
    //НовДок.ДатаДоставки = ДатаЗаявки;

    НовДок.Дата = ТекущаяДата();
    НовДок.Контрагент = Объект.Контрагент;
    
    Для каждого Стр Из Объект.Контрагент.КонтактныеЛица Цикл
        Тел = Стр.Телефон;
        Контакт = Стр.Контакт;        
        Прервать;    
    КонецЦикла;      
    НовДок.КонтактноеЛицо = Контакт;
    НовДок.Телефон = Тел;
    
    НовДок.СвязьИзПродажаТоваров = Объект.Ссылка;
    
    
    //Для Каждого ТекСтрока Из Товары Цикл

    //    СтрДок = НовДок.Товары.ДобавитьСтроку();

    //    СтрДок.Номенклатура     = ТекСтрока.Номенклатура;

    //    СтрДок.Серия             = ТекСтрока.Серия;

    //    СтрДок.ЕдиницаИзмерения = ТекСтрока.ЕдиницаИзмерения;

    //    СтрДок.Цена                = ТекСтрока.Цена;

    //    СтрДок.Количество        = ТекСтрока.Количество;

    //    СтрДок.Сумма            = ТекСтрока.Сумма;

    //КонецЦикла;

    
    НовДок.Записать();
    ФормаЗаявки = НовДок.ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");
    ФормаЗаявки.Открыть();
    
    Возврат 1;
        
КонецФункции


&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    
    Отказ = Ложь;  
    Если Объект.Товары.Итог("Сумма") > 1000 Тогда        
        Отказ = Истина;
        Если Вопрос("Есть возможность бесплатной доставки - документ ""Заявка на транспорт""!", РежимДиалогаВопрос.ДаНетОтмена) =
            КодВозвратаДиалога.Да Тогда
            //ВвДата = ТекущаяДата();

            //Подсказка = "Введите дату и время доставки товара";

            //ЧастьДаты = ЧастиДаты.ДатаВремя;

            //Если ВвестиДату(ВвДата, Подсказка, ЧастьДаты) Тогда                        

            //    ЗаявкаНаТранспорт(ВвДата);                

            //Иначе

                //ЗаявкаНаТранспорт(ТекущаяДата());

                ЗаявкаНаТранспорт();
                //ФормаЗаявки = ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");

                //ФормаЗаявки = Док.ПолучитьФорму();

                
                Отказ = Ложь;
            //КонецЕсли;        

        Иначе
            Отказ = Ложь;        
        КонецЕсли;
    Иначе
        Отказ = Ложь;
    КонецЕсли;
    
КонецПроцедуры


В модуле док-у ЗаявкаНаТранспорт - код:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПродажаТоваров") Тогда
        // Заполнение шапки

        СтандартнаяОбработка = Ложь;
        //Контрагент = ДанныеЗаполнения.Контрагент;

        //СвязьИзПродажаТоваров = ДанныеЗаполнения.Ссылка;

        
    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

КонецПроцедуры


Чомусь при відкритті док-у ЗаявкаНаТранспорт (форми), із док-у ПродажаТоваров (програмно) не видно заповнених реквізитів (Контрагент,СвязьИзПродажаТоваров в відлагоджувачі вони заповненні). Хоча при перевідкритті док-у ЗаявкаНаТранспорт, всі реквізити заповненні. Підозрюю, що при програмному відкритті док-у ЗаявкаНаТранспорт дані із серверу ще не попали на клієнт.
Як бути? Як відкривати форму в цьому випадку?

І взагалі - відкрити форму вже існуючого об'єкту?

Дякую за відгуки.
logist
Пусть функция возвращает ссылку на созданный документ, который затем и открывается.
Если нужно через "Основание" то обозначьте в свойствах документа что на основании чего создается, и в обработке заполнения заявки пропишите заполнение необходимых полей.

p.s. такое чувство что мы эту задачу будем решать вечно...
mister-x
Цитата
Если нужно через "Основание" то обозначьте в свойствах документа что на основании чего создается, и в обработке заполнения заявки пропишите заполнение необходимых полей.

дякую, поки потрібно із ПродажаТоваров створювати і відкривати ЗаявкаНаТранспорт.
mister-x
ПродажаТоваров:
&НаСервере
Функция ЗаявкаНаТранспорт()
    
    НовДок = Документы.ЗаявкаНаТранспорт.СоздатьДокумент();
    //НовДок.ДатаДоставки = ДатаЗаявки;
    НовДок.Дата = ТекущаяДата();
    НовДок.Контрагент = Объект.Контрагент;
    
    Для каждого Стр Из Объект.Контрагент.КонтактныеЛица Цикл
        Тел = Стр.Телефон;
        Контакт = Стр.Контакт;        
        Прервать;    
    КонецЦикла;       
    НовДок.КонтактноеЛицо = Контакт;
    НовДок.Телефон = Тел;
    
    НовДок.СвязьИзПродажаТоваров = Объект.Ссылка;
    
    
    //Для Каждого ТекСтрока Из Товары Цикл
    //    СтрДок = НовДок.Товары.ДобавитьСтроку();
    //    СтрДок.Номенклатура     = ТекСтрока.Номенклатура;
    //    СтрДок.Серия             = ТекСтрока.Серия;
    //    СтрДок.ЕдиницаИзмерения = ТекСтрока.ЕдиницаИзмерения;
    //    СтрДок.Цена                = ТекСтрока.Цена;
    //    СтрДок.Количество        = ТекСтрока.Количество;
    //    СтрДок.Сумма            = ТекСтрока.Сумма;
    //КонецЦикла;
    
    НовДок.Записать();
    
    Возврат НовДок;
        
КонецФункции

&НаСервере
Функция ЗаявкаНаТранспорт()
    
    НовДок = Документы.ЗаявкаНаТранспорт.СоздатьДокумент();
    //НовДок.ДатаДоставки = ДатаЗаявки;
    НовДок.Дата = ТекущаяДата();
    НовДок.Контрагент = Объект.Контрагент;
    
    Для каждого Стр Из Объект.Контрагент.КонтактныеЛица Цикл
        Тел = Стр.Телефон;
        Контакт = Стр.Контакт;        
        Прервать;    
    КонецЦикла;       
    НовДок.КонтактноеЛицо = Контакт;
    НовДок.Телефон = Тел;
    
    НовДок.СвязьИзПродажаТоваров = Объект.Ссылка;
    
    
    //Для Каждого ТекСтрока Из Товары Цикл
    //    СтрДок = НовДок.Товары.ДобавитьСтроку();
    //    СтрДок.Номенклатура     = ТекСтрока.Номенклатура;
    //    СтрДок.Серия             = ТекСтрока.Серия;
    //    СтрДок.ЕдиницаИзмерения = ТекСтрока.ЕдиницаИзмерения;
    //    СтрДок.Цена                = ТекСтрока.Цена;
    //    СтрДок.Количество        = ТекСтрока.Количество;
    //    СтрДок.Сумма            = ТекСтрока.Сумма;
    //КонецЦикла;
    
    НовДок.Записать();
    
    Возврат НовДок;
        
КонецФункции


&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    
    Отказ = Ложь;  
    Если Объект.Товары.Итог("Сумма") > 1000 Тогда        
        Отказ = Истина;
        Если Вопрос("Есть возможность бесплатной доставки - документ ""Заявка на транспорт""!", РежимДиалогаВопрос.ДаНетОтмена) =
            КодВозвратаДиалога.Да Тогда
            //ВвДата = ТекущаяДата();
            //Подсказка = "Введите дату и время доставки товара";
            //ЧастьДаты = ЧастиДаты.ДатаВремя;
            //Если ВвестиДату(ВвДата, Подсказка, ЧастьДаты) Тогда                        
            //    ЗаявкаНаТранспорт(ВвДата);                
            //Иначе
                //ЗаявкаНаТранспорт(ТекущаяДата());
                Док = ЗаявкаНаТранспорт();
                //ФормаЗаявки = НовДок.ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");
                //ФормаЗаявки.Открыть();
                ФормаЗаявки = Док.ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");
                ФормаЗаявки.Открыть();
                
                Отказ = Ложь;
            //КонецЕсли;        
        Иначе
            Отказ = Ложь;        
        КонецЕсли;
    Иначе
        Отказ = Ложь;
    КонецЕсли;
    
КонецПроцедуры

Цікавить - чи я правильно отримую форму уже записаного об"єкта-документа:
ФормаЗаявки = Док.ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");

?
mister-x
функція вертає об"єкт-документ
mister-x
через лінк на док - все ок
...
Возврат НовДок.Ссылка;
...
....

Док = ЗаявкаНаТранспорт();
                //ФормаЗаявки = НовДок.ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");
                //ФормаЗаявки.Открыть();
                ФормаЗаявки = Док.ПолучитьФорму(); //ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента");
                ФормаЗаявки.Открыть();
...
mister-x
а от конструкцію:
ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента")

у яких випадках необхідно використовувати?
logist
Цитата(mister-x @ 12.03.11, 16:19) необходимо зарегистрироваться для просмотра ссылки
а от конструкцію:
ПолучитьФорму("Документ.ЗаявкаНаТранспорт.Форма.ФормаДокумента")

у яких випадках необхідно використовувати?

Когда нужно явно указать форму которая не является основной.
mister-x
Яким чином її використовувати для вибраного об'єкту:
СсылкаНаОбъект.ПолучитьФорму("ПутьКОбъекту.Форма.КонкретнаяФорма")

чи
ПолучитьФорму("ПутьКОбъекту.Форма.КонкретнаяФорма")

без СсылкаНаОбъект?
Vofka
Без ссылок. Форма одна и та же для всех ссылок.
mister-x
якщо вертати у функції об"єкт-документ, то відкривається форма, яку снегерила 1С-ка сама на основі даних об"єкту - ось при такому коді:
...
Возврат НовДок;
...
....

Док = ЗаявкаНаТранспорт();
ФормаЗаявки = Док.ПолучитьФорму();
ФормаЗаявки.Открыть();
...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.