• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

roddik

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

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

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

Ну, как можно было догадаться, ничего не работает :) В чем дело?

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

puh14

Так попробуй - а как у тебя значение переменной Получатель задается? Что-то в функции энтого не видно

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

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

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

roddik

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

puh14

ТО бишь форму открывает а там тишина.. Процедура ОткрытьФорму передает в форму твой КОНТЕКСТ, в твоем случае ссылка на объект док с реквизитами неверна. Чтобы в открытой форме это поймалось надо написать в модуле формы

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

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

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

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

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

roddik

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

puh14

Ну другой вариант - делаешь как делал, только в конце
Док.Записать();
Док.ОткрытьФорму(Док.ТекущийДокумент());

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!