Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   СКД или как получить нужные данные (http://forums.kuban.ru/f1040/skd_ili_kak_poluchit-_nuzhnye_dannye-4240826.html)

vistwork 23.05.2013 15:45

СКД или как получить нужные данные
 
Краткая предыстория.
Отчет на скд, конфа ут11, управляемые формы,
В отчет нужно добавить группировку клиентов по населенным пунктам, когда это были города, то было проще, он храниться в контактной информации партнера в табличной части, в которой одна из колонок типКонтактнойИнформации - фактический адрес, и есть колонка Город, т.е. в запросе я делаю отбор по типКонтактнойИнформации - фактический адрес, и выбираю Город, а потом делаю по нему группировку,
Когда появились деревни, то поле город стало пустое, а данные нужно вытащить из колонки ЗначениеПолей в которой данные представлены в виде
--------------------
"Индекс=1111111
КодРегиона=11
Регион=******* край
Район=***** р-н
НаселенныйПункт=Петровака с
Улица=50 лет Октября ул
Дом=111
Квартира=11
Страна=РОССИЯ
КодСтраны=643
ТипДома=дом
ТипКвартиры=кв."
------------------
Как мне при формировании запроса, использую конструктор разложить на лету это поле в массив и выбрать населененный пункт, или есть варианты попроще?

roma n 23.05.2013 15:50

В колонке "ЗначенияПолей" находится же только то что в твоем примере справа от знакак равенства?
Выбор Когда .... Тогда .... Конец
Не?

vistwork 23.05.2013 15:53

Так мне нужно сначала разложить это в массив, а потом выдернуть нужные данные

Uho 23.05.2013 16:03

посмотри какой функцией в модулях парсится эта строка и примени ее в СКД

vistwork 24.05.2013 09:05

3-Uho >Да что-то не парситься она нигде...

Uho 24.05.2013 09:20

4-vistwork > ну как это? например, в форме редактирования адреса?

EarlyBird 24.05.2013 12:14

[quote=vistwork;30549072]Когда появились деревни, то поле город стало пустое, а данные нужно вытащить из колонки ЗначениеПолей[/quote]
не нужно вытаскивать данные из колонки ЗначениеПолей.
Деревня тоже хранится в отдельной колонке, нужно оттуда тащить.

vistwork 26.05.2013 14:51

6-Ирли Бёрд >Соглашусь только если вы укажите пальцем.

vistwork 26.05.2013 15:04

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


в вычисляемых полях crl прописал вызов
МодулиДополнительные.ОбработатьМассивНаСервере(ЗначенияПолей)

Без этого поля отчет работает, но с этим полем пишет
{Форма.Форма.Форма(893)**: Ошибка при вызове метода контекста (Вывести)
ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Ошибка в выражении
по причине:
Синтаксическая ошибка "МодулиДополнительные.ОбработатьМассивНаСервере"

Uho 28.05.2013 09:33

4-vistwork > а это что?

// Получает значения поля адреса
//
// Параметры:
// СтрокаЗначенийПолей - строка значений полей
// ИмяПоля - имя поля
Функция ПолучитьЗначениеКонтактнойИнформации(СтрокаЗначенийПолей, ИмяПоля) Экспорт

ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля);
Значение = "";
Если ПозицияПоля <> 0 Тогда
ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля));
ПозицияПС = Найти(ЗначенияПолей, Символы.ПС);
Значение = Сред(ЗначенияПолей, 0 , ПозицияПС - 1);
КонецЕсли;

Возврат Значение;

КонецФункции

Uho 28.05.2013 09:43

+9 попробовал - все отлично работает


Текущее время: 15:33. Часовой пояс GMT +3.