|
Преобразовать данные из запроса | ☑ | ||
---|---|---|---|---|
0
Agent
14.09.11
✎
21:11
|
Добрый вечер! Подскажите, пожалуйста. Необходимо в отчет «Ответственного исполнителя» вывести в следующем виде "Фамилия И. О."
Функция ФамилияИО(ФИО) ПервПроб = Найти(ФИО," "); Если ПервПроб=0 Тогда Возврат ФИО; Иначе Фамилия = Лев(ФИО,ПервПроб); ИО = Сред(ФИО,ПервПроб+1); ИО = СокрЛ(ИО); Имя = Лев(ИО,1)+"."; ВтПроб = Найти(ИО," "); Если ВтПроб=0 Тогда Возврат Фамилия+Имя; Иначе Возврат Фамилия+Имя+" "+Лев(СокрЛ(Сред(ИО,ВтПроб+1)),1)+"."; КонецЕсли; КонецЕсли; КонецФункции Данная функция преобразует строку в вид "Фамилия И. О." Если применить эту функцию для данных, полученных в запросе, система выдает ошибку: !!«Преобразование значения к типу Строка не может быть выполнено» Действия: В запросе выбираю данные ответственного исполнителя и применяю функцию ФамилияИО(ФИО), потом данные передаю в макет. Функция Ответственный() Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ответственный КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ФамилияИО(ДанныеШапкиОтветственный); Возврат Ответственный; КонецФункции ................ Макет = ПолучитьМакет("Макет"); Ответственный = Ответственный(); ОбластьМакета = Макет.ПолучитьОбласть("Ответственный"); ОбластьМакета.Параметры.Заполнить(Ответственный); ТабДокумент.Вывести(ОбластьМакета); В запросе применял «Представление», «Выразить как строка», но всё равно таже ошибка. Заранее спасибо! |
|||
1
shuhard
14.09.11
✎
21:13
|
(0)[ФамилияИО(ДанныеШапкиОтветственный)]
сильно |
|||
2
zak555
14.09.11
✎
21:14
|
в шаблон макета ячейки зафигачь ФамилияИО
|
|||
3
cViper
14.09.11
✎
21:41
|
ФамилияИО(ДанныеШапкиОтветственный.Ответственный);
|
|||
4
Agent
14.09.11
✎
21:49
|
Назначил функцию в макете как шаблон, ничего не выводит.
Применил вариант «Ответственный = ФамилияИО(ДанныеШапкиОтветственный.Ответственный)» система выдает ошибку «Ошибка при вызове метода контекста (Заполнить): Несоответствие типов (параметр номер '1')» |
|||
5
shuhard
14.09.11
✎
22:14
|
(4) используй отладчик Люк
|
|||
6
hhhh
14.09.11
✎
22:51
|
ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ответственный.Наименование КАК Ответственный |ИЗ |
|||
7
Agent
14.09.11
✎
23:08
|
Таже ошибка «Несоответствие типов (параметр номер '1')»
Функция Ответственный() Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ответственный.Наименование КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ФамилияИО(ДанныеШапкиОтветственный.Ответственный); Возврат Ответственный; КонецФункции Разве можно вызывать на прямую в макете функцию как шаблон, указав имя? Ведь прекрасно работает данная функция, если ёё применять не для данных полученных из запроса. |
|||
8
АСанСаныч
14.09.11
✎
23:23
|
(7) а в ДанныеШапкиОтветственный.Ответственный точно что-то есть?
|
|||
9
Фрэнки
14.09.11
✎
23:32
|
(7) Смотри, у тебя в запросе идет Наименование - это строка, а не элемент. ФамилияИО с каким типом работает?
|
|||
10
Фрэнки
14.09.11
✎
23:35
|
не... что-то не пойму. А почему нельзя из реквизитов СсылкаНаОбъект прочитать Ответственного и его наименование?
|
|||
11
Agent
14.09.11
✎
23:49
|
В ДанныеШапкиОтветственный.Ответственный передаеться ссылка справочника пользователи. Ответственный подставляется автоматически при заведении документа.
ФамилияИО(ФИО) работает со строковым типом. |
|||
12
hhhh
15.09.11
✎
00:29
|
ЗапросТекст = "ВЫБРАТЬ
точки не хватает |
|||
13
Agent
15.09.11
✎
00:42
|
А где именно точки не хватает?
|
|||
14
hhhh
15.09.11
✎
00:45
|
ЗапросУстановитьПараметр еще напиши.
ЗапросВыполнитьВыбрать; |
|||
15
zak555
15.09.11
✎
00:56
|
в типовой БП есть специально функция из общего модуля ОбщегоНазвачения, которая как раз возвращает в виде : Фамилия И.О.
Функция ФамилияИнициалыФизЛица(Объект = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт ТипОбъекта = ТипЗнч(Объект); Если ТипОбъекта = Тип("Строка") Тогда ФИО = РазложитьСтрокуВМассивПодстрок(СокрЛП(Объект)," "); ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") или ТипОбъекта = Тип("СправочникОбъект.ФизическиеЛица") ИЛИ ТипОбъекта = Тип("СправочникСсылка.СотрудникиОрганизаций") или ТипОбъекта = Тип("СправочникОбъект.СотрудникиОрганизаций") Тогда ФИО = РазложитьСтрокуВМассивПодстрок(СокрЛП(Объект.Наименование)," "); Иначе // используем возможно переданные отдельные строки Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." + ?(НЕ ПустаяСтрока(Отчество),Лев(Отчество,1)+".", ""), ""), "") КонецЕсли; КоличествоПодстрок = ФИО.Количество(); Фамилия = ?(КоличествоПодстрок > 0,ФИО[0],""); Имя = ?(КоличествоПодстрок > 1,ФИО[1],""); Отчество= ?(КоличествоПодстрок > 2,ФИО[2],""); Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." + ?(НЕ ПустаяСтрока(Отчество),Лев(Отчество,1)+".", ""), ""), ""); КонецФункции |
|||
16
zak555
15.09.11
✎
00:57
|
т.е. туда можно передать объект/ссылку справочников ФизическиеЛица/СотрудникиОрганизаций и всё
|
|||
17
zak555
15.09.11
✎
00:57
|
и не надо городить огород
|
|||
18
Agent
15.09.11
✎
01:12
|
Если я правильно понял это должно быть так:
Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект); Запрос.УстановитьПараметр("Ответственный",СсылкаНаОбъект.Ответственный); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ФамилияИО(ДанныеШапкиОтветственный.Ответственный); |
|||
19
Agent
15.09.11
✎
01:12
|
Проверял эту функцию ФамилияИнициалыФизЛица(Объект = "", Фамилия = " ", Имя = " ", Отчество = " ") она не работает.
|
|||
20
Agent
15.09.11
✎
01:12
|
конфа упп
|
|||
21
zak555
15.09.11
✎
01:24
|
в типовой УПП есть специально функция из общего модуля ОбщегоНазвачения, которая как раз возвращает в виде : Фамилия И.О.
Функция ФамилияИнициалыФизЛица(Объект = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт ТипОбъекта = ТипЗнч(Объект); Если ТипОбъекта = Тип("Строка") Тогда ФИО = РазложитьСтрокуВМассивПодстрок(СокрЛП(Объект)," "); ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") или ТипОбъекта = Тип("СправочникОбъект.ФизическиеЛица") ИЛИ ТипОбъекта = Тип("СправочникСсылка.СотрудникиОрганизаций") или ТипОбъекта = Тип("СправочникОбъект.СотрудникиОрганизаций") Тогда Если ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") или ТипОбъекта = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда Наименование = ПолучитьЗначениеРеквизита(Объект, "Наименование"); Иначе Наименование = Объект.Наименование; КонецЕсли; // Избавление от возможных выражений в скобках, например (осн.), (вн. совм.). НачальнаяПозиция = Найти(Наименование,"("); КонечнаяПозиция = Найти(Наименование,")"); ДлинаСтроки = СтрДлина(Наименование); Если НачальнаяПозиция > 0 Тогда СтрокаДляОбработки = Лев(Наименование, НачальнаяПозиция - 1) + ?(КонечнаяПозиция > 0,Прав(Наименование, ДлинаСтроки - КонечнаяПозиция),"") Иначе СтрокаДляОбработки = Наименование; КонецЕсли; ФИО = РазложитьСтрокуВМассивПодстрок(СокрЛП(СтрокаДляОбработки)," "); Иначе // используем возможно переданные отдельные строки Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." + ?(НЕ ПустаяСтрока(Отчество),Лев(Отчество,1)+".", ""), ""), "") КонецЕсли; КоличествоПодстрок = ФИО.Количество(); Фамилия = ?(КоличествоПодстрок > 0,ФИО[0],""); Имя = ?(КоличествоПодстрок > 1,ФИО[1],""); Отчество= ?(КоличествоПодстрок > 2,ФИО[2],""); Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." + ?(НЕ ПустаяСтрока(Отчество),Лев(Отчество,1)+".", ""), ""), ""); КонецФункции |
|||
22
zak555
15.09.11
✎
01:31
|
пля, Ответственный это справочник Пользователи, а тебе нужно ФизЛицо
=> ФизЛицо = ДанныеШапкиОтветственный.ФизЛицо; ФамилияИнициалыФизЛица = ОбщегоНазвачения.ФамилияИнициалыФизЛица(ФизЛицо); |
|||
23
zak555
15.09.11
✎
01:33
|
+ покажи весь код заполнения макета
может ты уже запрос накропал |
|||
24
zak555
15.09.11
✎
01:34
|
в каком фра учишься ?
|
|||
25
Agent
15.09.11
✎
01:44
|
Функция ПечатьМакета(СтрокаРасшифровки)
ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); Ответственный = Ответственный(); ОбластьМакета = Макет.ПолучитьОбласть("Ответственный"); ОбластьМакета.Параметры.Заполнить(Ответственный); ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции |
|||
26
Agent
15.09.11
✎
01:47
|
сама функция ответственный
Функция Ответственный() Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ответственный.Наименование КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ФамилияИО(ДанныеШапкиОтветственный); Возврат Ответственный; КонецФункции |
|||
27
Agent
15.09.11
✎
01:51
|
Если преобразователь не использовать ФамилияИО, то в отчет выводиться ответственный полностью Фамилия, Имя, Отчество.
|
|||
28
zak555
15.09.11
✎
01:54
|
печатешь в каком модуле ?
|
|||
29
zak555
15.09.11
✎
01:57
|
ну чудак
|
|||
30
zak555
15.09.11
✎
01:58
|
Функция Ответственный()
Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ответственный.ФизЛицо КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ОбщегоНазвачения.ФамилияИнициалыФизЛица(ДанныеШапкиОтветственный); Возврат Ответственный; КонецФункции |
|||
31
zak555
15.09.11
✎
02:01
|
во, а так будет работать ?
Функция Ответственный() Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ОбщегоНазвачения.ФамилияИнициалыФизЛица(ПоступлениеТоваровУслуг.Ответственный.ФизЛицо) КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект); Возврат Запрос.Выполнить().Выгрузить(); Возврат Ответственный; КонецФункции Функция ПечатьМакета(СтрокаРасшифровки) ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); Ответственный = Ответственный(); ОбластьМакета = Макет.ПолучитьОбласть("Ответственный"); ОбластьМакета.Параметры.Заполнить(Ответственный); ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции |
|||
32
zak555
15.09.11
✎
02:02
|
только у меня подозрение, что ПечатьМакета находится в модуле менеджера
|
|||
33
Agent
15.09.11
✎
02:03
|
ПечатьМакета находиться в модуле объекта.
|
|||
34
zak555
15.09.11
✎
02:05
|
(30) или (31) заработало ?
|
|||
35
zak555
15.09.11
✎
02:06
|
только надо переписать :
Функция Ответственный() Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ответственный.ФизЛицо КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",Ссылка); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ОбщегоНазвачения.ФамилияИнициалыФизЛица(ДанныеШапкиОтветственный); Возврат Ответственный; КонецФункции |
|||
36
zak555
15.09.11
✎
02:07
|
и следующий
Функция Ответственный() Запрос = Новый Запрос; ЗапросТекст = "ВЫБРАТЬ | ОбщегоНазвачения.ФамилияИнициалыФизЛица(ПоступлениеТоваровУслуг.Ответственный.ФизЛицо) КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",Ссылка); Возврат Запрос.Выполнить().Выгрузить(); Возврат Ответственный; КонецФункции Функция ПечатьМакета(СтрокаРасшифровки) ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); Ответственный = Ответственный(); ОбластьМакета = Макет.ПолучитьОбласть("Ответственный"); ОбластьМакета.Параметры.Заполнить(Ответственный); ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции |
|||
37
Agent
15.09.11
✎
02:15
|
нет не работает
|
|||
38
zak555
15.09.11
✎
02:22
|
как франч называется ?
|
|||
39
Agent
15.09.11
✎
02:30
|
упп
|
|||
40
zak555
15.09.11
✎
02:32
|
что не работает ?
|
|||
41
Agent
15.09.11
✎
02:40
|
нет :(
|
|||
42
Agent
15.09.11
✎
02:42
|
(35)Ошибка при вызове метода контекста (Выполнить): {(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
|
|||
43
zak555
15.09.11
✎
02:43
|
> ЗапросТекст
заменить на Запрос.Текст |
|||
44
Agent
15.09.11
✎
02:44
|
(36)При компилировании
Переменная не определена (Ответственный) Возврат <<?>>Ответственный; (Проверка: Толстый клиент (обычное приложение)) |
|||
45
zak555
15.09.11
✎
02:46
|
> Возврат Ответственный;
убрать строку на куй |
|||
46
Agent
15.09.11
✎
02:59
|
заменил Запрос.Текст, без изменений
(36)Картина ещё интересней. Конструктор не цепляет запрос, Синтаксическая ошибка "ВЫБРАТЬ | ОбщегоНазвачения.ФамилияИнициалыФизЛица(ПоступлениеТоваровУслуг.Ответственный.ФизЛицо) КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; |
|||
47
zak555
15.09.11
✎
03:04
|
сделай так :
Функция Ответственный() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ответственный.ФизЛицо КАК Ответственный |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",Ссылка); ДанныеШапкиОтветственный = Запрос.Выполнить().Выбрать(); ДанныеШапкиОтветственный.Следующий(); Ответственный = ОбщегоНазвачения.ФамилияИнициалыФизЛица(ДанныеШапкиОтветственный); Возврат Ответственный; КонецФункции Функция ПечатьМакета(СтрокаРасшифровки) ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); Ответственный = Ответственный(); ОбластьМакета = Макет.ПолучитьОбласть("Ответственный"); ОбластьМакета.Параметры.Ответственный = Ответственный; ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции |
|||
48
Agent
15.09.11
✎
03:12
|
(47)Печатная форма формируется, без отображения ответственного.Мистика просто...
|
|||
49
zak555
15.09.11
✎
03:16
|
проверь, что в отладчике на Ответственный =
|
|||
50
zak555
15.09.11
✎
03:20
|
или так :
Функция Ответственный() ДанныеШапкиОтветственный = Ссылка.Ответственный.ФизЛицо; Возврат ОбщегоНазвачения.ФамилияИнициалыФизЛица(ДанныеШапкиОтветственный); КонецФункции Функция ПечатьМакета(СтрокаРасшифровки) ТабДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); Ответственный = Ответственный(); ОбластьМакета = Макет.ПолучитьОбласть("Ответственный"); ОбластьМакета.Параметры.Ответственный = Ответственный; ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции |
|||
51
Agent
15.09.11
✎
03:22
|
отладчик показывает
ответственный = значение "" тип строка |
|||
52
Agent
15.09.11
✎
03:31
|
(50)Работает! Спасибо большое за помощь!
|
|||
53
zak555
15.09.11
✎
09:49
|
хотя правильно конечно получить запросом (!)
только ещё вашу 8ку не особо понимаю |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |