![]() |
СКД или как получить нужные данные Краткая предыстория. Отчет на скд, конфа ут11, управляемые формы, В отчет нужно добавить группировку клиентов по населенным пунктам, когда это были города, то было проще, он храниться в контактной информации партнера в табличной части, в которой одна из колонок типКонтактнойИнформации - фактический адрес, и есть колонка Город, т.е. в запросе я делаю отбор по типКонтактнойИнформации - фактический адрес, и выбираю Город, а потом делаю по нему группировку, Когда появились деревни, то поле город стало пустое, а данные нужно вытащить из колонки ЗначениеПолей в которой данные представлены в виде -------------------- "Индекс=1111111 КодРегиона=11 Регион=******* край Район=***** р-н НаселенныйПункт=Петровака с Улица=50 лет Октября ул Дом=111 Квартира=11 Страна=РОССИЯ КодСтраны=643 ТипДома=дом ТипКвартиры=кв." ------------------ Как мне при формировании запроса, использую конструктор разложить на лету это поле в массив и выбрать населененный пункт, или есть варианты попроще? |
В колонке "ЗначенияПолей" находится же только то что в твоем примере справа от знакак равенства? Выбор Когда .... Тогда .... Конец Не? |
Так мне нужно сначала разложить это в массив, а потом выдернуть нужные данные |
посмотри какой функцией в модулях парсится эта строка и примени ее в СКД |
3-Uho >Да что-то не парситься она нигде... |
4-vistwork > ну как это? например, в форме редактирования адреса? |
[quote=vistwork;30549072]Когда появились деревни, то поле город стало пустое, а данные нужно вытащить из колонки ЗначениеПолей[/quote] не нужно вытаскивать данные из колонки ЗначениеПолей. Деревня тоже хранится в отдельной колонке, нужно оттуда тащить. |
6-Ирли Бёрд >Соглашусь только если вы укажите пальцем. |
В общих модулях добавил функцию &НаСервере Функция ОбработатьМассивНаСервере(Строка) Экспорт СписокПолей=Новый СписокЗначений; СписокПолей=УправлениеКонтактнойИнформацией.ПреобразоватьСтрокуВСписокПолей(Строка); НаселенныйПункт =""; Для каждого ТекЭлемент Из СписокПолей Цикл Если ТекЭлемент.Представление="НаселенныйПункт" ИЛИ ТекЭлемент.Представление="Город" Тогда НаселенныйПункт = ТекЭлемент.Значение; КонецЕсли; КонецЦикла; Возврат НаселенныйПункт; КонецФункции // ОбработатьМассивНаСервере() в вычисляемых полях crl прописал вызов МодулиДополнительные.ОбработатьМассивНаСервере(ЗначенияПолей) Без этого поля отчет работает, но с этим полем пишет {Форма.Форма.Форма(893)**: Ошибка при вызове метода контекста (Вывести) ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных); по причине: Ошибка вывода результата по причине: Ошибка при выводе результата по причине: Ошибка получения данных по причине: Ошибка в выражении по причине: Синтаксическая ошибка "МодулиДополнительные.ОбработатьМассивНаСервере" |
4-vistwork > а это что? // Получает значения поля адреса // // Параметры: // СтрокаЗначенийПолей - строка значений полей // ИмяПоля - имя поля Функция ПолучитьЗначениеКонтактнойИнформации(СтрокаЗначенийПолей, ИмяПоля) Экспорт ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); Значение = ""; Если ПозицияПоля <> 0 Тогда ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); Значение = Сред(ЗначенияПолей, 0 , ПозицияПС - 1); КонецЕсли; Возврат Значение; КонецФункции |
+9 попробовал - все отлично работает |
| Текущее время: 09:50. Часовой пояс GMT +3. |