МГ: сессия от 2010-08-27

Мастер-группа выходного дня. Очень познавательные вопросы были рассмотрены.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментария 23 на “МГ: сессия от 2010-08-27”

  1. Александр Горлов 03.10.2010 в 03:02

    Продолжаю догонять МГ и заинтересовал ответ на вопрос о перекрестных ссылках (вопрос 2).
    Отличное описание причин проблемы при записи элемента подчиненного справочника – причину ошибки владельца действительно непросто определить.

    НО! Предложенное решение предполагает смену режима подчинения у справочника, а значит, открывается “дырка” по созданию пользователем единиц, подчиненных группам, что недопустимо. Другого способа обхода проблемы не существует?

    • Существует, если абстрагироваться и взглянуть на проблему под другим углом.
      А почему бы не присваивать ссылку элементу справочника единицы измерения? Тогда проблема исчезнет как класс.
      То есть ссылку на единицу измерения генерируем ПередЗаписью() и заполняем ей реквизит.
      Далее в событии ПриЗаписи() создаем единицу с известной ссылкой.

  2. Александр Тарасов 31.08.2010 в 10:42

    Вопрос по отладке.

    Почему после команды типа:
    ОткрытьФорму(“ОбщаяФорма.ПечатьДокументов”, ПараметрыОткрытия, ВладелецФормы, КлючУникальности);

    отладка по F11 дальше не идет ? т.е. проскакивает процедуры модуля менеджера , где формируется запрос печати и т.д.

    В каких случаях отладку нельзя посмотреть пошагово?

    • Странно, отладчик должен заходить.
      Не совсем ясно какой код выполняется. Общая команда?
      Открывается форма, далее должны выполняться обработчики в модуле формы?
      А модуль менеджера какого объекта? Откуда он взялся?
      Приведите весь значимый код.

  3. По поводу перекрестных ссылок. У нас была задача: в УПП программно создавать эелемент спр. Номенклатура. Возникала проблема: в УПП номенклатура не записывается без основной единицы измерения, создаем ее, но единица измерения не записывается без указания ее владельца – новой номенклатуры. Вышли из ситуации следующим образом: в спр. Номенклатуры у нас был товар “Тестовый товар”, который используется для отладочных целей. Создаем сначала программно единицу измерения, владельцем ее ставим Тестовый товар, записываем ее, потом создаем номенклатуру, присваиваем ее реквизиту “Основная ед. измерения” эту единицу измерения, записываем номенклатуру. Далее в единице измерения меняем владельца с тестового товара на новую номенклатуру и записываем снова ед. измерения. Недостаток этого способа – 2 раза записывается ед. измерения, преимущества – то что номенклатура записывается только 1 раз и понятность.

    • А теперь вы знаете, что задачу можно было решить без фиктивной номенклатуры. Верно?

    • Александр Тарасов 31.08.2010 в 11:39

      В справочнике есть команда, которая выполняет код:

      &НаКлиенте
      Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

      УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(“Справочник.ВнутренниеДокументы”, “Карточка”, ПараметрКоманды, ПараметрыВыполненияКоманды, Неопределено);

      КонецПроцедуры

      далее выполняется процедура:
      Процедура ВыполнитьКомандуПечати(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ВладелецФормы, ПараметрыПечати) Экспорт

      // Проверим количество объектов
      Если НЕ ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды) Тогда
      Возврат;
      КонецЕсли;

      // Получим ключ уникальности открываемой формы
      КлючУникальности = Строка(Новый УникальныйИдентификатор);

      // Подготовим параметры для открываемой формы
      СписокПараметров = Новый СписокЗначений;
      СписокПараметров.Добавить(ИмяМенеджераПечати, “ИмяМенеджераПечати”);
      СписокПараметров.Добавить(ИменаМакетов, “ИменаМакетов”);
      СписокПараметров.Добавить(ПараметрКоманды, “ПараметрКоманды”);
      СписокПараметров.Добавить(ПараметрыПечати, “ПараметрыПечати”);

      ПараметрыОткрытия = Новый Структура;
      ПараметрыОткрытия.Вставить(“СписокПараметров”, СписокПараметров);

      // Откроем форму печати документов
      ОткрытьФорму(“ОбщаяФорма.ПечатьДокументов”, ПараметрыОткрытия, ВладелецФормы, КлючУникальности);

      КонецПроцедуры

      здесь отладка завершается , хотя далее много действий

      ОбщаяФорма.ПечатьДокументов – в модуле объекта ПриСозданииНаСервере внутри уже вызывает
      МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

      и т.д. но внутрь уже отладка не идет , и на толстом клиенте тоже.

      это кусок из “1С Документооборот 8.2 бета”.

      • Моделирую на пустой конфигурации:
        Создал справочник, создал общую форму.
        Из клиентского метода справочника вызываю общую форму:

        Парам = Новый Структура(“Тест”, Истина);
        ОткрытьФорму(“ОбщаяФорма.Форма1”, Парам);

        Отладчик успешно заходит в событие ПриСозданииНаСервере() этой формы.

        Попробуйте также смоделировать на пустой конфигурации.

  4. Филимонов Юрий 30.08.2010 в 08:35

    Не соглашусь с ответом на 4 вопрос. В консоли запросов можно задавать списки значений. Для этого нужно очистить значение параметра и при выборе типа указать “Список значений”, после этого вполне можно указывать несколько значений для одного параметра

    • Да, об этом уже упоминали в комментариях. Спасибо.

    • Александр Тарасов 31.08.2010 в 12:39

      Т.е. проблема в том, что я не могу попасть отладчиком в Модуль Менеджера объекта, где процедура печати.

  5. Илья Чернов 28.08.2010 в 11:33

    Да. Вопрос первый очень хитрый, надо запомнить.

    По поводу пятого вопроса. В консоле запросов тоже можно передавать список значений. Если в параметре очистить тип и выбрать список значений.

  6. Сергей Коцюра 27.08.2010 в 23:24

    По перекрестным ссылкам – задача решена и ясна, но решена в упрощенном прикладной ситуации, которая чаще всего и бывает. Но если рассматривать чисто “академический” вариант клинча (академическими я называю задачи которые могут быть далеки от практического применения) – то запись подчиненных элементов и запись самого элемента-владельца – разнесены во времени.. то есть пользователь жмакнул новый элемент – открылась форма нового элемента – заполнил реквизиты, не записал (! поскольку ЗАПРЕЩЕНА ЗАПИСЬ без указания базовой/основной единицы) и вводит единицы измерения (штуки, коробки, палеты, вагоны) к !_незаписанному элементу-владельцу_! чтобы одну из введенных единиц назначить базовой/основной… тут еще следует предусмотреть ситуацию когда навводил единиц – а потом бац! и раздумал создавать новый элемент номенклатуры (ну вот так вот случилось.. жизнь такая…) и учесть что каждая единица измерения – не просто выбор из ОКЕИ, а куча всяких допреквизитов (ШК, вес, габариты…) – вот такая вот “академическая” задачка… как ее сделать “красиво”… ;-)

    • Можно предложить следующее решение.
      Все параметры базовой единицы (ШК, вес, ОКЕИ) задавать в форме элемента. Причем значения будут храниться в реквизитах формы, а не объекта (чтобы не создавать лишние поля в БД).
      В обработчике формы ПередЗаписьюНаСервере анализировать эти значения и на их основе создавать базовую единицу.
      Другие единицы отображать в динамическом списке, который выводит данные из справочника “Единицы измерения”.
      До тех пор, пока элемент не записан запрещать создавать другие единицы (делать недоступной таблицу формы).

      • Сергей Коцюра 29.08.2010 в 04:01

        А можно ли на форме иметь “таблицу”, куда можно вводить произвольное количество “строк” (каждая строка – отдельная единица)…?

        • Разумеется можно. Для решения описанной задачи, полагаю, лучше если это будет не просто таблица. А непосредственно фрагмент справочника ЕдиницыИзмерения с отбором по владельцу.

          • Сергей Коцюра 29.08.2010 в 19:28

            да, но в такой “фрагмент” – не запишешь элемент – ведь владелец не определен… для нового элемента…???

            • Значит, пока владелец не записан, не давать редактировать эту таблицу. Это нормальная практика.

  7. Пункт 1 Я делал так: Настройки для группировки Регистратор (не для отчета в целом) Отбор – Регистратор – Заполнено, Другие настройки – выводить отбор – не выводить… но суть таже отсечь те документы ноторых нет :)

  8. Кучеров Дмитрий 27.08.2010 в 20:33

    По перврму пункту – действительно подход весьма хитрый. Если нет других способов то пожалуй надо просмотреть еще раз и запомнить.