Приветствую, Форумчане!
1с8.3.6, самописная, УФ
Делаю обработку, которая должна создать несколько документов на основании данных ТЧ
Требуется, например в ТЧ имеется 3 неких записей, создать 3-и документа, вывести все эти 3-и новых документа на экран, но при этом не сохранять, тем самым дать возможность пользователю решить, что с ними делать.
Кроме того, в этих документах есть некая кнопка, которая заполняет данные табличной части этого документа, т.е. требуется чтобы после создания этого документа сработала эта кнопка и заполнила эту табличную часть нового документа...
Как это сделать. Я нашел несколько методов, но они требуют сохранения документа, а нужно создать несколько документов, вывести на экран, не сохранять...
создаем форму объекта, заполняем объект, открываем форму
каждую со своим уникальным идентификатором
sava1 @ Сегодня, 16:07
,
Вот попытался применить метод:
&НаКлиенте
Процедура СоздатьТабеляУчетаРабочегоВремени(Команда)
// Вставить содержимое обработчика.
Для Каждого Стр Из Объект.Подразделения Цикл
Сообщить(Стр.Подразделение);
Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта");
ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение); // Заполняем документ на сервере
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Открыть();
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаполнитьДокументНаСервере(ДанныеФормы, Отдел);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ТабельУчетаРабочегоВремени")); // Получаем объект из данных формы ИЛИ
Док = Документы.ТабельУчетаРабочегоВремени.СоздатьДокумент();
Док.Подразделение = Отдел;
Док.Организация = ДанныеФормы.Организация;
Док.Дата = текущаяДата();
// Заполняем реквизиты объекта или другие действия ********
ЗначениеВДанныеФормы(Док,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ
КонецФункции
ДанныеФормы.Дата = ТекущаяДата(); //сработало
ДанныеФормы.Подразделение = ???? Стр.Подразделение; // не сработало из цикла
&НаКлиенте
Процедура СоздатьТабеляУчетаРабочегоВремени(Команда)
// Вставить содержимое обработчика.
Для Каждого Стр Из Объект.Подразделения Цикл
Сообщить(Стр.Подразделение);
Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта",,,Новый УникальныйИдентификатор(),);
ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение, Объект); // Заполняем документ на сервере
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Открыть();
КонецЦикла;
КонецПроцедуры
//БезКонтекста
&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы, СТЧ, Хрень);
ДанныеФормы.Дата = ТекущаяДата();
ДанныеФормы.Подразделение = СТЧ;
ДанныеФормы.Организация = СТЧ.Организация;
ДанныеФормы.ДатаНачалаПериода = Хрень.ДатаНачалаПериода;
ДанныеФормы.ДатаОкончанияПериода = Хрень.ДатаОкончанияПериода;
КонецФункции
ДанныеФормы.ДатаНачалаПериода = Хрень.ДатаНачалаПериода;
ДанныеФормы.ДатаОкончанияПериода = Хрень.ДатаОкончанияПериода;
Док = РеквизитФормыВЗначение("Объект");
ДанныеФормы.Дата = ТекущаяДата();
ДанныеФормы.Подразделение = СТЧ;
ДанныеФормы.Организация = СТЧ.Организация;
ДанныеФормы.ДатаНачалаПериода = Док.ДатаНачалаПериода;
ДанныеФормы.ДатаОкончанияПериода = Док.ДатаОкончанияПериода;
ДанныеФормы.ПериодРегистрации = Док.ПериодРегистрации;
ДанныеФормы.ПериодВводаДанныхОВремени = Док.ПериодВводаДанныхОВремени;
//ДанныеФормы.МесяцРегистрацииСтрокой = Док.МесяцРегистрацииСтрокой;
ДанныеФормы.МесяцРегистрацииСтрокой = Док.МесяцРегистрацииСтрокой;
УчетРабочегоВремениФормы.ТабельПериодВводаДанныхОВремениПриИзменении(ЭтаФорма);
Constantus @ Сегодня, 18:23
,
Вроде решил задачу...
Осталось только одно: как передать данные дополнительного реквизита из обработки на новую форму...
//ДанныеФормы.МесяцРегистрацииСтрокой = Док.МесяцРегистрацииСтрокой;
Для Каждого Стр Из Объект.Подразделения Цикл
Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта",,,Новый УникальныйИдентификатор(),);
ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
//ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение);//, Объект); // Заполняем документ на сервере
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Открыть();
Форма.Заполнить();
Форма.ПериодРегистрацииПриИзменении();
Форма.МесяцРегистрацииСтрокой = МесяцРегистрацииСтрокой;
Форма.Объект.ДатаОкончанияПериода
= Объект.ДатаОкончанияПериода;
КонецЦикла;
ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение);
Вот решение, которое меня полностью удовлетворило:
&НаКлиенте
Процедура СоздатьТабеляУчетаРабочегоВремени(Команда)
Для Каждого Стр Из Объект.Подразделения Цикл
Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта",,,Новый УникальныйИдентификатор(),);
//ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
//ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение);//, Объект); // Заполняем документ на сервере
//КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Открыть();
Форма.МесяцРегистрацииСтрокой = МесяцРегистрацииСтрокой;
Форма.Объект.Дата = ТекущаяДата();
Форма.Объект.Подразделение = Стр.Подразделение;
Форма.Объект.Организация = Стр.Организация;
Форма.Объект.ДатаНачалаПериода = Объект.ДатаНачалаПериода;
Форма.Объект.ДатаОкончанияПериода = Объект.ДатаОкончанияПериода;
Форма.Объект.ПериодРегистрации = Объект.ПериодРегистрации;
Форма.Объект.ПериодВводаДанныхОВремени = Объект.ПериодВводаДанныхОВремени;
Форма.Заполнить();
Форма.ПериодРегистрацииПриИзменении();
КонецЦикла;
КонецПроцедуры
Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта",,,Новый УникальныйИдентификатор());
//ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
//ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение);//, Объект); // Заполняем документ на сервере
//КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Объект.ПериодРегистрации = Объект.ПериодРегистрации;
Форма.МесяцРегистрацииСтрокой = МесяцРегистрацииСтрокой;
Форма.Заполнить();
&НаКлиенте
Процедура Заполнить(Команда=Неопределено) Экспорт
ЗаполнитьСотрудникамиОрганизацииНаСервере();
КонецПроцедуры
Таки без серверного выполнения не обойтись, если для заполнения данных требуется вставка данных из Справочников, Перечислений и т.д., т.е. если требуется заполнение, которое доступно только на стороне сервера...
Кстати, обратил внимание, что при создании документа он конечно не записывается, но и при закрытии не требует подтверждения чтобы его записать, т.е. получается он какбы не модифицирован и при закрытии не выходит никакого сообщения, т.е. он и не сохраняется, а мирно и тихо покидает этот мир...
Как быть?
Форма.Открыть();
Форма.Модифицированность = Истина;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua