8.х Как вызвать одну форму из другой?!

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем ProfforG, 14 ноя 2011.

  1. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Есть ФормаДокумента ВыборВидаДокументов на ней расположен реквизит с выбором значений Накладная /Реестр и 2 кнопки ОК/Отмена в зависимости от выбранного документа открывается ФормаВыбора ДокументОтгрузкиТовара, в которой в реквизите записывается определённый №, зависящий от реестра, или № накладной.

    В последствии выбранные данные Накладная/Реестр и данные со второй формы должны попасть в табличную часть.

    как и где реализовывать вызов ФормаВыбора из ФормаДокумента?!

    пихал в обработчик события при нажатии на ОК:

    Код:
    &НаКлиенте
    Процедура ОК(Команда)
    Если Элементы.ТипДокумента.СписокВыбора = "Накладная" Тогда
    Форма = ПолучитьФорму("Документы.ЖурналОтгрузки.ПолучитьФорму(ФормаДокумента)");
    Форма.Открыть();
    КонецЕсли;
    КонецПроцедуры
    
    не убивайте, знаю что косячный код...и неверный, учусь...как правильно сделать?!
  2. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Ну вообще, нужная форма откроется так (если я правильно понял, как у Вас там все организовано):
    Код:
    &НаКлиенте
    Процедура ОК(Команда)
    ОткрытьФорму("Документ." + ТипДокумента + ".ФормаВыбора");
    КонецПроцедуры
    
    
    
    А вот то, что дальше, я не совсем понял, что Вы хотите делать. Какие данные должны попадать в таб часть. И где эта таб часть вообще находится.
  3. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    ой-ё-ё-й...чет я переработался... %) всё с точностью да наоборот написал.... %)

    в общем,в ФормаВыбора находится реквизит ТипДокумента и кнопки Ок/Отмена
    в ФормаДокумента находится куча реквизитов + 2 ТЧ, в итоге реквизит ТипДокумента и куча реквизитов должны быть в ЖД - ЖурналОтгрузки

    когда открываешь журнал отгрузки, на нажатии кнопки Создать должна появиться ФормаВыбора, после как в ней выбор типа документа сделали и нажали ОК должен произойти переход на ФормаДокумента и после заполнения всех реквизитов и ТЧ, в ЖурналОтгрузки должны быть видны инфа реквизита ТипДокумента и инфа реквизитов с ФормыДокумента

    прошу прощения за первое сообщение.
  4. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    А зачем такие хитрые махинации, если система сама все это делает???
    Если я, конечно, правильно понял...

    "Журнал отгрузки" - это у Вас что?
    Я так понял, что это ЖУРНАЛ ДОКУМЕНТОВ.
    Посмотреть вложение 9062
    Если так, добавляете в этот журнал нужные документы.
    Посмотреть вложение 9063
    При необходимости добавьте графы, которые хотите видеть в журнале.
    И всё, теперь когда в журнале нажмете на кнопку "Создать", система сначала спросит, какого вида документ Вы хотите создать (из документов, входящих в журнал). Выберите документ, и откроется форма создания нового документа.

    Вложения:

  5. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    ЖурналОтгрузки это у меня Документы, попробую через ЖурналДокументов, но всё-равно интересно, возможно ли реализовать так, как я первоначально хотел сделать:)
  6. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Если Вы хотите, чтобы в одном списке отображались документы разных видов, это реализуется только через журналы документов. Они для этого и предназначены.
  7. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    сделал по-другому, перенс реквизит ТипДокумента в ФормаДокумента, теперь проблема в другом...нужна ваша помощь...
  8. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    на форме есть реквизит ТипДокумента Тип:Строка, Вид: поле переключателя. и есть реквизит Номер.
    В зависимости от выбранного переключателя реквизит Номер заполняется автоматически определённым значением. как правильно это реализовать?! обращаться к данным...

    вот пытался сделать, но не работает ничерта:

    Код:
    &НаКлиенте
    Процедура ТипДокументаПриИзменении(Элемент)
    Если Элементы.ТипДокумента.ЭлементВыбора="Накладная" Тогда 
    Элементы.Номер.Значение = "34482";
    Иначе
    Если Элементы.ТипДокумента.ЭлементВыбора="Реестр" Тогда 
    Элементы.Номер.Значение = "991674";
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    
    и ещё вопрос...

    на этой же форме есть 2 ТЧ в 1ТЧ поля: товар(СправочникСсылка.ВидыТоваров),марка смеси(СправочникСсылка.Смеси),ед.измерения ...
    ну так вот, я закрыл доступ к марке смеси. и идея такая что если в поле товар производится выбор группы, то тогда доступ открывается в поле марка смеси, если же в поле товар выбирается определённый товар, то доступ остаётся закрытым. и в зависимости товара или группы должно заполняться поле ед.измерения( СправочникСсылка.ЕдиницыИзмерения), делал код...но я аналогично не могу нормально обратиться к данным...(((

    Код:
    &НаКлиенте
    Процедура ТоварыТоварПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    Если Элементы.ТоварыТовар.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы Тогда
    //Объект.Товары.МаркаСмеси.Доступность = Истина;
    Элементы.ТоварыМаркаСмеси.Доступность = Истина; 
    КонецЕсли;
    КонецПроцедуры
    
    посоветуйте, кто чем может....
  9. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Код:
    &НаКлиенте
    Процедура ТипДокументаПриИзменении(Элемент)
    
    Если ТипДокумента = "Накладная" Тогда
    Номер = 34482;
    Иначе
    Номер = 991674;
    КонецЕсли;
    
    КонецПроцедуры
    
    Я сам как-то пробовал в зависимости от значения в колонке строки что-то делать с полем в другой колонке этой же строки. И честно говоря не додумал до конца. Не получилось. Там есть одна сложность. Может, кто знает, подскажет.
    А вот с единицей измерения скажу:
    Код:
    &НаКлиенте
    Процедура ТоварыТоварПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
    СтрокаТЧ.ЕдИзмерения = ПолучитьЕдИзм(СтрокаТЧ.Товар);
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ПолучитьЕдИзм(Товар)
    
    Возврат Товар.ЕдИзмерения;
    
    КонецФункции
    
  10. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Думаю, можно как-то это решить через событие "ПриАктивизацииСтроки" или "ПриАктивизацииПоля". Но там придется обращаться к серверу. А где-то тут же на форуме читал, что в этих событиях не стоит обращаться на сервер.
  11. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    а с переключателями как быть?!
  12. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Так я ж, вроде, написал...
    Так не получается что ли?
    Код:
    &НаКлиенте
    Процедура ТипДокументаПриИзменении(Элемент)
    Если ТипДокумента = "Накладная" Тогда
    Номер = 34482;
    Иначе
    Номер = 991674;
    КонецЕсли;
    КонецПроцедуры
    
  13. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Вот это эпикфэйл..., Андрей!!! всё оказывается в обращении к данным в коде проще, чем я делал... я ваш код немного доделал:

    Код:
    &НаКлиенте
    Процедура ТипДокументаПриИзменении(Элемент)
    Если Элементы.ТипДокумента = "Накладная" Тогда
    Объект.Номер = "34482";
    Иначе
    Объект.Номер = "991674";
    КонецЕсли;
    КонецПроцедуры
    
    с надеждой на то что всё будет работать, я запустил, и что вы думаете))))) при выборе отного из преключателей всегда будет выполняться иначе. попробывал сделать вложенное если, так там вообще не работает %) бардак какой-то...
  14. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    В управляемом приложении работа с формой и ее реквизитами (и элементами) происходит иначе, чем в обычном приложении (я так понял, раньше Вы работали в обычном).
    Тут важно понимать то, с чем работаем. Есть реквизиты формы, элементы формы и реквизиты объекта.
    Реквизиты объекта располагаются здесь:
    Посмотреть вложение 9086

    На форме они находят свое отражение здесь:
    Посмотреть вложение 9087

    т.е. в основном реквизите формы (выделен жирным), который называется "Объект".
    К ним Вы обращаетесь так:
    Код:
    Объект.Контрагент = ...;
    
    Реквизиты формы располагаются здесь:
    Посмотреть вложение 9088

    Жирным выделен основной реквизит.
    К ним Вы обращаетесь НАПРЯМУЮ, т.е. так:
    Код:
    ТипДокумента = ...;
    
    Элементы формы располагаются здесь:
    Посмотреть вложение 9089

    К ним Вы обращаетесь так:
    Код:
    Элементы.ТипДокумента
    
    Важно понимать, что это просто ЭЛЕМЕНТЫ УПРАВЛЕНИЯ (какое-то поле или кнопка или какая-то панель со страницами или переключатель и т.д.). Они не содержат в себе никаких данных в обычном понимании. Данные содержатся в РЕКВИЗИТАХ (формы или объекта).
    Поэтому когда Вы пишите:
    Код:
    Если Элементы.ТипДокумента = "Накладная" Тогда
    
    Вы сравниваете поле формы со строкой. Естественно результат - Ложь. Поэтому всегда и выполняется то, что идет после слова "Иначе".
    Тип документа "Накладная" или "Реестр" содержится у Вас в РЕКВИЗИТЕ. Я предположил, что в реквизите формы, поэтому и обращался напрямую:
    Код:
    Если ТипДокумента = "Накладная" Тогда
    
    Если же у Вас это реквизит объекта, то обращайтесь так:
    Код:
    Если Объект.ТипДокумента = "Накладная" Тогда
    

    Вложения:

  15. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Огромное СПАСИБО! вот теперь понятно!!! :) да, летом сам занимался на 1с 8.1, сейчас бакалаврскую пишу на заводе, а у них 1с 8.2, приходится мучаться....но самое главное - мне нравится 1с-ка))))
  16. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Андрей, доброго времени суток!)

    вот что придумал...

    &НаКлиенте
    Процедура ТоварыТоварПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    Если СтрокаТабличнойЧасти.Товар.ЭтоГруппа() Тогда
    Элементы.ТоварыМаркаСмеси.Доступность = Истина;
    КонецЕсли;
    КонецПроцедуры


    как сделать так чтобы метод ЭтоГруппа() работал здесь?!
  17. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Доброго! :)
    "ЭтоГруппа" - это реквизит справочника. Для получения его значения надо обратиться на сервер.
    Код:
    &НаКлиенте
    Процедура ТоварыТоварПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
    ДанныеОТоваре = ПолучитьДанныеОТоваре(СтрокаТЧ.Товар);
    Элементы.ТоварыМаркаСмеси.Доступность = ДанныеОТоваре.ЭтоГруппа; 
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ПолучитьДанныеОТоваре(Товар)
    ДанныеОТоваре = Новый Структура;
    ДанныеОТоваре.Вставить("ЭтоГруппа", Товар.ЭтоГруппа);
    Возврат ДанныеОТоваре;
    КонецФункции
    
  18. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Тут только будет одна маленькая проблемка. Доступность колонки отключится у всех строк.
    Красивого решения, как ее решить (т.е. устанавливать доступность/недоступность колонки в конкретной строке), не знаю.
    Есть вариант, но, как я уже писал чуть выше, не уверен насчет его грамотности.
  19. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Ухух, работает зараза))) забавно в 1с сделано... то что напрямую нельза прописать СтрокаТабличнойЧасти.Товар.ЭтоТовар()
  20. 1cUserAndrew
    Online

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    В обычном приложении можно, в управляемом - нет.

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