Быстрый старт. Мастер-группа Q&A от 09.06.2012

Представляем вашему вниманию очередную сессию ответов на вопросы участников курса “Быстрый старт”.

1. Последовательность обработки событий.
Почему в последовательности вызовов обработчиков документа “ОбработкаПроведения” стоит после “ПриЗаписи”, а “ОбработкаУдаленияПроведения” до этого события?

2. Метод Записать() и свойство Записывать.
Почему для типов данных СправочникОбъект, ДокументОбъект используется метод Записать, а для типа данных Движение Записывать – это свойство с типом значения булево?

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

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

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

комментариев 66 на “Быстрый старт. Мастер-группа Q&A от 09.06.2012”

  1. Такое ощущение, что кроме меня и преподавателя в этой мастер группе и нет никого )
    Четвертый модуль пятое задание. Разве в модуле объекта можно размещать экспортные функции? Я думал можно только в модуле менеджера и в общем модуле. Если можно размещать экспортные методы в модуле объекта, то каким образом их потом вызывать? Через документы.поступлениетоваров не получится.

    • Андрей Шнитов 24.08.2012 в 12:26

      Ну это вам только кажется. :)

      В модуле объекта можно размещать экспортные методы. Они будут доступны в к контексте работы с этим объектом. Как это будет выглядеть, например, в модуле формы (задание 4.5). Мы сначала получим объект из основного реквизита формы, а затем выполним экспортный метод модуля объекта. После этого выполним обратное преобразование прикладного объекта в реквизит формы:

      &НаСервере
      Процедура ПримерРаботыСОбъектомВМодулеФормы()

          ДокОбъект = РеквизитФормыВЗначение("Объект");
          ДокОбъект.ЭкспортнаяПроцедураМодуляОбъекта();
          ЗначениеВРеквизитФормы(ДокОбъект, "Объект");

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

    • Андрей Шнитов 23.08.2012 в 08:22

      Отвечаем на ваши вопросы.

      1. К реквизитам формы можно обращаться через Объект., но при этом запрос будет адресован не БД, а значению реквизита управляемой формы, существующей уже на на клиенте, а не к БД?

      В целом правильно. Но к реквизитам формы также можно обращаться на сервере в контекстных вызовах.

      2. Можно делать проверку заполнения без попутки записать документ или элемент справочника просто сравнивая значение реквизита формы, полученное через Объект. и значение данного реквизита, находящееся в данный
      момент в БД?

      В общем, да, проверки можно делать не выполняя записи. Для этого можно сделать отдельную команду на форме. Для более детального ответа уточните вопрос. Желательно привести примеры ситуаций.

      3. И работа со «сложными» типами данных так же возможно, только их сначала нужно преобразовать через соответствующий метод ВЗначение?

      Да, правильно. Можно выполнить преобразование данных формы (для которых это преобразование разрешено) в объекты прикладного типа с помощью метода управляемой формы РеквизитФормыВЗначение(). Преобразование и работа с этими объектами возможно в рамках контекстных серверных методов.

      • Спасибо за разъяснения. Просто в течении курса в разных модулях мы делаем по сути одни и те же вещи, только разными способами, при этом накладываются все новые и новые условия и ограничения. Голова идет кругом. Поэтому периодически необходима структуризация всего ранее изученного, что бы понять сходства и различия разных методов. Через неелю заканчивается доступ к мастер группе, боюсь что-либо упустить.

        • Что бы дабавить чуточку конкретики.
          Что бы проверить правильность заполнения реквизитов формы документа можно воспользоваться несколькими методами, в том числе:
          1. В модуле объекта документа, допустим при его записи в БД, делаем проверку реквизита документа. Получаем его значение, на прямую обращаясь к реквизиты по его наименованию. Если значение реквизита попадает под поределенный нами фильтр, мы документ не записываем, иначе записываем.
          2. В модуле управляемой формы документа мы обращаемся к тому же реквизиту формы, только через Объект.НаименованиеРеквизита. В модуле же формы делаем проверку на соответствие данного значения объекта формы определенным параматрам и, выдаем пользователю диагностику в ввиде сообщения ил предупреждения. Запретить запись в БД в из модуля формы мы не можем.

          Алгоритм проверки правильности заполнения в одном и в другом случае идентичны. Единственное отличие, что бы должны обратиться не к реквизиту документа по его наименованию, а к его объекту управляемой формы через Объект.?

          • Андрей Шнитов 24.08.2012 в 12:56

            Дополнения к вашим выводам:

            1. Можно делать так как вы указали – в модуле объекта. В модуле формы документа также можно делать такие проверки в событии ОбработкаПроверкиЗаполненияНаСервере().
            2. Мы можем отменить запись в БД (когда пользователь нажал стандартную кнопку Записать) из модуля формы документа. Для этого нужно использовать параметр Отказ события модуля формы ОбработкаПроверкиЗаполненияНаСервере().

            >Алгоритм проверки правильности заполнения в одном и в другом случае идентичны. Единственное отличие, что бы должны обратиться не к реквизиту документа по его наименованию, а к его объекту управляемой формы через Объект.?

            Да, в модуле формы для получения текущих данных объекта, отображаемого на этой форме используется обращение через Объект.

        • Андрей Шнитов 24.08.2012 в 12:02

          Пожалуйста! Со временем и при условии постоянной практики кодирования все структурируется и усвоится. :)
          Насчет доступа в мастер-группу посмотрите дополнительную информацию здесь:
          https://mg.spec8.ru/mg-access/

  3. Добрый день.
    Обязателен ли релиз платформы  8.2.14.XXX?
    у меня просто релиз  8.2.13 и при просмотре роликов не нахожу некоторых функций

    • Андрей Шнитов 16.08.2012 в 07:38

      gatuso, добрый день!
      Для работы с курсом желательно иметь актуальную версию платформы. Как вы уже заметили в вашем релизе платформы отсутствуют некоторые функции. В дальнейшем могут возникнуть проблемы с изучением выгрузок эталонных решений.

  4. Здравствуйте.
    Остановился на задании 6.2 модуля 3.
    1. Создал виртуальную таблицу, в которую выбрал товары с их максимальными ценам.
    2. Сразу проблема. Не понимаю какой фильтр применить, что бы отфильтровать товары, оставив только товары с максимальной ценной. 

    • Андрей Шнитов 10.08.2012 в 09:39

      chumavik, добрый день!
      Покажите, пожалуйста, текст вашего запроса.

      • <code>
        Выбрать
                          УстановкаЦенНоменклатуры.Номенклатура,
                          МАКСИМУМ(УстановкаЦенНоменклатуры.Цена) КАК Цена
        ИЗ
                        Документ.УстановкаЦенНоменклатуры КАК УстановкаЦенНоменклатуры
        СГРУППИРОВАТЬ ПО
                          УстановкаЦенНоменклатуры.Номенклатура
        </code>

        • Андрей Шнитов 11.08.2012 в 08:45

          Для того чтобы выбрать товары с одинаковой максимальной ценой я бы видоизменил ваш запрос следующим образом.
          1) Для выбора данных использовал виртуальную таблицу СрезПоследних, а не выбирал из документа.
          2) На первом шаге запроса получил максимальную цену и положил ее во временную таблицу.
          3) На втором шаге запросе соединил временную таблицу с виртуальной таблице СрезПоследних.
          Запрос будет выглядеть так:

          ВЫБРАТЬ
              МАКСИМУМ(РозничнаяЦенаНоменклатураСрезПоследних.Цена) КАК Цена
          ПОМЕСТИТЬ МаксимальнаяЦена
          ИЗ
              РегистрСведений.РозничнаяЦенаНоменклатура.СрезПоследних КАК РозничнаяЦенаНоменклатураСрезПоследних
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              РозничнаяЦенаНоменклатураСрезПоследних.Номенклатура,
              РозничнаяЦенаНоменклатураСрезПоследних.Цена
          ИЗ
              МаксимальнаяЦена КАК МаксимальнаяЦена
                  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РозничнаяЦенаНоменклатура.СрезПоследних КАК РозничнаяЦенаНоменклатураСрезПоследних
                  ПО МаксимальнаяЦена.Цена = РозничнаяЦенаНоменклатураСрезПоследних.Цена
  5. Модуль 3, задание 8.1
    Не знаю как подступиться . Для начала в консоли попытался создать табличку с контрагентами и их статусами, но не вышло.
    Могу только выбрать Поставщиков и Покупателей, через соответствующие документы, но как выбрать иных -?
    Мои мысли такие:
    1) В запросах выбрать Поставщиков, Покупателей.
    2) Объединить их в 1 таблицу
    3) Выбрать из справочника Контрагенты всех контрагентов, кто не содержится в таблице из п.2
    4) Объединить таблицу из п.3 с таблицей из п.2
    5) Далее настраивать группировку в отчёте и т.п.

    Я спотыкаюсь на п.3. 

    • Андрей Шнитов 03.08.2012 в 16:57

      С первыми двумя пунктами согласен. Небольшая подсказка по пункту 3. Используйте левое соединение справочника Контрагенты с временной таблицей, полученной на 2 шаге. В тех полях, где в результате соединения будет значение NULL и будут прочие контрагенты. Разумеется, нужно исключить в отборе группы справочника Контрагенты.

  6. Доброго времени суток, Андрей!

    Я пытаюсь скачать ролики по мастер-группе быстрый “Старт” почему-то дает скачивать только самое последнее по времени а на остальных выдает ошибку. мой токен на “быстрый старт” был активирован с 11-03-2012 по 21-06-2012

    • Андрей Шнитов 03.08.2012 в 07:49

      malyk1979, здравствуйте!

      Вам доступы только выпуски мастер-групп, которые опубликованы в периоде действия вашего токена с 11-03-2012 по 21-06-2012.

  7. Задание 3.2 модуля 3
    Не понимаю как воспользоваться методом  ПустаяСсылка().
    Получает пустое значение ссылки на указанный элемент. Значит в условиях запроса мы должны сравнить значение ссылки ПоступлениеТоваров.Поставщик.ссылка со значением ссылки Справочники.Контрагенты.ПустаяСсылка()? Если условие Истина, то ссылка на поставщика, являющегося ссылкой на элемент справочника контрагенты, пустая? Знаю, что где то в логике ошибка, вот только не знаю где.

    |И ПоступлениеТоваров.Поставщик.ссылка = &Ссылка” ;
    Запрос.УстановитьПараметр(“Ссылка”, Справочники.Контрагенты.ПустаяСсылка());
     

    • Андрей Шнитов 28.07.2012 в 16:49

      Здесь правильнее записать фрагмент запроса так:

      |И ПоступлениеТоваров.Поставщик = &amp;Ссылка» ;
      Запрос.УстановитьПараметр(«Ссылка», Справочники.Контрагенты.ПустаяСсылка());
  8. Модуль 3. Домашнее задание №3.1

    Если делать задание через внешнюю обработку, то всё в порядке, но как только пытаюсь вызвать функцию получающую ФИО сотрудников в модуле управляемого приложения ПриНачалеРаботыСистемы, то ошибка 
    Процедура ПриНачалеРаботыСистемы()
    Справочники.Сотрудники.СообщитьОДняхРождения();
    КонецПроцедуры
    {МодульУправляемогоПриложения(214,2)}: Переменная не определена (Справочники)
    <<?>>Справочники.Сотрудники.СообщитьОДняхРождения(); (Проверка: Тонкий клиент)

    Т.е. в чём дело – понятно. В тонком клиенте нельзя получить данные из базы. Это должно происходить на сервере.
    Но как тогда обойти?
     

    • Андрей Шнитов 26.07.2012 в 06:03

      В таком случае, функция или процедура должна находиться в серверном общем модуле и вызываться из модуля управляемого приложения.

      • Если использовать серверный общий модуль, то ошибка такая:
        1) {МодульУправляемогоПриложения(216)}: Метод объекта не обнаружен (СообщитьОДняхРождения)
        ОбщиеФункцииСервер.СообщитьОДняхРождения();
        Модуль упр. прил:
        &НаКлиенте
        Процедура ПриНачалеРаботыСистемы()

        ОбщиеФункцииСервер.СообщитьОДняхРождения();

        КонецПроцедуры
        ОбщийСерверныйМодуль:
        &НаКлиенте
        Процедура СообщитьОДняхРождения()

        СообщитьОДняхРожденияНаСервере();

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

        Процедура СообщитьОДняхРожденияНаСервере() Экспорт

        или
        2) {МодульУправляемогоПриложения(216)}: Метод объекта не обнаружен (СообщитьОДняхРожденияНаСервере)
        ОбщиеФункцииСервер.СообщитьОДняхРожденияНаСервере();
         
        Модуль упр. прил:
        &НаКлиенте
        Процедура ПриНачалеРаботыСистемы()

        ОбщиеФункцииСервер.СообщитьОДняхРожденияНаСервере();

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

        В общем я уже десятки комбинаций проверил, но ошибка “Не обнаружен метод объекта” везде.
        (( 

        • Андрей Шнитов 27.07.2012 в 06:02

          1) Проверьте свойства общего модуля:
          Флаг “Сервер” – Истина.
          Флаг “Вызов сервера” – Истина.
          2) Методы модуля управляемого приложения и общего модуля не должны содержать директив компиляции. У вас, я вижу, используется директива компиляции &НаКлиенте.
          3) В итоге у вас должна быть примерно такая заготовка:

          //Модуль упр. прил:
          Процедура ПриНачалеРаботыСистемы()
              ОбщиеФункцииСервер.СообщитьОДняхРождения();
          КонецПроцедуры

          //ОбщийСерверныйМодуль:
          Процедура СообщитьОДняхРождения() Экспорт
              //...Вставить код
          КонецПроцедуры
      • Вопрос снимается. Только сейчас допетрил, что благодаря запросу нет надобности передавать в обработку реквизиты справочника. Доступ к реквизитам осуществляется через текст запроса.
        Пытаюсь привести дату Дня рождения сотрудника к текущему году через функцию ДАТАВРЕМЯ(ГОД(Сотрудники.ДатаРождения),МЕСЯЦ(Сотрудники.ДатаРождения),ДЕНЬ(Сотрудники.ДатаРождения),00,00,00) 
         Система данную функцию не принимает (

        • Андрей Шнитов 27.07.2012 в 05:53

          С помощью функции ДАТАВРЕМЯ не получится, так как ее параметрами должны быть целые числа. Дату можно собрать перед запросом, или использовать составное условие в запросе.

  9. Здравствуйте. В рубрике “Для идей” почему то комментировать не могу, поэтому оставляю пост здесь. Не обессудьте.
    В эталонном решении задания 8 быстрого старта очень геморно описывается создание обработки для вычисления  количества дней до нового года. Я урок этот давно сделал, решил скачать решение, и даже не с первого раза въехал что и как там объясняется. 
    Есть ведь функция работы с датой “ДеньГода”, возвращающая номер дня в году. Не проще ли и не понятнее ли сделать эталонное решение через данную функцию? За одно расширить навыки работы со значением дата, а то делить секунды как то примитивно получается. 

    • Андрей Шнитов 23.07.2012 в 06:24

      Добрый день!
      Функция ДеньГода() идеально подходила бы для решения этого задания, в двух случаях:
      1) ТекущаяДата() и день рождения в пределах одного года.
      2) Отсутствуют високосные годы.
      Таким образом, при использовании функции ДеньГода(), все равно, нужно будет делать проверки, которые сделают решение не проще чем эталонное.

      • Спасибо за разъяснения. Буду придерживаться эталонных решений )

        • Андрей Шнитов 24.07.2012 в 05:38

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

  10. ДЗ 2 модуль 9.2
    В общем модуле “ОбщиеФункцииСервер” определили функцию ИнформацияОДокументе, в качестве пераметра передал Объект формы документа
    <code>
    Функция ИнформацияОДокументе(СсылкаНаДокумент) Экспорт
                       Возврат Строка(“Документ номер = ” + СсылкаНаДокумент.Номер + “, дата = ” + СсылкаНаДокумент.Дата);
    КонецФукнции
    </code>
    В процедуре ПриОткрытии вызвал данную функцию
    <code>
    Процедура ПриОткрытии(отказ)
    Сообщение = новый СообщениеПользователю;
    Сообщение.Текст = Строка(ОбщиеФункцииСервер.ИнформацияОДокументе(Объект));
    Сообщение.Сообщить();
    КонецПроцедуры
    </code>
     
    Данный код работает в процедуре ПриСозданииНаСервере, выдает номер и дату документа.
    При вызове процедуры ПриОткрытии выдает ошибку “Нельзя изменять поле, содержащее объект данных формы”
    Как не бился, как ни крутился, победить не смог. В отладичке поставил точку останова в общем модуле на строке получения реквизитов объекта. Реквизиты функция получает, строку формирует.
     

    • Андрей Шнитов 18.07.2012 в 09:23

      В данном случае нужно передавать не основной реквизит формы (это платформа запрещает делать), а ссылку на объект:

      Процедура ПриОткрытии(отказ)
      Сообщение = новый СообщениеПользователю;
      Сообщение.Текст = Строка(ОбщиеФункцииСервер.ИнформацияОДокументе(Объект.Ссылка));
      Сообщение.Сообщить();
      КонецПроцедуры
      • Почему ПриСозданииНаСервере основной реквизит формы можно передавать в общий модуль, а ПриОткрытии формы реквизит не передается? Через Объект можно обратиться к реквизиту только при создании формы на сервере, а после её создания работа ведется с сылками на объект формы? Тогда не понятно почему из самой формы в процедуре ПриОткрытии я могу обратиться к объекту и вывести значения реквизита пользователю, а передать его не могу.

        • Андрей Шнитов 19.07.2012 в 11:03

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

          Это особенность работы платформы. В событии ПриСозданииНаСервере() осуществляется подготовка формы к открытию. Так как форма еще не создана, то ее данные доступны для программного изменения. Поэтому основной реквизит передается в серверный общий модуль. В Событии ПриОткрытии() форма уже подготовлена и открывается. Здесь начинается действовать ограничение. Не рекомендуется передавать на сервер и получать на клиента данные формы. В этом случае кроме данных на сервер и обратно передается описание структуры данных формы. Это может очень сильно снизить производительность работы системы.

          >Через Объект можно обратиться к реквизиту только при создании формы на сервере, а после её создания работа ведется с сылками на объект формы?

          К реквизиту формы можно обращаться по ссылке и через объект. Ограничение касается только передачи данных формы на сервер.

          >Тогда не понятно почему из самой формы в процедуре ПриОткрытии я могу обратиться к объекту и вывести значения реквизита пользователю, а передать его не могу.

          См. ответ на первый и второй вопрос.

  11. Проблема решилась. Убрал дерективу компиляции.

  12. Фопрос по форме списка.
    Если добавить новую колонку в список выбора из Форма-Размещение данных, взводом флажка – будут ли данные реквизита автоматически отражаться в списке при работе с информационной базой – или нужно писать вывод в колонку списка формы отдельно?

    • Пояснение – есть ПКО у него есть статья движения денежных средств – в форме документа статья выбрана. Добавил колонку в форму списка через Форма-Размещение – а статью в форму списка для каждого ПКО не выводит.

      Если сделать запрос через консоль запросов к документам ПКО – там тоде статьи денежных средств пустые. Статьи есть в регистре накопления Движение Денежных Средств. Как быть в такой ситуации? 

      • Андрей Шнитов 06.07.2012 в 20:52

        Ну все правильно, как я писал выше, в документе реквизиты не заполнены – поэтому они не отображаются на форме.
        По поводу регистров опишите ситуацию более подробно.

    • Андрей Шнитов 06.07.2012 в 20:45

      Если в информационной базе эти реквизиты заполнены, то они будут выводится в списке.

  13. Вопрос по запросам. Есть Справочник. У элемента этого справочника есть закладка Дополнительно где можно установить  Свойства и Категории. Установил новое свойство Свойство1, назначил этому свойству значение НовоеЗначение1.
     Записал элемент.
    В ПланВидовХарактеристик записалось в СвойстваОбъектов и в НазначенияСвойствКатегорияОбъектов, а также заполнился справочник ЗначенияСвойствОбъектов. (Как пример зуп – справочник сотрудники)

    Как можно создать запрос чтобы выводился элемент справочника, название его нового свойства и значение этого свойства?  Что-то сложно.

    • Андрей Шнитов 06.07.2012 в 16:18

      Такой пример рассматривается в 5 модуле курса “Быстрый старт” – посмотрите видео-уроки.

  14. Добрый день,

    Как можно при помощи ключа запуска программы запустить 1С в режиме отладки – аналогично клавише F5 из конфигуратора, если используется файловый вариант?  

    • Или просто запустить приложение в режиме отладки – не из конфигуратора. Вопрос связан с автоматизацие отладки горячими клавишами.

      • На этот вопрос я уже ответил в предыдущем комментарии.

    • Добрый день!

      На самом деле это не такая простая задача, как может показаться.
      Ведь происходит не просто запуск в режиме отладки, а связь текущего пользовательского сеанса (предмета отладки) с приложением “Конфигуратор”.

      Такую связь можно организовать с помощью специальных ключей.
      Цитата из справки:
      “/Debug — указывает, что запуск 1С:Предприятия выполняется в отладочном режиме.

      /DebuggerURL — идентификация отладчика, к которому приложение сразу после запуска должно подключиться. Указывается URL отладчика (протокол, компьютер и номер порта), на котором в отладчике можно создавать удаленные объекты.

  15. Добрый день.
    Задание 3-1.
    Если Весь код помещать в обработку, то всё в порядке, но как только переношу функцию в модуль менеджера документа ПоступлениеТоваров, то вылезает ошибка:

    {Форма.Форма.Форма(37)}: Метод объекта не обнаружен (ПолучитьНезаполненныеДокументы)
    ВыборкаДокументов = Документы.ПоступлениеТоваров.Выбрать(, , Документы.ПоступлениеТоваров.ПолучитьНезаполненныеДокументы());
     Где я мог ошибиться?

    • Андрей Шнитов 28.06.2012 в 13:04

      Добрый день!

      Здесь у вас, как минимум две ошибки.
      1) Метод объекта не обнаружен скорей всего из-за того, что в модуле менеджера документа ПоступлениеТоваров в заголовке функции ПолучитьНезаполненныеДокументы вы не поставили ключевое слово Экспорт.
      2) Даже если слово Экспорт вы поставите, то эта ошибка исчезнет, но появится другая. Дело в том, что третий параметр метода Выбрать() должен представлять собой структуру, которая возвращает только один элемент (см. синтакс-помощник), а вы обращаетесь к функции, которая может вернуть несколько элементов.
      Таким образом, решение методически неправильно. Здесь можно было сделать так. Функция ПолучитьНезаполненныеДокументы возвращает массив документов. В к ней обращаетесь вот так:

      ВыборкаДокументов = Документы.ПоступлениеТоваров.ПолучитьНезаполненныеДокументы()

      После этого обходите коллекцию ВыборкаДокументов и реализуете нужный вам алгоритм.

      • Пробовал как вы советуете тоже:
        Модуль менеджера:
        &НаСервереБезКонтекста
        Функция ПолучитьНезаполненныеДокументы() Экспорт

        СтруктураДокументов = Новый Структура(“Поставщик”, Справочники.Контрагенты.ПустаяСсылка());

        ВыборкаДокументов = Документы.ПоступлениеТоваров.Выбрать(, , СтруктураДокументов);

        Возврат ВыборкаДокументов;

        КонецФункции

        3 параметр – структура, функция возвращает ВыборкуДокументов

        Внешняя обработка:
        &НаКлиенте
        Процедура СписокНезаполненныхДокументов(Команда)

        СписокНезаполненныхДокументовНаСервере();

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

        &НаСервереБезКонтекста
        Процедура СписокНезаполненныхДокументовНаСервере()

        ВыборкаДокументов = Документы.ПоступлениеТоваров.ПолучитьНезаполненныеДокументы();

        Пока ВыборкаДокументов.Следующий() Цикл

        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = Строка(ВыборкаДокументов.Ссылка);
        Сообщение.Сообщить();

        КонецЦикла;

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

        И тем не менее ошибка: {Форма.Форма.Форма(37)}: Метод объекта не обнаружен (ПолучитьНезаполненныеДокументы)
        ВыборкаДокументов = Документы.ПоступлениеТоваров.ПолучитьНезаполненныеДокументы();

         

         
         

        • Андрей Шнитов 30.06.2012 в 09:23

          Нужно убрать префикс &НаСервереБезКонтекста у функции ПолучитьНезаполненныеДокументы в модуле менеджера. Там не должно быть аналогичных префиксов, потому что этот модуль компилируется на сервере.
          Также, проверьте, установлено ли свойство Индексировать в значение Индексировать у реквизита Поставщик документа ПоступлениеТоваров.

          • Действительно, дело было в префиксе.
            Хотя я думал, что если модуль серверный, то префиксы “НаСервере” 
            игнорируются. Буду знать спс 

  16. Добрый день,

    Изучаю вопрос создание внешней печатной формы. Получилось создать внешнюю печатную форму для объекта Документ. Хотел создать таким же образом внешнюю печатную форму для объекта – элемент Справочника , но там почему то не передается ссылка на объект в печатную форму. 

    Как можно передать во внешнюю печатную форму ссылку на элемент Справочника?  

    • Добрый день, Игорь!

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

  17. Добрый день,
     
    Тестирую работу запросов в реальных базах данных.

    Есть ЗУП, там есть справочник сотрудники, также есть регистр сведений Паспортные Данные сотрудников – как можно составить запрос или пакет запросов, чтобы выводилось имя сотрудника из Списка сотрудников и его паспортные данные из регситра сведений?  

    • Андрей Шнитов 22.06.2012 в 07:51

      Добрый день!

      На вопросы по типовым решениям мы не отвечаем, это выходит за рамки курсов по программированию.
      Вы можете переформулировать вопрос так, чтобы он не касался ЗУП (полностью описать соответствующие структуры данных).

  18. Так-с, как передать параметры в функцию разобрался, использую для этого ссылку на Объект.
    Но опять же: Номер у документа не определён до записи его в ИБ, а нам необходимо его как-то изъять в процедуре ПриСозданииНаСервере.
    Непонятно. 

    • Андрей Шнитов 19.06.2012 в 19:54

      Смотрите мой комментарий к вашему предыдущему посту, пункт 4.

  19. Застопорился на задании 2.9.2. Если раньше особых проблем не возникало, то сейчас просто без идей.
    Возможно в задании что-то не сказано. Например, «Реализуйте вызов данной функции из формы документа»: ранее у документа формы не было. Следует ли из этого, что нужно создать стандартную форму документа?
    Не понимаю как  передать в функцию »ИнформацияОДокументе»  данные о создаваемом документе. 
    К тому же Номер документа заполняется автоматически только при записи документа, а обработчик ПриСозданииНаСервере срабатывает раньше, следовательно получить данные этого реквизита невозможно.
     

    • Андрей Шнитов 19.06.2012 в 19:53

      1) Нужно создать форму документа.
      2) Ссылку на документ можно получить обратившись к основному реквизиту формы: Объект.Ссылка
      3) На основании ссылки можно определить дату и номер документа.
      4) Нужно предусмотреть ситуацию, когда документ новый и еще не записан. В этой ситуации функция не вызывается.

  20. Парюсь над ДЗ 1 модуля 7.1 Все сделал, посчитал количество дней в году, но вот хоть убейте, не понимаю, как передать это значение клиентскому обработчику для последующего вывода пользователю.

    • Андрей Шнитов 18.06.2012 в 21:26

      Используйте для вывода сообщений тип данных СообщениеПользователю. Этот тип данных можно использовать в серверных процедурах. При открытии формы на стороне клиента – эти сообщения будут показаны.

      • Спасибо. Что то подзатупил. Оказывается все было проще пареной репы. Не посмотрел доступность этого типа. Вынес из 5-го урока 7-ой части, что на “На клиенте доступен диалог с пользователем, т.е задавать вопросы, выдавать предупреждения. На сервере никакой диалоговой, никакой интерактивной работы быть не может”. Думал данный тип в обработчике на сервере работать не будет.

        • Андрей Шнитов 19.06.2012 в 19:45

          Пожалуйста! :)
          Вот видите какое полезное ДЗ оказалось.

  21. Добрый день,

    Как в списке форм ПКО определить какие из форм объекта и списка являются основными (это из модуля 4)? Так есть две формы списка – какая основная. 

    • Андрей Шнитов 13.06.2012 в 13:18

      Добрый день!
      Здесь возможно два варианта:
      1) Открыть окно редактирования документа ПКО. На закладке “Формы” на вкладке “Основные” указаны указаны основные формы документа.
      2) Выделить документ в дереве объектов конфигурации и в контекстном меню выполнить команды открытия основных форм.