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

  1. Aleksandr.nett 06.02.2016 в 19:07

    Домашнее задание № 7 Блок 2.
    Созаем структуру конфигурации:
    Подсистемы: Блок2
    Справочники: Контрагенты, КонтактныеЛица, СтепениБракаТоваров , ФизическиеЛица
    Документы: ПоступлениеТоваров, РеализацияТоваров, КонтактСКлиентами
    Перечисления: ВидыКонтактовСКонтрагентами

    Для документов : ПоступлениеТоваров, РеализацияТоваров на владке Ввод на основании добавляем Справочник Контрагенты.

    //Реализуем алгоритм в модуле документа ПоступлениеТоваров//
    <

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

    //Реализуем алгоритм в модуле ФормыДокумента – ПоступлениеТоваров//
    //И в модуле Формы Документа – РеализацияТоваров

    <

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

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

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

    //Реализуем алгоритм в модуле документа РеализацияТоваров//

    <

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

    //Реализуем универсальный алгоритм получения последнего документа (для поступления и реализации) в общем модуле в Функции
    ПолучитьДанныеПоследнегоДокумента.
    <

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

    //Реализуем алгоритм печати документа Реализация в модуле менеджера.
    <

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

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

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

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

            Если ТипЗнч(Ссылка[0].Контрагент) = Тип("СправочникСсылка.Контрагенты") Тогда
           
               ОбластьЗаголовок.Параметры.ВидДокумента = "ТОГР-12";   
           
            ИначеЕсли ТипЗнч(Ссылка[0].Контрагент) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
               
                ОбластьЗаголовок.Параметры.ВидДокумента = "Товарный чек";
               
            КонецЕсли;
           
            ТабДок.Вывести(ОбластьЗаголовок);

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

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

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

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

    Создадим в документе реализация Макет Печать и Команду Печать с помощью конструктора печати.

    Реализуем алгоритм команды Печать
    <

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

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

    &НаСервере
    Процедура Печать(ТабДок, ПараметрКоманды)
        Документы.РеализацияТоваров.Печать(ТабДок, ПараметрКоманды);
    КонецПроцедуры
    <
  2. rustamakhmetov 04.12.2015 в 13:51

    1. Спр. Контрагенты добавлен реквизит “ОрганизационнаяФорма” ссылающийся на перечисление “ОрганизационнаяФормаКонтрагентов” (варианты: ФизическоеЛицо, ЮридическоеЛицо)

    2. Добавлен спр. “БракТовара”

    3. Добавлен документ “ПоступлениеТоваров” с реквизитом “Поставщик” (составной: спр. Контрагенты, спр. Пользователи), табл. частью “Товары” содержащей поля “Номенклатура, ЕдиницаИзмерения, Количество(Число 15,2), Цена(Число 15,2), Сумма(Число 15,2)”. Поле “Сумма” расчетное, недоступно для изменения.
    Форма документа:

    &НаКлиенте
    Процедура ТоварыКоличествоПриИзменении(Элемент)
        // Вставить содержимое обработчика.
        ОбщегоНазначенияКлиент.РассчитатьСумму(Элементы.Товары.ТекущиеДанные);
    КонецПроцедуры

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

    &НаСервере
    Функция ТоварыНоменклатураПриИзмененииНаСервере(Номенклатура)
        // Вставить содержимое обработчика.
        Возврат Номенклатура.БазоваяЕдиница;
    КонецФункции


    &НаКлиенте
    Процедура ТоварыЦенаПриИзменении(Элемент)
        // Вставить содержимое обработчика.
        ОбщегоНазначенияКлиент.РассчитатьСумму(Элементы.Товары.ТекущиеДанные);
    КонецПроцедуры

    модуль документа:

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

    4. Добавлен документ “РеализацияТоваров” с реквизитами “Контрагент”, “КонтактноеЛицо” (связано с рекв. “Контрагент”), табл. часть аналогичная документу “ПоступлениеТоваров”. Модуль объекта и модуль формы практически аналогичны док. “ПоступлениеТоваров”.
    С помощью конструктора сформирована печатная форма “ТОРГ-12”
    Модуль команды:

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

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

    &НаСервере
    Процедура Печать(ТабДок, ПараметрКоманды)
        Документы.РеализацияТоваров.Печать(ТабДок, ПараметрКоманды);
    КонецПроцедуры

    Модуль менеджера док. “РеализацияТоваров”

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

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

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

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

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

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

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

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

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