|
Передать управление с сервера на клиент для вывода пользовательского диалога | ☑ | ||
---|---|---|---|---|
0
Irinka Vitaminka
12.05.19
✎
19:12
|
Помогите, пожалуйста. Логика кода:
ищем номенклатуру по артикулу, затем по наименованию. если номенклатура не найдена, то требуется показать диалог "Номенклатура не найдена.Выберите действие:" и 2 кнопки: "Создать новую номенклатуру", "Изменить артикул". Функция поиска номенклатуры происходит на сервере. Функцию диалога нужно реализовывать на клиенте. Выдает ошибку: Процедура или функция с указанным именем не определена (ВыбратьДействиеСНоменклатурой) Ответ = <<?>>ВыбратьДействиеСНоменклатурой(); (Проверка: Сервер) &НаСервере Функция ОпределитьНоменклатуру(АртикулИзXML, НаимИзXML) НомерАртикула = АртикулИзXML + " "; НомерАртикула = Лев(НомерАртикула, 11); НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",НомерАртикула); Если НайденнаяНоменклатура.Пустая() Тогда Пока Найти(НаимИзXML, " ") > 0 Цикл НаимИзXML = СтрЗаменить(НаимИзXML, " ", " "); КонецЦикла; НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаимИзXML); КонецЕсли; Если НайденнаяНоменклатура.Пустая() Тогда Ответ = ВыбратьДействиеСНоменклатурой(); КонецЕсли; Возврат НайденнаяНоменклатура; КонецФункции &НаКлиенте Функция ВыбратьДействиеСНоменклатурой() Кнопки = Новый СписокЗначений; Кнопки.Добавить("СоздатьНовЭлНоменклатуры", "Создать новую номенклатуру"); Кнопки.Добавить("ИзменитьАртикул", "Изменить артикул"); Ответ = Вопрос("Номенклатура не найдена. Выберите действие: ", Кнопки); Если Ответ = "СоздатьНовЭлНоменклатуры" Тогда Сообщить("СоздатьНовЭлНоменклатуры"); ИначеЕсли Ответ = "ИзменитьАртикул" Тогда Сообщить("ИзменитьАртикул"); КонецЕсли; Возврат Ответ; КонецФункции Как мне с сервера перейти на клиент, получить от пользователя ответ и действовать дальше на сервере в зависимости от ответа? |
|||
1
ДенисЧ
12.05.19
✎
19:18
|
Бить процедуры на куски.
|
|||
2
Лефмихалыч
12.05.19
✎
19:19
|
Никак. Раздели на три функции отдельные функции - одна ищет, вторая изменяет артикул, третья - создает. А на клиенте вызывай их и показывай диалоги.
Которые в одной и той же функции и ищут, и создают, у них шерсть на ладошках отрастает и слепоглазие. Особенно, если называется это всё Найти |
|||
3
Irinka Vitaminka
12.05.19
✎
19:34
|
(2) у меня получается почти вся логика на сервере
1. на клиенте выбирается файл XML 2. на сервере читаю его в СписокЗначений и вызываю процедуру СоздатьРасходнуюНакладную 3. на сервере в процедуре СоздатьРасходнуюНакладную заполняю реквизиты и табличную часть, и мне надо подставить номенклатуру. Для этого вызываю процедуру ОпределитьНоменклатуру, которая как раз ищет и подставляет. А если не находит, то нужен диалог с пользователем 4. на клиенте пользователь должен выбрать, что делать 5. на сервере создать номенклатуру или поменять артикул То есть мне нужно какое-то логически завершенное действие на сервере, чтобы потом выполнение кода перешло на клиент? И получается на форме внешней обработки будут еще кнопки типа "заполнить номенклатуру"? Но у меня файл XML из многих накладных состоит.. я не понимаю, как еще разделить, с 1С работаю 5 дней, во вторник дали задачу |
|||
4
Irinka Vitaminka
12.05.19
✎
19:39
|
я правильно понимаю, что из процедуры &НаСервере нельзя вызвать процедуру &НаКлиенте?
если управление перешло на сервер, то на клиент оно вернется после выполнения всего блока &НаСервере? |
|||
5
ПолПалыч
12.05.19
✎
19:40
|
(4) да.
|
|||
6
Irinka Vitaminka
12.05.19
✎
19:41
|
как же тогда поступают в ситуациях, если при программном создании документа нет, допустим, контрагента с таким ИНН и нужно, чтобы пользователь внес данные в справочник контрагентов, чтобы в этот создаваемый документ потом этого же контрагента записать?
|
|||
7
shuhard
12.05.19
✎
19:42
|
(5) нет конечно
https://wonderland.v8.1c.ru/blog/peredacha-informatsii-s-servera/ (6) верни код ошибки |
|||
8
ПолПалыч
12.05.19
✎
19:58
|
(7) не понимаю о чем ты. Из серверной процедуры нельзя вызывать клиентскую.
|
|||
9
Лефмихалыч
12.05.19
✎
20:00
|
(6) написано же прямым текстом в (2), что делать и как
|
|||
10
Garykom
гуру
12.05.19
✎
20:03
|
(6) >как же тогда поступают
Очень просто поступают: "нанимают программиста" ;) |
|||
11
palsergeich
12.05.19
✎
20:06
|
Господин с ОФ на УФ переходит?
Да и в ОФ диалог в транзакции - моветон. |
|||
12
Лефмихалыч
12.05.19
✎
20:06
|
(3) тебе надо вытрусить вот этот мусор из головы.
Сервер всё умеет, но ничего не хочет. Клиент ничего не умеет, но всё хочет. Сервер - делает. Но только тогда, когда его вызывает клиент и только то, что требует клиент. Вопросы пользователю задает клиент и на основании ответов принимает решение, что у сервера запросить. |
|||
13
Garykom
гуру
12.05.19
✎
20:06
|
(0) Изучите интерфейс типовых загрузок данных в конфах УФ.
Там везде данные грузятся таблицами а не по одной строчке и сразу для всего списка/таблицы указывается для каждой колонки в каждой строке что делать, создать автоматом или юзер сам лезет, правит номенклатуру и снова обновляет чтобы обо подцепило имеющуюся |
|||
14
Garykom
гуру
12.05.19
✎
20:08
|
(12) Та не есть обходные пути с периодическими запросами (что делать?) клиента к серверу, а тот ответит что делать сча клиенту каким то местом и где то сохраняя данные клиента среди многих
|
|||
15
Лефмихалыч
12.05.19
✎
20:10
|
(14) так делают только мудаки.
|
|||
16
Лефмихалыч
12.05.19
✎
20:10
|
+(15) ну, или высоко*бучие профессионалы, когда все остальные варианты исчерпаны. Студентам та нельзя. И расскзывать об этом им нельзя. Мозг выкипит и без того неокрепший
|
|||
17
vde69
12.05.19
✎
20:15
|
(6) подход такой
1. с клиента вызывем функцию ЗачитатьНаСервере() 2. в этой функции читаем и анализируем файл на сервере, результат помещаем во временное хранилище а адрес хранилища возвращаем на клиент вместе таблицей косяков 3. на клиенте разбираем таблицу косяков и задаем все вопросы 4. вызываем процедуру СделатьВсеНаСервере в нее передаем адрес хранища из п. 1 и таблицу исправлений 5. на сервере все записываем и делаем, при необходимости в транзакции |
|||
18
Irinka Vitaminka
12.05.19
✎
20:59
|
спасибо вам всем огромное!!! вы такие отзывчивые! сейчас буду все читать и изучать, что вы сказали
|
|||
19
Irinka Vitaminka
14.05.19
✎
22:23
|
я сделаль)
перенесла чтение XML на клиента подскажите, пожалуйста, как называется окно в БП "Реализация (акты, накладные)", где отображается список всех документов? попадаю туда так: Продажи->Реализация (акты, накладные) Журнал? но в конфигураторе я журнала с таким именем не нахожу, да и вообще ничего не нахожу. я хотела, чтобы после выполнения кода пользователь со вкладки обработки попадал сразу на эту страницу |
|||
20
palsergeich
14.05.19
✎
23:03
|
Найти очень просто:
открываешь в 1с нужную форму. в конфигураторе Отладка -> остановить и жмешь на любую кнопку в интересующей форме. Только делать надо быстро, обрабочиков ожидания левых много. |
|||
21
palsergeich
14.05.19
✎
23:11
|
Не факт что с первой или второй попытки выйдет попасть куда надо, а не в какую нибудь БСП функцию, но приноровишься.
|
|||
22
areaho0ray
15.05.19
✎
02:02
|
(19) Это ФормаСписка
|
|||
23
Irinka Vitaminka
15.05.19
✎
16:20
|
спасибо! все сделала)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |