Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 06:27

ФормаЗадачи, открыть документ

Автор insarelle Ситдикова, 04 апр 2020, 21:21

0 Пользователей и 1 гость просматривают эту тему.

insarelle Ситдикова

Добрый день! Хочу сделать так чтобы  на форме задачи любой у меня при нажатии на кнопку Открыт документ, открывался документ для записи данных. Есть код:
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
   СсылкаНаДок = ПолучитьСсылкуНаДокумент();
   ОткрытьЗначение(СсылкаНаДок);
   КонецПроцедуры
   
   &НаСервере
   Функция ПолучитьСсылкуНаДокумент()
      Если Объект.ТочкаМаршрута.Имя="ВыборБанка" Тогда
         НовыйДокумент = Документы.ВыборБанка.СоздатьДокумент();
       НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Записать();
    Возврат НовыйДокумент.Ссылка;
КонецЕсли;
Если  Объект.ТочкаМаршрута.Имя="ЗаявлениеРоссия" Тогда
НовыйДокумент =Документы.ЗаявлениеНаПереводПоРоссии.СоздатьДокумент();
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Записать();
    Возврат НовыйДокумент.Ссылка;
   КонецЕсли;
   КонецФункции
но он при попытке нажать на кнопку выдает ошибку Неопределено. Подскажите что делать пожалуйста

LexaK

так имена точек маршрута проверяйте
если не это
Если  Объект.ТочкаМаршрута.Имя="ЗаявлениеРоссия" Тогда
или не это
Если Объект.ТочкаМаршрута.Имя="ВыборБанка" Тогда

то как раз Неопределено будет возвращаться!!!
(а где у вас привязка документа к Задаче? так можно много документов насоздавать)

попробуйте такую процедуру

&НаКлиенте
Процедура ОткрытьДокумент(Команда)
   СсылкаНаДок = ПолучитьСсылкуНаДокумент();
   Если СсылкаНаДок <> Неопределено Тогда
        //документ создан, открываем
   ОткрытьЗначение(СсылкаНаДок);
   КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылкуНаДокумент()

лкИмя = Объект.ТочкаМаршрута.Имя;
Если лкИмя = "ВыборБанка" Тогда
НовыйДокумент = Документы.ВыборБанка.СоздатьДокумент();
ИначеЕсли лкИмя = "ЗаявлениеРоссия" Тогда
НовыйДокумент =Документы.ЗаявлениеНаПереводПоРоссии.СоздатьДокумент();
Иначе
//не предусмотренная точка
ВызватьИсключение "Не правильная точка маршрута: " + лкИмя;
        //или просто Сообщить и вернуть Неопределено
КонецЕсли;

//документ создан, записываем и возращаем Ссылку
НовыйДокумент.Дата = ТекущаяДата();
Попытка
НовыйДокумент.Записать();
лкСсылка = НовыйДокумент.Ссылка;
Исключение
//не удалось записать документ, сообщаем причину
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
лкСсылка = Неопределено;
КонецПопытки;

Возврат лкСсылка;

КонецФункции
если помогло нажмите: Спасибо!

insarelle Ситдикова

Цитата: LexaK от 06 апр 2020, 12:19
так имена точек маршрута проверяйте
если не это
Если  Объект.ТочкаМаршрута.Имя="ЗаявлениеРоссия" Тогда
или не это
Если Объект.ТочкаМаршрута.Имя="ВыборБанка" Тогда

то как раз Неопределено будет возвращаться!!!
(а где у вас привязка документа к Задаче? так можно много документов насоздавать)

попробуйте такую процедуру

&НаКлиенте
Процедура ОткрытьДокумент(Команда)
   СсылкаНаДок = ПолучитьСсылкуНаДокумент();
   Если СсылкаНаДок <> Неопределено Тогда
        //документ создан, открываем
   ОткрытьЗначение(СсылкаНаДок);
   КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылкуНаДокумент()

лкИмя = Объект.ТочкаМаршрута.Имя;
Если лкИмя = "ВыборБанка" Тогда
НовыйДокумент = Документы.ВыборБанка.СоздатьДокумент();
ИначеЕсли лкИмя = "ЗаявлениеРоссия" Тогда
НовыйДокумент =Документы.ЗаявлениеНаПереводПоРоссии.СоздатьДокумент();
Иначе
//не предусмотренная точка
ВызватьИсключение "Не правильная точка маршрута: " + лкИмя;
        //или просто Сообщить и вернуть Неопределено
КонецЕсли;

//документ создан, записываем и возращаем Ссылку
НовыйДокумент.Дата = ТекущаяДата();
Попытка
НовыйДокумент.Записать();
лкСсылка = НовыйДокумент.Ссылка;
Исключение
//не удалось записать документ, сообщаем причину
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
лкСсылка = Неопределено;
КонецПопытки;

Возврат лкСсылка;

КонецФункции


Ваш ответ мне очень помог, но тут встала другая проблема. На основании документа Выбор Банка у меня может создаваться в зависимости от выбора пользователя док Заявление1 или Заявление2, а так же потом на основании Заявление1 создается Квитанция1, на основании Заявление2 создается Квитанция2. То есть каждый следующий док после ВыборБанка имеет какие-то заполненные реквизиты. Как сделать так, чтобы при нажатии на кнопку Открыть документ для точки маршрута ВыборБанка открывался док Выбор банка, а для точек маршрута Заявление1/2 открывался док Заявление1/2 наполовину заполненный потому что создался на основании ВыборБанка, для точек маршрута Квитанция1/2 открывался док Квитанция1/2 заполненный наполовину потому что создался на основании Заявление1/2?

LexaK

используйте механизм заполнения документов на основании
в процедуре создания (Внимательно поставьте свои реквизиты)

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

Эльвина Якубова

Цитата: LexaK от 06 апр 2020, 18:20
используйте механизм заполнения документов на основании
в процедуре создания (Внимательно поставьте свои реквизиты)

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

Таким образом, он мне не дает открыть ВыборБанка, говоря что "Поле объекта не обнаружено (ДокументОснование)".
И я не совсем понял программно заполнить реквизиты, если для каждего последующего документа созданного на основании там свои отдельные реквизиты...

LexaK

Цитировать"Поле объекта не обнаружено (ДокументОснование)"
ну написал же
Цитировать//дозаполнение документа по Основанию, укажите свой реквизит !!!
УКАЖИТЕ СВОЙ РЕКВИЗИТ

если помогло нажмите: Спасибо!

insarelle Ситдикова

Цитата: LexaK от 06 апр 2020, 19:19
Цитировать"Поле объекта не обнаружено (ДокументОснование)"
ну написал же
Цитировать//дозаполнение документа по Основанию, укажите свой реквизит !!!
УКАЖИТЕ СВОЙ РЕКВИЗИТ


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

LexaK

:lol:
что такое ДокументОснование?
что такое Ввод на основании?
что такое Обработка заполнения?
вроде бы элементарные вопросы! а ставят вас в тупик... :dfbsdfbsdf:

у вас же конфигурация, все реквизиты, отладчик! что еще надо для плодотворной работы?
если помогло нажмите: Спасибо!

insarelle Ситдикова

Если бы я понимал как это делать,я бы сделал. Вы добавили строчку
НовыйДокумент.Заполнить(Объект.ДокументОснование);//дозаполнение документа по Основанию, укажите свой реквизит !!!
Мне это очень мало говорит, поэтому я и спрашиваю как это делать:(

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск