8.х Как передать значение реквизита формы документа в открываемый справочник

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем denis_msz, 15 фев 2011.

  1. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Команды ЗначениеЗаполнено и НачальноеЗначениеВыбора
    в мобильном приложении не существует

    есть
    Расширение табличного поля списка справочника (Catalog list table box extension)
    НачальноеОтображениеДерева (InitialTreeView)
    Использование:

    Чтение и запись.
    Описание:

    Тип: НачальноеОтображениеДерева. Определяет вариант начального отображения дерева связанного с табличным полем списка при открытии.
    Примечание:

    Используется, если связанный с табличным полем список отображается в виде дерева.
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    ЗначениеЗаполнено() можно заменить на:
    Код:
    ТекСтрока.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка()
    
    А ПараметрТекущаяСтрока?

    Можно еще в форму передавать значение номенклатуры и в форме (при открытии) позиционироваться через ТекущаяСтрока.
  3. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    проверяю ТекущаяСтрока
  4. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Еще раз хочу сказать спасибо Requin,Itsys,yzek,shurikvz,mialord и всем принимашим участие в разборе полета моей проблемы!
    Осталась только еще одна проблема не позволяющая востановить позицию в справочнике при повторном откытии уже выбранной номенклатуры?
    К сожалению в редакторе мобильных приложений нет свойтства НачальноеЗначениеВыбора
    Варианты с ТекущаяСтрока непроходят (ругаеться)
    Код:
     Процедура ТоварыНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    Форма = Справочники.Номенклатура.ПолучитьФормуВыбора(,Элемент);
    Форма.ск=СкладГруппа.ссылка;
    Форма.хк=Неопределено;
    Форма.пп=Ответственный.ссылка;
    Если ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
    Форма.Список.ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;//ругаеться на недопустимое сложное имя ТекущаяСтрока
    Форма.ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;//ругаеться на недопустимое сложное имя ТекущаяСтрока
    КонецЕсли;
    ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура=Форма.ОткрытьМодально();
    КонецПроцедуры
    
    
  5. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Не, немного не так.
    Передавайте в форму выбора текущую номенклатуру (в реквизит формы - как вы склад передаете)
    Код:
    Форма.ВыбраннаяНоменклатура = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    
    А уже в обработчике ПриОткрытии формы выбора элемента справочника устанавливайте текущую строку.

    P.S. Сейчас попробую примерный код набросать.

    P.P.S. Гляньте еще в синтаксис-помощнике, есть ли в РМП ПараметрТекущаяСтрока (Расширение формы списка справочника)
  6. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Попробуйте
    Код:
    Форма.ПараметрТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    
  8. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Ругаеться на ПараметрТекущаяСтрока
  9. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Пробуйте так:
    Код:
    Форма.ЭлементыФормы.Список.ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    
    Реквизит ВыбраннаяНоменклатура и передача в форму текущую номенклатуру не надо (пока :angry: :D ).
  10. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    :angry: щас спою. Заработала
  11. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    [off]
    Коллективный разум победил :D
    И шаман с бубном не понадобился :angry:[/off]
  12. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Итак получаеться, все можно упаковать в одном обработчике при начале выбора
    Код:
    Процедура ТоварыНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    Форма = Справочники.Номенклатура.ПолучитьФормуВыбора(,Элемент);
    Форма.ск=СкладГруппа.ссылка;
    Форма.хк=Неопределено;
    Форма.пп=Ответственный.ссылка;
    Если ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
    Форма.ЭлементыФормы.Список.ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    КонецЕсли;
    ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура=Форма.ОткрытьМодально();
    КонецПроцедуры
    
    Ну если уж совсем чтоб было идеально нужно чтобы при добавлении новой строки востанавливалась позиция предыдущей выбранной. Иначе получаеться нужно копировать строку,для востановления позиции в той же папки.
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Навскидку:
    Добавьте переменную модуля мВыбраннаяНоменклатура.
    В обработчике ПриОткрытии формы документа
    Код:
    Процедура ПриОткрытии()
    мВыбраннаяНоменклатура = Справочники.Номенклатура.ПустаяСсылка();
    КонецПроцедуры
    
    В обработчике ТоварыНоменклатураНачалоВыбора
    Код:
    // ...
    Если ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
    Форма.ЭлементыФормы.Список.ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    Иначе
    Форма.ЭлементыФормы.Список.ТекущаяСтрока = мВыбраннаяНоменклатура;
    КонецЕсли;
    ВыбранноеЗначение = Форма.ОткрытьМодально();
    // я бы проверку добавил, чтобы не удалялась выбранная номенклатура, если пользователь передумал и просто закрыл форму
    Если ВыбранноеЗначение <> Неопределено Тогда
    ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура = ВыбранноеЗначение;
    мВыбраннаяНоменклатура = ВыбранноеЗначение;
    КонецЕсли;
    // ...
    
  14. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А еще лучше так:
    Код:
    Процедура ПриОткрытии()
    Если ЭтоНовый() Или Товары.Количество() = 0 Тогда
    // пустая ссылка - если новый документ или таблица не заполнена
    мВыбраннаяНоменклатура = Справочники.Номенклатура.ПустаяСсылка();    
    Иначе
    // номенклатура последней строки
    мВыбраннаяНоменклатура = Товары[Товары.Количество() - 1].Номенклатура;
    КонецЕсли;    
    КонецПроцедуры
    
  15. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Класно, идея с промежуточным реквизитом хороша.Тут действительно есть разные варианты.
    Смысл в том, чтобы в реквизит мВыбраннаяНоменклатура положить и при добавлении взять.
    Сейчас буду пробовать. Спасибо :angry:
  16. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Итог
    Код:
    Процедура ТоварыНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    Форма = Справочники.Номенклатура.ПолучитьФормуВыбора(,Элемент);
    Форма.ск=СкладГруппа.ссылка;
    Форма.хк=Неопределено;
    Форма.пп=Ответственный.ссылка;
    
    Если ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
    Форма.ЭлементыФормы.Список.ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    мВыбраннаяНоменклатура=ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    Иначе
    Форма.ЭлементыФормы.Список.ТекущаяСтрока = мВыбраннаяНоменклатура;
    КонецЕсли;
    
    ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура=Форма.ОткрытьМодально();
    
    Если ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура <> Неопределено Тогда
    Если ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
    ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура= мВыбраннаяНоменклатура;
    иначе
    мВыбраннаяНоменклатура = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура;
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры
    
    Пришлось кода накрутиь, т.к. был момент при отказе выбора от номенклатуры, затиралась уже выбранная.
  17. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Поэтому я и ставил "в разрыв" переменную ВыбранноеЗначение:

    Код:
    ВыбранноеЗначение = Форма.ОткрытьМодально();
    
    Теперь по вашему коду. Не нравятся мне что-то последних 8 строчек. Вернее даже одна (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура=Форма.ОткрытьМодально()).

    Это условие будет всегда Истина, оно бессмысленно.

    Это условие будет истина, когда пользователь закроет форму выбора без выбора, т.е. Форма.ОткрытьМодально() = Неопределено;

    Ну и методологически неверно присваивать значение выбора, если выбора не было.
  18. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Requin дружище по другому кода меньше не получаеться!
    ты конечно мыслишь в нужном направлении, но я код оставлю таким как есть. :D

    Давай так, всегда можно придумать что то лучшее,оптимальное и если тот, кто сталкнёться с такой же проблемой, пусть возьмет этод код за основу.
    В конце концов этот редактор мобильных приложений у меня под рукой!
    Я еще сейчас напишу некое обобщение с кодом, так сказать итог проделанной работы.
    А то попробуй найти информацию поиском о редактор мобильного приложения - нету! :angry:
  19. TopicStarter Overlay
    denis_msz
    Offline

    denis_msz

    Регистрация:
    15 фев 2011
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Для поисковиков:

    1С:Предприятие 8 Расширение для карманных компьютеров.
    Редактор мобильных приложений.
    Оформить заказ и видеть остатки в справочнике в редакторе мобильных приложений.
    Необходимо видеть остатки в колонке при выборе номенклатуры из каталога в мобильном приложении.
    Подбор по остаткам в мобильном приложении.

    Напомню, что в редакторе мобильных приложений нельзя создать свои реквизиты объектов метаданных, можно использовать только имеющиеся в исходной конфигурации.

    Остатки товара храняться в не переодическом регистре сведений "ОстаткиНаСкладахДляМобильныхИБ"
    Структура регистра:
    Измерения: Пользователь,Склад,Номенклатура,ХарактеристикаНоменклатуры
    Ресурсы: Количество

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

    П.С. Модераторам(админам): переименуйте пожалуйста эту тему из Как передать значение реквизита формы документа в открываемый справочник в например Как передать значение реквизита формы документа в открываемый справочник в мобильном приложенииСпасибо.
  20. FUX
    Offline

    FUX

    Регистрация:
    10 сен 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Огромное спасибо тем, кто учавствовал в создании вышеизложенной процедуры, на ее основе создал процедуру для своего документа. :yahoo:

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