Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 18:07

Ошибка при попытке переноса данных из ТаблицыЗначений в ДеревоЗначений

Автор micahbell, 02 окт 2024, 12:44

0 Пользователей и 1 гость просматривают эту тему.

micahbell

Я пытаюсь во внешней обработке перенести данные из таблицы значений в дерево значений(я не до конца понимаю как это правильно делать), но мне выдаёт ошибку.

Вот полностью ошибка:

Ошибка при установке значения атрибута контекста (ДеревоЗначений)
{ВнешняяОбработка.ДЗ_4.Форма.Форма.Форма(81)}:   ДеревоЗначений = РеквизитФормыВЗначение("ДеревоЗначений");
{ВнешняяОбработка.ДЗ_4.Форма.Форма.Форма(74)}:   СформироватьДеревоОтделовНаСервере();
по причине:
Нельзя изменять поле, содержащее объект данных формы

Прикрепляю внешнюю обработку для лучшего ознакомленияНеверный ID вложения.

antoneus

Ну так не надо переменную обзывать так же, как реквизит формы.

micahbell

antoneus, А вот теперь у меня другая проблема. Данные добавляются из Дерева значений в Таблицу значений, а должно быть наоборот. Я обновил обработку:

antoneus

Ну, что вы 1С пишете делать - то она и делает. Вызываете вы процедуру как?

ПреобразоватьВ_ДЗ(ДеревоСотрудников, ТаблицаСотрудников, Подразделение);
А сигнатура у процедуры какая?

Процедура  ПреобразоватьВ_ДЗ(Данные, ДеревоСотрудников, Подразделение)
Ну, путать параметры местами - это классические грабли, не переживайте)

micahbell

antoneus, Я вот эти строки изменил и теперь если я вручную добавляю данные в дерево значений то при нажатии на кнопку все эти значения куда-то пропадают. А если там в дереве значений нету данных то просто ничего не происходит.
 
ПреобразоватьВ_ДЗ(ТаблицаСотрудников, ДеревоСотрудников, Подразделение);
Для Каждого Строка Из Данные.Индексы Цикл

antoneus

При чем тут индексы-то? Просто

Для Каждого Строка из Данные Цикл

micahbell

antoneus, а вот как проверить что переменная "Группа" не является пустой. Просто если я не буду делать проверку то тогда создаётся много подразделение(у них одинаковое название)  и в каждом из них по одной строке. А сейчас мне просто выдаёт ошибку:
Значение не является значением объектного типа (Строки)

&НаКлиенте
Процедура СформироватьДеревоОтделов(Команда)
СформироватьДеревоОтделовНаСервере();
КонецПроцедуры


&НаСервере
Процедура СформироватьДеревоОтделовНаСервере()

ДеревоСотрудников = РеквизитФормыВЗначение("ДеревоЗначений");
ТаблицаСотрудников = РеквизитФормыВЗначение("ТаблицаЗначений");

ПреобразоватьВ_ДЗ(ТаблицаСотрудников, ДеревоСотрудников);

ЗначениеВРеквизитФормы(ТаблицаСотрудников, "ТаблицаЗначений");
ЗначениеВРеквизитФормы(ДеревоСотрудников, "ДеревоЗначений");
КонецПроцедуры

&НаСервере
Процедура ПреобразоватьВ_ДЗ(Данные, ДеревоСотрудников) 
Для Каждого Строка Из Данные Цикл
Группа = ДеревоСотрудников.Строки.Найти(Строка.Подразделение, "Подразделение");

Если Группа.Строки.Количество() = 0 Тогда
Группа = ДеревоСотрудников.Строки.Добавить();
Группа.Подразделение = Строка.Подразделение;
КонецЕсли;

НовСтрока = Группа.Строки.Добавить();
НовСтрока.Фамилия = Строка.Фамилия;
НовСтрока.Имя = Строка.Имя;
НовСтрока.Отчество = Строка.Отчество;
НовСтрока.ДатаРождения = Строка.ДатаРождения;
КонецЦикла; 
КонецПроцедуры

antoneus

Группа = ДеревоСотрудников.Строки.Найти(Строка.Подразделение, "Подразделение");
Если Группа = Неопределено Тогда
    Группа = ДеревоСотрудников.Строки.Добавить();
    Группа.Подразделение = Строка.Подразделение;
КонецЕсли;

micahbell

antoneus, Теперь всё хорошо. Я совсем забыл про Неопределено.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск