|
получить дополнительное СВОЙСТВО заказа клиента в конкретной ситуации УТ 11.4 | ☑ | ||
---|---|---|---|---|
0
mad
08.04.22
✎
00:12
|
1С УТ 11.4
Конфигураторатор-Документы-Заказ клиента. правой кнопкой-модуль менеджера Функция ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги(МассивОбъектов, ПараметрыПечати) Экспорт там выбираются данные для заполнения печатной формы заказа с недостающими реквизитами проблем нет Но как добавить в формируемый массив значения из ДОПОЛНИТЕЛЬНЫХ СВОЙСТВ (не доп.реквизитов) заказа? понятно что надо постучать в Регистр Сведений-Дополнительные сведения. Но как? Начало функции вот такое (чтоб получить доп.реквизит ВремяДоставкиС было достаточно добавить всего одну строку) Функция ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги(МассивОбъектов, ПараметрыПечати) Экспорт Если ПараметрыПечати <> Неопределено И ПараметрыПечати.Свойство("ОтображатьСкидки") Тогда ОтображатьСкидки = ПараметрыПечати.ОтображатьСкидки; Иначе ОтображатьСкидки = (Константы.ОтображениеСкидокВПечатныхФормахДокументовПродажи.Получить() <> Перечисления.ВариантыВыводаСкидокВПечатныхФормах.НеВыводитьСкидки); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Документы.Ссылка КАК Ссылка, | Документы.Номер КАК Номер, | Документы.Дата КАК Дата, | Документы.АдресДоставки КАК АдресДоставки, | Документы.Организация КАК Организация, | Документы.Организация КАК Исполнитель, | Документы.ЖелаемаяДатаОтгрузки КАК ЖелаемаяДатаОтгрузки, | Документы.ВремяДоставкиС КАК ВремяДоставкиС, <......> |ИЗ | Документ.ЗаказКлиента КАК Документы |ГДЕ | Документы.Ссылка В(&МассивОбъектов) Для получения дополнитльеных СВОЙСТВ попробовал добавить отдельный блок ВЫБРАТЬ, но не работает вообще ВЫБРАТЬ | ДополнительныеСведения.Свойство.Ссылка, | ДополнительныеСведения.Свойство.Наименование КАК Наименование, | ДополнительныеСведения.Значение КАК МетодОплаты |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Объект = &МетодОплаты | И ДополнительныеСведения.Свойство.Наименование ПОДОБНО &Наименование В целом, проблему можно, видимо решить в другом месте, куда прилетают все данный из этой функции обработки- ПечатьЗаказовНаТоварыУслуги - правая кнопка- модуль менеджера в Процедура ЗаполнитьТабличныйДокументЗаказаНаТоварыУслуги(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ИмяМакета) идем в "область макета" - например, Шапка можно было бы добавить код типа ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство"); Значение=СсылкаНаОбъект.ДополнительныеРеквизиты.Найти(ДопСвойство); или может вот так, т.к. речь идет именно о доп.свойстве Значение=СсылкаНаОбъект.ДополнительныеСведения.Свойство.Наименование.Найти(ДопСвойство); вопрос как получить ссылку на объект. и правильно ли все остальное. Если кто-то решит помочь, то для примера было бы здорово использовать сразу МетодОплаты Спасибо |
|||
1
Смотрящий
08.04.22
✎
05:54
|
| ДопСвойство1.Значение КАК ЗначениеДопСвойство1
| ДопСвойство2.Значение КАК ЗначениеДопСвойство2 |ИЗ | Документ.ЗаказКлиента КАК Документы | | ЛЕВОЕ СОЕДИНЕНИЕ Документы.ЗаказКлиента.ДополнительныеСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДополнительныеСведения.Ссылка | И ДополнительныеСведения.Свойство = &ДопСвойство1 | | ЛЕВОЕ СОЕДИНЕНИЕ Документы.ЗаказКлиента.ДополнительныеСведения КАК ДопСвойство2 | ПО Документы.Ссылка = ДополнительныеСведения.Ссылка | И ДополнительныеСведения.Свойство = &ДопСвойство2 Запрос.УстановитьПараметр("ДопСовйство1", ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство1")); Запрос.УстановитьПараметр("ДопСовйство2", ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство2")); как то так ... |
|||
2
DEVIce
08.04.22
✎
05:59
|
Сдается мне что в этом куске что-т не так: "ДополнительныеСведения.Объект = &МетодОплаты"
В качестве объекта должна быть все-таки ссылка на заказ, а не на метод оплаты. |
|||
3
mad
08.04.22
✎
15:18
|
Спасибо, что откликнулись
Смотрящий в параметрах видимо надо вот так? Иначе ругается на переменная не определена "ДопСвойство" Запрос.УстановитьПараметр("ДопСвойство1", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДопСвойство1")); В итоге конфигуратор перестает ругаться. но в тонком клиенте при попытке открыть форму печатную ошибка {(7, 22)}: Таблица не найдена "Документы.ЗаказКлиента.ДополнительныеСведения" ЛЕВОЕ СОЕДИНЕНИЕ <<?>>Документы.ЗаказКлиента.ДополнительныеСведения КАК ДопСвойство1 [] |
|||
4
Смотрящий
08.04.22
✎
15:21
|
Ну да, ошибся малясь при копировании.
В 11.4 вроде как в доптаблице объекта хрантся свойства Нет под рукой базы - поиграйся сам в конструкторе |
|||
5
mad
08.04.22
✎
15:34
|
Если б я умел играться ))
я подумал, что во ошибке причина в том что таблица "Документы." не существует ,т.к. видимо она появляется после запроса вот того, который в оригинале присутствует. поставил ваш код после того запроса, новым блоком ВЫБРАТЬ. Но это не помогло. т.е. таблица Документы.ЗаказКлиента.ДополнительныеСведения где-то потеряна или вообще не сформирована или ваш ко надо как-то встроить вот в изначальный блок ВЫБРАТЬ? |
|||
6
Смотрящий
08.04.22
✎
15:38
|
Встраивается через левое соединение
Попробуй ЛЕВОЕ СОЕДИНЕНИЕ Документы.ЗаказКлиента.ДополнительныеРеквизиты КАК ... |
|||
7
Смотрящий
08.04.22
✎
15:38
|
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ...
|
|||
8
Kassern
08.04.22
✎
15:39
|
(7) речь же не о доп реквизитах, а о доп свойствах. Это разные сущности
|
|||
9
Смотрящий
08.04.22
✎
15:40
|
Хранятся в одной таблице вроде как и реквизиты и сведения
|
|||
10
Kassern
08.04.22
✎
15:41
|
(9) нет, дополнительные сведения это РС, а дополнительные реквизиты - это ТЧ объекта
|
|||
11
mad
08.04.22
✎
15:44
|
я правильно понимаю, что доп.сведения, (в отличие от ДополнительныхРекзвизитов) хранятся в РегистрыСведений-ДополнительныеСведения ?
|
|||
12
Kassern
08.04.22
✎
15:45
|
(11) правильно
|
|||
13
Kassern
08.04.22
✎
15:45
|
тот же диадок хранит идентификаторы для документов как раз в дополнительных сведениях, так как это удобно, не нужно проводить документ, чтобы присвоить идентификатор
|
|||
14
mad
08.04.22
✎
15:48
|
я тут нагуглил еще вот такое
ЗначениеСвойства Возвращает значение дополнительного свойства объекта. Синтаксис Функция ЗначениеСвойства(Объект, Свойство, КодЯзыка = "") Экспорт Параметры Объект - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура, ДокументСсылка.ЗаказПокупателя, ... Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на дополнительный реквизит, значение которого нужно получить. - Строка - имя дополнительного свойства. КодЯзыка - Строка - если указано, то вместо значения дополнительного свойства будет возвращено его представление на указанном языке. Возвращаемое значение Произвольный - любое значение, допустимое для свойства. Пример вызова Результат = УправлениеСвойствами.ЗначениеСвойства(Объект, Свойство, КодЯзыка) Доступность Сервер, Толстый клиент, Внешнее соединение |
|||
15
Kassern
08.04.22
✎
15:50
|
(14) Блин у вас есть массив объектов в менеджере. В чем проблема, в текущем запросе, левым соединением прикрутить регистр сведений со свойствами и по объекту и и нужному свойству соединить?
|
|||
16
Kassern
08.04.22
✎
15:51
|
А если у вас будет 100 документов на печать, будете в цикле 100 раз эту функцию запускать?
|
|||
17
Смотрящий
08.04.22
✎
15:52
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство1
| ПО Документ.Объект = ДопСвойство1.Ссылка | И ДопСвойство1.Свойство = &ДопСвойство1 Так попробуй |
|||
18
mad
08.04.22
✎
16:00
|
так
Поле не найдено "Документ.Объект" ПО <<?>> Документ.Объект = ДопСвойство1.Ссылка |
|||
19
Смотрящий
08.04.22
✎
16:02
|
Документ.Ссылка = ДопСвойство1.Объект
Вот так попробуй |
|||
20
Kassern
08.04.22
✎
16:05
|
есть же такой замечательный инструмент, называется конструктор запросов, с помощью которого можно легким движением руки соединить как надо 2 таблички...
|
|||
21
mad
08.04.22
✎
16:09
|
(19) Поле не найдено "Документ.Ссылка"<<?>>Документ.Ссылка = ДопСвойство1.Объект
|
|||
22
mad
08.04.22
✎
17:14
|
изменил кое-что в основном коде - вроде перестало ругаться.
Встроил предлагаемый Смотрящим код в основной запрос по Заказу. теперь заработала часть |ИЗ | Документ.ЗаказКлиента КАК Документы | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДопСвойство1.Объект | И ДопСвойство1.Свойство = &ДопСвойство1 | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство2 | ПО Документы.Ссылка = ДопСвойство2.Объект | И ДопСвойство1.Свойство = &ДопСвойство2 теперь проблема с частью УстановитьПараметр пока вот тут было РегистрСведений.ДополнительныеСведения (без Ы) ругалось на то, что переменная РегистрСведений не определена. Посмотрел как в дереве конфигурации раздел называется - видимо надо РегистрЫСведений. переименовал. теперь стало Запрос.УстановитьПараметр("ДопСвойство1", РегистрыСведений.ДополнительныеСведения.НайтиПоНаименованию("МетодОплаты")); теперь ошибка МетодОбъекта не обнаружен НайтиПоНаименованию так же пробовал Запрос.УстановитьПараметр("ДопСвойство1", РегистрыСведений.ДополнительныеСведения.Найти("МетодОплаты")); Запрос.УстановитьПараметр("ДопСвойство1", РегистрыСведений.ДополнительныеСведения.Свойство.Найти("МетодОплаты")); видимо как-то иначе надо искать название свойства? И если тут ругалось на РегистрСведений не надо ли исправить в | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДопСвойство1.Объект | И ДопСвойство1.Свойство = &ДопСвойство1 тоже с Ы? |
|||
23
Kassern
08.04.22
✎
17:47
|
(22) умеете пользоваться конструктором запросов?
|
|||
24
mad
08.04.22
✎
17:59
|
(23) я посмотрел туда, благодаря ему (спасибо!) удалось прямо в конфигураторе отловить ошибки в запросе без запуска 1С и вот вроде запрос ок (причем часть кода ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство1 - - без Ы работает исключительно, а в параметрах - только с Ы Регистры. странно как-то )
В нем светятся эти два параметра (допсвойство1 и допсвойство2), в каждом есть объект ,свойство, значение. что с ними елать в конструкторе пока не очень понятно |
|||
25
mad
08.04.22
✎
18:01
|
Я так понимаю параметр должен получить ссылку на свойство, найдя его по имени свойства
|
|||
26
Михаил Козлов
08.04.22
✎
18:38
|
Если не ошибаюсь, свойство нужно искать в планах видов характеристик ДополнительныеРеквизитыИСведения.
|
|||
27
mad
09.04.22
✎
01:38
|
если использовать
| ЛЕВОЕ СОЕДИНЕНИЕ ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДопСвойство1.Объект | И ДопСвойство1.Свойство = &ДопСвойство1 и внизу параметр Запрос.УстановитьПараметр("ДопСвойство1", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("МетодОплаты")); то ошибка Таблица не найдена ЛЕВОЕ СОЕДИНЕНИЕ <<?>> ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения Если же оставить так "ВЫБРАТЬ | Документы.Ссылка КАК Ссылка, . . | Документы.ЖелаемаяДатаОтгрузки КАК ЖелаемаяДатаОтгрузки, | Документы.ВремяДоставкиС КАК ВремяДоставкиС, | Документы.ВремяДоставкиПо КАК ВремяДоставкиПо, | ДопСвойство1.Значение КАК МетодОплаты, | ДопСвойство2.Значение КАК КомментарииПокупателя, . . |ИЗ | Документ.ЗаказКлиента КАК Документы | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДопСвойство1.Объект | И ДопСвойство1.Свойство = &ДопСвойство1 | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство2 | ПО Документы.Ссылка = ДопСвойство2.Объект | И ДопСвойство1.Свойство = &ДопСвойство2 | |ГДЕ | Документы.Ссылка В(&МассивОбъектов) то ошибок нет, но значений так же нет |
|||
28
hhhh
09.04.22
✎
04:11
|
(27) ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. без Ы.
В запросе пишите без Ы, а в тексте программы с Ы. |
|||
29
DimG
09.04.22
✎
07:11
|
Не нужно велосипед изобретать. Есть БСП и общий модуль УправлениеСвойствами, там все.
|
|||
30
mad
09.04.22
✎
16:03
|
(28) т.е. должно быть вот так?
| ЛЕВОЕ СОЕДИНЕНИЕ ПланыВидовХарактеристик.ДополнительныеРеквизитИСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДопСвойство1.Объект | И ДопСвойство1.Свойство = &ДопСвойство1 и внизу параметр Запрос.УстановитьПараметр("ДопСвойство1", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("МетодОплаты")); |
|||
31
mad
09.04.22
✎
17:12
|
(29) я погуглил, должно быть что-то типа
| УправлениеСвойствами.ЗначениеСвойства(ДокОбъект???, "МетодОплаты") КАК МетодОплаты, можно ли это просто встроить в запрос "ВЫБРАТЬ | Документы.Ссылка КАК Ссылка, | УправлениеСвойствами.ЗначениеСвойства(ДокОбъект???, "МетодОплаты") КАК МетодОплаты, ... |ИЗ | Документ.ЗаказКлиента КАК Документы | |ГДЕ | Документы.Ссылка В(&МассивОбъектов) | |УПОРЯДОЧИТЬ ПО | Документы.МоментВремени на месте ДокОбъект??? должна быть ссылка же ее надо в параметре получить? или как |
|||
32
mad
09.04.22
✎
17:23
|
нет, как | УправлениеСвойствами.ЗначениеСвойства(ДокОбъект???, "МетодОплаты") КАК МетодОплаты,
это в запрос нельзя вставить. надо в параметрах видимо получить значение Запрос.УстановитьПараметр("ДопСвойство1",УправлениеСвойствами.ЗначениеСвойства(???ДокументСсылка.ЗаказПокупателя???, "МетодОплаты")); осталось понять что вписать на место ссылки |
|||
33
Смотрящий
09.04.22
✎
18:15
|
(32) (30) не работает ? что пищет ?
|
|||
34
mad
09.04.22
✎
19:30
|
заработало! пишу результат, т.к. часто оч помогает что кто-то все же описывает найденное решение и не с этим вот ПолучитьЗначение(объект, свойство) где Объект - ссылка и т.д. еще поди угадай как получить ссылку на объект.
(я до сих пор не могу понять, так что буду очень благодарен, если кто-то расскажет как правильно будет получить ссылку на заказ покупателя Запрос.УстановитьПараметр("ДопСвойство1",УправлениеСвойствами.ЗначениеСвойства(???ДокументСсылка.ЗаказПокупателя???, "МетодОплаты")); Я так понимаю это можно использовать еще прямее и проще итак, я искал МетодОплаты - это название из "значение для формул", обычно используется это значение. Оказывается ,тут реально ищется по Наименованию, так что Искать надо было "Метод Оплаты" плюс видимо я в итоге натыкал в конструкторе запросов правильный вариант, буквально наобум (я реально оч примерно ориентируюсь в запросах ,функциях и прочем глубоком) итого чтобы вывести в макет печатной формы заказа Дополнительные СВОЙСТВА (реквизиты делаются гораздо проще) у меня заработал этот вариант (тут свойство "Сайт" т.к. я решил проверить с свойством с одним словом, чтоб исключить ошибку) функция ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги(МассивОбъектов, ПараметрыПечати) Экспорт прямо в первый же запрос добавляем | ДопСвойство1.Объект.Ссылка КАК ОбъектСсылка, | ДопСвойство1.Свойство.Имя КАК СвойствоИмя, | ДопСвойство1.Значение КАК Сайт |ИЗ | Документ.ЗаказКлиента КАК Документы <----< Это уже было | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСвойство1 | ПО Документы.Ссылка = ДопСвойство1.Объект | И (ДопСвойство1.Свойство = &ДопСвойство1) и после запроса добавляем параметр Запрос.УстановитьПараметр("ДопСвойство1", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Сайт")); дальше уже остается "КАК Сайт" в обработке ПечатьЗаказовНаТоварыУслуги воткнуть в нужную часть макета как УстановитьПараметр(ОбластьМакета, "Сайт", ДанныеПечати.Сайт); И в макете добавить параметр <Cайт> в нужное место. ВСЕМ БОЛЬШОЕ СПАСИБО В итоге я с вашими подсказками доковырялся до результата |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |