Имя: Пароль:
1C
1С v8
(ЗУП) Распарсить в отчете строку с местом рождения
0 vechiy
 
30.10.12
10:47
Нужно разбить строку места рождения (из физ.лица) и вывести её в отчете.
Строка эта хранится в ЗУПе целиком и в коде парсится по запятым, на регион, город и т.д.
Нужно парсить её и выводить в отчете, как это можно сделать?
1 RomaH
 
naïve
30.10.12
10:48
....
пос. Некрасовское Ярославской обл.

г. Ярославль

Няндома

как ты это "парсить" собираешься?
примеры строк есть?
2 RomaH
 
naïve
30.10.12
10:49
и главное - нафига?
3 Serg_1960
 
30.10.12
10:49
В ЗУП есть типовая функция для "сбора" и "разбора" адресной строки.
4 RomaH
 
naïve
30.10.12
10:50
(3) там не адрес
5 RomaH
 
naïve
30.10.12
10:52
а, извиняюсь - оказывается структурирована
вопрос в чем? как парсить
или как парсить при выводе отчета?
6 vechiy
 
30.10.12
10:55
(5) да, как парсить в вывод отчета)
как подставить строку в функцию парсинга и потом оттуда полученные строки вывести в отчет
7 vechiy
 
30.10.12
10:56
в модуле отчета есть такая функция:

Процедура ДоработатьКомпоновщикПередВыводом() Экспорт
   Для каждого ВыбранноеПоле из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
       Если ТипЗнч(ВыбранноеПоле) = Тип("ВыбранноеПолеКомпоновкиДанных") И ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ДанныеОФизЛице.ДеньРождения") тогда
           ВыбранноеПоле.Заголовок = "Ближайший день рождения";
       КонецЕсли;
   КонецЦикла;
   
   ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
   Если ЗначениеПараметра = Неопределено Тогда
       Возврат;
   КонецЕсли;
   
   Если ЗначениеПараметра.Значение = Неопределено или Дата(ЗначениеПараметра.Значение) = '00010101' Тогда
       ЗначениеПараметра.Значение = КонецДня(ТекущаяДата());
       ЗначениеПараметра.Использование = Истина;
   КонецЕсли;
   
   СписокЗначений = Новый СписокЗначений;
   СписокЗначений.Добавить(Справочники.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная);
   СписокЗначений.Добавить(Справочники.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная);
   СписокЗначений.Добавить(Справочники.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая);
   ТиповыеОтчеты.УстановитьПараметр(КомпоновщикНастроек, "ТарифнаяСтавкаОклад", СписокЗначений);
   
   СтруктураМестоРождения = РегламентированнаяОтчетность.РазложитьМестоРождения(МестоРожденияСтрокой);
   
   
   
КонецПроцедуры


так понимаю, где-то здесь можно и получить, и вывести, но не знаю как)
8 vechiy
 
30.10.12
11:00
сделать несколько полей с параметрами в отчете и заполнять их
9 RomaH
 
naïve
30.10.12
11:00
прямо в компановщике в расчитываемые поля добавляешь нужные
а в них в выражении пишешь функцию общего модуля
10 RomaH
 
naïve
30.10.12
11:01
прямо в компановщике *** в макете СКД
11 vechiy
 
30.10.12
11:07
РегламентированнаяОтчетность.РазложитьМестоРождения(РаботникиОрганизации.Сотрудник.Физлицо.МестоРождения)

пробую, да, но не получается обратиться к полю
12 vechiy
 
30.10.12
11:07
ругается на это
13 vechiy
 
30.10.12
11:12
я делаю параметр, к примеру, для города рождения, правильно?
поле &городРождения
в вычисляемых полях указываю "путь к данным" - городРождения
"Выражение" - РегламентированнаяОтчетность.РазложитьМестоРождения(ФизЛицоМестоРождения).НаселенныйПункт
14 vechiy
 
30.10.12
11:31
РегламентированнаяОтчетность.РазложитьМестоРождения(ГородРождения)

вот это возвращает мне  структуру, но к полям структуры не даёт обратиться (типа "синтаксическая ошибка")
15 RomaH
 
naïve
30.10.12
11:34
я делаю параметр, к примеру, для города рождения, правильно?
поле &городРождения
это не надо

для начала нарисуй свои функцИИ - возращающие просто строку
город/область и прочее
16 vechiy
 
30.10.12
11:51
в модуле отчета надо определять функцию?
Делаю там, при выводе отчета функцию не находит
17 vechiy
 
30.10.12
11:54
че то я туплю, как к ней обратиться, если она в модуле объекта отчета? Никак?)
18 RomaH
 
naïve
30.10.12
11:58
только функция общего модуля
19 vechiy
 
30.10.12
11:59
эх
20 vechiy
 
30.10.12
11:59
В модуле объекта отчета никак не сделать?
Если вроде этого:
МестоРождения = Рез.МестоРождения.Получить();
       
       Если ТипЗнч(МестоРождения) = Тип("Соответствие") Тогда
           
           Страна = МестоРождения.Получить("Страна");
           Область = МестоРождения.Получить("Область");
           Район = МестоРождения.Получить("Район");
           НасПункт = МестоРождения.Получить("НасПункт");
           Место = Врег(СокрЛП(Страна)+","+СокрЛП(Область)+","+СокрЛП(Район)+","+СокрЛП(Наспункт));
                       
       КонецЕсли;
       
          Область = Макет.ПолучитьОбласть("Строка");
          Область.Параметры.МестоРождения = Место;
21 RomaH
 
naïve
30.10.12
12:11
м модуле объекта - тогда в СКД передавать внешний источник данных
22 vechiy
 
30.10.12
12:38
только вот как это сделать)
23 RomaH
 
naïve
30.10.12
17:54
Что сделаь?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший