На форме есть реквизит "Дерево значений" с двумя колонками "значение"(число) и наименование(строка). В модуле программно заполняется дерево( строке родителю присваивается пустое значение)
СтрокаРодитель = ДерЗнач.Строки.Добавить();
СтрокаРодитель.Значение="";
СтрокаРодитель.Наименование="";
Затем, после заполнения подчиненных строк передаю значение через метод "Значение в реквизит формы".
ЗначениеВРеквизитФормы(ДерЗнач,"ДеревоЗначений");
По нажатию кнопки на форме, в строку родитель в колонку значение подставляется сумма значений, а в наименование кол-во значений. Проблема в том что на первый раз код отрабатывает нормально, а на вторую попытку дерево заполняется, но при попытке подставить сумму и кол-во выдает ошибку:
Значение не является значением объектного типа (Значение)
{Расширение_учебное Обработка.ВнешняяОбработка1.Форма.ВсеЗадания.Форма(185)}: ДЗ.Значение=СуммаЗначений;
Отладчик показывает что когда код отрабатывает второй раз, у переменной ДЗ тип "неопределено", хотя на первый раз "ДанныеФормыЭлементДерева". Код кнопки сумма и значение:
Тестовая=ЭтаФорма.ДеревоЗначений;
ДЗ=Тестовая.НайтиПоИдентификатору(0);
ДЗ.Значение=СуммаЗначений;
ДЗ.Наименование=КоличествоЗначений;
Не могу понять с чем это связано. Между первым и вторым нажатием происходит вызов процедуры Очистить:
ДЗ=РеквизитФормыВЗначение("ДеревоЗначений");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ,"ДеревоЗначений");
Начал учить 1С неделю назад, так что проблема скорее всего простая, но я не могу понять как ее решить, Есть предположение что ошибка возникает из-за очистки дерева, хотя пробовал просто не очищая перезаписывать значения, та же ошибка
Ниже весь код:
СтрокаРодитель = ДерЗнач.Строки.Добавить();
СтрокаРодитель.Значение="";
СтрокаРодитель.Наименование="";
Затем, после заполнения подчиненных строк передаю значение через метод "Значение в реквизит формы".
ЗначениеВРеквизитФормы(ДерЗнач,"ДеревоЗначений");
По нажатию кнопки на форме, в строку родитель в колонку значение подставляется сумма значений, а в наименование кол-во значений. Проблема в том что на первый раз код отрабатывает нормально, а на вторую попытку дерево заполняется, но при попытке подставить сумму и кол-во выдает ошибку:
Значение не является значением объектного типа (Значение)
{Расширение_учебное Обработка.ВнешняяОбработка1.Форма.ВсеЗадания.Форма(185)}: ДЗ.Значение=СуммаЗначений;
Отладчик показывает что когда код отрабатывает второй раз, у переменной ДЗ тип "неопределено", хотя на первый раз "ДанныеФормыЭлементДерева". Код кнопки сумма и значение:
Тестовая=ЭтаФорма.ДеревоЗначений;
ДЗ=Тестовая.НайтиПоИдентификатору(0);
ДЗ.Значение=СуммаЗначений;
ДЗ.Наименование=КоличествоЗначений;
Не могу понять с чем это связано. Между первым и вторым нажатием происходит вызов процедуры Очистить:
ДЗ=РеквизитФормыВЗначение("ДеревоЗначений");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ,"ДеревоЗначений");
Начал учить 1С неделю назад, так что проблема скорее всего простая, но я не могу понять как ее решить, Есть предположение что ошибка возникает из-за очистки дерева, хотя пробовал просто не очищая перезаписывать значения, та же ошибка
Ниже весь код:
&НаСервере
Процедура ЗаполнитьТабЗначНаСервере()
Очистить();
ВременнаяПеременная="";
СуммаЗначений=0;
КоличествоЗначений=0;
ДерЗнач= Новый ДеревоЗначений;
ДерЗнач.Колонки.Добавить("Значение");
ДерЗнач.Колонки.Добавить("Наименование");
СтрокаРодитель = ДерЗнач.Строки.Добавить();
СтрокаРодитель.Значение="";
СтрокаРодитель.Наименование="";
Для Индекс=1 по Объект.Число Цикл
ПодчиненнаяСтрока=СтрокаРодитель.Строки.Добавить();
ПодчиненнаяСтрока.Значение = Индекс;
СуммаЗначений=СуммаЗначений+Индекс;
ПеревестиЧислоВСтроку(Индекс,ВременнаяПеременная);
ПодчиненнаяСтрока.Наименование=ВременнаяПеременная;
КонецЦикла;
КоличествоЗначений=Индекс-1;
ЗначениеВРеквизитФормы(ДерЗнач,"ДеревоЗначений");
КонецПроцедуры
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
Тестовая=ЭтаФорма.ДеревоЗначений;
ДЗ=Тестовая.НайтиПоИдентификатору(0);
ДЗ.Значение=СуммаЗначений;
ДЗ.Наименование=КоличествоЗначений;
КонецПроцедуры
&НаСервере
Процедура Очистить()
ДЗ=РеквизитФормыВЗначение("ДеревоЗначений");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ,"ДеревоЗначений");
КонецПроцедуры
&НаСервере
Процедура ПеревестиЧислоВСтроку(Число,ВремПер)
ФорматнаяСтрока="Л=ru_RU";
ПараметрыПредметаИсчесления=" , , , , , , , , 0";
//Сообщить(ЧислоПрописью(Число,ФорматнаяСтрока,ПараметрыПредметаИсчесления));
ВремПер=(ЧислоПрописью(Число,ФорматнаяСтрока,ПараметрыПредметаИсчесления));
КонецПроцедуры
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Найденные решения
(12) А смысл? Все равно никто не понимает, что делает этот код и откуда в нем берутся мифические переменные СуммаЗначений и КоличествоЗначений.
А ты сам-то понимаешь?
// Сначала надо получить идентификатор строки у элемента на форме, прежде, чем искать его в данных формы.
А ты сам-то понимаешь?
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
Тестовая=ЭтаФорма.ДеревоЗначений;
ДЗ=Тестовая.НайтиПоИдентификатору(0);
ДЗ.Значение=СуммаЗначений;
ДЗ.Наименование=КоличествоЗначений;
КонецПроцедуры
Показать// Сначала надо получить идентификатор строки у элемента на форме, прежде, чем искать его в данных формы.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(12) А смысл? Все равно никто не понимает, что делает этот код и откуда в нем берутся мифические переменные СуммаЗначений и КоличествоЗначений.
А ты сам-то понимаешь?
// Сначала надо получить идентификатор строки у элемента на форме, прежде, чем искать его в данных формы.
А ты сам-то понимаешь?
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
Тестовая=ЭтаФорма.ДеревоЗначений;
ДЗ=Тестовая.НайтиПоИдентификатору(0);
ДЗ.Значение=СуммаЗначений;
ДЗ.Наименование=КоличествоЗначений;
КонецПроцедуры
Показать// Сначала надо получить идентификатор строки у элемента на форме, прежде, чем искать его в данных формы.
(13) Долго не мог понять почему не работает метод Текущая строка, оказывается на форме у меня дерево называется ДеревоЗначений1. Вот исправленный код, если кто-то еще столкнется
В общем, благодарю за пинок в направлении где искать ошибку.
&НаКлиенте
Процедура СуммаИКоличествоДерЗнач(Команда)
Индекс=Элементы.ДеревоЗначений1.ТекущаяСтрока;
ТекущаяСтрока=ДеревоЗначений.НайтиПоИдентификатору(Индекс);
ТекущаяСтрока.Значение=СуммаЗначений;
ТекущаяСтрока.Наименование=КоличествоЗначений;
КонецПроцедуры
ПоказатьВ общем, благодарю за пинок в направлении где искать ошибку.
(17) Вот примерно так, да.
НО! Запутаешься в "текущих строках".
Привыкай именовать переменные нормально. Например:
или сразу
Поверь, самому проще потом будет.
НО! Запутаешься в "текущих строках".
Привыкай именовать переменные нормально. Например:
ИдентификаторТекущейСтроки = Элементы.ДеревоЗначений.ТекущаяСтрока;
ДанныеТекущейСтроки = ДеревоЗначений.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);
или сразу
ДанныеСтрокиДерева = ДеревоЗначений.НайтиПоИдентификатору(Элементы.ДеревоЗначений.ТекущаяСтрока);
Поверь, самому проще потом будет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот