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

Хранилище

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

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



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

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

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

1с8.3.6, самописная, УФ

Делаю обработку, которая должна создать несколько документов на основании данных ТЧ

Требуется, например в ТЧ имеется 3 неких записей, создать 3-и документа, вывести все эти 3-и новых документа на экран, но при этом не сохранять, тем самым дать возможность пользователю решить, что с ними делать.

Кроме того, в этих документах есть некая кнопка, которая заполняет данные табличной части этого документа, т.е. требуется чтобы после создания этого документа сработала эта кнопка и заполнила эту табличную часть нового документа...

Как это сделать. Я нашел несколько методов, но они требуют сохранения документа, а нужно создать несколько документов, вывести на экран, не сохранять...

sava1 Подменю пользователя
сообщение 16.03.19, 12:07
Сообщение #2

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

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

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

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

sava1 @ Сегодня, 16:07 * ,

Вот попытался применить метод:

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

&НаСервереБезКонтекста

Функция ЗаполнитьДокументНаСервере(ДанныеФормы, Отдел);

Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ТабельУчетаРабочегоВремени")); // Получаем объект из данных формы ИЛИ

Док = Документы.ТабельУчетаРабочегоВремени.СоздатьДокумент();

Док.Подразделение = Отдел;
Док.Организация = ДанныеФормы.Организация;
Док.Дата = текущаяДата();
// Заполняем реквизиты объекта или другие действия ********

ЗначениеВДанныеФормы(Док,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ

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


1. На экран выводит один документ, причем последний из цикла
2. Не сработал метод ДанныеФормы.Организация;



Добавил код

Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта",,,Новый УникальныйИдентификатор());

Вроде открылось несколько

Как теперь правильно его заполнить?

ДанныеФормы.Дата = ТекущаяДата(); //сработало
ДанныеФормы.Подразделение = ???? Стр.Подразделение; // не сработало из цикла


+ Как запустить на этой открытой форме процедуру по кнопке?


Constantus @ Сегодня, 16:33 * ,

Вот что-то изменил:

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

ДанныеФормы.Дата = ТекущаяДата();
ДанныеФормы.Подразделение = СТЧ;
ДанныеФормы.Организация = СТЧ.Организация;
ДанныеФормы.ДатаНачалаПериода = Хрень.ДатаНачалаПериода;    
ДанныеФормы.ДатаОкончанияПериода = Хрень.ДатаОкончанияПериода;

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



Пытаюсь заполнить шапку новых документов, там равные реквизиты, что в обработке, что в документах...

ДанныеФормы.ДатаНачалаПериода = Хрень.ДатаНачалаПериода;    
ДанныеФормы.ДатаОкончанияПериода = Хрень.ДатаОкончанияПериода;


Не срабатывает...

Constantus @ Сегодня, 17:32 * ,


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

ДанныеФормы.Дата = ТекущаяДата();
ДанныеФормы.Подразделение = СТЧ;
ДанныеФормы.Организация = СТЧ.Организация;
ДанныеФормы.ДатаНачалаПериода = Док.ДатаНачалаПериода;    
ДанныеФормы.ДатаОкончанияПериода = Док.ДатаОкончанияПериода;
ДанныеФормы.ПериодРегистрации  = Док.ПериодРегистрации;
ДанныеФормы.ПериодВводаДанныхОВремени = Док.ПериодВводаДанныхОВремени;
//ДанныеФормы.МесяцРегистрацииСтрокой = Док.МесяцРегистрацииСтрокой;


Вот так сработало, кроме

ДанныеФормы.МесяцРегистрацииСтрокой = Док.МесяцРегистрацииСтрокой;


Этот реквизит является дополнительным реквизитом формы...

1. Как передать дополнительные реквизиты формы
2. И как программно запустить код на созданных формах:

УчетРабочегоВремениФормы.ТабельПериодВводаДанныхОВремениПриИзменении(ЭтаФорма);


Где ЭтаФорма - форма нового созданного документа



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

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

Constantus @ Сегодня, 18:23 * ,

Вроде решил задачу...

Осталось только одно: как передать данные дополнительного реквизита из обработки на новую форму...

//ДанныеФормы.МесяцРегистрацииСтрокой = Док.МесяцРегистрацииСтрокой;



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

Ёлки-палки, оказывается всё много проще...


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


Вообще не нужно...
ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение);

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

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

Вот решение, которое меня полностью удовлетворило:

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

        Форма.Заполнить();
        Форма.ПериодРегистрацииПриИзменении();
        
    КонецЦикла;    
    
КонецПроцедуры


Форма = ПолучитьФорму("Документ.ТабельУчетаРабочегоВремени.ФормаОбъекта",,,Новый УникальныйИдентификатор());

Новый УникальныйИдентификатор() - обязательно, чтобы открывались несколько форм

Это вообще не нужно, я так и не понял, почему идет такая обширная реклама заполнения форм через сервер...
        //ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
        //ЗаполнитьДокументНаСервере(ДанныеФормы, Стр.Подразделение);//, Объект); // Заполняем документ на сервере
        //КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее



Форма.Объект.ПериодРегистрации  = Объект.ПериодРегистрации;

Форма.Объект.ХХХХ(реквизит) - обращение к реквизитам заполняемой формы
Объект.ХХХ(реквизит) - считывание данных реквизита с формы-источника

Форма.МесяцРегистрацииСтрокой = МесяцРегистрацииСтрокой;

Обращение и заполнение дополнительных реквизитов формы

Форма.Заполнить();

Обращение (запуск кнопки, процедур) на вновь созданных формах, но есть нюанс, нужно кое-что переделать в этих процедурах, если там используются "Кнопка"/"Элементы", что в скобках:

&НаКлиенте
Процедура Заполнить(Команда=Неопределено) Экспорт
        
    ЗаполнитьСотрудникамиОрганизацииНаСервере();
    
КонецПроцедуры


Команда=Неопределено - добавить в скобку (Элементы=Неопределено), чтобы в своем коде не обращать на это внимание
Экспорт - добавить к процедуре как экспортную

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

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

Таки без серверного выполнения не обойтись, если для заполнения данных требуется вставка данных из Справочников, Перечислений и т.д., т.е. если требуется заполнение, которое доступно только на стороне сервера...


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

Как быть?


Форма.Открыть();
Форма.Модифицированность = Истина;


Теперь выводит (*) и задается вопросом о дальнейшей судьбе документа

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


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

 

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