Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передать управление с сервера на клиент для вывода пользовательского диалога

Передать управление с сервера на клиент для вывода пользовательского диалога
Я
   IrinkaVitaminka
 
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
Никак. Раздели на три функции отдельные функции - одна ищет, вторая изменяет артикул, третья - создает. А на клиенте вызывай их и показывай диалоги.


Которые в одной и той же функции и ищут, и создают, у них шерсть на ладошках отрастает и слепоглазие. Особенно, если называется это всё Найти
   IrinkaVitaminka
 
3 - 12.05.19 - 19:34
(2) у меня получается почти вся логика на сервере
1. на клиенте выбирается файл XML
2. на сервере читаю его в СписокЗначений и вызываю процедуру СоздатьРасходнуюНакладную
3. на сервере в процедуре СоздатьРасходнуюНакладную заполняю реквизиты и табличную часть, и мне надо подставить номенклатуру. Для этого вызываю процедуру ОпределитьНоменклатуру, которая как раз ищет и подставляет. А если не находит, то нужен диалог с пользователем
4. на клиенте пользователь должен выбрать, что делать
5. на сервере создать номенклатуру или поменять артикул

То есть мне нужно какое-то логически завершенное действие на сервере, чтобы потом выполнение кода перешло на клиент?
И получается на форме внешней обработки будут еще кнопки типа "заполнить номенклатуру"?
Но у меня файл XML из многих накладных состоит..
я не понимаю, как еще разделить, с 1С работаю 5 дней, во вторник дали задачу
   IrinkaVitaminka
 
4 - 12.05.19 - 19:39
я правильно понимаю, что из процедуры &НаСервере нельзя вызвать процедуру &НаКлиенте?
если управление перешло на сервер, то на клиент оно вернется после выполнения всего блока &НаСервере?
   ПолПалыч
 
5 - 12.05.19 - 19:40
(4) да.
   IrinkaVitaminka
 
6 - 12.05.19 - 19:41
как же тогда поступают в ситуациях, если при программном создании документа нет, допустим, контрагента с таким ИНН и нужно, чтобы пользователь внес данные в справочник контрагентов, чтобы в этот создаваемый документ потом этого же контрагента записать?
   shuhard
 
7 - 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), что делать и как
   Garykom
 
10 - 12.05.19 - 20:03
(6) >как же тогда поступают
Очень просто поступают: "нанимают программиста"
;)
   palsergeich
 
11 - 12.05.19 - 20:06
Господин с ОФ на УФ переходит?
Да и в ОФ диалог в транзакции - моветон.
   Лефмихалыч
 
12 - 12.05.19 - 20:06
(3) тебе надо вытрусить вот этот мусор из головы.
Сервер всё умеет, но ничего не хочет. Клиент ничего не умеет, но всё хочет.
Сервер - делает. Но только тогда, когда его вызывает клиент и только то, что требует клиент. Вопросы пользователю задает клиент и на основании ответов принимает решение, что у сервера запросить.
   Garykom
 
13 - 12.05.19 - 20:06
(0) Изучите интерфейс типовых загрузок данных в конфах УФ.

Там везде данные грузятся таблицами а не по одной строчке и сразу для всего списка/таблицы указывается для каждой колонки в каждой строке что делать, создать автоматом или юзер сам лезет, правит номенклатуру и снова обновляет чтобы обо подцепило имеющуюся
   Garykom
 
14 - 12.05.19 - 20:08
(12) Та не есть обходные пути с периодическими запросами (что делать?) клиента к серверу, а тот ответит что делать сча клиенту каким то местом и где то сохраняя данные клиента среди многих
   Лефмихалыч
 
15 - 12.05.19 - 20:10
(14) так делают только мудаки.
   Лефмихалыч
 
16 - 12.05.19 - 20:10
+(15) ну, или высоко*бучие профессионалы, когда все остальные варианты исчерпаны. Студентам та нельзя. И расскзывать об этом им нельзя. Мозг выкипит и без того неокрепший
   vde69
 
17 - 12.05.19 - 20:15
(6) подход такой
1. с клиента вызывем функцию ЗачитатьНаСервере()
2. в этой функции читаем и анализируем файл на сервере, результат помещаем во временное хранилище а адрес хранилища возвращаем на клиент вместе таблицей косяков
3. на клиенте разбираем таблицу косяков и задаем все вопросы
4. вызываем процедуру СделатьВсеНаСервере в нее передаем адрес хранища из п. 1 и таблицу исправлений
5. на сервере все записываем и делаем, при необходимости в транзакции
   IrinkaVitaminka
 
18 - 12.05.19 - 20:59
спасибо вам всем огромное!!! вы такие отзывчивые! сейчас буду все читать и изучать, что вы сказали
   IrinkaVitaminka
 
19 - 14.05.19 - 22:23
я сделаль)
перенесла чтение XML на клиента

подскажите, пожалуйста, как называется окно в БП "Реализация (акты, накладные)", где отображается список всех документов? попадаю туда так: Продажи->Реализация (акты, накладные) Журнал? но в конфигураторе я журнала с таким именем не нахожу, да и вообще ничего не нахожу. я хотела, чтобы после выполнения кода пользователь со вкладки обработки попадал сразу на эту страницу
   palsergeich
 
20 - 14.05.19 - 23:03
Найти очень просто:
открываешь в 1с нужную форму. в конфигураторе Отладка -> остановить и жмешь на любую кнопку в интересующей форме.
Только делать надо быстро, обрабочиков ожидания левых много.
   palsergeich
 
21 - 14.05.19 - 23:11
Не факт что с первой или второй попытки выйдет попасть куда надо, а не в какую нибудь БСП функцию, но приноровишься.
   areaho0ray
 
22 - 15.05.19 - 02:02
(19) Это ФормаСписка
   IrinkaVitaminka
 
23 - 15.05.19 - 16:20
спасибо! все сделала)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.