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

  • Автор темы roddik
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

roddik

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

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

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

puh14

Well-Known Member
11.07.2008
1 412
0
#2
Так попробуй - а как у тебя значение переменной Получатель задается? Что-то в функции энтого не видно

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

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

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

roddik

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

puh14

Well-Known Member
11.07.2008
1 412
0
#4
ТО бишь форму открывает а там тишина.. Процедура ОткрытьФорму передает в форму твой КОНТЕКСТ, в твоем случае ссылка на объект док с реквизитами неверна. Чтобы в открытой форме это поймалось надо написать в модуле формы

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

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

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

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

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

roddik

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

puh14

Well-Known Member
11.07.2008
1 412
0
#6
Ну другой вариант - делаешь как делал, только в конце
Док.Записать();
Док.ОткрытьФорму(Док.ТекущийДокумент());

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