как обратиться к тому документу в котором запустили команду внешнего обработчика.

1. G_112691538235479115945 18.03.21 14:44 Сейчас в теме
Добрый день. Я совсем начинающий программист. Суть задачи.
Необходимо для любого документа который выберет пользователь создать обработку выгрузки данного документа в файл.
Проблема у меня уже на первом этапе. Я никак не могу сообразить как на клиенте получить ссылку на документ с которого запустили обработку.
очень прошу либо подскажите либо направьте по нужному адресу.

при попытке выполнить вот такой код выдает форму запроса а не выбранного документа.

&НаКлиенте
Процедура выгрузить(Команда)

Док = ЭтотОбъект;
сообщить(док)

КонецПроцедуры
По теме из базы знаний
Найденные решения
9. kceon 18.03.21 15:03 Сейчас в теме
(7)Так можно же внутри формы перейти на сервер

Но, наверно я не прав, правда в другом), не совсем понятна задача, есть реквизит документа на форме?
Тогда ссылка = Объект.НашДокумент, где НашДокумент - название реквизита, стоит приложить скрин формы из конфигуратора
10. starik-2005 3093 18.03.21 15:04 Сейчас в теме
(8) А владелец формы вообще заполнен в этой обработке? Как она вызывается?

Для решения этой конкретной задачи внешняя обработка в принципе не нужна, но если менять конфигурацию нельзя, то:
1. Создают внешнюю обработку в соответствии с требованиями платформы (ищи в гугле "Внешняя обработка 1С").
2. В ней делают кнопку выгрузить.
3. Регистрируют ее в системе, добавляют список документов, для которых она будет доступна. При нажатии на появившуюся в форме документов кнопку вызывается эта обработка.

Если есть возможность изменять конфигурацию, то просто делают глобальную команду, в тип источника которой закидывают все те объекты, которые хочется выгрузить., а там такой примерно код:
З = Новый ЗаписьXML;
З.Открыть(ИмяФайла);
СериализаторXDTO.ЗаписатьXML(З, Источник);
З.Закрыть();
Все.
14. starik-2005 3093 19.03.21 08:48 Сейчас в теме
(12) просто передаете, как аргумент функции. А если это реквизит формы, то и не надо передавать - он там есть.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3093 18.03.21 14:50 Сейчас в теме
ВладелецФормы.Объект.Ссылка?
5. G_112691538235479115945 18.03.21 14:56 Сейчас в теме
(2)можно по подробнее не совсем понял...
6. starik-2005 3093 18.03.21 14:57 Сейчас в теме
(5)
&НаКлиенте
Процедура выгрузить(Команда)

//Док = ЭтотОбъект;
  Док = ВладелецФормы.Объект.Ссылка;
  сообщить(док)

КонецПроцедуры
8. G_112691538235479115945 18.03.21 14:58 Сейчас в теме
(6){Обработка.ВыгрузкаФайлов.Форма.Форма.Форма(78)}: Значение не является значением объектного типа (Объект)
Док = ВладелецФормы.Объект.Ссылка;
10. starik-2005 3093 18.03.21 15:04 Сейчас в теме
(8) А владелец формы вообще заполнен в этой обработке? Как она вызывается?

Для решения этой конкретной задачи внешняя обработка в принципе не нужна, но если менять конфигурацию нельзя, то:
1. Создают внешнюю обработку в соответствии с требованиями платформы (ищи в гугле "Внешняя обработка 1С").
2. В ней делают кнопку выгрузить.
3. Регистрируют ее в системе, добавляют список документов, для которых она будет доступна. При нажатии на появившуюся в форме документов кнопку вызывается эта обработка.

