[РЕШЕНО] Проблема с управляемыми формами

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

  1. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Добрый день, друзья! Конфа УТ 11.1
    Такой вопрос. Работаю с управляемыми формами. Из одной формы, открываю форму выбора документов реализации, выбираю документ и передаю в табличную часть формы владельца, использую следующий код:

    Открытие формы:
    Код:
    &НаКлиенте
    Процедура Подбор(Команда)
        ВладелецФормыПодбора = Элементы.СЮ_ДокументыРеализации;
        Форма = ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора", , ВладелецФормыПодбора);
        Форма.ЗакрыватьПриВыборе = Ложь;
    КонецПроцедуры
    
    Выбор:
    Код:
    &НаКлиенте
    Процедура СписокРеализацииТоваровУслугВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        ОповеститьОВыборе(ВыбраннаяСтрока);
    КонецПроцедуры
    Обработка выбора:
    Код:
    &НаКлиенте
    Процедура СЮ_ДокументыРеализацииОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
        НоваяСтрока = Объект.СЮ_ДокументыРеализации.Добавить();
        НоваяСтрока.СЮ_Документ       = ВыбранноеЗначение;
        НоваяСтрока.СЮ_ДатаДокумента  = ВыбранноеЗначение.Дата;
        НоваяСтрока.СЮ_НомерДокумента = ВыбранноеЗначение.Номер;
        НоваяСтрока.СЮ_СуммаДокумента = ВыбранноеЗначение.СуммаДокумента;
        НоваяСтрока.СЮ_Партнер           = ВыбранноеЗначение.Партнер;
        ВыбратьИСгруппироватьНоменклатуру();
    КонецПроцедуры
    
    Вся проблема в том, что в толстом клиенте все прекрасно работает, а в тонком нет. Ошибка начиная с этой строки: НоваяСтрока.СЮ_ДатаДокумента = ВыбранноеЗначение.Дата;

    Пишет что поле объекта не обнаружено (Дата)

    Так вот, как сделать правильно чтобы стало работать в тонком клиенте?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Какой тип значения у ВыбранноеЗначение?

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

    Функцию можно вызывать без контекста.
  3. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    С этим разобрался, Спасибо!

    А как передать текущую строку табличной части на сервер и изменить ее данные на сервере?

    Нашел вот такой код:
    Код:
    &НаКлиенте
    Процедура ТЧВидРасчетаПриИзменении(Элемент)
        Строка = Элементы.ТЧ.ТекущиеДанные;
        ВидРасчетаПриИзмененииНаСервере(Строка);
    КонецПроцедуры
    
    &НаСервере
    Процедура ВидРасчетаПриИзмененииНаСервере(Строка)
        Если Строка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.ОкладПоДням Тогда
            Строка.Параметр = 1000;
        КонецЕсли;   
    КонецПроцедуры
    Но он не верный, пишут что нужно передавать не строку а номер строки. Ну передам я номер строки, допустим так:
    Код:
    ВидРасчетаПриИзмененииНаСервере(Строка.НомерСтроки);
    А что потом делать с ней на сервере? Как найти нужную строку и поменять в ней данные?
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    На сервере строку ТЧ можно получить по индексу.
  5. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Вот так не работает:
    Код:
    &НаКлиенте
    Процедура ТЧВидРасчетаПриИзменении(Элемент)
        Строка = Элементы.ТЧ.ТекущиеДанные;
        ВидРасчетаПриИзмененииНаСервере(Строка.НомерСтроки);
    КонецПроцедуры
    
    &НаСервере
    Процедура ВидРасчетаПриИзмененииНаСервере(НомерСтроки)
        Если Строка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.ОкладПоДням Тогда
            Строка = Объект.ТЧ.Получить(НомерСтроки);
            Строка.Параметр = 1000;
        КонецЕсли;  
    КонецПроцедуры
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    И не будет работать, пока вы не прочитаете внимательно С-П про метод Получить().
  7. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Чаще всего делают так:
    Создают структуру, которая заполняется данными строки таблицы. Эта структура передается на сервер. Там модифицируется/дозаполняется/перезаполняется.
    После отработки серверной процедуры строка таблицы заполняется данными из структуры.
    Как-то так:

    Код:
    &НаКлиенте
    Процедура ТЧВидРасчетаПриИзменении(Элемент)
    
        Строка = Элементы.ТЧ.ТекущиеДанные;
        ДанныеСтрокаТаблицы = Новый Структура("ВидРасчета, Параметр");
    
        ЗаполнитьЗначенияСвойств(ДанныеСтрокаТаблицы, Строка);
        ВидРасчетаПриИзмененииНаСервере(ДанныеСтрокаТаблицы);
        ЗаполнитьЗначенияСвойств(Строка, ДанныеСтрокаТаблицы);
    
    КонецПроцедуры
    
    
    &НаСервереБезКонтекста
    Процедура ВидРасчетаПриИзмененииНаСервере(Строка)
    
        Если Строка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.ОкладПоДням Тогда
            Строка.Параметр = 1000;
        КонецЕсли;
     
    КонецПроцедуры
    
  8. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Всем спасибо, разобрался, обратился все таки по индексу строки.

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