|
Преобразование данных в таблицу значений | ☑ | ||
---|---|---|---|---|
0
Ксю_100500
06.11.18
✎
09:09
|
Здравствуйте! Я только осваиваю 1с. Новичок - новее некуда. Работаю в 1с 8.3. Передо мной стоит следующая задача. Есть структура полученная из json. Как мне ее записать в таблицу значений.
Я попыталась в общем модуле на сервере создать функцию, которая создает мне таблицу значений из массива, а на клиенте ее вызвать с параметром. но почему то на начальном этапе ТЗ инициализируется как ТЗ,но пустая, а потом по завершению моей процедуры на клиенте в типе пишет неопределено и по прежнему пусто. при этом каких то ошибок не выдает. И мой массив данных тоже заполнен. Подскажите пожалуйста, где копать? привожу свой код. &НаСервереБезКонтекста Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт тзДанные = Новый ТаблицаЗначений; Для Каждого ЭлементМассива Из мсДанные Цикл // Рисуем колонки для таблицы Если тзДанные.Колонки.Количество() = 0 Тогда Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ); КонецЦикла; КонецЕсли; // Добавляем данные в таблицу НоваяСтрока = тзДанные.Добавить(); Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение; КонецЦикла; КонецЦикла; Возврат тзДанные; КонецФункции Это в модуле формы. &НаКлиенте Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. //1. создаем HTTP-соединение HTTP = Новый HTTPСоединение("localhost",8000); //2. создаем HTTP-запрос HTTPЗапрос = Новый HTTPЗапрос("/path/to/json/new.json"); //3. отправляем HTTP-запрос Ответ = HTTP.Получить(HTTPЗапрос); //4. обрабатывает ответ на запрос Если Ответ.КодСостояния = 200 Тогда Сообщение = Новый СообщениеПользователю; Сообщить("Файл получен"); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Сообщить("Файл прочтен"); Сотрудники = ПрочитатьJSON(ЧтениеJSON, Ложь); //5.получаем массив данных Для каждого Сотрудник из Сотрудники Цикл Фамилия = Сотрудник.Фамилия; Имя = Сотрудник.Имя; Отчество = Сотрудник.Отчество; Подразделение = Сотрудник.Подразделение; КонецЦикла; ЧтениеJSON.Закрыть(); Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Файл не получен. Статус-код " + Ответ.КодСостояния; Сообщение.Сообщить(); КонецЕсли; //ТЗ = Новый ТаблицаЗначений; ТЗ = ВызовКонвертации(Сотрудники); ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ; КонецПроцедуры Процедура ПутьНачалоВыбора(Элемент, СтандартнаяОбработка) // Вставить содержимое обработчика. Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Фильтр = "Формат xls (*.xls; *.xlsx)| *.xls, *.xlsx|"; Если Диалог.Выбрать() Тогда Путь= Диалог.ПолноеИмяФайла Иначе Предупреждение("Файл не выбран"); Возврат; КонецЕсли; КонецПроцедуры &НаСервере Функция ВызовКонвертации(Сотрудники) ТЗ = ОбщийМодуль.ПреобразоватьМассивВТаблицуЗначений(Сотрудники); КонецФункции |
|||
1
Cyberhawk
06.11.18
✎
09:09
|
Сколько платят?
|
|||
2
Индиго
06.11.18
✎
09:13
|
(0) Во первых твоя функция ВызовКонвертации(Сотрудники) ничего не возвращает.
А вовторых, даже если бы возврашщала - ТЗ на клиенте не живет.От слова совсем. Только как массив структур |
|||
3
Индиго
06.11.18
✎
09:17
|
...ну или как реквизит формы
|
|||
4
Ксю_100500
06.11.18
✎
09:26
|
(3)Ага Спасибо. Да косяк в возврате. дописала возврат ТЗ. Но как тогда мне понять, что моя ТЗ заполнилась? Мне нужно по ней сделать запросик небольшой.
|
|||
5
Индиго
06.11.18
✎
09:26
|
(4)Значит она реквизит формы
|
|||
6
FIXXXL
06.11.18
✎
09:37
|
(4) НаКлиенте нет запросов и ТЗ, делай все на сервере
|
|||
7
Ксю_100500
06.11.18
✎
09:40
|
Ну я уже поняла. в самой функции ВызовКонвертации(Сотрудники).
добавила ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ; Возврат ТЗ; тогда я в отладке могу увидеть что у меня там лежит. значит тут же и сделать запросик который мне нужен. Только теперь остался вопрос как я этот результат отображу на форме. хотя бы для себя. чтобы видеть, что все отрабатывает и не лезть в отладчик |
|||
8
nicxxx
06.11.18
✎
09:42
|
Используй ЗначениеВДанныеФормы(). По-другому никак.
|
|||
9
Ксю_100500
06.11.18
✎
09:49
|
И еще. ТЗ то выводит, колонки какие надо, а значений почему то нет. тестирую буквально на двух записях, чтобы понять общий принцип. но даже в этих двух записях данные не отображает
|
|||
10
catena
06.11.18
✎
10:04
|
(9)Нужно освоить отладчик. Вот прям жизненно необходимо.
|
|||
11
Мимохожий Однако
06.11.18
✎
10:05
|
(10) +100500
|
|||
12
Ксю_100500
06.11.18
✎
13:06
|
Получилось вывести мою Таблицу значений. Теперь хочу ее сгруппировать по полю. и использую метод Свернуть, но загвоздка. Говорит метод объекта не обнаружен. и я не понимаю почему .
&НаСервере Функция ЗаполнитьТаблицуЗначений(Сотрудники) ТЗСотрудники = ОбщийМодуль.ПреобразоватьМассивВТаблицуЗначений(Сотрудники); ЭлементыФормы.ТабличноеПоле1.Значение = ТЗСотрудники; Для каждого ТЗСотрудник из ТЗСотрудники Цикл ТЗСотрудник.Свернуть("Фамилия", "Количество"); КонецЦикла; Возврат ТЗСотрудники; КонецФункции |
|||
13
Ксю_100500
06.11.18
✎
13:09
|
Или если не работает этот метод. я могу классически как то обратиться к этой таблице значений. из разряда
Выбрать Количество(фамилия), Фамилия Из Таблица значений сгруппировать по Фамилия Что то типо такого |
|||
14
1Сергей
06.11.18
✎
13:11
|
(12) зачем строки перебираешь? Сворачивать нужно всю таблицу
|
|||
15
Ксю_100500
06.11.18
✎
13:14
|
Даже когда я пробовала всю таблицу сворачивать ошибка та же. это уже эксперименты. вдруг сработает))
|
|||
16
catena
06.11.18
✎
13:19
|
(15)Показывай, как таблицу сворачиваешь и озвучивай точный текст ошибки.
(13)Можно в запрос через ВТ. "Выбрать * поместить Т из &ТвояТаблица" |
|||
17
Ксю_100500
06.11.18
✎
13:27
|
вот так сворачиваю.
&НаСервере Функция ЗаполнитьТаблицуЗначений(Сотрудники) ТЗСотрудники = ОбщийМодуль.ПреобразоватьМассивВТаблицуЗначений(Сотрудники); ЭлементыФормы.ТабличноеПоле1.Значение = ТЗСотрудники; ТЗСотрудники.Свернуть("Фамилия", "Количество"); Возврат ТЗСотрудники; КонецФункции Ошибка при вызове метода контекста (Свернуть) ТЗСотрудники.Свернуть("Фамилия", "Количество"); по причине: Неверное имя колонки. Возможно ошибка потому что колонки количества у меня нет. но как тогда вывести сколько таких записей. я же должна использовать в группировке агрегатные функции |
|||
18
catena
06.11.18
✎
13:30
|
(17)Ну надо добавить эту колонку))) Колонку добавить, заполнить единичками, а потом уже сворачивать.
|
|||
19
Ксю_100500
06.11.18
✎
13:31
|
Добавила. ничего не поменялось. та же ошибка((
|
|||
20
catena
06.11.18
✎
13:32
|
(19)Этого не может быть.
|
|||
21
Ксю_100500
06.11.18
✎
13:36
|
Данные у меня просто тянутся с формата json. добавила туда. Он мне сгруппировал, но при этом вывел только фамилии, ни количество, которое должно получиться дублей по факту ни другие параметры.
|
|||
22
Ксю_100500
06.11.18
✎
13:39
|
грубо говоря выводило эти данные в виде таблицы
[{ "Фамилия": "Иванов", "Имя": "Иван", "Отчество": "Иванович", "Подразделение": "ИП Петров: Отдел рекламы", "Количество": "1" } { "Фамилия": "Петров", "Имя": "Петр", "Отчество": "Петрович", "Подразделение": "ИП Сидоров: Отдел рекламы", "Количество": "1" } { "Фамилия": "Иванов", "Имя": "Иван", "Отчество": "Иванович", "Подразделение": "ИП Петров: Отдел рекламы", "Количество": "1" } ] , а после группировки только фамилии без дублей стал выводить |
|||
23
catena
06.11.18
✎
13:43
|
(21)Во-первых, после сворачивания в ТЗ остаются только те колонки, которые были указаны при сворачивании. Потому что на выходе плоская таблица и он понятия не имеет, что ему делать с остальными, не указанными колонками.
Во вторых, значения в колонке "Количество" какого типа? Откуда данные тянутся вообще пофиг, если вы уже их преобразовали в ТЗ. |
|||
24
Ксю_100500
06.11.18
✎
13:47
|
Количество тип число.
|
|||
25
catena
06.11.18
✎
13:53
|
(24)Ну, тогда ваша таблица сворачивается.
|
|||
26
Ксю_100500
06.11.18
✎
14:10
|
Все свернула таблицу. спасибо. Вывела все поля, а не только по какому сворачиваю. Но вот количество так мне по прежнему не считать не хочет.
|
|||
27
Belomor
06.11.18
✎
14:19
|
(26) ТЗСотрудники.Свернуть("Фамилия", "Количество");
Должно считаться |
|||
28
Ксю_100500
06.11.18
✎
14:22
|
Должно но не считается. выводит пустые поля
|
|||
29
catena
06.11.18
✎
14:25
|
(28)вариантов не много. Либо там не числа. Либо там нули. Всё.
|
|||
30
ejikbeznojek
06.11.18
✎
14:54
|
"Подразделение": "ИП Петров: Отдел рекламы",
"Количество": "1" Может у тебя "1" это строчка? Попробуй преобразовать к числу. |
|||
31
Ксю_100500
07.11.18
✎
12:49
|
Спасибо. с этим удалось. Действительно по умолчанию не делалось преобразование типов. все получилось.
|
|||
32
catena
07.11.18
✎
13:00
|
(31)Главное, я ведь спрашивала про тип, наугад отвечали?
|
|||
33
Ксю_100500
07.11.18
✎
13:25
|
У меня в ТЗ на форме которая для этой колонке тип стоит число, но из формата тянулась строк. и нужно было дополнительно ее преобразовывать и записывать. По умолчанию преобразование не работало. вот как то так
|
|||
34
vladko
07.11.18
✎
13:30
|
(33) необходимо освоить отладчик, чтобы в следующий раз не гадать что там в ТЗ
|
|||
35
catena
07.11.18
✎
13:32
|
(33) Я спрашивала не про тип колонки, а про тип значения в колонке. И (34)+++, про отладчик тоже говорила. Ветка могла быть на сутки короче :)
|
|||
36
Ксю_100500
07.11.18
✎
13:46
|
Извиняюсь. Я не волшебник, я только учусь. Пытаюсь освоить не знакомого зверя всего вторую неделю. И еще кстати вопрос по ТЗ. Как мне проверить на форме заполнено ли поле в таблице значений. Если ТЗ не существует на клиенте, а поле по факту проверять надо на клиенте, заполнено или нет и если нет вывести пользователю "Заполни поле"
Это делать через РеквизитФормыВЗначение? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |