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

Приступайте к восьмому занятию базового курса.

ps. На этой странице не нужно отчитываться о выполнении ДЗ.

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

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

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

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

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

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

    Если ВыборкаДетальныеЗаписи.Следующий()
    Тогда
    Возврат ВыборкаДетальныеЗаписи.Цена;
    КонецЕсли;
    КонецФункции
    Пересчет суммы по цене и количеству.
    &НаКлиенте
    Процедура ТоварыКоличествоПриИзменении(Элемент)
    Элементы.Товары.ТекущиеДанные.Сумма = Элементы.Товары.ТекущиеДанные.Цена*Элементы.Товары.ТекущиеДанные.Количество
    КонецПроцедуры

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

    Возврат Константы.ВариантПересчета.Получить();

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

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

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

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

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

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