8.х Борьба с ужасным. Или клиент-сервер по одинэсному!

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем nikservice, 13 ноя 2017.

  1. TopicStarter Overlay
    nikservice
    Offline

    nikservice Новичок в 1С

    Регистрация:
    10 апр 2013
    Сообщения:
    19
    Симпатии:
    3
    Баллы:
    4
    Доброго дня!
    Я понимаю предпосылки, по которым в 1С83 сделано именно так, но ёмаё! Это уже выше моих сил. В формах запрещено использовать почти всё! Поэтому постоянно приходится перегонять данные на сервере во что попало, чтобы потом передать их на форму. Я совсем запутался! На сервере есть вот такая вещь:
    Метаданные.Справочники.Номенклатура.Реквизиты
    Вещь эта возращает коллекцию, в которой находятся нужный мне список реквизитов. Тут всё ОК! Теперь вопрос: как мне поступить, чтобы этот список передать на клиент и отобразить в виде ниспадающего списка, чтоб пользователь мог выбрать реквизит по имени?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204
    Сформировать список значений из имени и синонима реквизита, показать список пользователю.
    Выбранное пользователем значение использовать при необходимости в коде, с помощью [<Значение>]
  3. TopicStarter Overlay
    nikservice
    Offline

    nikservice Новичок в 1С

    Регистрация:
    10 апр 2013
    Сообщения:
    19
    Симпатии:
    3
    Баллы:
    4
    Т. е. реквизит на форму я положил типа "СписокЗначений". Сам список значений сформировал в функции на сервере и передал на клиент. Всё ОК. Только список значений выглядит страшно. В поле просто значения, разделённые точкой с запятой. Но да ладно. Кнопка выбора доступна. При нажатии на неё выбрать из списка значение можно. Но как его теперь получить? Перепробовал все события: НачалоВыбора, НачалоВыбораИзСписка, ОбработкаВыбора. Ни одно не сработало.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204
    у вас должно быть 2 списка значений: выведенный на форму и доступный пользователю, что бы он в него набивал нужные ему значения и недоступный пользователю, в котором хранятся все доступные для выбора значения.

    выбранное значение - после завершения выбора пользователем в реквизите формы, как вы его назвали.

    зачем еще что-то делать?
  5. TopicStarter Overlay
    nikservice
    Offline

    nikservice Новичок в 1С

    Регистрация:
    10 апр 2013
    Сообщения:
    19
    Симпатии:
    3
    Баллы:
    4
    Ежели честно, то я не совсем понимаю, зачем нужно два списка значений, для того чтобы выбрать одно значение из одного списка значений. Любой объект занимает память (какую-никакую), нужно время для обработки всего этого. Вот точка остановки в процедуре на клиенте. Есть уже переменная Перем1 содержащая список значений, сформированный на сервере, есть переменная Реквизит1 - это список значений на форме. Если я сделаю Реквизит1=Перем1, то получается то, о чём я писал выше. Получить значение так и не удалось. События не срабатывают! Я видимо делаю что-то не так.
    P.S.: Спрошу по другому! Какое событие вызывается в управляемой форме списка значений при нажатии кнопки "ОК"?
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204
    Ответ: событие "ПриИзменении"
    Вы чего сделать-то хотите? Для чего вам вообще нужен настраиваемый список реквизитов справочника?
  7. TopicStarter Overlay
    nikservice
    Offline

    nikservice Новичок в 1С

    Регистрация:
    10 апр 2013
    Сообщения:
    19
    Симпатии:
    3
    Баллы:
    4
    Событие ПриИзменении имеет локальную переменную Элемент. Находясь в отладчике в обработчике ПриИзменении я так и не увидел какое значение выбирает пользователь. Вот, кстати, тоже мой вариант - /threads/vybor-iz-spiska-znachenij-na-upravljaemoj-forme.56466/page-2 Естесственно, я заполняю СписокВыбора данными которые вернул сервер. Но и так у меня не получается выбрать значение. На Этаформа.ВыбратьИзСписка 1С матерится, что нельзя в этом режиме использовать модальное окно. Если честно, который год пытаюсь освоить логику работы этого интерпретатора. Бестолку! В 77 я просто бросаю на форму компоненты и остаток времени уходит на написание бизнес-логики. И ни разу не возникало проблем подобного плана. Тут же в 83 99,99999% времени уходит на выяснение вопроса - "почему это не работает? и как дальше быть?". И смешно и грустно. Спрошу ещё раз. Наверное последний. Больше не буду тратить Ваше время. Есть список значений. Как сделать так, чтоб пользователь смог выбрать значение, а я потом смог это значение использовать в коде?
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204
    Судя по тому, что вы пишите, вы вообще слабо себе представляете как это все работает, отсюда неверный подход к реализации некоего решения какой-то там задачи.

    Я никак не могу понять, для чего вам выбирать значение(-я) из списка значений на форме? Заполненный список значений на форме - это уже выбранные и агрегированные в один объект значения откуда-то.

    Без обид, но почитайте литературу про азы программирования управляемого приложения - много вопросов должны найти ответы.
  9. TopicStarter Overlay
    nikservice
    Offline

    nikservice Новичок в 1С

    Регистрация:
    10 апр 2013
    Сообщения:
    19
    Симпатии:
    3
    Баллы:
    4
    Неее. В литературе этого не напишут. Увы! Приведённый выше пример (Ваш, кстати!) не работает по причине того, что все нынешние 1С с интерфейсом такси на дух не переваривают модальность. Подробне тут - http://capitally.ru/1c-development/1s-8-3-vybratizspiska-ispolzovanie-mo/ проблему свою я разрешил. Всем спасибо за участие. Решение описывать смысла большого не имеет. Подобных вопросов действительно задавалось в интернете море. И решения описаны. И довольно подробно. Только они не работают из-за перманентного изменения технологической платформы. И если честно с каждым разом я удивляюсь всё сильнее и сильнее! Для того, чтоб из списка значений пользователь смог выбрать одно надо (на 13.11.2017!) - перегнать данные с сервера на клиент, задействовать функции-обработчики, с оглядкой на "такси" создать обработчик оповещения, получить таки вожделенную дату, обработать её (т. е. не совсем обработать, а так, принять решение. Вся обработка ведь у нас на сервере) и в обратном порядке закинуть на сервер, где уже и применить. Зато теперь ясно, почему почти пустая Розница занимает 1Гб дискового пространства.
    P.S.: Вы действительно не понимаете, зачем юзеру из коллекции Метаданные.Справочники.Номенклатура.Реквизиты может понадобиться выбрать одно значение?
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204
    Модальность убирается кодом, вместо ВыбратьИзСписка() нужно использовать ПоказатьВыборИзСписка().

    Я не понимаю, зачем выбирать значения из сформированного списка значений на форме, потому-то они уже и так выбранные и помещены в этот самый список значений.

    Розница занимает 1Гб потому что в конфигурации прикладных объектов много, "на каждый чих" свой Регистр Сведений, например.
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204
    На сколько понял задачу, решение - 10 строк кода:

    upload_2017-11-13_16-43-32.png

    upload_2017-11-13_16-44-46.png

    upload_2017-11-13_16-46-54.png