Как задать документ для ОткрытьФорму?

Тема в разделе "1C и всё что с ней связано", создана пользователем roddik, 7 авг 2008.

Статус темы:
Закрыта.
  1. roddik

    roddik Гость

    Привет! Нужно открывать форму документа, с уже вбитыми в нее данными, вот что делаю сейчас:

    Код (Text):
                    Док = СоздатьОбъект("Документ.РасходнаяНакладная");
    Док.Новый();
    Док.НомерДок = Номер;
    Док.ДатаДок = ДатаДок;
    Док.УстановитьАтрибут("Контрагент", Получатель);
    ...
    ОткрытьФорму("Документ.РасходнаяНакладная" ,, Док);
    Номер - число, датадок - Дата(число), Получатель - по идее один из контрагентов, получаю так:
    Код (Text):
    Функция НайтиИлиПривести(Тип, Описание) //Искать в номенклатуре, если не найдено, искать нечетко
    Спр=СоздатьОбъект("Справочник");
    Спр.Вид(Тип);
    Спр.НайтиПоНаименованию(Описание, 1, 0);
    Если Спр.Выбран() > 0 Тогда
    Возврат(Спр.ПолучитьЭлемент());
    Иначе
    Название = ДостатьНазвание(Описание);
    Если Название = 0 Тогда
    Возврат(ВыбратьИлиНовый(Тип, Описание));  
    КонецЕсли;
    Спр.НайтиПоНаименованию(Название, 1, 0);
    Если Спр.Выбран() > 0 Тогда
    Возврат(Спр.ПолучитьЭлемент());
    Иначе
    Возврат(ВыбратьИлиНовый(Тип, Описание));  
    КонецЕсли;
    КонецЕсли;
    КонецФункции
    Ну, как можно было догадаться, ничего не работает :) В чем дело?

    + как задавать табличную часть документа?
    Спасибо!
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Так попробуй - а как у тебя значение переменной Получатель задается? Что-то в функции энтого не видно

    Док = СоздатьОбъект("Документ.РасходнаяНакладная");
    Док.Новый();
    Док.НомерДок = Номер;
    Док.ДатаДок = ДатаДок;
    Док.УстановитьАтрибут("Контрагент", Получатель);
    ...
    ОткрытьФорму("Документ.РасходнаяНакладная",Док,1);

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

    Если не находит по имени попробуй СокрЛП(Описание) вместо Описание
     
  3. roddik

    roddik Гость

    Читаю из листа екселя строчку с получателем - потом применяю найти или привести
    Код (Text):
    Получатель = ПривестиДанные(ТекущийЛист.Range("_oderzh" +Тип).Value);
    Получатель = НайтиИлиПривести("Контрагенты", Получатель);
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ТО бишь форму открывает а там тишина.. Процедура ОткрытьФорму передает в форму твой КОНТЕКСТ, в твоем случае ссылка на объект док с реквизитами неверна. Чтобы в открытой форме это поймалось надо написать в модуле формы

    Процедура приОТкрытии()
    Док = Форма.Параметр;// вот именно это и передается
    Если пустоеЗначение(Док) = 0 Тогда
    НомерДок = Док.НомерДок;
    Контрагент = Док.Контрагент;

    КонецЕсли;
    КонецПроцедуры

    Ну и так далее.

    а в твоем модуле

    // Док = СоздатьОбъект("Документ.РасходнаяНакладная");// не надо, посвольку объект ты не передашь - только текущий
    //контекст, переменные там, ТЗ-шки
    // Док.Новый();
    // Док.НомерДок = Номер;
    // Док.ДатаДок = ДатаДок;
    // Док.УстановитьАтрибут("Контрагент", Получатель);
    ...
    ОткрытьФорму("Документ.РасходнаяНакладная" ,Контекст);
     
  5. roddik

    roddik Гость

    Пока грузился форум, решил делать через контекст... Все равно спасибо, к тому же не хочется прописывать в модуль формы создания документа свой код
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну другой вариант - делаешь как делал, только в конце
    Док.Записать();
    Док.ОткрытьФорму(Док.ТекущийДокумент());

    Но если в предыдущем варианте у тебя документ могли не сохранить, то тут его надо будет руками удалять.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей