8.х Передать ТЧ из внешней обработки в документ

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем lacrimax, 3 май 2012.

  1. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    То, что переменную можно ввести, я понял. Вот только как ней приделать ссылку на документ, точнее на тип документа?
  2. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Код:
    ИмяДокумента = ЗаполняемыйДокумент.Метаданные().Имя;
  3. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    метод объекта не обнаружен (Метаданные)
  4. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Это потому что Вы на клиенте пытаетесь это сделать. Надо на сервере.

    Создайте еще один реквизит формы "ИмяДокумента" с типом СТРОКА.
    В процедуре "ПриСозданииНаСервере" после строки
    Код:
    ЗаполняемыйДокумент = Параметры.ОбъектыНазначения[0];
    напишите
    Код:
    ИмяДокумента = ЗаполняемыйДокумент.Метаданные().Имя;
    Т.е. имя документа будет храниться в реквизите формы "ИмяДокумента".
    С клиента просто будете обращаться к этому реквизиту, да и все.
  5. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    Так вот так и сделал. Тока все равно ему нужен заказ клиента. если вызвать из реализации, то значение реквизита Имя не меняется, все равно заказ клиента остается.
  6. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Тип реквизита формы "ЗаполняемыйДокумент" поменяли?
  7. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    каким образом? а, туплю:)
  8. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    В свойствах :))
  9. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    Все сделал, как мне и хотелось. Вот чего в итоге накропал с вашей помощью. Мож кому тоже пригодится.

    Посмотреть вложение 11133

    Спасибо всем за участие.

    Вложения:

  10. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    Прикрутил к обработке макет, не получается его выцепить. Пишу так:


    Код:
    &НаКлиенте
    Процедура Табличка(Команда)
    
    МояТабла = ПолучитьМакет();
    НаПечать(МояТабла, Корзина);
    
    КонецПроцедуры
    
    &НаСервере
    Функция ПолучитьМакет()
    
    МояТабла = РеквизитФормыВЗначение("Корзина").ПолучитьМакет("Макет");
    
    Возврат МояТабла;
    
    КонецФункции
    
    Не работает почему-то. Кто подскажет, что не так?
  11. 1cUserAndrew
    Offline

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

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

    Что именно не работает?
  12. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Думаю, дело не в макете, а в этой строке
    Код:
    НаПечать(МояТабла, Корзина);
    Данная процедура где располагается? Видимо, на сервере....
    Вы пытаетесь основной реквизит формы - Корзина, содержащий данные объекта, передать на сервер.
    Отсюда - ошибка.

    Не надо его туда передавать.
    В серверной процедуре этой же формы этот реквизит будет точно так же доступен (разумеется, если директива компиляции будет НаСервере, а не НаСервереБезКонтекста).
  13. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    да не, эту функцию на сервер перенес, думал, может там макет заполнится нормально, на клиенте ошибка - "нельзя изменять поле, содержащее объект данных формы". И на сервере такая же ошибка. Такое ощущение, что заполняется не табличный док, а таблица формы.

    Функция заполнения табличной формы:

    Код:
    &НаСервере
    Функция НаПечать(МояТабла, Корзина)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    
    Область = МояТабла.ПолучитьОбласть("Заголовок");
    Область.Параметры.ТекстЗаголовка = НСтр("ru='Список подобранных товаров'");
    ТабличныйДокумент.Вывести(Область);
    
    Область = МояТабла.ПолучитьОбласть("ШапкаТаблицы");
    ТабличныйДокумент.Вывести(Область);
    
    СчетСтрок = 1;
    
    Для Каждого Стр из Корзина.Номен.НайтиСтроки(Новый Структура("Выбрано", Истина)) Цикл
    
    Область = МояТабла.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки");
    Область.Параметры.НомерСтроки = СчетСтрок;
    СчетСтрок = СчетСтрок + 1;
    ТабличныйДокумент.Вывести(Область);
    
    
    Область = МояТабла.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
    ПредставлениеНоменклатуры = СокрЛП(Стр.Номенклатура);
    Область.Параметры.Товар = ПредставлениеНоменклатуры;
    ТабличныйДокумент.Присоединить(Область);
    
    Область = МояТабла.ПолучитьОбласть("СтрокаТаблицы|КолонкаКоличества");
    Область.Параметры.Количество = 1;//Стр.КоличествоУпаковок;
    ТабличныйДокумент.Присоединить(Область);
    
    Сообщить(Заголовок);
    
    КонецЦикла;
    
    ТабличныйДокумент.Показать(); 
    
    КонецФункции
    
  14. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    1) Вот это
    Код:
    ТабличныйДокумент.Показать();
    на сервере работать не будет. Только на клиенте.

    2) Вы, видимо, не поняли, что я имел в виду в предыдущем сообщении.

    Я хочу сказать, что не надо передавать Корзину на сервер как параметр.
    Код:
    НаПечать(МояТабла, Корзина)
    Она там и так будет доступна. Это же реквизит формы.

    Надо примерно так:
    Код:
    &НаКлиенте
    Процедура Табличка(Команда)
    МояТабла = Новый ТабличныйДокумент;
    НаПечать(МояТабла);
    МояТабла.Показать();
    КонецПроцедуры
    
    
    
    &НаСервере
    Процедура НаПечать(ТабДокумент)
    Макет = РеквизитФормыВЗначение("Корзина").ПолучитьМакет("Макет");
    Область = Макет.ПолучитьОбласть("ИмяОбласти");
    ТабДокумент.Вывести(Область);
    
    Возврат ТабДокумент;  
    КонецПроцедуры
  15. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.949
    Симпатии:
    149
    Баллы:
    104
    Упс.
    Код:
    Возврат ТабДокумент;
    не надо...
    Это же процедура ))
  16. TopicStarter Overlay
    lacrimax
    Offline

    lacrimax Опытный в 1С

    Регистрация:
    9 ноя 2010
    Сообщения:
    136
    Симпатии:
    0
    Баллы:
    26
    Все заработало, спасибо. Вроде все так же делал, тока малость по другому, но не работало:)

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