Если есть возможность изменять конфигурацию, то просто делают глобальную команду, в тип источника которой закидывают все те объекты, которые хочется выгрузить., а там такой примерно код:
З = Новый ЗаписьXML;
З.Открыть(ИмяФайла);
СериализаторXDTO.ЗаписатьXML(З, Источник);
З.Закрыть();
Все.
11. G_112691538235479115945 18.03.21 16:21 Сейчас в теме
я кажется понял в чем проблема. у меня команда выгрузить доступна через сервис . а нужно я так понимаю чтобы кнопка была на форме документа. или не обязательно?
https://pastenow.ru/ed357736335e26bec8779e9012e898f5
12. G_112691538235479115945 19.03.21 07:27 Сейчас в теме
(10)Почитал как создается обработка по вашей ссылке. Понял, что сильно тупанул. Добавил реквизит с типом документссылка. Теперь перед выгрузкой можно выбрать нужный документ. Теперь вопрос как передать эту ссылку на сервер? Понимаю, что вопросы тупые и на уровне начальных уроков, но курсы по программированию, которые я проходил, были ужасные. По этому такие вопросы.
14. starik-2005 3093 19.03.21 08:48 Сейчас в теме
(12) просто передаете, как аргумент функции. А если это реквизит формы, то и не надо передавать - он там есть.
15. G_112691538235479115945 19.03.21 10:51 Сейчас в теме
3. Nubsdale 18.03.21 14:52 Сейчас в теме
Создать обработку, в ней сделать поле с типом ЛюбаяСылка. После выбора документа в это поле, получить ссылку Поле.Ссылка
4. kceon 18.03.21 14:53 Сейчас в теме
В текущем момента ЭтотОбъект = ДанныеФормы, а не ссылка на объект, поможет
Док = РеквизитФормыВЗначение(Объект);
7. G_112691538235479115945 18.03.21 14:58 Сейчас в теме
(4)
РеквизитФормыВЗначение(Объект)
насколько я знаю она доступна только на сервере. но перед тем как идти на сервер мне нужно получить ссылку на документ. или я не прав?
9. kceon 18.03.21 15:03 Сейчас в теме
(7)Так можно же внутри формы перейти на сервер

Но, наверно я не прав, правда в другом), не совсем понятна задача, есть реквизит документа на форме?
Тогда ссылка = Объект.НашДокумент, где НашДокумент - название реквизита, стоит приложить скрин формы из конфигуратора
13. G_112691538235479115945 19.03.21 07:49 Сейчас в теме
(12)в целом я разобрался как передать ссылку на сервер. но при РеквизитФормыВЗначение выдает такую ошибку:

{Обработка.ВыгрузкаФайлов.Форма.Форма.Форма(39)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
Док = РеквизитФормыВЗначение(ДокументСсылка);
по причине:
Несоответствие типов (параметр номер '1')
Несоответствие типов (параметр номер '1')

вот сам код:
&НаСервере
Процедура выгрузитьНаСервере(ДокументСсылка)   

Док = РеквизитФормыВЗначение(ДокументСсылка);
	Для каждого реквизит Из Док.метаданные().реквизиты Цикл
    Сообщить(Реквизит);
КонецЦикла;

	КонецПроцедуры

&НаКлиенте
Процедура выгрузить(Команда,ДокументСсылка)

 ВыгрузитьНаСервере(ДокументСсылка);
	
КонецПроцедуры
Показать
16. G_112691538235479115945 19.03.21 11:37 Сейчас в теме
Объясните еще пожалуйста как работать с РеквизитФормыВЗначение. что должно подставляться в параметр "Имя реквизита". у меня почему то при попытке подставить туда ДокументСсылка выдает ошибку."Недопустимое значение параметра (параметр номер '1')"
или дайте почитать что нибудь для тупых на эту тему...
17. G_112691538235479115945 22.03.21 15:06 Сейчас в теме
в общем в итоге вот что получилось.
&НаСервере
Процедура выгрузитьНаСервере(ДокСсылка)   

Текст = Новый ТекстовыйДокумент;
ИмяДокумента = ДокСсылка.Метаданные().Имя;
ДатаДокумента = ДокСсылка.Дата;
текст.ДобавитьСтроку("" + ИмяДокумента);
текст.ДобавитьСтроку("" + ДатаДокумента);

для каждого Шреквизит из ДокСсылка.метаданные().Реквизиты цикл
текст.ДобавитьСтроку(""+ Шреквизит.Имя+"="+Докссылка[""+Шреквизит.имя])	;
конецЦикла;


Для каждого ТабЧасть из докссылка.Метаданные().ТабличныеЧасти Цикл        //Определеяем имена табличных частей
	Для каждого ТекСтрока из Докссылка[ТабЧасть.имя] цикл                    //используя имя табличной части получить строки ТЧ
		для каждого ТЧреквизит из Табчасть.реквизиты цикл 		                //находясь на строке ТЧ перебираем реквизиты ТЧ	 

текст.ДобавитьСтроку("ТабличныеЧасти."+ ТабЧасть.Имя+" "+ ТЧреквизит.Имя+"="+ТекСтрока[""+ТЧреквизит.имя]);

КонецЦикла;	
	КонецЦикла;      
		КонецЦикла;
Текст.Записать("C:\1C\2.txt");
КонецПроцедуры

&НаКлиенте
Процедура выгрузить(Команда)
	ВыгрузитьНаСервере(ДокСсылка);
КонецПроцедуры]Скрытый текст
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот