Базовый курс. Занятие №7

Начинаем второй блок базового курса и представляем первое занятие по нему.

Необходимо изучить следующие главы.
Глава 1. Документы
Глава 2. Ввод на основании
Глава 3. Создание печатных форм
Глава 4. Настройка форм документов.

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

Задание необходимо выполнять в ИБ после предыдущего ДЗ.

В этой же теме необходимо написать отчет о выполнении задания.

ps. Участники курса без доступа в мастер-группу отчитываться по домашним заданиям не могут.

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

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

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

комментария 83 на “Базовый курс. Занятие №7”

  1. elcinbektimirov 08.07.2011 в 14:04

    Задание выполнил…Сложность была в части запросов.

  2. Тимур 22.06.2011 в 17:23

    Выполнил. Особых трудностей не было.
     
    Разделение на юр/физ лицо оформил с помощью реквизита контрагента.
     
    Для формирования суммы прописью использовал встроенную функцию ЧислоПрописью()

    • Тимур 22.06.2011 в 17:30

      Дополнение к выполнению ДЗ:
       
      – для учета бракованного товара создал справочник “КачестваНоменклатуры”
       
      – из текста ДЗ не понял, нужно ли создавать реквизит документа “Контакты менеджера с клиентами” для разделения на личные встречи, телефонные звонки и письма.
       
      – Для заполнения табличной части по последнему проведенному документу использовал следующую логику в запросе:
      1. В подзапросе выбирается ссылка на последний проведенный документ с помощью конструкций УПОРЯДОЧИТЬ ПО Документ.Дата УБЫВ и ВЫБРАТЬ ПЕРВЫЕ 1.
      2.Использовал ссылки из подзапроса для отбора по табличной части документа конструкцией В()

  3. Добрый день, догоняю группу.
    1. Выполнил необходимые структуры данных.
    поставщика и подотчетное лицо разместил в реквизите составного типа данных, признак контрагента (юрЛицо/физЛицо) реализовал реквизитом булево (Истина – юрЛицо, Ложь – физЛицо)
    для брака создал справочник степеней брака, причем если поле не заполнено, то товар без брака.
    Документ контакт, заполнение на основании и печатная форма затруднений не вызвали.
    выгрузка конфы
    http://narod.ru/disk/14905150001/%D0%94%D0%97-7.dt.html

  4. Задание выполнил.
    Создал все необходимые документы и справочники.
    Создал реквизит ТипКонтрагента (перечисление) для справочника Контрагенты. В табличной части добавил реквизит Брак (Булево) и СтепеньБрака(справочник)
    Модуль формы документа “Закупка”:
    <code>
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)

    ТД = Элементы.Товары.ТекущиеДанные;
    ТД.ЕдиницаИзмерения = ПолучитьБазовуюЕдиницу(ТД.Номенклатура);

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

    &НаСервереБезКонтекста
    Функция ПолучитьБазовуюЕдиницу(Ссылка)

    Возврат Ссылка.БазоваяЕдиница;

    КонецФункции // ПолучитьБазовуюЕдиницу()
    </code>

    Документ “Реализация”, МО:
    <code>
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
    Покупатель = ДанныеЗаполнения.Ссылка;
    Док = ПоследнийДокумент(Покупатель);
    ОбработкаЗаполнения (Док, СтандартнаяОбработка);
    ИначеЕсли (ТипЗнч(ДанныеЗаполнения) = Тип(“ДокументСсылка.Реализация”)) ИЛИ (ТипЗнч(ДанныеЗаполнения) = Тип(“ДокументСсылка.Закупка”)) Тогда
    Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
    НоваяСтрока = Товары.Добавить();
    НоваяСтрока.Брак = ТекСтрокаТовары.Брак;
    НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаТовары.ЕдиницаИзмерения;
    НоваяСтрока.Количество = ТекСтрокаТовары.Количество;
    НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
    НоваяСтрока.СтепеньБрака = ТекСтрокаТовары.СтепеньБрака;
    НоваяСтрока.Сумма = ТекСтрокаТовары.Сумма;
    НоваяСтрока.Цена = ТекСтрокаТовары.Цена;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры

    Функция ПоследнийДокумент(Параметр)

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр(“Контрагент”, Параметр);

    Запрос.Текст =
    “ВЫБРАТЬ ПЕРВЫЕ 1
    | Закупка.Поставщик,
    | Закупка.Проведен,
    | Закупка.Дата КАК Дата,
    | Закупка.Ссылка
    |ИЗ
    | Документ.Закупка КАК Закупка
    |ГДЕ
    | Закупка.Проведен = ИСТИНА
    | И Закупка.Поставщик = &Контрагент
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ ПЕРВЫЕ 1
    | Реализация.Покупатель,
    | Реализация.Проведен,
    | Реализация.Дата,
    | Реализация.Ссылка
    |ИЗ
    | Документ.Реализация КАК Реализация
    |ГДЕ
    | Реализация.Проведен = ИСТИНА
    | И Реализация.Покупатель = &Контрагент
    |
    |УПОРЯДОЧИТЬ ПО
    | Дата УБЫВ”;

    Результат = Запрос.Выполнить();

    ТаблицаРезультатов = Результат.Выгрузить();
    ТаблицаРезультатов.Сортировать(“Дата Убыв”);
    Документ = ТаблицаРезультатов.Получить(0).Ссылка;

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

    КонецФункции
    </code>
    В документе “Закупка” аналогично.
    И модуль менеджера документа “Реализация”
    <code>

    Процедура Печать(ТабДок, Ссылка) Экспорт

    Макет = Документы.Реализация.ПолучитьМакет(“Печать”);
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | Реализация.Дата,
    | Реализация.КонтактноеЛицо,
    | Реализация.Номер,
    | Реализация.Покупатель КАК Покупатель,
    | Реализация.Товары.(
    | НомерСтроки,
    | Номенклатура,
    | ЕдиницаИзмерения,
    | Количество,
    | Цена,
    | Сумма
    | )
    |ИЗ
    | Документ.Реализация КАК Реализация
    |ГДЕ
    | Реализация.Ссылка В (&Ссылка)”;
    Запрос.Параметры.Вставить(“Ссылка”, Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

    ОбластьЗаголовок1 = Макет.ПолучитьОбласть(“Заголовок1”);
    ОбластьЗаголовок2 = Макет.ПолучитьОбласть(“Заголовок2”);
    Шапка = Макет.ПолучитьОбласть(“Шапка”);
    ОбластьТоварыШапка = Макет.ПолучитьОбласть(“ТоварыШапка”);
    ОбластьТовары = Макет.ПолучитьОбласть(“Товары”);
    Подвал = Макет.ПолучитьОбласть(“Подвал”);

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;

    Если Выборка.Покупатель.ТипКонтрагента = Перечисления.ТипКонтрагента.ЮридическоеЛицо Тогда
    ТабДок.Вывести(ОбластьЗаголовок1);
    Иначе
    ТабДок.Вывести(ОбластьЗаголовок2);
    КонецЕсли;

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

    ТабДок.Вывести(ОбластьТоварыШапка);
    ВыборкаТовары = Выборка.Товары.Выбрать();
    ИтоговаяСумма = 0;
    Пока ВыборкаТовары.Следующий() Цикл
    ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
    ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
    ИтоговаяСумма = ИтоговаяСумма + ВыборкаТовары.Сумма;
    КонецЦикла;

    ФормСтрока = “Л = ru_RU”;
    ПарПредмета=”рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2″;
    ИтоговаяСумма = ЧислоПрописью(ИтоговаяСумма, ФормСтрока, ПарПредмета);

    Подвал.Параметры.ИтоговаяСумма = ИтоговаяСумма;

    Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();

    Подвал.Параметры.Пользователь = Пользователь;

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

    ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;

    КонецПроцедуры
    </code>

  5. Здравствуйте. Задание выполнила.
    Было создано или доработано
    Перечисление-ВидКонтактов(ЛичнаяВстреча,ТелефонныйЗвонок,Письмо)
    4 справочника: Сотрудники, Брак, ФизЛица,Номенклатура(ВидНоменклатуры,БазоваяЕдИзм,Брак,Цена)
    3документа:1)Поступление(Реквизит Поставщик(Составной тип данных-Справочники контрагенты и сотрудники, Индекксирование с доп.упорядочиванием) ;ТЧ: Номенклатура, ЕдИзм(ЕдиницыИзмеренияНоменклатуры, связи параметров выбора-Таблица.Номенклатура), Количество, Цена, Сумма,Брак.
    Создана форма.
    МодульФормы:
    <code>&НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)
    // Вставить содержимое обработчика.
    ТД = Элементы.Таблица.ТекущиеДанные;
    ТД.Цена = ВозвратЦены(ТД.Номенклатура);
    ТД.ЕдИзм = ВозвратЕдИзм(ТД.Номенклатура);
    ПересчетСуммы();
    КонецПроцедуры
    &НаСервереБезКонтекста
    Функция ВозвратЦены(Ссылка)
    Возврат Ссылка.Цена;
    КонецФункции // НоменклатураПриИзмененииСервер(Элемент)
    &НаСервереБезКонтекста
    Функция ВозвратЕдИзм(Ссылка)
    Элемент = Ссылка.БазоваяЕдиница;
    ЕдИзм = Справочники.ЕдиницыИзмеренияНоменклатуры;
    Возврат ЕдИзм.НайтиПоНаименованию(Элемент,,,Ссылка);
    КонецФункции // НоменклатураПриИзмененииСервер(Элемент)
    &НаКлиенте
    Процедура ТаблицаКоличествоПриИзменении(Элемент)
    ПересчетСуммы();
    КонецПроцедуры
    &НаКлиенте
    Процедура ТаблицаЦенаПриИзменении(Элемент)
    ПересчетСуммы();
    КонецПроцедуры

    &НаКлиенте
    Процедура ПересчетСуммы()
    ТД = Элементы.Таблица.ТекущиеДанные;
    ТД.Сумма = ТД.Цена * ТД.Количество;
    КонецПроцедуры
    </code>
    Модуль объекта
    <code>Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
    Поставщик = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
    Параметр = Новый Структура;
    Параметр.Вставить(“Поставщик”,Поставщик);
    Док = Документы.Поступление.Выбрать(,,Параметр,”Дата Убыв”);
    Док.Следующий();
    ТЗ = Док.Таблица.Выгрузить();
    Таблица.Загрузить(ТЗ);
    КонецПроцедуры
    </code>

    • 2) Реализация: Реквизиты:Покупатель – аналогиченПоставщику, только без индексирования; Контактное Лицо(связи параметров выбора-Покупатель); ТЧ ан-на Поступлению
      МодульФормы:
      <code>&НаКлиенте
      Процедура ПересчетСуммы()
      ТД = Элементы.Таблица.ТекущиеДанные;
      ТД.Сумма = ТД.Цена * ТД.Количество;
      КонецПроцедуры
      </code>
      Плюс процедура и ф-ция печати и макет по аналогии с лекциями.  Все получилось. Вопрос по сумме – пришлось суммировать по циклу, а хочется что-то вроде ИтоговаяСумма.
      3) КонтактыМенеджеров  сделано

      • Скопировала не весь кусок пред.кода(но все равно по аналогии с лекциями)
        <code>&НаКлиенте
        Процедура ТаблицаНоменклатураПриИзменении(Элемент)

        ТД = Элементы.Таблица.ТекущиеДанные;
        ТД.Цена = ВозвратЦены(ТД.Номенклатура);
        //ТД.ЕдИзм = ВозвратЕдИзм(ТД.Номенклатура);
        ПересчетСуммы();

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

        &НаСервереБезКонтекста
        Функция ВозвратЦены(Ссылка)

        Возврат Ссылка.Цена;

        КонецФункции // НоменклатураПриИзмененииСервер(Элемент)

        &НаКлиенте
        Процедура ТаблицаКоличествоПриИзменении(Элемент)
        ПересчетСуммы();
        КонецПроцедуры

        &НаКлиенте
        Процедура ТаблицаЦенаПриИзменении(Элемент)
        ПересчетСуммы();
        КонецПроцедуры

        &НаКлиенте
        Процедура ПересчетСуммы()

        ТД = Элементы.Таблица.ТекущиеДанные;
        ТД.Сумма = ТД.Цена * ТД.Количество;

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

        &НаКлиенте
        Процедура Печать(Команда)
        СформироватьМакет(Объект.Ссылка).Показать</code>

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

  6. Задание выполнено, проблем не возникало.

  7. Светлана 16.05.2011 в 23:33

    Задание выполнила, все получилось.
    ————————————————————————–

    В справочнике Контрагенты добавлен реквизит “ВидКонтрагента” тип ПеречислениеСсылка.ВидыКонтрагентов (ЮрЛицо/ФизЛицо).
    Создан справочник “СтепениБрака”, в документе “ПоступлениеТоваров” в табличную часть добавлен реквизит “СтепеньБрака” тип СправочникСсылка.СтепениБрака.
    В документ “ПоступлениеТоваров” реквизиту “Поставщик” установлен тип СправочникСсылка, для возможности выбора в закупке контрагента или подотчетного лица.
    В Документе “РеализацияТоваров” добавлен реквизит “КонтактноеЛицо” – тип СправочникСсылка.КонтактныеЛица (Связи параметров выбора =Отбор.Владелец(Покупатель)).
    Создан документ “КонтактыСКлиентом”
    В справочнике “Контрагенты” указано, что является основанием для док “ПоступлениеТоваров”, “РеализацияТоваров”
    Ввод документов на основании эл-та справочника Контрагенты реализован при помощи запроса в процедурах ОбработкаЗаполнения() модулей объектов соответствующих вводимых документов.
    ————————————-
    // Модуль формы док ПоступлениеТоваров

    &НаКлиенте
    Процедура ПоставщикНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    МассивТипов = Новый Массив();
    МассивТипов.Добавить(Тип(“СправочникСсылка.Контрагенты”));
    МассивТипов.Добавить(Тип(“СправочникСсылка.Пользователи”));

    ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);

    Элементы.Поставщик.ОграничениеТипа = ОписаниеТипов;
    КонецПроцедуры
    ——————
    &НаКлиенте
    Процедура ТоварыТоварПриИзменении(Элемент)
    ТД = Элементы.Товары.ТекущиеДанные;
    ТД.ЕдиницаИзмерения = ПолучитьБазовуюЕдиницу(ТД.Номенклатура);
    ТД.К = ТД.ЕдиницаИзмерения.Коэффициент;
    ПересчетСуммы();
    КонецПроцедуры
    ——————
    &НаСервереБезКонтекста
    Функция ПолучитьБазовуюЕдиницу(Ссылка)
    Возврат Справочники.ЕдиницыИзмеренияНоменклатуры.НайтиПоРеквизиту(“ЕдиницаИзмерения”,Ссылка.БазоваяЕдиницаИзмерения,,Ссылка);
    КонецФункции
    ——————
    &НаКлиенте
    Процедура ТоварыКоличествоПриИзменении(Элемент)
    ПересчетСуммы();
    КонецПроцедуры
    ——————
    &НаКлиенте
    Процедура ПересчетСуммы()
    ТД = Элементы.Товары.ТекущиеДанные;
    ТД.Сумма = ТД.Количество * ТД.Цена;
    КонецПроцедуры
    ——————
    &НаКлиенте
    Процедура ТоварыЦенаПриИзменении(Элемент)
    ПересчетСуммы();
    КонецПроцедуры
    ——————
    &НаКлиенте
    Процедура ТоварыЕдиницаИзмеренияПриИзменении(Элемент)
    ТД = Элементы.Товары.ТекущиеДанные;
    ТД.К = ТД.ЕдиницаИзмерения.Коэффициент;
    КонецПроцедуры

    // конецМодуль формы док ПоступлениеТоваров

    ———————————————————–
    // Модуль объекта ПоступлениеТоваров

    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //ввод на основании
    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
    Поставщик = ДанныеЗаполнения.Ссылка;

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ ПЕРВЫЕ 1
    | ПоступлениеТоваров.Товары.(
    | Ссылка,
    | НомерСтроки,
    | Номенклатура,
    | ЕдиницаИзмерения,
    | К,
    | Количество,
    | Цена,
    | Сумма
    | )
    |ИЗ
    | Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    |ГДЕ
    | ПоступлениеТоваров.Проведен
    | И ПоступлениеТоваров.Поставщик = &ВыбПоставщик
    |
    |УПОРЯДОЧИТЬ ПО
    | ПоступлениеТоваров.МоментВремени УБЫВ”;

    Запрос.УстановитьПараметр(“ВыбПоставщик”, Поставщик);

    Результат = Запрос.Выполнить();

    Если не Результат.Пустой() Тогда
    ТЗ = Результат.Выгрузить();
    Для каждого Строка из ТЗ цикл
    Товары.Загрузить(Строка.Товары);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли; //ввод на основании

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

    ———————————————————–
    // Модуль объекта РеализацияТоваров

    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //ввод на основании
    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
    Покупатель = ДанныеЗаполнения.Ссылка;

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ ПЕРВЫЕ 1
    | РеализацияТоваров.Товары.(
    | Ссылка,
    | НомерСтроки,
    | Номенклатура,
    | ЕдиницаИзмерения,
    | К,
    | Количество,
    | Цена,
    | Сумма
    | )
    |ИЗ
    | Документ.РеализацияТоваров КАК РеализацияТоваров
    |ГДЕ
    | РеализацияТоваров.Проведен
    | И РеализацияТоваров.Покупатель = &ВыбПокупатель
    |
    |УПОРЯДОЧИТЬ ПО
    | РеализацияТоваров.МоментВремени УБЫВ”;

    Запрос.УстановитьПараметр(“ВыбПокупатель”, Покупатель);

    Результат = Запрос.Выполнить();

    Если не Результат.Пустой() Тогда
    ТЗ = Результат.Выгрузить();
    Для каждого Строка из ТЗ цикл
    Товары.Загрузить(Строка.Товары);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли; //ввод на основании

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

    ———————————————————–
    //————Печать документа РеализацияТоваров
    // Модуль менеджера док “РеализацияТоваров”

    Процедура РасходнаяНакладная(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(РасходнаяНакладная)
    Макет = Документы.РеализацияТоваров.ПолучитьМакет(“РасходнаяНакладная”);
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | РеализацияТоваров.Дата,
    | РеализацияТоваров.Номер,
    | РеализацияТоваров.Покупатель,
    | РеализацияТоваров.КонтактноеЛицо,
    | РеализацияТоваров.Товары.(
    | НомерСтроки,
    | Номенклатура,
    | ЕдиницаИзмерения,
    | Количество,
    | Цена,
    | Сумма
    | )
    |ИЗ
    | Документ.РеализацияТоваров КАК РеализацияТоваров
    |ГДЕ
    | РеализацияТоваров.Ссылка В (&Ссылка)”;
    Запрос.Параметры.Вставить(“Ссылка”, Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

    ОбластьЗаголовок = Макет.ПолучитьОбласть(“Заголовок”);
    Шапка = Макет.ПолучитьОбласть(“Шапка”);
    ОбластьТоварыШапка = Макет.ПолучитьОбласть(“ТоварыШапка”);
    ОбластьТовары = Макет.ПолучитьОбласть(“Товары”);
    Подвал = Макет.ПолучитьОбласть(“Подвал”);

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Если ВставлятьРазделительСтраниц Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;

    НазваниеНакладной = “”;
    Если Выборка.Покупатель.ВидКонтрагента = Перечисления.ВидыКонтрагентов.ЮрЛицо Тогда
    НазваниеНакладной = “ТОРГ-12”;
    Иначе
    НазваниеНакладной = “Товарный чек”;
    КонецЕсли;
    ОбластьЗаголовок.Параметры.НазваниеНакладной = НазваниеНакладной;
    ТабДок.Вывести(ОбластьЗаголовок);

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

    ТабДок.Вывести(ОбластьТоварыШапка);
    ИтогоСумма = 0;
    ВыборкаТовары = Выборка.Товары.Выбрать();
    Пока ВыборкаТовары.Следующий() Цикл
    ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
    ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
    ИтогоСумма = ИтогоСумма + ВыборкаТовары.Сумма;
    КонецЦикла;

    ФормСтрока = “Л = ru_RU; ДП = Ложь”;
    ПарПредмета=”рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2″;
    ИтогоСуммаПрописью = ЧислоПрописью(ИтогоСумма, ФормСтрока, ПарПредмета);
    Подвал.Параметры.Заполнить(Выборка);
    Подвал.Параметры.ИтогоСуммаПрописью = ИтогоСуммаПрописью;
    Подвал.Параметры.ПодписьПоставщика = ПараметрыСеанса.ТекущийПользователь;
    Подвал.Параметры.ПодписьПокупателя = Выборка.КонтактноеЛицо;

    ТабДок.Вывести(Подвал);

    ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
    КонецПроцедуры

    // конецМодуль менеджера док “РеализацияТоваров”
    ———————————————————–
    // Модуль команды РасходнаяНакладная
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    //{{_КОНСТРУКТОР_ПЕЧАТИ(РасходнаяНакладная)
    ТабДок = Новый ТабличныйДокумент;
    РасходнаяНакладная(ТабДок, ПараметрКоманды);

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    //}}
    КонецПроцедуры
    ————————————–
    &НаСервере
    Процедура РасходнаяНакладная(ТабДок, ПараметрКоманды)
    Документы.РеализацияТоваров.РасходнаяНакладная(ТабДок, ПараметрКоманды);
    КонецПроцедуры

  8. Задание выполнила.
    Трудность возникла с обходом результатов запросов по выбору последнего проведенного документа по контрагенту в задании о вводе документов на основании справочника «Контрагенты». Запрос для документа реализации составила такой:
    <code>
    Запрос.Текст =
    “ВЫБРАТЬ ПЕРВЫЕ 1
    | РеализацияТоваров.КонтактноеЛицоКонтрагента,
    | РеализацияТоваров.ТЧТовары.(
    | Номенклатура,
    | ЕдИзмерения,
    | Количество,
    | Цена,
    | Сумма,
    | Брак,
    | СтепеньБрака
    | )
    |ИЗ
    | Документ.РеализацияТоваров КАК РеализацияТоваров
    |ГДЕ
    | РеализацияТоваров.Покупатель = &Покупатель
    | И РеализацияТоваров.Проведен
    |
    |УПОРЯДОЧИТЬ ПО
    | РеализацияТоваров.Дата УБЫВ”;
     
    Запрос.УстановитьПараметр(“Покупатель”, ДанныеЗаполнения.Ссылка);
    Результат = Запрос.Выполнить();
    ТабРезультата = Результат.Выгрузить();
    </code>
    Специально использовала метод Выгрузить, а не Выбрать, чтобы обращаться к полученному контактному лицу только один раз, а не несколько. Способ обхода результатов запроса нашла такой:
    <code>
    Если ТабРезультата.Количество() Тогда
    КонтактноеЛицоКонтрагента = ТабРезультата[0].КонтактноеЛицоКонтрагента;
    Для каждого ТекСтрокаТЧТовары Из ТабРезультата[0].ТЧТовары Цикл
    НоваяСтрока = ТЧТовары.Добавить();
    НоваяСтрока.Номенклатура = ТекСтрокаТЧТовары.Номенклатура;
    НоваяСтрока.ЕдИзмерения = ТекСтрокаТЧТовары.ЕдИзмерения;
    НоваяСтрока.Количество = ТекСтрокаТЧТовары.Количество;
    НоваяСтрока.Цена = ТекСтрокаТЧТовары.Цена;
    НоваяСтрока.Сумма = ТекСтрокаТЧТовары.Сумма;
    НоваяСтрока.Брак = ТекСтрокаТЧТовары.Брак;
    НоваяСтрока.СтепеньБрака = ТекСтрокаТЧТовары.СтепеньБрака;
    КонецЦикла;
    КонецЕсли;
    </code>
    Запрос для документа поступления составила такой:
    <code>
    Запрос.Текст =
    “ВЫБРАТЬ ПЕРВЫЕ 1
    | ПоступлениеТоваров.ТЧТовары.(
    | Номенклатура,
    | ЕдИзмерения,
    | Количество,
    | Цена,
    | Сумма,
    | Брак,
    | СтепеньБрака
    | )
    |ИЗ
    | Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    |ГДЕ
    | ПоступлениеТоваров.Проведен
    | И ПоступлениеТоваров.Поставщик = &Поставщик
    |
    |УПОРЯДОЧИТЬ ПО
    | ПоступлениеТоваров.Дата УБЫВ”;
     
    Запрос.УстановитьПараметр(“Поставщик”, ДанныеЗаполнения.Ссылка);
    Результат = Запрос.Выполнить();
    </code>
    Только при отладке увидела, что нужно 2 раза использовать метод «Выбрать», чтобы добраться до результата запроса:
    <code>
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ПолучитьТЗ = ВыборкаДетальныеЗаписи.ТЧТовары.Выбрать();
    Пока ПолучитьТЗ.Следующий() Цикл
    НоваяСтрока = ТЧТовары.Добавить();
    НоваяСтрока.Номенклатура = ПолучитьТЗ.Номенклатура;
    НоваяСтрока.ЕдИзмерения = ПолучитьТЗ.ЕдИзмерения;
    НоваяСтрока.Количество = ПолучитьТЗ.Количество;
    НоваяСтрока.Цена = ПолучитьТЗ.Цена;
    НоваяСтрока.Сумма = ПолучитьТЗ.Сумма;
    НоваяСтрока.Брак = ПолучитьТЗ.Брак;
    НоваяСтрока.СтепеньБрака = ПолучитьТЗ.СтепеньБрака;
    КонецЦикла;
    КонецЦикла;
    </code>
    Для определения бракованных товаров в табличные части документов ввела 2 реквизита: «Брак» (тип данных = Булево) и «СтепеньБрака» (тип данных = СправочникСсылка.СтепеньБрака). Возможно, что реквизит «Брак» является избыточной информацией, посмотрю в ответе по заданию.
    Для фиксирования контактов менеджеров создала документ «Контакты менеджеров» только с реквизитами без табличных частей.
    Для создания печатной формы использовала конструктов печати. Для написания суммы документа прописью использовала функцию: «ЧислоПрописью»

  9. Андрей Красник 14.05.2011 в 16:07

    Задание выполнил. Трудностей не возникло. Два новых документа для поступления (пришлось добавить справочник для сотрудников и справочник для качества товара), документ для реализации и документ «Событие» (добавлено перечисление «Виды событий»). Для подстановки единицы измерения создал функцию в общем модуле.
    Обработку заполнения для поступления товаров на основании контрагента организовал следующим образом:
    <code>
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = “ВЫБРАТЬ ПЕРВЫЕ 1
    |              ПоступлениеТоваров.Контрагент,
    |              ПоступлениеТоваров.Товары.(
    |                              Ссылка,
    |                              НомерСтроки,
    |                              Номенклатура,
    |                              ЕдиницаИзмерения,
    |                              Коэффициент,
    |                              Количество,
    |                              Цена,
    |                              Сумма,
    |                              Качество
    |              )
    |ИЗ
    |              Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    |ГДЕ
    |              ПоступлениеТоваров.Проведен
    |              И ПоступлениеТоваров.Контрагент = &Контрагент
    |
    |УПОРЯДОЧИТЬ ПО
    |              ПоступлениеТоваров.Дата УБЫВ”;
    Запрос.УстановитьПараметр(“Контрагент”,ДанныеЗаполнения);
     
    Выборка = Запрос.Выполнить().Выбрать();
     
    Если Выборка.Следующий() Тогда
    ЗаполнитьЗначенияСвойств(ЭтотОбъект,Выборка);
    ВыборкаТовары = Выборка.Товары.Выбрать();
    Пока ВыборкаТовары.Следующий() Цикл
    СтрокаДокумента = Товары.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаДокумента,ВыборкаТовары);
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
     
    </code>
    С печатной формой проблем не возникло – делается легко при помощи конструктора макета с небольшими корректоровками.

  10. Константин 14.05.2011 в 12:06

    Выполнил работу над ошибками ДЗ6.
    Выполнили ДЗ7. Возникли трудности с пониманием текста задания: непонятным остался факт создания документа КонтактныеЛицаКонтрагентов, также запутала фраза о том, что в документе реализации необходим реквизит ОтветственноеЛицо (типа Справочники.КонтактныеЛицаКонтрагентов) обязательный для заполнения. Возникли сложности с запросом ввода на основании. Так и не удалось реализовать запрос получения ТЧ последнего проведенного документа того же вида, при известном контактном лице.
    <code>ВЫБРАТЬ ПЕРВЫЕ 1
    Закупка.Товары.(
    НомерСтроки,
    Номенклатура,
    Брак,
    Цена,
    Количество,
    ЕдиницаИзмерения,
    Сумма
    )
    ИЗ
    Документ.Закупка КАК Закупка
    ГДЕ
    Закупка.Проведен
    И Закупка.Ответственный В
    (ВЫБРАТЬ
    КонтактныеЛицаКонтрагентов.Владелец
    ИЗ
    Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
    ГДЕ
    КонтактныеЛицаКонтрагентов.Владелец = &Владелец)

    УПОРЯДОЧИТЬ ПО
    Закупка.Дата УБЫВ</code>
    реквизит Ответственный имеет тип СправочникСсылка.ФизическиеЛица, КонтактныеЛицаКонтрагентов подчинен Контрагентам.
    Интересно каково верное решение?
    После нескольких часов мучений над вложенными запросами и перечитывания текста ДЗ, ввел еще одно поле (Справочники.Контрагенты) Запрос получился очень простой
    <code>ВЫБРАТЬ ПЕРВЫЕ 1
    ЗакупкаТовары.Ссылка,
    ЗакупкаТовары.НомерСтроки,
    ЗакупкаТовары.Номенклатура,
    ЗакупкаТовары.ЕдиницаИзмерения,
    ЗакупкаТовары.Цена,
    ЗакупкаТовары.Количество,
    ЗакупкаТовары.Сумма,
    ЗакупкаТовары.Брак
    ИЗ
    Документ.Закупка.Товары КАК ЗакупкаТовары
    ГДЕ
    ЗакупкаТовары.Ссылка.Проведен
    И ЗакупкаТовары.Ссылка.Контрагент = &Контрагент

    УПОРЯДОЧИТЬ ПО
    ЗакупкаТовары.Ссылка.Дата УБЫВ</code>
    С Базовой единицей измерения проблем не возникло, печатную форму для документа Реализация также сделал без проблем, про функцию ЧислоПрописью подглядел в ответах.

    • Реквизит “Контрагент” в документе Поступления имеет смысл указывать, ведь нужно указать от какого поставщика происходит закупка.
      В последнем запросе есть одна проблема, с которой Вы сможете познакомиться в решении.
      >непонятным остался факт создания документа КонтактныеЛицаКонтрагентов,
      Можете пояснить, в чем именно проблемы с понимаем этой части.

      >также запутала фраза о том, что в документе реализации необходим реквизит ОтветственноеЛицо (типа Справочники.КонтактныеЛицаКонтрагентов) обязательный для заполнения.
      Запутала фраза потому что указан конкретный тип данных? И в вашей конфигурации этого типа не было?

      • Константин 15.05.2011 в 22:49

        1. непонятным был факт создания документа так как первоначально показалось, что он будет дублировать функции справочника КонтактныеЛицаКонтрагентов. С этим разобрался (неверно понял назначение создаваемого документа)
        2. Непонятным был смысл наличия в документе отгрузки поля Контрагент если уже имеется поле КонтактныеЛицаКонтрагентов. С этим разобрался. (вспомнил про связь справочников многое-ко-многим)
        3. По запросу при вводе на основании не подскажите верное решение для заполнения ТЧ документа отгрузки при  известном Контактном лице (не контрагенте!). Мне так и не удалось реализовать одним запросом (

        • 1-2. Понятно, спасибо.

          3. А в решении разве не предложен вариант с одним запросом?

          • Константин 16.05.2011 в 21:01

            В решении предложен вариант с использованием типа данных СправочникСсылка.Контрагенты, а я пытался построить запрос с использованием СправочникСсылка.КонтактныеЛица.

            • Попробуйте предложение ГДЕ описать таким образом:
              “…ГДЕ
              Закупка.Проведен
              И Закупка.Ответственный В
              (ВЫБРАТЬ
              КонтактныеЛицаКонтрагентов.Ссылка…”

  11. Надежда 11.05.2011 в 00:48

    Задание выполнено, но с оговоркой “почти” , так как возникли сложности по организации ввода на основании и доработке  печ.формы. По вводу: последний документ нахожу через запрос, но как дальше получить табл.часть и передать ее в ДанныеЗаполнения самостоятельно не разобралась.  Также не разобралась как дорабатывать процедуру печати, созданную конструктором. Поэтому перехожу к изучению Вашего решения. По остальным пунктам задания сложностей не было.

  12. Задание выполнил. Поздно т.к. были сложности со свободным временем. В принципе сложности возникали, но все преодолелось. Старался все данные доставать запросами. В документе ПриходТовара тип объекта Контрагент смешанный (Сотрудник/Контрагент). Видео-ответы специально не смотрел.