Один Ответ на “Продвинутый курс. Занятие №1”

  1. Андрей 26.03.2016 в 15:18

    1. Создал пустую базу и загрузил в нее каркасную конфигурацию.
    2. Создал общий модуль РегистрацияВЖурнале с флагами сервер и вызов сервера. В котором поместил две процедуры:

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

    Процедура ЗафиксироватьИзменениеЦены(ДокОбъект,Номенклатура,СтараяЦена,НоваяЦена)
       
        МетаОбъека = ДокОбъект.Метаданные();
        ЗаписьЖурналаРегистрации("ИзмЦен."+МетаОбъека.Имя,,МетаОбъека,ДокОбъект.Ссылка,"Товар: "+Номенклатура+", цена старая: "+СтараяЦена+", новая: "+НоваяЦена);
       
    КонецПроцедуры

    В модуле объекта документов в процедуре ПередЗаписью сделал вызов:

        Если ЭтотОбъект.Проведен Тогда
            РегистрацияВЖурнале.ПроверитьИзменениеЦен(ЭтотОбъект);
        КонецЕсли;

    При изменении цен в проведенном документе происходит логирование.

    3. В общий модуль РегистрацияВЖурнале добавил функцию:

    Функция ПрочитатьЖурналИзменениеЦен() Экспорт
       
        Таблица = Новый ТаблицаЗначений;
       
        МассивСобытий = Новый Массив;
        МассивСобытий.Добавить("ИзмЦен.РеализацияТоваровИУслуг");
        МассивСобытий.Добавить("ИзмЦен.ПоступлениеТоваровИУслуг");
           
        Фильтр = Новый Структура("Событие",МассивСобытий);
       
       
        ВыгрузитьЖурналРегистрации(Таблица,Фильтр);
       
        Возврат Таблица;
       
    КонецФункции

    Создал отчет в функции СформироватьОтчетНаСервере() сделал вызов этой функции

    Журнал = РегистрацияВЖурнале.ПрочитатьЖурналИзменениеЦен();

    Сделал сортировку по пользователю:

    Журнал.Сортировать("ИмяПользователя");

    И вывел данные в отчет.