Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Преобразование данных в таблицу значений

Преобразование данных в таблицу значений
Я
   Ксю_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|";
     Если Диалог.Выбрать()
     Тогда 
         Путь= Диалог.ПолноеИмяФайла
     Иначе
          Предупреждение("Файл не выбран");
         Возврат;
     КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ВызовКонвертации(Сотрудники)
    ТЗ = ОбщийМодуль.ПреобразоватьМассивВТаблицуЗначений(Сотрудники);
КонецФункции
 
 
   Cyberhawk
 
1 - 06.11.18 - 09:09
Сколько платят?
   Индиго
 
2 - 06.11.18 - 09:13
(0) Во первых твоя функция ВызовКонвертации(Сотрудники) ничего не возвращает.
А вовторых, даже если бы возврашщала - ТЗ на клиенте не живет.От слова совсем. Только как массив структур
   Индиго
 
3 - 06.11.18 - 09:17
...ну или как реквизит формы
   Ксю_100500
 
4 - 06.11.18 - 09:26
(3)Ага Спасибо. Да косяк в возврате. дописала возврат ТЗ. Но  как тогда мне понять, что моя ТЗ заполнилась? Мне нужно по ней сделать запросик небольшой.
   Индиго
 
5 - 06.11.18 - 09:26
(4)Значит она реквизит формы
   FIXXXL
 
6 - 06.11.18 - 09:37
(4) НаКлиенте нет запросов и ТЗ, делай все на сервере
   Ксю_100500
 
7 - 06.11.18 - 09:40
Ну я уже поняла. в самой функции  ВызовКонвертации(Сотрудники).
добавила 
ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ;
Возврат ТЗ;

тогда я в отладке могу увидеть что у меня там лежит. значит тут же и сделать запросик который мне нужен. Только теперь остался вопрос как я этот результат отображу на форме. хотя бы для себя. чтобы видеть,  что все отрабатывает и не лезть в отладчик
   nicxxx
 
8 - 06.11.18 - 09:42
Используй ЗначениеВДанныеФормы(). По-другому никак.
   Ксю_100500
 
9 - 06.11.18 - 09:49
И еще. ТЗ то выводит, колонки какие надо, а значений почему то нет. тестирую буквально на двух записях, чтобы понять общий принцип. но даже в этих двух записях данные не отображает
   catena
 
10 - 06.11.18 - 10:04
(9)Нужно освоить отладчик. Вот прям жизненно необходимо.
 
 Рекламное место пустует
   МимохожийОднако
 
11 - 06.11.18 - 10:05
(10) +100500
   Ксю_100500
 
12 - 06.11.18 - 13:06
Получилось  вывести мою Таблицу значений. Теперь хочу ее сгруппировать по полю. и использую метод Свернуть, но загвоздка. Говорит метод объекта не обнаружен. и я не понимаю почему .
&НаСервере
Функция ЗаполнитьТаблицуЗначений(Сотрудники)
    ТЗСотрудники = ОбщийМодуль.ПреобразоватьМассивВТаблицуЗначений(Сотрудники);
    ЭлементыФормы.ТабличноеПоле1.Значение = ТЗСотрудники;
    Для каждого ТЗСотрудник из ТЗСотрудники Цикл
        ТЗСотрудник.Свернуть("Фамилия", "Количество");
    КонецЦикла;
    Возврат ТЗСотрудники;
КонецФункции
   Ксю_100500
 
13 - 06.11.18 - 13:09
Или если не работает этот метод. я могу классически как то обратиться к этой таблице значений. из разряда
Выбрать
Количество(фамилия),
Фамилия
Из Таблица значений
сгруппировать по
Фамилия

Что то типо такого
   1Сергей
 
14 - 06.11.18 - 13:11
(12) зачем строки перебираешь? Сворачивать нужно всю таблицу
   Ксю_100500
 
15 - 06.11.18 - 13:14
Даже когда я пробовала всю таблицу сворачивать ошибка та же. это уже эксперименты. вдруг сработает))
   catena
 
16 - 06.11.18 - 13:19
(15)Показывай, как таблицу сворачиваешь и озвучивай точный текст ошибки.
(13)Можно в запрос через ВТ. "Выбрать * поместить Т из &ТвояТаблица"
   Ксю_100500
 
17 - 06.11.18 - 13:27
вот так сворачиваю.
&НаСервере
Функция ЗаполнитьТаблицуЗначений(Сотрудники)
    ТЗСотрудники = ОбщийМодуль.ПреобразоватьМассивВТаблицуЗначений(Сотрудники);
    ЭлементыФормы.ТабличноеПоле1.Значение = ТЗСотрудники;
    ТЗСотрудники.Свернуть("Фамилия", "Количество");
    Возврат ТЗСотрудники;
