|
Как сохранить значение для последующего использования? | ☑ | ||
---|---|---|---|---|
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
|
Реквизит, в котором будешь хранить ключ-адрес в хранилище, при помещении в хранилище записываешь в реквизит ключ, при получении его указываешь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |