Имя: Пароль:
1C
 
Как сохранить значение для последующего использования?
0 pro3ri
 
28.08.15
21:18
доброго вечера!
по кнопке на форме заполняю тч:
&НаСервере
Процедура ЗаполнитьНаСервере()
    
    
    Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
        
        ОбъектДок = РеквизитФормыВЗначение("Объект",Тип("ДокументОбъект.АктСверкиВзаиморасчетов"));
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Нужно указать Контрагента!";
        Сообщение.Поле = "Контрагент";
        Сообщение.УстановитьДанные(ОбъектДок);
        Сообщение.Сообщить();    
        ЗначениеВРеквизитФормы(ОбъектДок,"Объект");
        
        Возврат;
        
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
        |    ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
        |    ВзаиморасчетыОстаткиИОбороты.СуммаОборот КАК СуммаОборот,
        |    ВзаиморасчетыОстаткиИОбороты.Регистратор КАК Регистратор
        |ИЗ
        |    РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , Контрагент = &Контрагент) КАК ВзаиморасчетыОстаткиИОбороты
        |ГДЕ
        |    ВзаиморасчетыОстаткиИОбороты.СуммаОборот <> 0";
    
        
    Если Не ЗначениеЗаполнено(Объект.ДатаНачала) Тогда
        ДатаНачала = '00010101';
    Иначе
        ДатаНачала = Объект.ДатаНачала;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
        ДатаОкончания = ТекущаяДата();
    Иначе
        ДатаОкончания = КонецДня(Объект.ДатаОкончания);
    КонецЕсли;
    
    Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
    Запрос.УстановитьПараметр("НачалоПериода", ДатаНачала);
    Запрос.УстановитьПараметр("КонецПериода", ДатаОкончания);

    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ВыборкаГлоб = ВыборкаДетальныеЗаписи;
    
    ОбъектДок = РеквизитФормыВЗначение("Объект",Тип("ДокументОбъект.АктСверкиВзаиморасчетов"));
    ОбъектДок.Взаиморасчеты.Очистить();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СтрокаТЧ = ОбъектДок.Взаиморасчеты.Добавить();
        СтрокаТЧ.Документ = ВыборкаДетальныеЗаписи.Регистратор;
        //Сообщить(""+?(ВыборкаДетальныеЗаписи.СуммаОборот>0, СтрокаТЧ.СуммаУвеличенияДолга = ВыборкаДетальныеЗаписи.СуммаОборот,
        //    СтрокаТЧ.СуммаУменьшенияДолга = -ВыборкаДетальныеЗаписи.СуммаОборот));
        Если ВыборкаДетальныеЗаписи.СуммаОборот>0 Тогда
            СтрокаТЧ.СуммаУвеличенияДолга = ВыборкаДетальныеЗаписи.СуммаОборот
        Иначе
            СтрокаТЧ.СуммаУменьшенияДолга = -ВыборкаДетальныеЗаписи.СуммаОборот;
        КонецЕсли;
    КонецЦикла;
    
    ЗначениеВРеквизитФормы(ОбъектДок,"Объект");

КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьНаСервере();
КонецПроцедуры

однако потом результат запроса еще будет нужен для выведения в таб док.
&НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПечатьНаСервере(Ссылка,ТабДок)
    
    Макет = Документы.АктСверкиВзаиморасчетов.ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

    ОбластьШапка.Параметры.Номер = Ссылка.Номер;
    ОбластьШапка.Параметры.Дата = Ссылка.Дата;
    ТабДок.Вывести(ОбластьШапка);
    
    Пока ВыборкаГлоб.следующий() Цикл
    
        ОбластьСтрока.Параметры.Заполнить(ВыборкаГлоб);
        ОбластьСтрока.Параметры.Контрагент = Ссылка.Контрагент;
        Если ВыборкаГлоб.СуммаОборот>0 Тогда
             ОбластьСтрока.Параметры.Приход = ВыборкаГлоб.СуммаОборот;
        Иначе             
            ОбластьСтрока.Параметры.Расход = -ВыборкаГлоб.СуммаОборот;
        КонецЕсли;
    
    КонецЦикла;
    
    ТабДок.Вывести(ОбластьСтрока);
    
    ТабДок.Вывести(ОбластьПодвал);
    
    
    
    
    
    
КонецПроцедуры
ошибка = ВыборкаГлоб = неопределено

Как можно сохранить результат запроса?
1 User_Agronom
 
28.08.15
21:23
Реквизит формы на обычных формах. Если это всё в модуле формы.
2 pro3ri
 
28.08.15
21:31
Благодарю, это все на уф
3 GROOVY
 
28.08.15
21:33
(0) Уверен, что результат не поменяется между первым обращением и повторным?
4 GROOVY
 
28.08.15
21:33
Ну, а так, сохрани во временное хранилище, потом доставай.
5 pro3ri
 
28.08.15
21:44
(4) ХранилищеЗначения (ValueStorage)
Методы:

Получить (Get)

Конструкторы:

На основании значения
это?
6 GROOVY
 
28.08.15
21:57
(5) ПоместитьВоВременноеХранилище.
ХранилищеЗначения и временное хранилище - разные вещи.
7 pro3ri
 
31.08.15
07:00
(6) спасибо!
8 pro3ri
 
31.08.15
07:39
Есть ТЗ:
Создайте документ «Акт сверки взаиморасчетов». В шапке указывается контрагент и
период, за который нужно сформировать акт (дата начала и дата окончания). Табличная часть при
нажатии на кнопку «Заполнить» должна содержать данные по изменению взаиморасчетов с
данным контрагентом за указанный период.
В табличной части должны быть следующие реквизиты:
•  Документ: оплата или отгрузка, либо «Операция»;
•  Сумма увеличения долга: для покупателя – сумма отгрузки, для поставщика – сумма
оплаты;
•  Сумма уменьшения долга: для покупателя – сумма оплаты, для поставщика – сумма
отгрузки.

Документ «Акт сверки взаиморасчетов» не формирует движений ни по одному регистру.
«Акт сверки» должен иметь печатную форму, где кроме данных самого документа нужно
отображать долг контрагента на начало и на окончание периода, указанного в документе.

делаю последнее: «Акт сверки» должен иметь печатную форму, где кроме данных самого документа нужно
отображать долг контрагента на начало и на окончание периода, указанного в документе.
Как бы сделали Вы, есть ли смысл добавить реквизиты в ТЧ и заполнять их по кнопке заполнить, а потом выводить в печ форму, или лучше использовать результат запроса по кнопке заполнить и добавить туда долг контрагента на начало и на окончание периода?
9 Мимохожий Однако
 
31.08.15
07:47
Для формирования печатной формы готового документа достаточно использовать запрос.
10 pro3ri
 
01.09.15
20:22
А как пользоваться врем хранилищем?

Перем Хранилище Экспорт;

