8.х Внешняя обработка заполнения ТЧ

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

  1. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Можно я задам совсем тупой вопрос?
    Синтаксис:
    ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>)

    Параметры:


    <Значение> (обязательный)
    Тип: Произвольный.
    Значение прикладного типа, которое необходимо преобразовать в реквизит формы и для которого определено преобразование в данные формы.

    Объясните, пожалуйста, что означает Значение прикладного типа. Я туплю уже совсем под конец дня. Мне при выполнении ЗначениеВРеквизитФормы() говорит - не верный параметр 1.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Прикладной объект - дословно тот объект, к которому "прикладывается" код :)

    ЗначениеВРеквизитФормы(Объект, "Объект");

    Объект = ЭтотОбъект
  3. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Зашибись, объяснил. Типы какие?
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Тип значения должен соответствовать типу значения реквизита формы, в который собираемся передавать значение.
  5. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    ДокументОбъект пыталась запихивать, ругается, Сейчас ещё раз попробую, для верности.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Код покажи - быстрее будет
  7. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Щас проверю последний раз и покажу.
    --- Объединение сообщений, 25 ноя 2014 ---
    Вот пишет, когда документ объект запихиваю

    {Форма.Форма.Форма(11)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
    ЗначениеВРеквизитФормы(ДокЗаполнения, "Объект.Документ");
    по причине:
    Недопустимое значение параметра (параметр номер '1')


    Сейчас будет код в студию
    --- Объединение сообщений, 25 ноя 2014 ---
    Код:
    &НаСервере
    Процедура ЗаполнитьНаСервере(ДокументОбъект)
        Обработка = РеквизитФормыВЗначение("Объект");
        ДокЗаполнения = ДанныеФормыВЗначение(ДокументОбъект, Тип("ДокументОбъект.РеализацияТоваровУслуг"));
        Обработка.ЗаполнитьТЧ(ДокЗаполнения); //в этой процедуре заполняем ТЧ
        ЗначениеВРеквизитФормы(ДокЗаполнения, "Объект.Документ");
        КонецПроцедуры
    
    После долгих тырканий вышло что-то такое.
    --- Объединение сообщений, 25 ноя 2014 ---
    Да, ДокументОбъект определяется в клиентской процедуре, в него передаётся док, по которому надо ТЧ заполнить
    Код:
    ДокументОбъект = ВладелецФормы.Объект;
        ЗаполнитьНаСервере(ДокументОбъект);
    Последнее редактирование: 25 ноя 2014
  8. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Причём, как я изначальна делала, просто присваивала реквизиту обработке значение документа, форма документа у меня закрывается, но не обновляется.
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Эту строку я вообще не понял - что ты хотела этим действием сделать
    ДокЗаполнения = ДанныеФормыВЗначение(ДокументОбъект, Тип("ДокументОбъект.РеализацияТоваровУслуг"));

    Тут должно быть что-то типа:

    ТЗ = ДанныеФормыВЗначение(<ОбъектКоллекцииНаФорме>, Тип("ТаблицаЗначений"));



    Форма обработки заполнения ТЧ документа:

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

    Код:
    Процедура ЗаполнитьТЧ() Экспорт
    
    Для каждого Стр Из РеквизитОбработкиДокОбъект.<ТабличнаяЧасть> Цикл
    
    КонецЦикла;
    
    КонецПроцедуры
    У обработки должен быть реквизит с типом ДокументОбъект, который заполняется текущим документом для обработки.

    Можно из модуля объекта перетащить код в модуль формы, тогда

    ТекОбработка = РеквизитФормыВЗначение("Объект");
    ТекОбработка.ЗаполнитьТЧ();

    можно не делать, а сразу ТЧ обрабатывать в процедуре.
    Последнее редактирование: 26 ноя 2014
  10. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Всё, завтра отвечу, потому как иначе напишу бред.
    Утречком всё внимательно прочитаю и отвечу.
  11. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Что-то я изначально не правильно делаю...
    Сейчас поразбираюсь ещё, потом продолжим.
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Вместо:

    Код:
    &НаКлиенте
    Процедура ЗаполнитьТЧ()
    ЗаполнитьНаСервере();
    ОбновитьОтображениеДанных();
    КонецПроцедуры
    Делаем так:
    Код:
    &НаКлиенте
    Процедура ЗаполнитьТЧ()
    ЗаполнитьНаСервере();
    ФормаДокумента = Объект.ДокументОбъект.ПолучитьФорму();
    ФормаДокумента.ОбновитьОтображениеДанных();
    КонецПроцедуры
    В реквизите обработки храним СТРОГО ДокументОбъект, ТЧ которого заполняем обработкой
  13. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    //ТекдДокументОбъект должен как-то определятся для обработки, т.к. обработка
    //запускается для определенного документа, форма которого открыта пользователем в
    //данный момент.

    - вот с этим и проблемы и единственное, как я его смогла определить, это через вот это место:
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Хм. А как вообще происходит запуск внешней обработки?
  15. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Вставляешь её во внешние обработки и вызываешь из документа.
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Покажи код вызова.
  17. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    непосредственно кода вызова нет, после проделанных выше действий вызывается форма обработки (т.к. мне надо дозаполнить некоторые реквизиты, которых нет в форме документа) и далее как обычно "Выполнить".
    --- Объединение сообщений, 26 ноя 2014 ---
    Я его обманула:)
    После выполнения обработки закрываю текущую форму документа, потом заново по номеру нахожу нужный документ и открываю.

    Конечно это не правильно, надо подтягивать матчасть.

    PS: с РеквизитФормыВЗнвчение и ЗначениеВРеквизитФормы тоже что-то не вышло.
    Последнее редактирование: 26 ноя 2014
  18. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Дык если открываем форму обработки, то можно параметрами передать в нее и ДокументОбъект, а дальше уже перекинуть в реквизит объекта.
    Будет что-то вроде этого:

    Код:
    ПараметрыФормы = Новый Структура("ДокументОбъект", ЭтотОбъект);
    //Или
    //ПараметрыФормы = Новый Структура("ДокументОбъект", Объект);//Если форма документа управляемая.
    
    ОткрытьФорму("ВнешняяОбработка.<НашаОбработка>.Форма", ПараметрыФормы);
    В модуле формы обработки:

    Код:
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Объект.<РеквизитДокуМентОбъект> = РеквизитФормыВЗначение("ДокументОбъект");
    
    КонецПроцедуры
    
  19. TopicStarter Overlay
    XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    это куда запихивать?
  20. 1cUserAndrew
    Offline

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

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

    Я как-то давно делал обработку по заполнению ТЧ для конфигурации УНФ.
    Правда, потом надобность в ней пропала, т.к. в типовой УНФ доработали данный функционал...Поэтому я не адаптировал ее под новые релизы...
    Ну, думаю, если попробовать ее запустить, она должна работать.
    Если, конечно, там то, что надо )
    Ну, посмотрите, может, что полезное возьмете ))
    _http://infostart.ru/public/101847/

    Если нет возможности скачивать с Инфостарта, напишите, я скачаю и сюда прикреплю.

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