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

Как записать значение в реквизиты внешней обработки?

Автор k_aleks80, 16 мар 2015, 09:44

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

k_aleks80

Следующая ситуация: имеется внешняя обработка с некоторым набором реквизитов (СписокСтатей1, ..., СписокСтатей9, ВидРасчета - тип: СписокЗначений). У обработки есть две управляемые формы - "Форма" и "ФормаНастройки". Из "Формы" вызывается "ФормаНастройки", затем по кнопке "ВосстановитьПоУмолчанию" происходит заполнение реквизитов формы: &НаСервере
Процедура ВосстановитьНаСервере()

ТекОбработка = РеквизитФормыВЗначение("ОбработкаОбъект");

ТекОбработка.СписокСтатей1.Очистить(); //Оплата за сверхурочные часы, включая НДФЛ 13%:
ТекОбработка.СписокСтатей1.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("СВХУР"));
ТекОбработка.СписокСтатей1.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ПРАЗД"));
ТекОбработка.СписокСтатей1.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ПРДОП"));

        // и т.д.

ТекОбработка.ВидРасчета.Очистить();
ТекОбработка.ВидРасчета.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("БЛН"));

ЗначениеВРеквизитФормы(ТекОбработка, "ОбработкаОбъект");

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

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


Все ясно и понятно. Теперь, при вызове "Формы" и нажатии кнопки "Заполнить" должно выполняться заполнение данных на этой форме, с выполнением запроса к БД. В качестве параметра в запросе используется реквизит обработки ВидРасчета, но он пустой!
    Как я понимаю, проблема при заполнении реквизитов обработки в "ФормеНастройки". Т.е. если бы это был внутренний прикладной объект БД (Справочник, Документ), тогда перед обновлением реквизита на форме (ЗначениеВРеквизитФормы) достаточно было бы записать объект и тогда на "Форме" значение реквизита ВидРасчета было бы с данными. Однако в данном случае у объекта ВнешняяОбработка метода Записать() нет. Как мне заполнить реквизиты обработки, чтобы я мог использовать их в запросе, в другой форме?

cska-fanat-kz

запросом можно получить только данные объектных сущностей - справочник, документ и пр.
обработка к таковым не относится.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

k_aleks80

Вы не совсем поняли ситуацию. Запросом данные я выбираю из БД, но в качестве параметра запроса использую реквизит обработки:
&НаСервере
Функция ЗаполнитьНаСервере()

Запрос = Новый Запрос("ВЫБРАТЬ
                      | Начисления.Сотрудник,
                      | СУММА(Начисления.ОтработаноДней) КАК ОплаченоДнейЧасов,
                      | СУММА(Начисления.Результат) КАК СуммаОплаты,
                      | МИНИМУМ(Начисления.ПериодДействияНачало) КАК ПериодДействияНачало,
                      | МАКСИМУМ(Начисления.ПериодДействияКонец) КАК ПериодДействияКонец,
                      | МЕСЯЦ(Начисления.ПериодДействияНачало) КАК Поле1,
                      | ПлановыеНачисленияСрезПоследних.Размер КАК Оклад
                      |ИЗ
                      | РегистрРасчета.Начисления КАК Начисления
                      | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисления.СрезПоследних КАК ПлановыеНачисленияСрезПоследних
                      | ПО Начисления.Сотрудник = ПлановыеНачисленияСрезПоследних.Сотрудник
                      |ГДЕ
                      | Начисления.ПериодРегистрации = &ПериодРегистрации
                      | И Начисления.ВидРасчета В(&ВидРасчета)
                      |
                      |СГРУППИРОВАТЬ ПО
                      | Начисления.Сотрудник,
                      | МЕСЯЦ(Начисления.ПериодДействияНачало),
                      | ПлановыеНачисленияСрезПоследних.Размер");
 
Запрос.УстановитьПараметр("ПериодРегистрации", ОбработкаОбъект.Период);
Запрос.УстановитьПараметр("ВидРасчета", ОбработкаОбъект.ВидРасчета);
Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

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

СписокДляРазовыхНачислений.Очистить();

Результат = ЗаполнитьНаСервере();

Для каждого ТекЗначение Из Результат Цикл
НоваяСтрока = СписокДляРазовыхНачислений.Добавить();
НоваяСтрока.Сотрудник         = ТекЗначение.Сотрудник;
ТаблицаДляЗаписи = ПолучитьТаблицуЗаИнтервал(ТекЗначение.Сотрудник, НачалоДня(ТекЗначение.ПериодДействияНачало), НачалоДня(ТекЗначение.ПериодДействияКонец));
НоваяСтрока.ОплаченоДнейЧасов = ПолучитьКоличествоРабочихДнейВПериоде(ТаблицаДляЗаписи);
НоваяСтрока.Оклад             = ТекЗначение.Оклад;
НоваяСтрока.СуммаОплаты       = ТекЗначение.СуммаОплаты;
НоваяСтрока.ДатаНачала        = Формат(ТекЗначение.ПериодДействияНачало, "ДЛФ=Д");
НоваяСтрока.ДатаОкончания     = Формат(ТекЗначение.ПериодДействияКонец, "ДЛФ=Д");
ТаблицаДляЗаписи = ПолучитьТаблицуЗаИнтервал(ТекЗначение.Сотрудник, НачалоМесяца(ТекЗначение.ПериодДействияНачало), КонецМесяца(ТекЗначение.ПериодДействияКонец));
НоваяСтрока.КоличествоРабочихЧасовВПериоде = ПолучитьКоличествоРабочихЧасовВПериоде(ТаблицаДляЗаписи);
НоваяСтрока.КоличествоРабочихДнейВПериоде  = ПолучитьКоличествоРабочихДнейВПериоде(ТаблицаДляЗаписи);
НоваяСтрока.СуммаДоплаты = Окр(НоваяСтрока.ОплаченоДнейЧасов*(ТекЗначение.Оклад/НоваяСтрока.КоличествоРабочихДнейВПериоде)-ТекЗначение.СуммаОплаты,2);
КонецЦикла;
КонецПроцедуры

cska-fanat-kz

1. пошлите 2 этих значения (период и вид расчета) в функцию в качестве параметра. ваш вопрос конечно не снимается, но думаю так будет лучше.
2. по идее должно ругуться на строке "Возврат Запрос.Выполнить().Выгрузить();" - таблица значений не передается между клиентом и сервером.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

k_aleks80

1) А откуда брать данные? (это модуль формы - "Форма"; И здесь ОбработкаОбъект (Тип: ДанныеФормаСтруктура) на форме не тоже самое, что ОбработкаОбъект (Тип: ВнешняяОбработка) внешней обработки). А из "ФормаНастроек" (там свой реквизит ОбработкаОбъект (Тип: ДанныеФормаСтруктура), который не идентичен аналогичному в "Форме" и ОбработкаОбъект внешней формы) я как раз и пытался заполнять реквизиты обработки (которые являются источниками данных для реквизитов обеих форм);
2) Ругается, но только при запуске приложения в тонком клиенте. В толстом - все проходит (решил отложить данную проблему пока на потом).
Добавлено: 16 мар 2015, 14:47


Решил сделать проще. Сделал одну форму с едиными реквизитами. На форме разместил Группу в виде страницы - функционал тот же, геморрой исчез :ooifh:.

Теги:

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

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

Поиск