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

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

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

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

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

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

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

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

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

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

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

  1. Задание выполнено.
    Единственная трудность: не смогла разобраться, почему в модуле менеджера справочника в процедуре Печать нет доступа к глобальным переменным.

    • Поскольку глобальные переменные – клиентские, а модуль менеджера компилируется на сервере.

      • Спасибо. После просмотра решения домашнего задания все стало понятно.

  2. Задача выполнена трудностей не возникло по логике построения схемы ориентировался на УТ 11, печать делал мастером.

  3. Решение ДЗ №7.
    Создал документ Поступление товаров с реквизитом Поставщик, который имеет составной тип спр.Контрагенты и спр.Сотрудники, а также создал в док-те ТЧ.
    В ТЧ определи реквизиты Номенклатура (тип спр. Номенклатура), ЕдиницаИзмерения (тип Спр. ЕдиницыИзмеренияНоменклатуры) , Количество, Цена и Сумма.
    Для ЕдиницаИзмерения определил Связи параметров выбора. Для элемента формы Номенклатура (в ТЧ) в событии ПриИзменении вызываю функцию общего серверного модуля ПолучитБазовуюЕдИзмерения(Номенклатура) в которой передаю текущее значение номенклатуры (Элементы.Товары.ТекущиеДанные.Номенклатура).
    Данная функция получает значение с типом спр. ЕдиницыИзмеренияНоменклатуры, которая базовая для данного товара. Создал спр. КачествоТовара и добавил реквизит в ТЧ док-та с таким типом. Создал перечисление ЮрФизЛица и добавил реквизит с таким типов в спр. Контрагенты. Создал дор. Реализация с рек-ми Покупатель и Контактное Лицо и определил для них свойство Проверка заполнения как Выдавать ошибку. Для документов определи ввод на основании спр-ка Контрагенты. С помощью конструктора создал процедуру ОбработкаЗаполнения и дополнил её функцией общего серверного модуля ТЧПоследнего, где с помощью нехитрого запрос получаю ТЧ последнего документ (Поступления или Реализации в зависимости от куда вызывается функция) .
    Функция возвращает ТЗ, и далее загружаю её в ТЧ документа.
    Создал перечисление ВидыКонтактов, далее док. Контакты и реквизиты по заданию.
    Далее создал печатную форму для док. Реализация согласно заданию.
     

  4. Использовалась база преподавателя после решения 6-го задания.
    В структуру внесены следующие изменения:
    Добавлены справочники: ВидыБрака,Сотрудники
    В справочник Контрагенты добавлен реквизит: ТипКонтрагента (тип значения – перечисление: юрлицо или физлицо)
    Добавлены документы: ПоступлениеТоваров, РеализацияТоваров, КонтактСКлиентом. Все документы заводятся на основании справочника Контрагенты
    Добавлены перечисления: ТипыКонтрагентов, ТипыКонтактов
    >закупка может
    осуществляться напрямую от поставщика, либо через подотчетное лицо
    сделал составной тип данных (Контрагенты, Сотрудники) у резвизита “Контрагент” в поступлении товаров
    Далее для единицы измерения и коэффициента в ТЧ ввел реквизиты, при изменении номенклатуры делаю следующее:
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    ТекДанные = Элементы.Товары.ТекущиеДанные;
    ПолучитьЕдиницуИзмеренияНаСервере(ТекДанные.Номенклатура,ТекДанные.ЕдиницаИзмерения,ТекДанные.Коэффициент);
    КонецПроцедуры

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

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

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

  5. Виктор Вахненко 22.02.2011 в 01:01

    1. Создал справочники сотрудников и состояния номенклатуры (новая или брак).  Создал перечисление ТипыКонтрагентов (Юр. или Физ лицо). Создал Документы Закупка и Реализация.
    В документе Закупки Реквизит “Контрагент” сделал составного типа данных “Контрагенты” и “Сотрудники”. В модулях форм документов “Закупка” и “Реализация” разместил обработчик события ПриИзмененииНоменклатуры. В обработке события вызываю функцию с директивой компиляции &НаСервереБезКонтекста для определения базовой единицы выбранной номенклатуры.
    Выбор Контактного лица в документе “Реализация” осуществляется с применением связи параметров выбора по Контрагенту.
     
    2. Добавил перечисление “ВидыКонтактовСКлиентом” и документ “КонтактСКлиентом”. В этом документе определил все необходимы по заданию реквизиты.
     
    3. Использовал конструктор ввода на основании для документов закупки и реализации. Созданный конструктором код использовал как основу для написания своего алгоритма. Запросом выбираю проведенный по контрагенту документ с максимальной датой. Результат запроса загружаю в табличную часть “Товары” нового документа.
     
    4. С помощью конструктора печати создал макет и необходимый код для документа реализации. Модифицировал код печати и макет в соответствии с требованиями задания. Использовал функцию глобального контекста ЧислоПрописью.

  6. Созданы справочники: “Сотрудники”, “СопоставлениеКонтактныхЛиц” ВладелецКонтактногоЛица (составной тип контрагенты и сотрудники), “Качество”
    Документы: “ПоступлениеТоваровИУслуг”, “РеализацияТоваровИУслуг”, “Контакты”
    Реквизит Контрагент: составной тип данных “Контрагент”,”Сотрудник” (хочется сделать регистр сопоставления контрагентов и сотрудников)
    Табличные части документов поступления и реализаций(Товары) :
    Номенклатура,Количество, ЕдиницаИзмерения(связи параметров отбора по номенклатуре),Цена,Скидка, Качество(Ссылка на справочник),Сумма
    На событие при изменении номенклатуры, функция на клиенте вызов функции ОбщийМодульФункцииНаСервереполучение Базовой Единицы Измерения посредством запроса с параметром Номенклатура из Справочника ЕдиницыИзмерения+ параметр БазоваяЕИ
    в табличных частях обоих документов реквизит “Качество” (справочник)
    В реализации добавлен обязательный реквизит КонтактноеЛицо (“СопоставлениеКонтактныхЛиц” со связью на контрагента)
    Создать На основании из Справочника “Контрагенты” Использовал конструктор. а далее изменил и запросом по моменту времени получил последний документ, если таковой был, для поступлений и для реализаций.
    Конструктором создал печатную форму, и подправил скрипт чтобы получать ЮрФизЛицо и завёл шаблон для номера , для варианта печати в шапке. Добавил текущего пользователя в подвал. добавил в подвал параметр СуммаПрописью с использованием функции ЧислоПрописью()
     
     

  7. Задание выполнено.
    1) Были созданы документы ПоступлениеТоваров, РеализацияТоваров, АвансовыйОтчет,  РегистрацияКонтактнойИнформации.
    В табличных частях документов поступления/реализации реализовано вычисление суммы (цены) от изменения соответствующих колонок Количество, Цена, Сумма (+ в реализации колонка Скидка)
    Выбор колонка ЕдиницаИзмерения зависим от владельца Номенклатура + прописана процедура при изменении Номенклатуры ищем соответствующую ед.из.
    ЕдИз = Справочники.ЕдиницыИзмерения.НайтиПоРеквизиту(“ЕдиницаИзмерения”,Номенклатура.БазоваяЕдиницаИзмерения,,Номенклатура);
    2) Заведен независимый справочник “Качество”. В документах поступления/реализации выбирается, какого качества пришла номенклатура по каждой позиции.
    3) в справочник Контрагенты добавлен реквизит ФизЮрЛицо (тип перечисление)
    4) Ввод на основании
    в общем модуле

    Функция ПоискПоследнегоДокумента(ВидДок, Контрагент) Экспорт

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

    Результат = Запрос.Выполнить().Выбрать();
    Возврат ?(Результат.Следующий(), Результат.Ссылка, Неопределено);

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

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

    ТабЧасть = ПоследнийДок.Товар.Выгрузить();
    Товар.Загрузить(ТабЧасть);
    Иначе
    Контрагент = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    5) печать реализована с помощью конструктора печати, потом подправлен макет и текст модуля менеджера.
    для суммы прописью воспользовалась функцией ЧислоПрописью

  8. Задание сделала, кроме ввода документов на основании справочников проблем не возникло.
    Были созданы документы Событие, Поступление, Реализация , перечисления СостояниеТовара, ВидыКонтактов, ЮрФизЛицо, справочник СотрудникиОрганизации.

    C помощью конструктора создана печатная форма.

  9. Максим Ефимов 20.02.2011 в 15:48

    Автомагазин занимается закупкой запчастей и их реализацией. При этом закупка может
    осуществляться напрямую от поставщика, либо через подотчетное лицо (собственного
    сотрудника).

    заводим реквизит “Поставщик/подотчетник” – тип данных составной: справочник “Контрагенты”, “Сотрудники”.
    Необходимо обеспечить, чтобы при поступлении можно было указать единицу
    измерения отличную от базовой. Но при выборе номенклатуры по умолчанию, должна подставляется базовая единица измерения.

    для этого необходимо у справочника номенклатура завести реквизит “Основная единица измерения” из справочника “ЕдиницыИзмеренияНоменклатуры”, эта единица будет автоматически по умолчанию подставляться в документах.
    И в форме Приходной такой код
    <code>
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    ТекДанные = Элементы.Товары.ТекущиеДанные;
    Если ЗначениеЗаполнено(ТекДанные.Номенклатура) Тогда
    ТекДанные.ЕдиницаИзмерения = ПолучитьОсновнуюЕдиницуИзмерения(ТекДанные.Номенклатура);
    КонецЕсли;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция ПолучитьОсновнуюЕдиницуИзмерения(Номенклатура)
    Возврат    Номенклатура.ОсновнаяЕдиницаИзмерения;
    КонецФункции</code>
    конечно, не забываем про связь по владельцу для единиц измерения с номенклатурами
    Товар может поступать бракованным, этот факт необходимо отражать в документе
    закупки. При этом нужно учесть, что брак может быть различных степеней, которые могут
    создавать пользователи самостоятельно. В дальнейшем нужно будет обеспечить учет товара на
    складе с различными степенями брака. Бракованный товар может продаваться покупателям (со
    скидкой).

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

    Заводим перечисление “Типы контрагентов” со значениями “Юр. лицо” и “Физ. лицо”. Для Расходной заводим реквизит “Контактной лицо контрагента” со связью по владельцу с реквизитом “Контрагент” через параметр “Связи параметров выбора”
     
    В организации фиксируются все контакты менеджеров с клиентами:
    • Личные встречи;
    • Телефонные звонки;
    • Письма.
    Для всех контактов необходимо хранить: контрагента, контактное лицо, заголовок (строка,
    80 символов) и тему (поле неограниченной длины). Контакты необходимо хранить с помощью
    объекта “Документ”, поскольку в дальнейшем предполагается его проведение.

    ничего сложного, заводим документ, настраиваем реквизиты.
    Необходимо обеспечить ввод документов поступления и реализации на основании
    элементов справочника «Контрагенты». При этом нужно предусмотреть следующий алгоритм: при
    вводе на основании табличная часть должна заполняться данными последнего проведенного
    документа по этому контрагенту.

    простейший запрос на получение последнего документа с отбором по контрагенту и обратной сортировкой, далее выгрузка и загрузка табличной части.
    Необходимо обеспечить печать документа отгрузки: в шапке название документа и его
    номер, в строках – все данные из табличной части документа. При этом для юридических лиц
    название документа «Торг-12», а для физических – «Товарный чек» (в остальном печатные формы
    одинаковы). В подвале печатной формы предусмотреть место для подписей: со стороны
    организации подставлять текущего пользователя, со стороны клиента – ФИО контактного лица

    заголовок печатной формы регулируется проверкой на реквизит “Тип контрагента”, сумму прописью выводим функцией “ЧислоПрописью”. Текущий пользователь из переменной глТекущийПользователь

  10. выполнил…

  11. Задание выполнил частично, часть так и не смог реализовать.
    Во-первых так и не понял, как связать два реквизита допустим, когда один реквизит ВидЗакупки (ТипПеречисления с вариантами Напрямую / черезПодотчеткника), а следом реквизит Контрагент/Подотчетник (составной тип с ссылкой на два справочника), который должны меняться в зависимости от выбора в первом реквизите.
    Второе, так и не смог реализовать заполнение табличной части в событии ОбработкаЗаполнения. При попытке заполнить табличную часть выдается ошибка, в стиле “Не найдено поле Номенклатура!”, причем если смотреть результат запроса в таблице значений через РезультатЗапроса.Выгрузить, то все реквизиты и данные табличной части в запросе возвращаются.
    Пошел смотреть решение…

  12. Задание выполнено. Признаюсь, про функцию ЧислоПрописью не знал

  13. Перед выполнением задания №7 исправил свое решение задания №6 – реализовал возможность указания нескольких контактных лиц для контрагента.
    Основные моменты решения:
    1. Чтобы учесть возможность закупки через поставщика/подотчетное лицо, добавим справочник “Сотрудники”, а в документ поступления – реквизит составного типа данных “СправочникСсылка.Сотрудники, СправочникСсылка.Контрагенты”.
    2. При выборе номенклатуры в табличной части документов подставляем базовую единицу измерения. Для этого создаем форму документа, в которой пишем обработчик события “При изменении” соответствующего поля табличной части. Т.к. единицу измерения нужно подставлять в 2-х разных документах, выносим функцию получения базовой единицы в общий модуль.
    3. Чтобы указать степень брака в документах, добавим справочник “СтепениБрака” с предопределенным элементов “БезБрака”. В документах поступления и отгрузки создаем обязательный для заполнения реквизит “СтепеньБрака”, который при создании нового документа заполняется предопределенным значением “БезБрака”.
    4. Для справочника “Контрагенты” добавляем новый реквизит для указания физического/юридического лица, добавляем перечисление “ЮрФизЛицо”.
    5. Для фиксации контактов добавляем перечисление “ВидыКонтактов” с 3-мя значениями и документ “Контакт” с необходимыми реквизитами.
    6. Для ввода на основании отбираем запросом все проведенные документы соответствующего типа, упорядочиваем их по дате (по убыванию) и выбираем первую запись (“ВЫБРАТЬ ПЕРВЫЕ 1”). Эти действия выполняются в обработчике события “ОбработкаЗаполнения”.
    7. Для создания печатной формы пользуемся конструктором печати. Модифицируем полученный макет и процедуру печати с учетом требований задания. Для вывода суммы прописью используем функцию “ЧислоПрописью”.

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

    Запрос.УстановитьПараметр(“Владелец”, СсылкаНоменклатура);
    Запрос.УстановитьПараметр(“ЕдиницаИзмерения”, СсылкаНоменклатура.БазоваяЕдиницаИзмерения);

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

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

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

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

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

    РеализацияТовара = Ссылка[0];
    Если Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
    ОбластьЗаголовок.Параметры.Заголовок = “Товарный чек”;
    ИначеЕсли Выборка.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда    
    ОбластьЗаголовок.Параметры.Заголовок = “Торг-12”;
    КонецЕсли;                        

    ТабДок.Вывести(ОбластьЗаголовок);

  15. 1. У справочника контрагентов заводимо перечисление ЮрФизЛицо
    2. Добавляем справочник “физлица”
    3. Добавляем справочник “Качество” подчиненный справочнику “номенклатура” (лучше ПВХ)
    4. Добавляем документ “Приход”, в том числе с реквизитом “Контрагент” с типами “Контрагент” и “Физлицо”
    5. Добавляем документ “Расход”, в том числе с реквизитом “Контактное лицо” и указываем в свойствах обязательность заполнения.
    6. Добавляем перечисление “ВидыСобытийОрганизации” с указанными значениями
    7. Добавляем документ “СобытиеОрганизации”, с необходимыми реквизитами, в том числе с реквизитом “Пользователь” (менеджер)
    8. В документах “Приход”, “Расход” и “СобытиеОрганизации” указываем что они могут вводиться на основании, в первых двух указываем процедура заполнения документа, можно сделать 2 независимомые либо 1 в общем модуле (на сервере) в которую передается объект, и способ заполнения по поступлению либо по реализации
    9. Для вывода печатной формы воспользуемся “Конструктором печати документов” по окончания работы конструктора в макет внесем исправления, а также в модуле менеджера документа внесем изменения по формированию заголовка печатной формы от вида контрагента.

  16. Добрый день!
    У меня два вопроса;
    1)Если бы справочники Контрагенты
    содержал предопределнные группы “Поставщики” и “Покупатели”,
    как можно при выборе контрагента в документе закупка ограничить
    пользователя группой “Поставщики”, а при выборе контрагента в документе
    отгрузка ограничить пользователя группой “Покупатели”
    2) Если табличная часть документа “Отгрузка” содержит реквизиты
    “ВидБрака” типа СправочникСсылка.ВидыБрака и “Скидка”,
    как ограничить пользователя устанавливать “Скидку”,
    если нет брака.
    Я сделал так:
    &НаКлиенте
    Процедура ТоварыСкидкаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
    ОбнулениеСкидки();
    КонецПроцедуры
    &НаКлиенте
    Процедура ОбнулениеСкидки();
    ТД=Элементы.Товары.ТекущиеДанные;
    Если не ЗначениеЗаполнено(ТД.ВидБрака)
     Тогда
      ТД.Скидка=0;
    КонецЕсли;
    КонецПроцедуры
    &НаКлиенте
    Процедура ТоварыВидБракаПриИзменении(Элемент)
     ОбнулениеСкидки();
    КонецПроцедуры
    это правильно? а если еще прятать колонку Скидка,
    то необходимо это делать при открытии формы нового документа и в событии при изменении ВидаБрака?

    • 1. Для этого можно использовать свойство “Параметры выбора”. Для реквизита Контрагент Поступления указать значение Родителя – “Поставщики”, для Реализации – “Покупатели”.
      2. Если не хотите скрывать скидку, то нужно ловить событие “При изменении скидки”. В нем проверять, если брак пуст, то скидку обнулять.
      А чтобы скрыть видимость скидки нужно использовать перечисленные Вами события: ПриСозданииНаСервере, ПриИзменении вида брака.

  17. Задание Выполнено.
    Создал справочник «ВидыБрака».
    Создал Справочник «ВидыКонтактов».
    Создал Документ «КонтактыМенеджеров».
    Создал перечисление ВидыКонтрагентов.
    В Справочник «Контрагенты» добавил реквизит «ВидКонтрагента»
    В Справочник «Номенклатура» добавил реквизит «Цена»
    Поставщики, Покупатели, а также подотчетные лица создаются в справочнике «Контрагенты»
    Создал документы «Закупка», «Отгрузка».
    Табличная часть документа «Закупка» содержит реквизиты:
    «Номенклатура», «ЕдИзм»,»ВидБрака», «Кол», «Цена», «Сумма».
    Табличная часть документа «Отгрузка» содержит реквизиты:
    «Номенклатура», «ЕдИзм»,»ВидБрака», «Кол», «Цена», «Скидка», «Сумма».
    Привожу часть кода
    Модуль Формы документа «Отгрузка»
    &НаКлиенте
    Процедура ТоварыСкидкаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
    ОбнулениеСкидки();
    КонецПроцедуры
    &НаКлиенте
    Процедура ПересчитатьСумму()
    ТД=Элементы.Товары.ТекущиеДанные;
    ТД.Сумма=(1-ТД.Скидка/100)*ТД.Кол*ТД.Цена;
    \КонецПроцедуры // ПересчитатьСумму()
    &НаКлиенте
    Процедура ОбнулениеСкидки();
    ТД=Элементы.Товары.ТекущиеДанные;
    Если не ЗначениеЗаполнено(ТД.ВидБрака)
     Тогда
      ТД.Скидка=0;
    КонецЕсли;
    КонецПроцедуры
    &НаКлиенте
    Процедура ТоварыВидБракаПриИзменении(Элемент)
     ОбнулениеСкидки();
     ПересчитатьСумму();
    КонецПроцедуры
    &НаСервереБезКонтекста
    Функция СформироватьМакет(Ссылка)
    Макет=Документы.Отгрузка.ПолучитьМакет(“Макет”); 
    ОбластьШапка=Макет.ПолучитьОбласть(“Шапка”);
    ОбластьСтрока=Макет.ПолучитьОбласть(“Строка”);
    ОбластьПодвал=Макет.ПолучитьОбласть(“Подвал”);
    ТабДок=Новый ТабличныйДокумент; 
    Если ЗначениеЗаполнено(Ссылка.Контрагент)
     Тогда
     ВидКонтрагента=Ссылка.Контрагент.ВидКонтрагента;
     Если ВидКонтрагента=Перечисления.ВидыКонтрагентов.ЮридическоеЛицо
      тогда
       ОбластьШапка.Параметры.Название=”Торг-12″;
      ИначеЕсли ВидКонтрагента=Перечисления.ВидыКонтрагентов.ФизическоеЛицо
       тогда
        ОбластьШапка.Параметры.Название=”Товарный чек”;
     КонецЕсли;
      
    КОнецЕсли; 
    ОбластьШапка.Параметры.Номер=Ссылка.Номер;
    ТабДок.Вывести(ОбластьШапка);
    Сумма=0;
    Для Каждого Строка из Ссылка.Товары Цикл
     Сумма=Сумма+Строка.Сумма;
     ОбластьСтрока.Параметры.Заполнить(Строка);
     ТабДок.Вывести(ОбластьСтрока);
    КонецЦикла;
    ФормСтрока = “Л = ru_RU; ДП = Истина”;
    ПарПредмета=”рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2″;
    ОбластьПодвал.Параметры.СуммаП=ЧислоПрописью(Сумма,ФормСтрока,ПарПредмета);
    ОбластьПодвал.Параметры.Пользователь=ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя;
    КЛ=Ссылка.КонтактноеЛицо;
    Если ЗначениеЗаполнено(КЛ)
     Тогда
        КонтактноеЛицо=Кл.КонтактноеЛицо;
      Если ЗначениеЗаполнено(КонтактноеЛицо)  
       Тогда   
         ОбластьПодвал.Параметры.КонтактноеЛицо=КонтактноеЛицо.Наименование;
      КонецЕсли; 
         
    КонецЕсли;
    ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;
    КонецФункции
     

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

  19. Patio-5Element 18.02.2011 в 10:28

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

  20. Задание выполнено.
    В этот раз, задание не похоже на предыдущее, но не менее интересное.
    Ввод на основании поначалу вызвал проблемы, но в итоге сделал.
    Печатные формы сделал. Единственно, сумма прописью взял стандартную функцию написанную 1с – ом в тип.конфигурациях, надеюсь это не возбраняется? спасибо

    • Не возбраняется.
      Но есть функция глобального контекста – ЧислоПрописью().

  21. Taranov-SI 18.02.2011 в 08:44

    Задача 7
    Создаем два документа
    ПриходныйОрдерНаТовар
    ПоступлениеТоваровИУслуг
    и Справочник  – Брак
    В табличной части определяем  поле “брак”  –Ссылка на справочник БРАК
    Для заполнения по умолчанию создаем небольшой программный код:
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    Эл = Элементы.Товары.ТекущиеДанные;
    Эл.ЕдИзмерения = ОпределитьЦену(Эл.Номенклатура)  ;
    КонецПроцедуры
    &НаСервере
    Функция   ОпределитьЦену(Номенклатура)
    Ссылка =  Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
    Возврат Ссылка.БазоваяЕдиница;
    КонецФункции
    При выборе номенклатуры значение поля будет заполняться из справочника “Номенклатура”
    В табличной части определяем  поле “брак”  –Ссылка на справочник БРАК
    Создаем документ ОтгрузкаТоваров.
    Для реквизита ” Контактное Лицо”   создаем  СвязиПараметровВыбора   Отбор.Владелец по  значению Контрагент
    Для контактоа с клиентами создаем  ДОКУМЕНТ   “РаботаСКлиентом”
    реквизиты:   Контрагенты  – тип СправочникСсылка.Контрагенты
    КонтактноеЛицо =-             устанавливаем  при выборе  отбор по владельцу
    Заголовок
    Тема  тип   строка неопределенной длины       для  формы документа указываем  вид  “поле текстового документа”
    Для  обеспечения ввода документа по Контрагенту
    Определяем контент заполнения посредством запроса
    Где  Определением порядка находим последний документ, а установлением связи  с Справочником по Контрагенту отбираем нужные документы.
    (Использую ВТ для  определения ссылки искомого документа, затем по ссылке  отбираю позиции номенклатуры из табличной части документов данного  вида)
    Заполнение таблицы осуществляем из выборки запроса
    Печать:
    Создаем печать при помощи конструктора печати.
    Дорабатываем.
    Параметр “Имя документа”     определяем в зависимости от
    того,  Это контрагент.ссылка    или  Произвольное физическое лицо

    Задача 7 
    Создаем два документа  ПриходныйОрдерНаТовар  ПоступлениеТоваровИУслуги Справочник  – Брак
    В табличной части определяем  поле “брак”  –Ссылка на справочник БРАК
    Для заполнения по умолчанию создаем небольшой программный код:&НаКлиентеПроцедура ТоварыНоменклатураПриИзменении(Элемент) Эл = Элементы.Товары.ТекущиеДанные; Эл.ЕдИзмерения = ОпределитьЦену(Эл.Номенклатура)  ;КонецПроцедуры  &НаСервере  Функция   ОпределитьЦену(Номенклатура) Ссылка =  Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура); Возврат Ссылка.БазоваяЕдиница; КонецФункцииПри выборе номенклатуры значение поля будет заполняться из справочника “Номенклатура”

    В табличной части определяем  поле “брак”  –Ссылка на справочник БРАК
    Создаем документ ОтгрузкаТоваров.Для реквизита ” Контактное Лицо”   создаем  СвязиПараметровВыбора   Отбор.Владелец по  значению Контрагент
    Для контактоа с клиентами создаем  ДОКУМЕНТ   “РаботаСКлиентом”реквизиты:   Контрагенты  – тип СправочникСсылка.Контрагенты                      КонтактноеЛицо =-             устанавливаем  при выборе  отбор по владельцу                       Заголовок                        Тема  тип   строка неопределенной длины       для  формы документа указываем  вид  “поле текстового документа”                    Для  обеспечения ввода документа по Контрагенту     Определяем контент заполнения посредством запроса Где  Определением порядка находим последний документ, а установлением связи  с Справочником по Контрагенту отбираем нужные документы.       (Использую ВТ для  определения ссылки искомого документа, затем по ссылке  отбираю позиции номенклатуры из табличной части документов данного  вида)      Заполнение таблицы осуществляем из выборки запросаПечать:
    Создаем печать при помощи конструктора печати.Дорабатываем.Параметр “Имя документа”     определяем в зависимости оттого,  Это контрагент.ссылка    или  Произвольное физическое лицо

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

    С печатью документа отгрузки проблем не возникло, использовал конструктор печати и поправил сгенерированные макет и код в модуле менеджера. Корректно различаются документы на юр. и физ. лица, прописываются ФИО пользователя и контактного лица. Для печати итоговой суммы прописью использовал функцию глобального контекста ЧислоПрописью.

  23. respublica 18.02.2011 в 01:02

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

  24. Выполнил, затруднений не вызвало, но, как всегда, жду откровений в оригинальном решении.
    Справочники:
    Контрагенты, Номенклатура,ВидыБрака, ПодотчетныеЛица,КонтактныеЛица, ЕдиницыИзмеренияНоменклатуры
    Документы: ПоступлениеТоваровИУслуг, РеализацияТоваровИУслуг, КонтактыСКлиентами
    Перечисления:
    ЮрФизЛицо

  25. Задание выполнено.
    В этот раз, почему то, возникло много сложностей с заданием. Установка единицы измерения в строке табличной части – чуть не написал запрос, по текущей выбранной номенклатуре. Потом вспомнил про связи параметров выбора. Установка базовой единицы как основной – тут без запроса пока не удалось.
    Ввод на основании так же не прошел без проблем, но результат достигнут.
    Печатные формы почти беспроблемные. Заставило задуматься необходимость вывода суммы прописью. Уже начал функцию раскладывающую прикидывать, но, как выяснилось 1с меня опередило…гы…. :)
    Вообще, очень интересные впечатления от задания. Когда читаю – начинаю прикидывать как делать, ничего сложного вроде, а когда начинаю реализовывать – то тут затык, то там. В общем, Евгений, спасибо за впечатления :) Если бы не ваши уроки это задание я бы сделал, но пришлось бы 2 недели код писать :)

    • P.S. С подотчетными лицами как-то непонятно по заданию. Пока сделал у контрагентов Юр лицо и физ. лицо, но чувствую, чего-то я накосячил. Скорее всего справочник Сотрудники надо сделать и в поле контрагент выбор из двух справочников.

      • Разница между поступлением от поставщика и подотчетника появится потом – когда будет реализовывать проведение документов.

        • Т.е. в место реквизита Контрагент сделать реквизит ПоступилоОт. И сделать выбор из справочника Контрагентов или Справочника пользователи?
          Думаю, подсмотрю в вашем решении :)

  26. Павел Конов 17.02.2011 в 18:17

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

    • Почему же не сделать нормально приход?
      Есть реквизит табличной части “Качество”, соответствующее изменение в регистре накопления.
      И все прекрасно вводиться одним документом.

      • Павел Конов 17.02.2011 в 21:20

        т.е мы дублируем строки с одним и тем же товаром, но указываем для одной из строк другое качество товара?

  27. Отчитываюсь)
    Создал новые документы “ПоступлениеТМЦ”, “РеализацияТМЦ”.
    Cоздал новый справочник “Сотрудники”.
    Создал новый справочник КачествоНоменклатуры для указания степеней качества номенклатуры (в частности, брака).
    В документе ПоступлениеТМЦ создал реквизит Контрагент составного типа (СправочникСсылкаКонтрагенты и СправочникСсылкаСотрудники). Реквизиты таб.части Товары: Номенклатура (ссылка на справочник Номенкл-ры), ЕдИзм (ссылка на справочник ЕдиницыИзмеренияНоменклатуры), для ЕдИзм указал связи параметров выбора (отбор по Номенклатуре из таб. части), Количество, Цена, Сумма, Качество (ссылка на справочник КачествоНоменклатуры).
    В документе РеализацияТМЦ – таб. часть такая же, Реквизиты шапки: Контрагент, КонтактноеЛицо (спр. КонтактныеЛицаКонтрагентов) с указанием СвязейПараметровВыбора (отбор по контрагенту).
    Для указания вида Контрагента создал новое перечисление ВидыКонтрагентов (ЮрЛицо, ФизЛицо), и в справочнике Контрагентов добавил соответсвующий реквизит.
    Процедуру автоматического заполнения БазовойЕдИзм при изменении Номенклатуры сделал в серверном общем модуле ОбщиеФункцииСервер (чтобы ее можно было вызывать и из других документов), в нее передаю Номенклатуру (СтрокаТЧ.Номенклатура), ЕдИзм (СтрокаТЧ.ЕдИзм) /ЕдИзм передаю, чтобы установить ее в этой процедуре/.
    В самой процедуре запросом определяю ЕдиницуИзмерения, соответвующую базовой и заполняю ее:
    “ВЫБРАТЬ
     ЕдиницыИзмеренияНоменклатуры.Ссылка КАК ЕдИзм
    ИЗ
     Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры
    ГДЕ
     ЕдиницыИзмеренияНоменклатуры.Владелец = &ТекНоменклатура
     И ЕдиницыИзмеренияНоменклатуры.ЕдиницаПоКлассификатору = &БазоваяЕдиница”;

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

    УПОРЯДОЧИТЬ ПО
     РеализацияТМЦ.Дата УБЫВ”

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

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

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

  30. Задание выполнено.
    Созданы необходимые справочники и перечисления. В документе ПоступлениеТоваров в поле Контрагент реализован составной тип данных (СправочникСсылка.Контрагенты, СправочникСсылка.Сотрудники). В зависимости от значения перечисления ВидКонтрагента реализуется выбор требуемого справочника
    <code>
    &НаКлиенте
    Процедура ВидКонтрагентаПриИзменении(Элемент)
    Если Объект.ВидКонтрагента = ПредопределенноеЗначение(“Перечисление.ВидыКонтрагентов.ФизическоеЛицо”) Тогда
    Элементы.Контрагент.ОграничениеТипа = Новый ОписаниеТипов(“СправочникСсылка.Сотрудники”);
    ИначеЕсли Объект.ВидКонтрагента = ПредопределенноеЗначение(“Перечисление.ВидыКонтрагентов.ЮридическоеЛицо”) Тогда
    Элементы.Контрагент.ОграничениеТипа = Новый ОписаниеТипов(“СправочникСсылка.Контрагенты”);
    КонецЕсли;
    КонецПроцедуры

    </code>

    Выбор базовой единицы осуществляется вызовом серверной функции
    <code>
    &НаСервереБезКонтекста
    Функция ПолучитьБазовуюЕдиницу(Ссылка)
    Владелец=Ссылка;
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | ЕдиницыИзмеренияНоменклатуры.Ссылка КАК БазЕд
    |ИЗ
    | Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры
    |ГДЕ
    | ЕдиницыИзмеренияНоменклатуры.Владелец = &Владелец
    | И ЕдиницыИзмеренияНоменклатуры.КоэффициентПересчета = 1”;

    Запрос.УстановитьПараметр(“Владелец”, Владелец);
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Возврат ВыборкаДетальныеЗаписи.БазЕд;
    КонецЦикла;
    КонецФункции

    </code>

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

    </code>

    Аналогично выполняется ввод на основании для документа РеализацияТоваров. Для обоих документов выполняется пересчет суммы при изменении влияющих на нее значений реквизитов. Отличие заключается в том что в табличной части документа РеализацияТоваров учитываются скидки, влияющие на продажную цену в зависимости от значения справочника КачествоТовара.
    Печатная форма создана конструктором печати и доработана вручную в соответствии с заданием. Сумма прописью выводится с использованием функции глобальногоконтекста ЧислоПрописью.

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

  32. Гуляев Алексей 17.02.2011 в 10:46

    Задание выполнено.
    Интересно, но факт, когда я дошел до реализации задания сумма прописью, я чуть не начал писать что то подобное разбиение как в авто-навигаторе, цифры разделять на слова, но решил взглянуть как это сделано у других,.. либо я проворонил при просмотре, что есть число прописью либо там этого не было…
    Хотя наверное стоило задуматься о том, что данная ункция должна быть реализована в 1С.

    • Данной информации в уроках не было. Это умышленный подводный камень в задании.

  33. Все работает.

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

    Сотрудники – здесь хранятся сотрудники фирмы.
    Качество – указываются возможные качества товаров, введены два предопределенных Новый и Брак.
    СкидкиНоменклатуры, в котором два реквизита Качество- тип спр-к Качество и Скидка – число. Он подчинен спр-ку Номенклатура и мы сможем определять для каждой номенклатуры различные скидки по видам качества.
    Склады.
     

    Создал документ ПоступлениеТоваров с реквизитами:

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

    То же проделал и с документов реализация товаров, в таб. Часть еще дополнительно добавил колонку Скидка и колонку СуммаБезСкидки, свойства этих колонок я указал в ТолькоПросмотр и таб. Часть я  обрабатываю след. Образом:

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

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

  34. Елена 17.02.2011 в 00:39

    1. Создала справочник Сотрудники.
    2.Создала документ Закупка.
    Реквизит Поставщик сделала составным.
    В модуле формы описала процедуру “при изменении” реквизита табличной части Номенклатура.
    В табличную часть добавила реквизит степень брака Справочнику “Степени брака”.
    3. В справочник Контрагенты добавила реквизит “ВидКонтрагента”= Перечислению Виды Контрагентов (юр. лицо или физ. лицо)
    Создала документ Реализация. Реквизит Контрактное лицо связала с Контрагентом и включила для него проверку заполнения.
    4.Создала документ Контакты. Добавила в него реквизит Вид контакта = Перечислению Виды контакта, и другие реквизиты из задания.
    5. Для обеспечения печати документа отгрузки создала макет и в модуле формы документа Реализация следующий код:
    <code>
    &НаКлиенте
    Процедура Печать(Команда)
     СформироватьПечать(Объект.Ссылка).Показать();
    КонецПроцедуры
    &НаСервереБезКонтекста
    Функция  СформироватьПечать(Ссылка)
     Таб = Новый ТабличныйДокумент;
     Макет = Документы.Реализация.ПолучитьМакет(“Макет”);
     ОблШапки = Макет.ПолучитьОбласть(“Шапка”);
     ОблСтроки = Макет.ПолучитьОбласть(“Строка”);
     ОблПодвал = Макет.ПолучитьОбласть(“Подвал”);
     ОблШапки.Параметры.Заголовок = ?(Ссылка.Контрагент.ВидКонтрагента = Перечисления.ВидКонтрагента.ЮрЛицо,”ТОРГ12 “,”Товарный Чек “)+”№ “+Ссылка.Номер+” от “+Формат(Ссылка.Дата,”ДЛФ=D”);
     Таб.Вывести(ОблШапки);
     Для Каждого стр из Ссылка.Товары Цикл
        ОблСтроки.Параметры.Заполнить(стр);
        Таб.Вывести(ОблСтроки);
       КонецЦикла;
      
     ОблПодвал.Параметры.Продавец = ПользователиИнформационнойБазы.ТекущийПользователь();
     ОблПодвал.Параметры.Покупатель = Ссылка.КонтрактноеЛицо;
     Таб.Вывести(ОблПодвал);
     Возврат Таб;
    КонецФункции
    </code>

  35. Задание выполнил, не разобрался с вводом на основание, точнее не понял до конца этот алгоритм. Так же не понял как можно напечатать сумму прописью(думал с помощью массива но…)

    Коротко о структуре Бд, создал следуюшие метаданные

    Перечисления ВидКонтакта(Личная встреча, Письмо, Телефонный звонок)
    Перечисления Пол(ламинат и женский)
     Сарправочник ФизическиеЛица(Рекв Пол(ссылка)),
    Справочник Клиенты(Рекв Пол(ссылка),)
    Справочник Склады(предопределённый Основной),
    Справочник Скидки,
    Справочник СостояниеТовара(предопр. Новый, Брак)
     Документы Закупка
    Реквизиты(Поставщик(СостТипДанн. СправочникСсылка.ФизическиеЛица, СправочникСсылка.Контрагенты), Склад(ссылка склады)
    ТабличнаяЧасть ТОВАРЫ (Номенклатура, ЕдиницаИзмерения, Кол-во, Цена, Сумма, Состояние товара)
     
    Документы Реализация
    Реквизиты(Поставщик(СпрСсылка.Клиенты,), Склад(ссылка склады)
     ТабличнаяЧасть ТОВАРЫ (Номенклатура, ЕдиницаИзмерения, Кол-во, Цена, Скидка, Сумма, Состояние товара)
     Для обоих документов
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
                Элементы.товары.ТекущиеДанные.ЕдиницаИзмерения=Элементы.товары.ТекущиеДанные.Номенклатура.БазоваяЕдиница;
    КонецПроцедуры
     
     Документы Контакты
    Реквизиты(Контрагент(СпрСсылка.Контрагенты),
    КонтактноеЛицоКонтрагента (СправочникСсылка.КонтрактныеЛицаКонтрагентов)
    Заголовок(Строка 80)
    Тема(Неогр.Длина, Вид Поле текстового документа)
    ВидКонтакта(ПеречислениеСсылка.ВидКонтакта)

    • > точнее не понял до конца этот алгоритм.
      Проблемы с понимаем задания?
      Так было бы лучше:
      “Необходимо обеспечить ввод документов поступления и реализации на основании элементов справочника «Контрагенты». При этом нужно предусмотреть следующий алгоритм: при вводе на основании табличная часть должна заполняться данными последнего проведенного документа по этому контрагенту.”
      ??
      > Так же не понял как можно напечатать сумму прописью
      См. функцию глобального контекста ЧислоПрописью().

  36. Задание выполнил, потратил часов 6, заново просматривал темы, затронутые в задании, подолгу искал, как получить нужные данные.
    В документе закупка реквизит поставщик сделал составным из справочника контрагенты и сотрудники (создал справочник). Единицу измерения получаю следующим образом
    В модуле формы
    <code>
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
                    ТД=Элементы.Товары.ТекущиеДанные;
                    ТД.ЕдиницаИзмерения=ОбщиеФункцииСервер.ПолучитьЕдИзм(ТД.Номенклатура);
                    ПересчитатьСумму()
     
    КонецПроцедуры
    И в общем модуле
    Функция ПолучитьЕдИзм(Ссылка) Экспорт
                    СсылкаЕдиница=Ссылка.БазоваяЕдиница;
                    ЕдИзм=Справочники.ЕдиницыИзмеренияНоменклатуры;
                    НайденнаяСсылка= ЕдИзм.НайтиПоРеквизиту(“ЕдиницаПоКлассификатору”,СсылкаЕдиница,,Ссылка);
                    Если НайденнаяСсылка=ЕдИзм.пустаяСсылка () тогда
                                   Сообщить(“Нет базовой единицы в справочнике Единицы измерения Номенклатуры”);
                                   СозданиеНовойЕдиницы(ЕдИзм,СсылкаЕдиница);
                    КонецЕсли;
                    Возврат НайденнаяСсылка;
                   
    КонецФункции // ПолучитьЕдИзм()
     
    Функция СозданиеНовойЕдиницы(ЕдИзм,Ссылка)
                    НовЭлемент=ЕдИзм.СоздатьЭлемент();
                    НовЭлемент.ЕдиницаПоКлассификатору=Ссылка.БазоваяЕдиница;
                    НовЭлемент.К=1;
                    НовЭлемент.Владелец=Ссылка;
                    НовЭлемент.Записать();
                    Возврат(НовЭлемент.Ссылка);             
    КонецФункции // СозданиеНовойЕдиницы()
    /<code>
     
    Для бракованного товара сделал реквизит в обоих документах в таб частях, учитыва что в будущем в регистрах можно будет учитывать, для степеней брака создал справочник.
    В документе отгрузки сделал реквизит ФизЛицо булево, если физ лицо то очищаю контрагента и естественно его контактное лицо, если Не физЛицо то не провожу документ пока не заполнены контрагент и контактное лицо.
    В модуле формы документа
    <code>
     
    Процедура ПродажаФизЛицуПриИзменении(Элемент)
                    Если Объект.ПродажаФизЛицу=Истина тогда
                                   Объект.Контрагент=””;
                                   Объект.КонтактноеЛицо=””;
                                   Элементы.Контрагент.Видимость=Ложь;
                                   Элементы.КонтактноеЛицо.Видимость=Ложь;
                    Иначе
                                   Элементы.Контрагент.Видимость=Истина;
                                   Элементы.КонтактноеЛицо.Видимость=Истина;
                    КонецЕсли;
    КонецПроцедуры
    /<code>
     
    Изготовил документ Контакты, проблем не было.
    Сделал ввод документов покупки и продажи на основании справочника контрагенты с заполнением по последнему проведенному документу
    Для документа закуп товара: (для реализации аналогично)
    <code>
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
                    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
                    // Данный фрагмент построен конструктором.
                    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
                    Если ТипЗнч(ДанныеЗаполнения) = Тип(“СправочникСсылка.Контрагенты”) Тогда
                                   // Заполнение шапки
                                   Поставщик = ДанныеЗаполнения.Ссылка;
                    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
                    // Данный фрагмент построен конструктором.
                    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
     
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                                   “ВЫБРАТЬ ПЕРВЫЕ 1
                                   |             ЗакупТовара.Ссылка,
                                   |             ЗакупТовара.МоментВремени КАК МоментВремени
                                   |ИЗ
                                   |             Документ.ЗакупТовара КАК ЗакупТовара
                                   |
                                   |УПОРЯДОЧИТЬ ПО
                                   |             МоментВремени УБЫВ”;
     
                    Результат = Запрос.Выполнить();
     
                    ВыборкаДетальныеЗаписи = Результат.Выбрать();
       
                    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                                                   // Заполнение шапки
                                                  
                                                  
                                   ТабЧасть=ВыборкаДетальныеЗаписи.Ссылка.Товары;           
                                   Для Каждого ТекСтрокаТовары Из ТабЧасть Цикл
                                                   НоваяСтрока = Товары.Добавить();
                                                   НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаТовары.ЕдиницаИзмерения;
                                                   НоваяСтрока.Количество = ТекСтрокаТовары.Количество;
                                                   НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
                                                   НоваяСтрока.СтепеньБрака = ТекСтрокаТовары.СтепеньБрака;
                                                   НоваяСтрока.Сумма = ТекСтрокаТовары.Сумма;
                                                   НоваяСтрока.Цена = ТекСтрокаТовары.Цена;
                                   КонецЦикла;
                    КонецЦикла;  
                    КонецЕсли;
                    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
    КонецПроцедуры
    /<code>
    Печать и подписи в документах также изготовил
    Для документа реализации основная процедура печати
    <code>
    Процедура Печать(ТабДок, Ссылка) Экспорт
                    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
                    Макет = Документы.РеализацияТовара.ПолучитьМакет(“Печать”);
                    Запрос = Новый Запрос;
                    Запрос.Текст =
                    “ВЫБРАТЬ
                    |             РеализацияТовара.Дата,
                    |             РеализацияТовара.Номер,
                    |             РеализацияТовара.Товары.(
                    |                             НомерСтроки,
                    |                             Номенклатура,
                    |                             СтепеньБрака,
                    |                             ЕдиницаИзмерения,
                    |                             Количество,
                    |                             Цена,
                    |                             Сумма
                    |             ),
                    |             РеализацияТовара.Контрагент,
                    |             РеализацияТовара.КонтактноеЛицо
                    |ИЗ
                    |             Документ.РеализацияТовара КАК РеализацияТовара
                    |ГДЕ
                    |             РеализацияТовара.Ссылка В(&Ссылка)”;
                    Запрос.Параметры.Вставить(“Ссылка”, Ссылка);
                    Выборка = Запрос.Выполнить().Выбрать();
     
                    ОбластьЗаголовок = Макет.ПолучитьОбласть(“Заголовок”);
                    Шапка = Макет.ПолучитьОбласть(“Шапка”);
                    ОбластьТоварыШапка = Макет.ПолучитьОбласть(“ТоварыШапка”);
                    ОбластьТовары = Макет.ПолучитьОбласть(“Товары”);
                    Подвал=Макет.ПолучитьОбласть(“Подвал”);
                    ТабДок.Очистить();
     
                    ВставлятьРазделительСтраниц = Ложь;
                    Пока Выборка.Следующий() Цикл
                                   Если ВставлятьРазделительСтраниц Тогда
                                                   ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
                                   КонецЕсли;
                                   ОбластьЗаголовок.Параметры.Название=”Торг-12″;
                                   Если Выборка.Контрагент=Справочники.Контрагенты.ПустаяСсылка()тогда
                                                   ОбластьЗаголовок.Параметры.Название=”Товарный чек”;
                                   КонецЕсли;      
                                                  
                                   ТабДок.Вывести(ОбластьЗаголовок);
     
                                   Шапка.Параметры.Заполнить(Выборка);
                                   ТабДок.Вывести(Шапка, Выборка.Уровень());
     
                                   ТабДок.Вывести(ОбластьТоварыШапка);
                                   ВыборкаТовары = Выборка.Товары.Выбрать();
                                   Пока ВыборкаТовары.Следующий() Цикл
                                                   ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
                                                   ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
                                   КонецЦикла;
                                    Подвал.Параметры.Пользователь=ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
                                   Подвал.Параметры.КонтЛицо=Выборка.КонтактноеЛицо.Наименование;
            ТабДок.Вывести(Подвал);
                                   ВставлятьРазделительСтраниц = Истина;
                    КонецЦикла;
    КонецПроцедуры
    /<code>

  37. Создал спр-ки Качество и Сотрудники, перечисление ЮрФизЛицо,Док-т Контакт
    В док-те ПоступлениеТМЦ рекв-т шапки Поставщик, в табл.части Товары – Номенклатура,Единица,Количество,Цена,Сумма,Качество)
    Док-т Реализация (шапка Покупатель,КонтактноеЛицо,Итог. ТЧ аналогично ПоступлениеТМЦ)
    Для всех документов настраиваем Связи параметров выбора для рекв. КонтактноеЛицо
    Для обработки ввода на основании для док-ов в процедуре ОбработкаЗаполнения через запрос находим последний документ и
    если в выборке есть строки загружаем в ТЧ нового документа ТЧ последнего и копируем реквизиты шапки
    Печатную форму создаем через конструктор макета. В получившемся коде добавляем проверку на ЮрФизЛицо и через функцию ЧислоПрописью
    выводим Итог из Реализации

  38. 1. Добавил спр-к Сотрудники с реквизитом Должность (спр-к Должности).
    2. Добавил в спр-ке Контрагенты реквизиты: ВидКонтрагента (Перечисления.ВидыКонтрагентов – ЮрЛицо, ФизЛицо), Собственный (Булево) , Сотрудник (спр-к Сотрудники, для фиксации покупки от подотчетников)
    3. Добавил спр-к ВидыБрака с реквизитом СтепеньБрака(Перечисление.СтепениБрака)
    4. Создал документы: ПриходнаяНакладная, РасходнаяНакладная, Контакт
    В приходной накладной добавил все что требовалось, плюс сделал пересчет суммы, также фиксирую СуммуВсего перед записью. Для брака заведен реквизит табл. части  Брак(булево) и ВидБрака(спр-к ВидыБрака)
    В расходной накладной затруднений не возникло.
    В док-те Контакт добавил реквизит Сотрудник(спр-к Сотрудники), при выборе открывается единственная предопр. группа Менеджеры. Можно  было просто сделать отбор по должности, но не стал :)
    5.  Для автозаполнения на основании контрагента сделал процедуру РаботаСДокументами.ЗаполнитьНаОсновании с обходом реквизитов через Метаданные.
    Последний проведенный документ получаю запросом используя “Выбрать Первые 1” и упорядочивание по “МоментВремени УБЫВ”.  Результат запроса проверяю на пустой.
    6. Печать сделал конструктором и изменил как требовалось, используя шаблоны и параметры в макете.
    Задание выполнено.

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

  40. Задание выполнено.
    Для реализации закупки от поставщика или сотрудника реквизит сделал составным. В качестве типа используется справочник контрагентов и новый справочник “Сотрудники”. При выборе номенклатуры в поступлении используется отбор по базовой единице измерения в справочнике “ЕдиницыИзмерения”. В табличной части заведены реквизиты: номенклатуры, количество, цена, сумма и степень брака. Для степеней брака заведен отдельный справочник.
    В реализации добавлен реквизит “Скидка” для реализации бракованного товара. Для определения юрлица и физлица в справочник контрагентов заведен реквизит “ЮрФизЛицо” и создано перечисление “ЮрФизЛицо” со значениями: ЮрЛицо и ФизЛицо.
    Для фиксации контактов создан документ “Контакты”. Виды контактов описаны в перечислении и используются в реквизите документа.
    Ввод на основании также реализован. Данные последнего проведенного домента получаются запросом через “ВЫБРАТЬ ПЕРВЫЕ 1” и сортировкой документа по убыванию. Заполнение происходит через “ЗаполнитьЗначенияСвойств” и Товары.Загрузить()
    Печатная форма также сделана. Заголовок меняется в зависимости от ЮрФизЛица контрагента. В подвале сумма прописью выводится через “ЧислоПрописью”
    Так же для документов поступления и реализации реализовано:
    – если количество = 0, то при изменении номенклатуры количество устанавливается равным 1
    – при изменении количества пересчитывается сумма
    – при изменении цены пересчитывается сумма
    – при изменении суммы рассчитывается цена (сумма/количество), учитывая, что количество может быть равно 0

    • Хотя для учета бракованного товара лучше было бы завести справочник не только для учета брака, а для учета состояния товара. Т.е. любой товар может быть с каким-то состоянием. Например, “Брак”, “Восстановлен”, “Новый”. И любой товар с любым состоянием должен быть зафиксирован потом в регистре. Это и для учета проще, когда есть какое-то значение, а не просто пустая ссылка. И для отчетов нагляднее. Хотя…. может быть, в заданиях есть свой какой-то скрытый смысл  :)

      • Все верно, лучше иметь отдельный справочник.