&НаСервере
Процедура ЗаполнитьНаСервере()
    
    Если Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
        
        ОбъектДок = РеквизитФормыВЗначение("Объект",Тип("ДокументОбъект.АктСверкиВзаиморасчетов"));
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Нужно указать Контрагента!";
        Сообщение.Поле = "Контрагент";
        Сообщение.УстановитьДанные(ОбъектДок);
        Сообщение.Сообщить();    
        ЗначениеВРеквизитФормы(ОбъектДок,"Объект");
        
        Возврат;
        
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
        |    ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
        |    ВзаиморасчетыОстаткиИОбороты.СуммаОборот КАК СуммаОборот,
        |    ВзаиморасчетыОстаткиИОбороты.Регистратор КАК Регистратор
        |ИЗ
        |    РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , Контрагент = &Контрагент) КАК ВзаиморасчетыОстаткиИОбороты
        |ГДЕ
        |    ВзаиморасчетыОстаткиИОбороты.СуммаОборот <> 0";
    
        
    Если Не ЗначениеЗаполнено(Объект.ДатаНачала) Тогда
        ДатаНачала = '00010101';
    Иначе
        ДатаНачала = Объект.ДатаНачала;
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
        ДатаОкончания = ТекущаяДата();
    Иначе
        ДатаОкончания = КонецДня(Объект.ДатаОкончания);
    КонецЕсли;
    
    Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
    Запрос.УстановитьПараметр("НачалоПериода", ДатаНачала);
    Запрос.УстановитьПараметр("КонецПериода", ДатаОкончания);

    РезультатЗапроса = Запрос.Выполнить();
    
    Хранилище = ПоместитьВоВременноеХранилище(РезультатЗапроса);
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ВыборкаГлоб = ВыборкаДетальныеЗаписи;
    
    ОбъектДок = РеквизитФормыВЗначение("Объект",Тип("ДокументОбъект.АктСверкиВзаиморасчетов"));
    ОбъектДок.Взаиморасчеты.Очистить();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СтрокаТЧ = ОбъектДок.Взаиморасчеты.Добавить();
        СтрокаТЧ.Документ = ВыборкаДетальныеЗаписи.Регистратор;
        //Сообщить(""+?(ВыборкаДетальныеЗаписи.СуммаОборот>0, СтрокаТЧ.СуммаУвеличенияДолга = ВыборкаДетальныеЗаписи.СуммаОборот,
        //    СтрокаТЧ.СуммаУменьшенияДолга = -ВыборкаДетальныеЗаписи.СуммаОборот));
        Если ВыборкаДетальныеЗаписи.СуммаОборот>0 Тогда
            СтрокаТЧ.СуммаУвеличенияДолга = ВыборкаДетальныеЗаписи.СуммаОборот
        Иначе
            СтрокаТЧ.СуммаУменьшенияДолга = -ВыборкаДетальныеЗаписи.СуммаОборот;
        КонецЕсли;
        //СтрокаТЧ.СуммаНачальныйОстаток =ВыборкаДетальныеЗаписи.СуммаНачальныйОстаток;
        //СтрокаТЧ.СуммаКонечныйОстаток =ВыборкаДетальныеЗаписи.СуммаКонечныйОстаток;
    КонецЦикла;
    
    ЗначениеВРеквизитФормы(ОбъектДок,"Объект");

КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьНаСервере();
    Модифицированность = Истина;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПечатьНаСервере(Ссылка,ТабДок)
    
    Макет = Документы.АктСверкиВзаиморасчетов.ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

    ОбластьШапка.Параметры.Номер = Ссылка.Номер;
    ОбластьШапка.Параметры.Дата = Ссылка.Дата;
    ТабДок.Вывести(ОбластьШапка);
    

    Для каждого Строка Из Ссылка.Взаиморасчеты Цикл
    
        ОбластьСтрока.Параметры.Контрагент = Ссылка.Контрагент;
         ОбластьСтрока.Параметры.Приход = Строка.СуммаУвеличенияДолга;
        ОбластьСтрока.Параметры.Расход = Строка.СуммаУменьшенияДолга;
        //ОбластьСтрока.Параметры.СуммаНачальныйОстаток = Строка.СуммаНачальныйОстаток;
        //ОбластьСтрока.Параметры.СуммаКонечныйОстаток = Строка.СуммаКонечныйОстаток;
        ОбластьСтрока.Параметры.Регистратор = Строка.Документ;

        ТабДок.Вывести(ОбластьСтрока);
            
    КонецЦикла;
    
    ТабДок.Вывести(ОбластьПодвал);
    
КонецПроцедуры

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

на этапе серверной процедуры печати Переменная Хранилище не определена, неужели надо создавать реквизит дока?
11 Славен
 
01.09.15
21:25
Реквизит, в котором будешь хранить ключ-адрес в хранилище, при помещении в хранилище записываешь в реквизит ключ, при получении его указываешь
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший