Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Сохранить параметры отбора из формы отбора в документе          
Constantus Подменю пользователя
сообщение 13.02.20, 12:25
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

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

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

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

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



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

fly Подменю пользователя
сообщение 13.02.20, 14:34
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 234
Спасибо сказали: 51 раз
Рейтинг: 48

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

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

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


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

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

sava1 Подменю пользователя
сообщение 13.02.20, 14:40
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

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

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

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

fly Подменю пользователя
сообщение 13.02.20, 15:16
Сообщение #4

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 234
Спасибо сказали: 51 раз
Рейтинг: 48

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

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

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

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


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


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

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

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

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


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

...

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

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


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

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


Сообщение отредактировал fly - 13.02.20, 15:18

Constantus Подменю пользователя
сообщение 13.02.20, 15:24
Сообщение #5

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

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

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

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

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



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

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

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


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

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

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



fly Подменю пользователя
сообщение 13.02.20, 16:18
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 234
Спасибо сказали: 51 раз
Рейтинг: 48

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

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


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


Сообщение отредактировал fly - 13.02.20, 16:19

Constantus Подменю пользователя
сообщение 13.02.20, 17:07
Сообщение #7

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

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

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


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

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

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

fly Подменю пользователя
сообщение 13.02.20, 17:16
Сообщение #8

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 234
Спасибо сказали: 51 раз
Рейтинг: 48

Constantus @ Сегодня, 17:07 * ,
Отбор.Вставить("Номенклатура", СписокНоменклатуры);
Отбор.Вставить("Стела", СписокСтела);

Constantus Подменю пользователя
сообщение 13.02.20, 17:58
Сообщение #9

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

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

Сделал код

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


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

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

Точнее

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


Constantus Подменю пользователя
сообщение 03.03.20, 13:54
Сообщение #10

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Давайте попробую объяснить всё заново :-)

1. Имеем некий документ, где имеется кнопка: "Отбор элементов комплекса"



Эта кнопка открывает дополнительную форму документа:

ОткрытьФорму("Документ.УстановкаЦенНаЭлементыКомплекса.Форма.ОтборЭлементаКомплекса",, ЭтаФорма);


Вот потроха этой формы для отбора с компоновщиком настроек



2. Производим отбор на этой форме и получаем результат отбора:



и переносим в исходную форму:

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



Это код при создании дополнитеьной формы для отбора в компоновщике

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    АдресСхемыЗаполнения = ПоместитьВоВременноеХранилище(Документы.УстановкаЦенНаЭлементыКомплекса.ПолучитьМакет("Макет"), УникальныйИдентификатор);
    
    СхемаЗаполнения = ПолучитьИзВременногоХранилища(АдресСхемыЗаполнения);
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыЗаполнения);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);    

    КлючВарианта = "Основной";
    СписокВариантов = СхемаЗаполнения.ВариантыНастроек;
    ВариантНастройки = СписокВариантов.Найти(КлючВарианта);
    Если ВариантНастройки = Неопределено Тогда
        НастройкиКД = СхемаЗаполнения.НастройкиПоУмолчанию;
    Иначе
        НастройкиКД = ВариантНастройки.Настройки;
    КонецЕсли;
        
    КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
    
КонецПроцедуры


Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 13:05
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!