КонецФункции

Ошибка при вызове метода контекста (Свернуть)
    ТЗСотрудники.Свернуть("Фамилия", "Количество");
по причине:
Неверное имя колонки. Возможно ошибка потому что колонки количества у меня нет. но как тогда вывести сколько таких записей. я же должна использовать в группировке агрегатные функции
   catena
 
18 - 06.11.18 - 13:30
(17)Ну надо добавить эту колонку))) Колонку добавить, заполнить единичками, а потом уже сворачивать.
   Ксю_100500
 
19 - 06.11.18 - 13:31
Добавила. ничего не поменялось. та же ошибка((
   catena
 
20 - 06.11.18 - 13:32
(19)Этого не может быть.
   Ксю_100500
 
21 - 06.11.18 - 13:36
Данные у меня просто тянутся с формата json. добавила туда. Он мне сгруппировал, но при этом вывел только фамилии, ни количество, которое должно получиться дублей по факту ни другие параметры.
   Ксю_100500
 
22 - 06.11.18 - 13:39
грубо говоря выводило эти данные в виде таблицы
[{
    "Фамилия": "Иванов",
    "Имя": "Иван",
    "Отчество": "Иванович",
    "Подразделение": "ИП Петров: Отдел рекламы",
    "Количество": "1"
    
}
{
    "Фамилия": "Петров",
    "Имя": "Петр",
    "Отчество": "Петрович",
    "Подразделение": "ИП Сидоров: Отдел рекламы",
    "Количество": "1"
}
{
    "Фамилия": "Иванов",
    "Имя": "Иван",
    "Отчество": "Иванович",
    "Подразделение": "ИП Петров: Отдел рекламы",
    "Количество": "1"
    
}
]
, а после группировки только фамилии без дублей стал выводить
   catena
 
23 - 06.11.18 - 13:43
(21)Во-первых, после сворачивания в ТЗ остаются только те колонки, которые были указаны при сворачивании. Потому что на выходе плоская таблица и он понятия не имеет, что ему делать с остальными, не указанными колонками.
Во вторых, значения в колонке "Количество" какого типа?

Откуда данные тянутся вообще пофиг, если вы уже их преобразовали в ТЗ.
   Ксю_100500
 
24 - 06.11.18 - 13:47
Количество тип число.
   catena
 
25 - 06.11.18 - 13:53
(24)Ну, тогда ваша таблица сворачивается.
   Ксю_100500
 
26 - 06.11.18 - 14:10
Все свернула таблицу. спасибо. Вывела все поля, а не только по какому сворачиваю. Но вот количество так мне по прежнему не считать не хочет.
   Belomor
 
27 - 06.11.18 - 14:19
(26) ТЗСотрудники.Свернуть("Фамилия", "Количество");
Должно считаться
   Ксю_100500
 
28 - 06.11.18 - 14:22
Должно но не считается. выводит пустые поля
   catena
 
29 - 06.11.18 - 14:25
(28)вариантов не много. Либо там не числа. Либо там нули. Всё.
   ejikbeznojek
 
30 - 06.11.18 - 14:54
"Подразделение": "ИП Петров: Отдел рекламы",
    "Количество": "1"

Может у тебя "1" это строчка?
Попробуй преобразовать к числу.
   Ксю_100500
 
31 - 07.11.18 - 12:49
Спасибо. с этим удалось. Действительно по умолчанию не делалось преобразование типов. все получилось.
   catena
 
32 - 07.11.18 - 13:00
(31)Главное, я ведь спрашивала про тип, наугад отвечали?
   Ксю_100500
 
33 - 07.11.18 - 13:25
У меня в ТЗ на форме которая для этой колонке тип стоит число, но из формата тянулась строк. и нужно было дополнительно ее преобразовывать и записывать. По умолчанию преобразование не работало. вот как то так
 
 
   vladko
 
34 - 07.11.18 - 13:30
(33) необходимо освоить отладчик, чтобы в следующий раз не гадать что там в ТЗ
   catena
 
35 - 07.11.18 - 13:32
(33) Я спрашивала не про тип колонки, а про тип значения в колонке. И (34)+++, про отладчик тоже говорила. Ветка могла быть на сутки короче :)
   Ксю_100500
 
36 - 07.11.18 - 13:46
Извиняюсь. Я не волшебник, я только учусь. Пытаюсь освоить не знакомого зверя всего вторую неделю.  И еще кстати вопрос по ТЗ. Как мне проверить на форме заполнено ли поле в таблице значений. Если ТЗ не существует на клиенте, а поле по факту проверять надо на клиенте, заполнено или нет и если нет вывести пользователю "Заполни поле"
Это делать через РеквизитФормыВЗначение?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует