По теме из базы знаний
- Универсальный механизм печати из типовых конфигураций 1С 8.1 печатных документов на базе макетов, сделанных в MS Word
- Конструктор программиста – набор шаблонов программного кода для конструирования результата СКД и поддержки баз как типовых
- Восстановление развернутых строк ДереваЗначений после его обновления (управляемая форма)
- Поиск по дереву значений рекурсией, методом НайтиСтроки(), с помощью СКД. Вывод результата поиска в отдельную таблицу. Активация строки в дереве значений при выборе в таблице
- Картинки в строках дерева значений по условию (8.3)
Найденные решения
(14)
Вот это возвращает массив строк. В новом дереве нет никаких реквизитов, поэтому ЗаполнитьЗначенияСвойств не даст нужного эффекта. Поэтому надо, для начала, новое дерево сделать идентичным старому:
Ну и дальше
Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
Вот это возвращает массив строк. В новом дереве нет никаких реквизитов, поэтому ЗаполнитьЗначенияСвойств не даст нужного эффекта. Поэтому надо, для начала, новое дерево сделать идентичным старому:
НовоеДерево = Новый ДеревоЗначений;
Для Каждого пКолонка Из ДеревоСтарое.Колонки Цикл
НовоеДерево.Колонки.Добавить(пКолонка.Имя);
КонецЦикла;
Ну и дальше
МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
Для Каждого пСтрока Из МассивСтрок Цикл
НоваяСтрока = ДеревоНовое.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
КонецЦикла;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Ошибку выдает:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(81)}:ЗначениеВРеквизитФормы(НоваяСтрока, Строка);
Вот Код:
Ошибку выдает:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(81)}:ЗначениеВРеквизитФормы(НоваяСтрока, Строка);
Вот Код:
Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
НоваяСтрока = ДеревоНовое.Строки.Добавить();
ЗначениеВРеквизитФормы(НоваяСтрока, Строка);
(7) Реквизит с типом ДеревоЗначений Называется Товары.
Пробовал сделать так: "ЗначениеВРеквизитФормы(ДеревоНовое, Товары);"
И так ЗначениеВРеквизитФормы(ДеревоНовое, "Товары");
Но выдает ошибку:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(86)}:ЗначениеВРеквизитФормы(ДеревоНовое, Товары);
Что не так ?
Пробовал сделать так: "ЗначениеВРеквизитФормы(ДеревоНовое, Товары);"
И так ЗначениеВРеквизитФормы(ДеревоНовое, "Товары");
Но выдает ошибку:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(86)}:ЗначениеВРеквизитФормы(ДеревоНовое, Товары);
Что не так ?
(13)
Два цикла, потому что нужно дойти до 2 уровня, так как данные о номенклатуре там.
ДеревоНовое = Новый ДеревоЗначений;
ДеревоСтарое = РеквизитФормыВЗначение("Товары");
РезервТовары = Товары.ПолучитьЭлементы();
Резерв = Товары.ПолучитьЭлементы();
Для каждого строка1 из Резерв Цикл
Товар = строка1.ПолучитьЭлементы();
Для каждого строка2 из Товар Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.Характеристика КАК Характеристика
|ИЗ
| (ВЫБРАТЬ
| ЗаказыПоставщикам.ЗаказПоставщику КАК ЗаказПоставщику,
| ЗаказыПоставщикам.Номенклатура КАК Номенклатура,
| ЗаказыПоставщикам.Характеристика КАК Характеристика
| ИЗ
| РегистрНакопления.ЗаказыПоставщикам КАК ЗаказыПоставщикам
| ГДЕ
| ЗаказыПоставщикам.ЗаказПоставщику.ДокументОснование = &ЗаказПоставщику) КАК ВложенныйЗапрос
|ГДЕ
| ВложенныйЗапрос.Номенклатура = &Номенклатура
| И ВложенныйЗапрос.Характеристика = &Характеристика";
Запрос.УстановитьПараметр("ЗаказПоставщику", строка2.Заказ);
Запрос.УстановитьПараметр("Номенклатура", строка2.Номенклатура);
Запрос.УстановитьПараметр("Характеристика", строка2.Характеристика);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
НоваяСтрока = ДеревоНовое.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Товары.ПолучитьЭлементы().Очистить();
ЗначениеВРеквизитФормы(ДеревоНовое, "Товары");
Элементы.Товары.Обновить();
ПоказатьДва цикла, потому что нужно дойти до 2 уровня, так как данные о номенклатуре там.
(14)
Вот это возвращает массив строк. В новом дереве нет никаких реквизитов, поэтому ЗаполнитьЗначенияСвойств не даст нужного эффекта. Поэтому надо, для начала, новое дерево сделать идентичным старому:
Ну и дальше
Строка = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
Вот это возвращает массив строк. В новом дереве нет никаких реквизитов, поэтому ЗаполнитьЗначенияСвойств не даст нужного эффекта. Поэтому надо, для начала, новое дерево сделать идентичным старому:
НовоеДерево = Новый ДеревоЗначений;
Для Каждого пКолонка Из ДеревоСтарое.Колонки Цикл
НовоеДерево.Колонки.Добавить(пКолонка.Имя);
КонецЦикла;
Ну и дальше
МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
Для Каждого пСтрока Из МассивСтрок Цикл
НоваяСтрока = ДеревоНовое.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
КонецЦикла;
(16)
Вот тут, ставил точку остановки, Доходит до Для Каждого пСтрока Из МассивСтрок Цикл и в цикл уже не лезет, неужели массив пустой ? ...
Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Номенклатура,Характеристика", строка2.Номенклатура, строка2.Характеристика));
Для Каждого пСтрока Из МассивСтрок Цикл
НоваяСтрока = ДеревоНовое.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
КонецЦикла;
КонецЕсли;
Вот тут, ставил точку остановки, Доходит до Для Каждого пСтрока Из МассивСтрок Цикл и в цикл уже не лезет, неужели массив пустой ? ...
(23) Про 2 уровень говорил, уже сделал это, но теперь 1 уровень почему-то не выводится.
Вот код:
Выводится только 2 уровень
Вот код:
Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
МассивСтрок = ДеревоСтарое.Строки.НайтиСтроки(Новый Структура("Заказ,Номенклатура,Характеристика", строка2.Заказ,строка2.Номенклатура,строка2.Характеристика),Истина);
Для Каждого пСтрока Из МассивСтрок Цикл
НоваяСтрока = ДеревоНовое.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, пСтрока);
КонецЦикла;
КонецЕсли;
Выводится только 2 уровень
(29) В родитель строки, которую добавляю в новое дерево впихиваю родителя, которую достаю со 2 уровня. Но выдает ошибку. А как тогда еще можно это сделать ? Больше идей нету
Ошибка:
Поле объекта недоступно для записи (Родитель)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(82)}:НоваяСтрока.Родитель = строка2.Родитель;
Ошибка:
Поле объекта недоступно для записи (Родитель)
{Обработка.СостояниеОбеспечения.Форма.Форма.Форма(82)}:НоваяСтрока.Родитель = строка2.Родитель;
(31) Потому что только чтение у родителя, да и правильно - не надо ему ничего присваивать. Надо наоборот делать: на первый уровень добавлять родителя
а потом
и т.д.
Родитель = НовоеДерево.Строки.Добавить();
Родитель.ЧетоТам = ТекСтрока.Родитель.ЧетоТам;
.....
а потом
НовСтрока = Родитель.Строки.Добавить();
и т.д.
(34) Это заказ, в данном случае. То есть, сначала мы ищем - есть ли строка первого уровня с этим заказом
Строки = НовоеДерево.Строки.НайтиСтроки(Новый Структура("Заказ", ТекСтрока.Родитель.Заказ));
Если Строки.Количество() = 0 Тогда
Родитель = НовоеДерево.Строки.Добавить();
Родитель.Заказ = ТекСтрока.Родитель.Заказ;
//заполняем остальные данные
Иначе
Родитель = Строки[0]
КонецЕсли;
НовСтрока = Родитель.Строки.Добавить();
НовСтрока.Номенклатура = ТекСтрока.Номенклатура;
//заполняем остальные данные
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот