Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 окт 2021, 11:28

Перенос в новую ТЧ только выбранных строк

Автор blade_snl, 05 окт 2021, 10:02

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

blade_snl

У меня в УНФ есть журнал документов (Заказ Покупателя), задача стоит перенести в ТЧ новосозданной формы только выбранные строки (Документы).
Подскажите, умные люди, как это в коде прописать?

LexaK

создаете кнопку на форме (или с БСП все это можно сделать во внешней обработке)

в коде обработке, вам доступен массив выделенных строк, примерно так
Элементы.Список.ВыделенныеСтроки

создаете новый документ,
обходите в цикле массив Элементы.Список.ВыделенныеСтроки
и добавляете новые строчки в ТЧ нового документа

после заполнения открываете форму нового документа
ответ Понравился? (в смысле пригодился?)

blade_snl


blade_snl

в случае с Заказами покупателей все сработало отлично. Выделенные строки закинул в Массив и передал на обработку, все хорошо, массив заполнился ссылками на Заказы.

но вот теперь снова решил воспользоваться таким же методом, но на собственной форме.
изначально, самостоятельно заполняю ТЧ формы:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ               
| Склады.Наименование КАК ИмяСклада
|ИЗ Справочник.СтруктурныеЕдиницы КАК Склады
|ГДЕ Склады.ТипСтруктурнойЕдиницы = Значение(Перечисление.ТипыСтруктурныхЕдиниц.Склад)";

РезультатЗапроса = Запрос.Выполнить();

ТаблицаИзЗапроса = РезультатЗапроса.Выгрузить();

//выгружаем результат запроса сразу в ТЧ:
Объект.ТЧ_Склады.Загрузить(ТаблицаИзЗапроса);

все хорошо, ТЧ заполняется складами... я выбираю нужные мне, подсвечивая, прописываю на команду туже процедуру:

&НаКлиенте
Процедура ОК(Команда)
ВыбранныеСклады = Новый Массив;                             
ВыбранныеСклады = Элементы.ТЧ_Склады.ВыделенныеСтроки;
Объект.Склады = ВыбранныеСклады;

ЭтаФорма.Закрыть();
КонецПроцедуры

но в массив попадают только порядковые номера строк.
как мне закинуть в массив не номера, а значения поля с именами складов из ТЧ?

LexaK

@blade_snl, здесь только с циклом, попробуйте так
&НаКлиенте
Процедура ОК(Команда)
    ВыбранныеСклады = Новый Массив;                             
    //ВыбранныеСклады = Элементы.ТЧ_Склады.ВыделенныеСтроки;
Для каждого лкСтр Из Элементы.ТЧ_Склады.ВыделенныеСтроки Цикл
ВыбранныеСклады.Добавить(Элементы.ТЧ_Склады.ДанныеСтроки(лкСтр).ИмяСклада);
КонецЦикла;

    Объект.Склады = ВыбранныеСклады;   
    ЭтаФорма.Закрыть();
КонецПроцедуры

Внимание! Вы получите массив только наименований складов, а не ссылок!
(обычно нужны именно ссылки)
ответ Понравился? (в смысле пригодился?)

blade_snl

Цитата: LexaK от 11 окт 2021, 22:03Внимание! Вы получите массив только наименований складов, а не ссылок!
(обычно нужны именно ссылки)

да, я вкурсе, мне как раз наименования нужны... сейчас проверю, спасибо большое! )

blade_snl

все отлично работает, есть один маленький вопрос.

я полученный массив разбираю в строку и закидываю в реквизит, который расположен на головной форме, из которой текущая вызывалась... данные в реквизит попадают. но на форме не отображаются.
ее может обновить нужно? но по какому событию это сделать?

вот так я с головной формы вызываю форму выбора:
ОткрытьФорму("Документ.ФормированиеЗаказаСкладПроизводство.Форма.ФормаВыбораСкладов",,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
после закрытия формы выбора нужно чтобы поле на головной форме отобразило мне данные из реквизита.

LexaK

или через оповещение,
или сразу в реквизит Владельца

пример
Процедура ОК(Команда)
    ВыбранныеСклады = Новый Массив;                             
    //ВыбранныеСклады = Элементы.ТЧ_Склады.ВыделенныеСтроки;
стрСклады = "";
    Для каждого лкСтр Из Элементы.ТЧ_Склады.ВыделенныеСтроки Цикл
        ВыбранныеСклады.Добавить(Элементы.ТЧ_Склады.ДанныеСтроки(лкСтр).ИмяСклада);
стрСклады = стрСклады + Элементы.ТЧ_Склады.ДанныеСтроки(лкСтр).ИмяСклада + ", ";

    КонецЦикла;
   
    Объект.Склады = ВыбранныеСклады;   
Этаформа.ВладелецФормы.<РеквизитФормыВыбранныеСклады> = стрСклады; //прямо в реквизит формы задаем значение
    ЭтаФорма.Закрыть();
КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

blade_snl


blade_snl

Цитата: LexaK от 12 окт 2021, 15:15Этаформа.ВладелецФормы.<РеквизитФормыВыбранныеСклады> = стрСклады; //прямо в реквизит формы задаем значение

есть еще один глупый для опытных людей вопрос )
я действительно могу обратиться к реквизиту формы таким образом. могу поменять ему свойства и все такое. но у меня это поле ввода (Элементы.Склады), привязанное к значению Объект.Склады.
Значение стрСклады в Объект.Склады попало. Как я через обращение к реквизиту формы Элементы.Склады могу заставить это значение отобразиться на форме?

Теги: ТЧ 

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

Рейтинг@Mail.ru Rambler's Top100

Поиск