Дано:
Внешняя обработка с табличной частью. При нажатии на кнопку выполнить идет перебор строк табличной части и последовательно открывается форма заполненного, но не записанного документа. Пользователь может записать документ, может не записать. После закрытия формы документа открывается следующий.
Все прекрасно работает за исключение того, что это модальный режим.
Конфигурация Бухгалтерия 3.0 типовая, изменения закрыты.
Как переделать этот код без использования модального режима?
Внешняя обработка с табличной частью. При нажатии на кнопку выполнить идет перебор строк табличной части и последовательно открывается форма заполненного, но не записанного документа. Пользователь может записать документ, может не записать. После закрытия формы документа открывается следующий.
Все прекрасно работает за исключение того, что это модальный режим.
Конфигурация Бухгалтерия 3.0 типовая, изменения закрыты.
Как переделать этот код без использования модального режима?
&НаСервере
Процедура СоздатьДокументыНаСервереФормы(ДанныеФормы, НомерСтроки)
Документ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
Обработка = РеквизитФормыВЗначение("Объект");
Обработка.СоздатьПоступлениеТоваров(Документ, НомерСтроки);
ЗначениеВРеквизитФормы(Обработка,"Объект");
ЗначениеВДанныеФормы(Документ,ДанныеФормы);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументы(Команда)
Для Каждого Строка Из Объект.Накладные Цикл
Если Строка.Пометка Тогда
ФормаОбъекта = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары");
ДанныеФормы = ФормаОбъекта.Объект;
СоздатьДокументыНаСервереФормы(ДанныеФормы, Строка.НомерСтроки);
КопироватьДанныеФормы(ДанныеФормы, ФормаОбъекта.Объект);
ФормаОбъекта.ОткрытьМодально();
Строка.Ссылка = ЗаполнитьНайденныйДокумент(Строка.НомерСтроки);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Допиливаем форму выбора серий номенклатуры для отображения остатков
- [ТАКСИ] Шаблон внешней обработки...и не только
- Вариант перевода модальных вызовов в немодальные
- Просмотрщик файлов DBF (DBFViewer), переделанный для управляемых форм
- Пометка тестовой копии рабочей базы через механизм оповещений и раскрашивание форм (Управляемое приложение)
Найденные решения
(13) Открывайте полученную форму. В целом, принцип такой:
&НаКлиенте
Перем МассивСтрок;
&НаКлиенте
Процедура СоздатьДокументы(Команда)
МассивСтрок = Новый Массив;
Для Каждого Строка Из Объект.Накладные Цикл
Если Строка.Пометка Тогда
МассивСтрок.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Если МассивСтрок.Количество() > 0 Тогда
ОткрытьФормуДокумента(0);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуДокумента(Сч)
Строка = МассивСтрок[Сч];
ФормаОбъекта = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары");
ДанныеФормы = ФормаОбъекта.Объект;
СоздатьДокументыНаСервереФормы(ДанныеФормы, Строка.НомерСтроки);
КопироватьДанныеФормы(ДанныеФормы, ФормаОбъекта.Объект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Форма", ФормаОбъекта);
ДополнительныеПараметры.Вставить("Сч", Сч);
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияФормыДокумента", ЭтотОбъект, ДополнительныеПараметры);
ФормаОбъекта.ОписаниеОповещенияОЗакрытии = ОповещениеОЗакрытии;
ФормаОбъекта.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияФормыДокумента(Результат, ДополнительныеПараметры) Экспорт
Строка = МассивСтрок[ДополнительныеПараметры.Сч];
СсылкаНаДокумент = ДополнительныеПараметры.Форма.Объект.Ссылка;
Строка.Ссылка = СсылкаНаДокумент;
Сч = ДополнительныеПараметры.Сч + 1;
Если Сч < МассивСтрок.Количество() Тогда
ОткрытьФормуДокумента(Сч)
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Через параметр ОписаниеОповещенияОЗакрытии в ОткрытьФорму(). Но нужно будет переделать логику, чтобы следующий документ открывался именно в процедуре из оповещения о закрытии.
Например, вот так:
Например, вот так:
Процедура ОбработатьДокумент(МассивДокументов, Сч)
// Выход за границу - обработали все документы
Если Сч = МассивДокументов.Количество() Тогда
Возврат;
КонецЕсли;
ДопПараметры = Новый Структура("МассивДокументов, Сч", МассивДокументов, Сч)
ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения(ЭтотОбъект, "ОбработатьДокумент_Завершение", ДопПараметры);
// Открываем текущий документ
П = Новый Структура("Ключ", МассивДокументов[Сч]);
ОткрытьФорму(ИмяФормы, П, , , , , ОписаниеОповещенияОЗакрытии);
КонецПроцедуры
Процедура ОбработатьДокумент_Завершение(РезультатЗакрытия, ДопПараметры) Экспорт
// Переход к следующему документу
ОбработатьДокумент(ДопПараметры.МассивДокументов, ДопПараметры.Сч + 1)
КонецПроцедуры
Показать
(6)
Пустая форма открывается. Что не так?
ДопПараметры = Новый Структура("НомерСтроки", Строка.НомерСтроки);
ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ОбработатьДокумент_Завершение",ЭтотОбъект, ДопПараметры);
ФормаОбъекта = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары");
ДанныеФормы = ФормаОбъекта.Объект;
СоздатьДокументыНаСервереФормы(ДанныеФормы, Строка.НомерСтроки);
КопироватьДанныеФормы(ДанныеФормы, ФормаОбъекта.Объект);
ЗаполнениеРеквизитовФормыДокумента(ФормаОбъекта, Строка);
Парам = Новый Структура("Ключ", ФормаОбъекта.Объект);
ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары", Парам, , , , , ОписаниеОповещенияОЗакрытии);
ПоказатьПустая форма открывается. Что не так?
Если я правильно понял, то происходит следующее:
На форме табличная часть, в которой есть колонка "Пометка". Пользователь ставит в ней отметки и потом нажимает некую кнопку "Создать документы". В процедуре организуется цикл по табличной части и делается попытка создать документы в этом цикле.
Надо так:
добавить еще одну пометку (возможно скрытую от пользователя) "документ создан". Тогда при нажатии на кнопку, мы ищем первую строку в табличной части у которой стоит Пометка и не документ создан, создаем документ, взводим флаг "Документ создан" и открываем его форму передавая описание оповещения о закрытии:
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)
и выходим из процедуры. Таким образом в процедуре "Создать документы" не будет организован цикл, она просто будет обрабатывать один документ (первый по списку).
В описании оповещения о закрытии опять вызываем Создать документы. Таким образом будет организован цикл с последовательной обработкой строк таблицы и не модальным открытием форм документов.
На форме табличная часть, в которой есть колонка "Пометка". Пользователь ставит в ней отметки и потом нажимает некую кнопку "Создать документы". В процедуре организуется цикл по табличной части и делается попытка создать документы в этом цикле.
Надо так:
добавить еще одну пометку (возможно скрытую от пользователя) "документ создан". Тогда при нажатии на кнопку, мы ищем первую строку в табличной части у которой стоит Пометка и не документ создан, создаем документ, взводим флаг "Документ создан" и открываем его форму передавая описание оповещения о закрытии:
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)
и выходим из процедуры. Таким образом в процедуре "Создать документы" не будет организован цикл, она просто будет обрабатывать один документ (первый по списку).
В описании оповещения о закрытии опять вызываем Создать документы. Таким образом будет организован цикл с последовательной обработкой строк таблицы и не модальным открытием форм документов.
(12) С пометками все понятно. Проблема в том, что здесь
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)
в параметры нужно ссылку передавать, а у меня к моменту открытия формы документ еще не записан. Это пользователь решает записать его или нет.
Чуть выше я привела пример кода, но открывается пустой документ.
Как можно через ОткрытьФорму открыть новый заполненный, но не записанный, документ?
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)
в параметры нужно ссылку передавать, а у меня к моменту открытия формы документ еще не записан. Это пользователь решает записать его или нет.
Чуть выше я привела пример кода, но открывается пустой документ.
Как можно через ОткрытьФорму открыть новый заполненный, но не записанный, документ?
(13) Открывайте полученную форму. В целом, принцип такой:
&НаКлиенте
Перем МассивСтрок;
&НаКлиенте
Процедура СоздатьДокументы(Команда)
МассивСтрок = Новый Массив;
Для Каждого Строка Из Объект.Накладные Цикл
Если Строка.Пометка Тогда
МассивСтрок.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Если МассивСтрок.Количество() > 0 Тогда
ОткрытьФормуДокумента(0);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуДокумента(Сч)
Строка = МассивСтрок[Сч];
ФормаОбъекта = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары");
ДанныеФормы = ФормаОбъекта.Объект;
СоздатьДокументыНаСервереФормы(ДанныеФормы, Строка.НомерСтроки);
КопироватьДанныеФормы(ДанныеФормы, ФормаОбъекта.Объект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Форма", ФормаОбъекта);
ДополнительныеПараметры.Вставить("Сч", Сч);
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеЗакрытияФормыДокумента", ЭтотОбъект, ДополнительныеПараметры);
ФормаОбъекта.ОписаниеОповещенияОЗакрытии = ОповещениеОЗакрытии;
ФормаОбъекта.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияФормыДокумента(Результат, ДополнительныеПараметры) Экспорт
Строка = МассивСтрок[ДополнительныеПараметры.Сч];
СсылкаНаДокумент = ДополнительныеПараметры.Форма.Объект.Ссылка;
Строка.Ссылка = СсылкаНаДокумент;
Сч = ДополнительныеПараметры.Сч + 1;
Если Сч < МассивСтрок.Количество() Тогда
ОткрытьФормуДокумента(Сч)
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот