УП 2.1 При вызове команды печати ошибка - поле объекта не обнаружено

1. StannisBaratheon 28.04.21 13:03 Сейчас в теме
Добрый день. Возникла странная ошибка. Помогите решить, пожалуйста.

Часть кода модуля команды, в котором возникает ошибка:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ТабДок = Новый ТабличныйДокумент;
	Печать(ТабДок, ПараметрКоманды);
	ТабДок.Показать("Счет на оплату");
	
КонецПроцедуры

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

БанкОрганизации = Новый Запрос();
БанкОрганизации.Текст = "выбрать
|банкорги.номерсчета как НомерСчетаБанкаОрганизации,
|банкорги.бикбанка как БикБанкаОрганизации,
|банкорги.наименованиебанка как НаименованиеБанкаОрганизации,
|банкорги.городбанка как ГородБанкаОрганизации,
|банкорги.банк.коррсчет как СчетБанкаПолучателяПредставление																																		
|из
|справочник.банковскиесчетаорганизаций как банкорги
|где
|банкорги.наименование = &БанкОрганизации";

БанкОрганизации.УстановитьПараметр("БанкОрганизации", БанкОрги.Наименование);
РезультатБанкОрганизации = БанкОрганизации.Выполнить();
ВыборкаБанкОрганизации = РезультатБанкОрганизации.Выбрать();


ТаблЧасть = новый Запрос();
ТаблЧасть.Текст = "выбрать
|кп.ссылка,
|кп.номерстроки,
|кп.номенклатура,
|кп.количество,
|кп.единицаизмерения,
|кп.цена,
|кп.сумма,
|кп.суммандс,
|кп.суммасндс
|поместить таблица
|из
|документ.коммерческоепредложениеклиенту.товары как кп
|где
|кп.ссылка.номер = &Номер и
|кп.ссылка.дата = &дата
|;
|///
|выбрать
|сумма(итоги.сумма) как Итого,
|количество(итоги.номерстроки) как КоличествоСтрок
|поместить Итог
|из
|документ.коммерческоепредложениеклиенту.товары как итоги
|где
|итоги.ссылка.номер = &Номер и
|итоги.ссылка.дата = &дата
|;
|///
|выбрать *
|из
|таблица как таблица,
|итог как итог";

ТаблЧасть.УстановитьПараметр("Номер", СсылкаНаДокумент.Номер);
ТаблЧасть.УстановитьПараметр("Дата", СсылкаНаДокумент.Дата);

РезультатТаблЧасть = ТаблЧасть.Выполнить();
ВыборкаТаблЧасть = РезультатТаблЧасть.Выбрать();


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

Показать


Напомню, что это часть кода. В клиенте при нажатии на кнопку, вылезает ошибка "Поле объекта не обнаружно Номер) -> ТаблЧасть.УстановитьПараметр("Номер", СсылкаНаДокумент.Номер);
По теме из базы знаний
Найденные решения
29. M_A_D 184 29.04.21 12:00 Сейчас в теме
(28) если все же выводит поле "сообщение" и в нем содержится слово Массив, значит в ЭтотОбъект "прилетает" массив, можно попробовать сделать такое:
Сообщить(ЭтотОбъект[0].Ссылка);

По идее должен вывести значение а не слово Массив.
StannisBaratheon; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. M_A_D 184 28.04.21 13:59 Сейчас в теме
Отладчиком проходился?
В этой "части кода", не видно передается ли какое-то значение в параметр "СсылкаНаОбъект".
Есть мысль, что этот параметр пустой, потому-то и не может найти "Номер".
3. StannisBaratheon 28.04.21 14:01 Сейчас в теме
(2) Да пустой, очевидно. При этом аналогичный код в другом документе работает идеально. А здесь ошибки тянутся из моей предыдущей темы. Т.е. были убраны и добавлены заново реквизиты формы (причем не номер), и всё полетело
4. M_A_D 184 28.04.21 14:05 Сейчас в теме
(3)
1. Значит в другом документе в этот параметр что-то, все же передается, может быть в процедуре на клиенте, например.
2. Если номер есть на форме, откуда вызывается процедура, не проще ли номер тащить оттуда?

Просто получается, для помощи маловато информации в топике)))
5. StannisBaratheon 28.04.21 14:12 Сейчас в теме
(4) Да, передается. Но эти две процедуры ничем не отличаются, кроме самих запросов. А кнопка печати в форме у меня почему-то не получилась, ни ошибок, ничего не выводится. Попытаюсь объяснить поподробнее. Вот есть типовой документ. На поддержке, но с возможностью редактирования. Я полезла туда, удалила из формы 2 поля. Добавила 2 других, одно из которых было в числе удаленных. Поле не появилось на форме, хотя я полностью восстановила события и путь идентичный. После была написана вот эта процедура. И всё бы ничего, но эта же самая процедура работает в базе-копии. Могу предоставить любые данные, какие только смогу/пойму. Долго писала код, получилось и тут вот эта ересь с формой меня просто ввели в ступор.
6. M_A_D 184 28.04.21 14:19 Сейчас в теме
(5)
Тут такой момент.
Запрос может и не отличается, но в запросе есть параметры (&тыры-пыты), и в вашем случае этот параметр вот тут: "|итоги.ссылка.номер = &Номер"
так вот. Для того что бы этот запрос отработал, программа ищет что передать в этот параметр и идет в строку:
"ТаблЧасть.УстановитьПараметр("Номер", СсылкаНаДокумент.Номер);"
и....
Не может получить значение так как передается ничего...

А там где это все отрабатывает, как вы сами написали, что-то предеается в параметр процедуры "СсылкаНаДокумент", и когда программа доходит до исполнения запроса, все параметры наполняются нужной информацией.

Что бы ваша процедура исполнилась или прошла до следующей ошибки, вам нужно в параметр "СсылкаНаДокумент", передать какое-то значение)))

На форму добавили 2 поля, но они не появились.
А вы на саму форму в конфигураторе вытянули эти поля?
7. StannisBaratheon 28.04.21 14:43 Сейчас в теме
(6) Процедуры "СсылкаНаДокумент" не существует и там, и там. Да, конечно, только так я и создаю поля. События поля также были возвращены. Как вариант, я так понимаю, создать в модуле объекта процедуру "СНД", состоящей из запроса?
8. M_A_D 184 28.04.21 15:01 Сейчас в теме
(7)Я не говорил про процедуру СсылкаНаДокумент.
ПАРАМЕТР...

У вас есть:
&НаСервере
Процедура Печать(ТабДок, СсылкаНаДокумент)

Так вот всю эту процедуру в параметр СсылкаНаДокумент ничего не передается...
Если эта процедура вызывается из документа, то можно попробовать что-то типа:
СсылкаНаДокумент=Объект.Ссылка;

тогда, в этот параметр улетит ссылка на текущий документ из которого вызывается процедура, и запрос должен будет отработать.
9. StannisBaratheon 29.04.21 08:18 Сейчас в теме
(8) Переменная неопределена "Объект"
10. M_A_D 184 29.04.21 08:20 Сейчас в теме
(9)откуда вызывается процедура?
Из формы документа, из обработки, или еще откуда-то?
11. StannisBaratheon 29.04.21 08:39 Сейчас в теме
(10) модуль команды, сейчас через менеджер пытаюсь сделать
12. StannisBaratheon 29.04.21 09:18 Сейчас в теме
(10) через предлагаемый конструктором печати параметр "Ссылка" так же ничего не передается в модуле менеджера :/ - Поле объекта не обнаружено
13. M_A_D 184 29.04.21 09:20 Сейчас в теме
(12)
Я так и не понимаю в каком объекте конфигурации пишется данная процедура?
Из контекста сделал догадку, что это общая команда, но у нее нет модуля менеджера....
14. StannisBaratheon 29.04.21 09:23 Сейчас в теме
(13) Я сделала процедуру и в модуле менеджера, там возникла ошибка "Поле объекта не обнаружено"
15. M_A_D 184 29.04.21 09:28 Сейчас в теме
(14)
Да это-то как раз понятно.
Я не понимаю в каком ОБЪЕКТЕ конфигурации вы пишите эту процедуру....
например:
Есть Справочники
Есть Документы
У этих элементов конфигурации есть:
Справочники.Номенклатура
Документы.ПоступлениеТоваровУслуг

Это на пример...

Так вот, есть куча объектов, есть общие команды, так вот где, в каком объекте вы пишите свою процедуру...

Проблема в том, что процедура исполняет все запросы, но когда для исполнения запроса тынет "СсылкаНаДокумент.Номер", она тянет эти данные из "ПараметрыКоманды", в которые не передается ни какое значение, очевиждно.
Что бы хоть как-то вам ответить, нужно понимать, что где откуда, но ответа на "Где", ни как не получается выяснить.

Просто, судя по тому, что "Объект.Ссылка" не сработало, вы находитесь не в документе, а где-то в другом месте....
16. StannisBaratheon 29.04.21 09:31 Сейчас в теме
(15) в документе, ком. предложения клиентам
17. M_A_D 184 29.04.21 09:36 Сейчас в теме
(16)отлично.
Следующий вопрос.
Редактируется форма документа?
Или сам документ?
18. StannisBaratheon 29.04.21 09:37 Сейчас в теме
19. M_A_D 184 29.04.21 09:39 Сейчас в теме
(18)попробуйде
ЭтотОбъект.Номер

либо в параметр процедуры передайте его, либо сразу в запрос, и попробуйте исполнить
20. StannisBaratheon 29.04.21 09:44 Сейчас в теме
(19) без объявления в параметрах не работает, при объявлении та же ошибка (поле объекта не обнаружено). Поле точно есть, так как это стандартный реквизит. При выборке в консоли оно также есть и оно заполнено
21. M_A_D 184 29.04.21 09:50 Сейчас в теме
(20)
Попробуйте пройтись либо отладчиком, либо попробуйте в процедуре, до исполнения запроса с ошибкой вставить:
Сообщить(ЭтотОбъект);

И исполните процедуру. Если выберете второй вариант, то при исполнении должны будете увидеть сообщение с документом из которого вызываете процедуру.
23. StannisBaratheon 29.04.21 10:30 Сейчас в теме
(21) Сообщить(ЭтотОбъект) {<Неизвестный модуль>(1,1)}: Обращение к процедуре как к функции (Сообщить)

Также при присвоении переменным данных в них не записываются значения, в отличии от той же процедуры в модуле команды. Макет = ... - значение пустое, тип не определено. Переменная = справочники. .... - правая часть кода вычислилась, переменная пустая
24. StannisBaratheon 29.04.21 10:44 Сейчас в теме
(23) результат Сообщить - Массив
25. M_A_D 184 29.04.21 10:47 Сейчас в теме
(23) эм... не понял...
Координаты этой процедуры 1,1
Вы должны были это вставить в процедуру на сервере перед запросом "ТаблЧасть"...

Простите, пожалуйста, но думаю вы очень зря полезли ковырять код... обратитесь к программисту с хорошим ТЗ, вам сделают все быстро и безболезненно...
26. StannisBaratheon 29.04.21 10:52 Сейчас в теме
(25) я всё это время пробовала разные вариации, "сообщить" было и перед запросом, результат один и тот же. В код мне так или иначе лезть, больше не к кому обращаться
27. M_A_D 184 29.04.21 10:53 Сейчас в теме
(26)т.е. если вы вставляете Сообщить перез запросом, пишет "Обращение к процедуре как к функции (Сообщить) "?
22. StannisBaratheon 29.04.21 09:52 Сейчас в теме
отладчик просто выводит на строку, в которой указывается параметр запроса - на данный момент это Объект.Номер. Второй вариант попробую
28. StannisBaratheon 29.04.21 10:54 Сейчас в теме
это в конфигураторе, да. В клиенте в окне пишет "Массив". всё
29. M_A_D 184 29.04.21 12:00 Сейчас в теме
(28) если все же выводит поле "сообщение" и в нем содержится слово Массив, значит в ЭтотОбъект "прилетает" массив, можно попробовать сделать такое:
Сообщить(ЭтотОбъект[0].Ссылка);

По идее должен вывести значение а не слово Массив.
StannisBaratheon; +1 Ответить
30. StannisBaratheon 29.04.21 12:25 Сейчас в теме
(29) да, действительно выводит. и к реквизитам так же можно обращаться. Вы волшебник!
31. M_A_D 184 29.04.21 12:43 Сейчас в теме
(30)единственное, есть одна проблема в данном случае, т.к. это массив, в нем может быть больше одной записи.
А значение в квадратных скобках это индекс элемента(строки) с информацией, к которой идет обращение.
Если процедура будет вызываться по СПИСКУ документов, например выделили кучу документов, тогда нужно оборачивать все в цикл, что бы индексы перебирались и отработаны были все строки.
StannisBaratheon; +1 Ответить
Оставьте свое сообщение

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