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

Вызвать "Вопрос" из Модуля Объекта (при вводе реализации на основании заказа) УТ 11.1

Автор Amely, 28 окт 2014, 08:16

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

Amely

Добрый день!

Стоит такая задача:
- Пользователь заходит в заказ клиента
- Нажимает кнопочку ввод на основании - реализация товаров и услуг
- Если статус у заказа клиента не "к отгрузке" и не "закрыт" или/и не проставлена дата отгрузки, то задается вопрос пользователю, нужно ли поменять статус на "к отгрузке" и дату отгрузки на текущую? В зависимости от ответа пользователя заказ меняется или нет.

Проблема в том что диалоги вызываются только с клиента, а процедура "ЗаполнитьДокументНаОснованииЗаказаКлиента" находится в модуле объекта который запускается только на сервере, а с сервера передать управление на клиент никак нельзя...

Есть ли какой-либо обходной вариант?
Может быть где то в модуле формы документа заказа покупателя есть процедура которая выполняется при нажатии ввода на основании? До того как вылезет стандартное сообщение о том что ввод на основании не возможен по причине не верного статуса.

(1С Управление торговлей 11.1.9.44)

freez1301

на клиенте осуществите выбор и его данные передайте в вашу процедуру, которая уже на сервере

Luzer1C

В модуле объекта крайне не желательно размещать процедуры и функции интерактивной работы если что.
Пропиши Функцию или процедуру &НаКлиенте да и всё.
Халамбалам.

Amely

Цитата: Luzer1C от 28 окт 2014, 08:39
В модуле объекта крайне не желательно размещать процедуры и функции интерактивной работы если что.
Пропиши Функцию или процедуру &НаКлиенте да и всё.

В модуле объекта не то что не желательно, они просто не будут работать, будет выходить ошибка что переменная не определена или что то в этом роде.

Я уже пыталась создать общий модуль с галочками "клиент", "сервер", "вызов сервера" где прописывала экспортную процедуру на клиенте и вызывала ее с модуля объекта. При проверке модулей ошибок не вылазит, при вводе ИмяОбщегоМодуля. подставляется та процедура которую я туда записала.
Но при исполнении программы выходит ошибка что моя процедура не найдена. Т.к. с сервера нельзя вызвать клиент(( Можно только наоборот.
Добавлено: 28 окт 2014, 09:01


Цитата: freez1301 от 28 окт 2014, 08:39
на клиенте осуществите выбор и его данные передайте в вашу процедуру, которая уже на сервере

Это мне и нужно, только вопрос в какой из процедур на клиенте?

Насколько я знаю, при нажатии ввода на основании запускается процедура "ЗаполнитьДокументНаОснованииЗаказаКлиента" в модуле объекта реализации, потом идет процедура в модуле менеджера заказа, потом общий модуль у которого стоит только галочка "сервер" и там же выходит сообщение что создание реализации не возможно, т.к. нужно сначала поменять статус. Везде сервер.
Конечно я вполне могу ошибаться, т.к. с управляемыми формами работаю впервые.

freez1301

Может стоит посмотреть на подписки на события?
А еще как вариант - самому написать процедуру заполнения документа на основании

cska-fanat-kz

Откажитесь от вопроса.
Просто если условие не выполняется - вызывайте исключение. Как тут:

Процедура ЗаполнитьПоПоступлениюТоваровУслуг(
Знач ДокументОснование,
ДанныеЗаполнения
)

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

РезультатЗапроса = Запрос.Выполнить();

ДанныеЗаполнения = Новый Структура;
Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
ДанныеЗаполнения.Вставить(Колонка.Имя);
КонецЦикла;

Если РезультатЗапроса.Пустой() Тогда
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не требуется вводить авансовый отчет на основании документа %1'"),
ДокументОснование
);
ВызватьИсключение Текст;
Иначе
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ДанныеЗаполнения, Выборка);

НоваяСтрока = ЗакупкаЗаНаличныйРасчет.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
КонецЕсли;

КонецПроцедуры // ЗаполнитьПоПоступлениюТоваровУслуг()


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

Теги:

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

Рейтинг@Mail.ru

Поиск