Версия для печати темы (https://pro1c.org.ua/index.php?s=4f34aef2ebd7770a4b1cdc2d81d501e3&showtopic=57032)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Сохранить параметры отбора из формы отбора в документе

Автор: Constantus 13.02.20, 12:25

Приветствую, Форумчане!
1с8.3.12, УФ, самопис

Имеется некая свободная форма "Групповое создание документов", которая по неким отборам по номенклатуре отбирает нужную номенклатуру и создает несколько документов

на форме расположен "КомпоновщикНастроек" с типом "КомпоновщикНастроекКомпоновкиДанных" с путем к данным "КомпоновщикНастроек.Настройки.Отбор"

Возможно ли сохранить этот отбор в создаваемых документах?



Чтобы потом при повторном открытии этой формы отбора получить параметры отбора из этого созданного документа?

Автор: fly 13.02.20, 14:34

ПоместитьВоВременноеХранилище()

но база расти будет

fly @ Сегодня, 14:25 * ,


Хранилище настроек
Отчет имеются свойства метаданных Хранилище вариантов и Хранилище настроек
При необходимости сохранять в настройках компоновки данных или пользовательских настройках компоновки данных некоторую дополнительную информацию можно воспользоваться свойствами ДополнительныеСвойства объектов НастройкиКомпоновкиДанных и ПользовательскиеНастройкиКомпоновкиДанных. Свойство ДополнительныеСвойства представляет собой объект типа Структура.

ХранилищеНастроек:
ОбработкаСохранения – содержит реализацию метода Сохранить().
ОбработкаЗагрузки – содержит реализацию метода Загрузить().

Автор: sava1 13.02.20, 14:40

Цитата(fly @ 13.02.20, 14:34) *
ПоместитьВоВременноеХранилище()

!! ссылка существует только пока существует форма или до следующего серверного вызова

по делу - для самописки - создайте рс с реквизитом ХранилищеЗначений - в нем и храните.
остальное - извращения

Автор: fly 13.02.20, 15:16

Хранилище значений 1С

ХранилищеЗначения (хранилище значений 1С) – это объект в языке 1С, который позволяет хранить в базе данных прочие значения, например картинки и файлы, структуры и таблицы значений.

передать структуру настроек отчета и поместить в реквизит Документа = тип("ХранилищеЗначений")

Настройки = Новый Структура();
Настройки.Вставить("ПоУмолчанию", Истина);
Настройки.Вставить("Наименование", "Наименование1");


Хранилище = Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(9));
ЗначениеВФайл("C:\", Хранилище);


Цитата(sava1 @ 13.02.20, 14:40) *
!! ссылка существует только пока существует форма или до следующего серверного вызова

просто при помощи временного хранилища передаются из одной формы в другую, вариант использования (можно и другими):

пример из рабочего документа: в основной форме кнопка для заполнения данных (коды ТНВЭД), в доп. форму передаются необходимые данные, назад возвращается адрес временного хранилища с результатом заполнения.

1. Основная форма. Открытие вспомогательной формы
&НаКлиенте
Процедура КомандаЗаполнениеКодовТНВЭД(Команда)
    
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("АдресТаблицыКодовТНВЭД", ПолучитьАдресТаблицыДляЗаполненияКодовТНВЭД());
    ОбработкаОповещения = Новый ОписаниеОповещения("ПрименитьЗаполненныеКодыТНВЭДИВес", ЭтаФорма);
    ОткрытьФорму("Документ.ЗагрузкаДанныхОтПоставщика.Форма.ФормаЗаполненияКодаТНВЭДИВеса", СтруктураПараметров, ЭтаФорма,,,, ОбработкаОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    
КонецПроцедуры


2.Вспомогательная форма. Заполнение и возврат адреса на результат заполнения
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    КодыТНВЭД.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресТаблицыКодовТНВЭД));
    ...
        
КонецПроцедуры

...

&НаКлиенте
Процедура ПеренестиИзменения(Команда)
    
    Закрыть(ПолучитьАдресТаблицыКодовТНВЭД());    
    
КонецПроцедуры

&НаСервере
Функция ПолучитьАдресТаблицыКодовТНВЭД()
    
    тзКоды = КодыТНВЭД.Выгрузить();
    Возврат ПоместитьВоВременноеХранилище(тзКоды);
    
КонецФункции


3. Основная форма. Обработка полученного результата из вспомогательной формы

&НаСервере
Процедура ПрименитьЗаполненныеКодыТНВЭДИВес(АдресРезультата, ДополнительныеПараметры=Неопределено)
    
    Если НЕ ЭтоАдресВременногоХранилища(АдресРезультата) Тогда
        Возврат;
    КонецЕсли;
    
    тзДанные = ПолучитьИзВременногоХранилища(АдресРезультата);
...
КонецПроцедуры

Автор: Constantus 13.02.20, 15:24

fly @ Сегодня, 19:06 * ,

Вот код, который массово формирует документы:

    СозданныеДокументы.Очистить();
    ДанныеЗаполнения = ОтобранныеПозиции.Выгрузить();
    Сч = 0;
    Для каждого СтрокаГорода Из ГородаЗаполнения Цикл
        ДокументОбъект = Документы.УстановкаЦенНаИзделияВГородах.СоздатьДокумент();
        //ДокументОбъект.Дата = ТекущаяДата();
        ДокументОбъект.Дата = ДатаДокумента;

        //ДокументОбъект.Организация = ОрганизацияДокумента;
        ДокументОбъект.Автор = Пользователи.ТекущийПользователь();
        ДокументОбъект.АкцияДокумента = АкцияДокумента;
        ДокументОбъект.Комментарий = "#Групповое создание";
        ДокументОбъект.ОсновнойГород = СтрокаГорода.Город;
        СтрокаГородаДокумента = ДокументОбъект.Города.Добавить();
        СтрокаГородаДокумента.Город = СтрокаГорода.Город;
        ДокументОбъект.ЗаполнитьЦены(ДанныеЗаполнения);
        
        ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
        СтрокаСозданных = СозданныеДокументы.Добавить();
        СтрокаСозданных.Город = СтрокаГорода.Город;
        СтрокаСозданных.Документ = ДокументОбъект.Ссылка;
        Сч = Сч + 1;
    КонецЦикла;



В документе "УстановкаЦенНаИзделияВГородах" есть реквизит "ОтборНастроек" с "ХранилищеЗначения"

Как мне сохранить в этом реквизите настройки отбора? В Вашем примере указывается на диск...

В коде
МакетРезультат = Компоновщик.Выполнить(СхемаЗаполнения, НастройкиКомпоновки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));


"НастройкиКомпоновки" при отладке показало в "Отбор" показало значение: Номенклатура Равно "Стела" И Полировка Равно "2х"

Я так понимаю, что мне это значние нужно поместить в реквизит "ОтборНастроек" с "ХранилищеЗначения"?

Если как то как?



Автор: fly 13.02.20, 16:18

Отбор = Новый Структура;
СписокНомеклатуры = Новый СписокЗначений;

//----------Заполняем СписокНомеклатуры
Отбор.Вставить("Номенклатура", СписокНоменклатуры);
УстановкаЦенНаИзделияВГородах.ОтборНастроек = Новый ХранилищеЗначения(Отбор);


fly @ Сегодня, 16:13 * ,
Отбор = УстановкаЦенНаИзделияВГородах.ОтборНастроек.Получить();

Автор: Constantus 13.02.20, 17:07

Цитата(fly @ 13.02.20, 20:18) *
Отбор = Новый Структура;
СписокНомеклатуры = Новый СписокЗначений;

//----------Заполняем СписокНомеклатуры
Отбор.Вставить("Номенклатура", СписокНоменклатуры);
УстановкаЦенНаИзделияВГородах.ОтборНастроек = Новый ХранилищеЗначения(Отбор);


Стучусь головой об стенку... У меня этот отбор не по номенклатуре, там может быть очень сложный отбор. Как писал ранее типа

( ( Номенклатура Равно "Балка цветника" И Размер В списке "50/8'В'*8; 50/8'В'*7" ) ИЛИ ( Номенклатура Равно "Стела" И Полировка Равно "2х" ) )

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

Автор: fly 13.02.20, 17:16

Constantus @ Сегодня, 17:07 * ,

Отбор.Вставить("Номенклатура", СписокНоменклатуры);
Отбор.Вставить("Стела", СписокСтела);

Автор: Constantus 13.02.20, 17:58

fly @ Сегодня, 21:16 * ,

Сделал код

ДокументОбъект.ОтборНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки);


Как проверить заполнился ли реквизит? И получить его истинное человеческое значение?

Constantus @ Сегодня, 21:54 * ,

Точнее

ДокументОбъект.ОтборНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки.Отбор);


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua