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

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

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

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

  1. Фармацевт 25.11.2012 в 11:47

    1. Создала в д-тах реквизит ВидОперации, тип: перечисление(ПоПкупкаПродажа, ОтветХранение)
    2. По УУ документ проводится, если вид окупкаПродажа. По БУ изменилась функция

    Функция ПолучитьДанныеПоТМЦДокумента(Ссылка, Дата, КорСчет, КорСубконто = Неопределено,ОтветХр=0) Экспорт

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

    КонецФункции

    И для расхода:

    Процедура ДвиженияПоОстаткамБух(Отказ)

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

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

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

        ВыборкаТовары= Результат.Выбрать();

        Пока ВыборкаТовары.Следующий() Цикл
           
            Нехватка = ВыборкаТовары.Количество - ВыборкаТовары.КоличествоОстаток;
            Если Нехватка>0 Тогда
           
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Нехватка товара "+ВыборкаТовары.Номенклатура+" составляет "+Нехватка+" единиц";
                Сообщение.Сообщить();
           
            КонецЕсли;
           
            Проводка = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
            Проводка.Период = Дата;
            Проводка.Подразделение = Подразделение;
            Если ВидОперации = Перечисления.ВидыОпераций.Покупка_продажа Тогда
                Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Себестоимость;
                Проводка.СчетКт = ПланыСчетов.Хозрасчетный.Товары;
                Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Товары] = ВыборкаТовары.Номенклатура;
            ИначеЕсли ВидОперации = Перечисления.ВидыОпераций.ОтветХранение Тогда
                Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ПустаяСсылка();
                Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ОтветХранение;
                Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Товары] = ВыборкаТовары.Номенклатура;
                Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;
            КонецЕсли;
            Проводка.КоличествоКт = ВыборкаТовары.Количество;
                   
            Если ВыборкаТовары.КоличествоОстаток = 0 Тогда
                Проводка.Сумма = ВыборкаТовары.СуммаОстаток;
            Иначе
                Проводка.Сумма = ВыборкаТовары.Количество*ВыборкаТовары.СуммаОстаток/ВыборкаТовары.КоличествоОстаток;
            КонецЕсли;
           
        КонецЦикла;
       
        Если ВидОперации = Перечисления.ВидыОпераций.Покупка_продажа Тогда
            Проводка = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
            Проводка.Период = Дата;
            Проводка.СчетДт = ПланыСчетов.Хозрасчетный.Покупатели;
            Проводка.СчетКт = ПланыСчетов.Хозрасчетный.Выручка;
            Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;
            Проводка.Сумма = СуммаДокумента;
        КонецЕсли;

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

    3. В документы, имеющие отношение к БУ, добавлен реквизит Подразделение. В регистр Хозрасчетный – измерение Подразделение. В процедуры проведения добавлено задание подразделения в проводках.
    4. Авизо

    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
        Движения.РегистрБухгалтерииХозрасчетный.Записывать = Истина;
        ТЗ = Новый ТаблицаЗначений;
        //ТЗ.Колонки.Добавить("Период","СчетДт","СубконтоДт1","ВидСубконтоДт1","СубконтоДт2","ВидСубконтоДт2","СчетКт","СубконтоКт1","ВидСубконтоКт1","СубконтоКт2","ВидСубконтоКт2","Количество","Сумма");
        Движение = Движения.РегистрБухгалтерииХозрасчетный.Добавить();
        Движение.Период = Дата;
        //Тип = Счет.ВидыСубконто.Получить(0)[1].ТипЗначения;
        Если Счет.Вид = ВидСчета.Активный ИЛИ Счет.Вид = ВидСчета.АктивноПассивный Тогда
            Движение.СчетДт = ПланыСчетов.Хозрасчетный.ОбособленныеПодразделения;
            Движение.СубконтоДт.Подразделения = Получатель;
            Движение.Подразделение = Отправитель;
            Движение.СчетКт = Счет;
            Если Счет.ВидыСубконто.Количество()>0 Тогда
                Движение.СубконтоКт[Счет.ВидыСубконто[0].ВидСубконто] = Субконто1;
            КонецЕсли;
            Если Счет.ВидыСубконто.Количество()=2 Тогда
                Движение.СубконтоКт[Счет.ВидыСубконто[1].ВидСубконто] = Субконто2;
            КонецЕсли;
            Если Счет.Количественный Тогда
                Движение.КоличествоКт = Количество;  
            КонецЕсли;
        Иначе
            Движение.СчетКт = ПланыСчетов.Хозрасчетный.ОбособленныеПодразделения;
            Движение.СубконтоКт.Подразделения = Отправитель;
            Движение.Подразделение = Получатель;
            Движение.СчетДт = Счет;
            Если Счет.ВидыСубконто.Количество()>0 Тогда
                Движение.СубконтоДт[Счет.ВидыСубконто[0].ВидСубконто] = Субконто1;
            КонецЕсли;
            Если Счет.ВидыСубконто.Количество()=2 Тогда
                Движение.СубконтоДт[Счет.ВидыСубконто[1].ВидСубконто] = Субконто2;
            КонецЕсли;
            Если Счет.Количественный Тогда
                Движение.КоличествоДт = Количество;  
            КонецЕсли;
        КонецЕсли;
        Движение.Сумма = Сумма;

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

    5. Отчеты сформированы с помощью СКД
    ОСВ по счету, запрос:

    ВЫБРАТЬ
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.Субконто1,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.Субконто2,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.СуммаОборотДт,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.СуммаОборотКт,
        РегистрБухгалтерииХозрасчетныйОстаткиИОбороты.Счет
    ИЗ
        РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.ОстаткиИОбороты(, , , , Счет В ИЕРАРХИИ (&Счет), , Подразделение В (&Подразделение)) КАК РегистрБухгалтерииХозрасчетныйОстаткиИОбороты

    Баланс:

    ВЫБРАТЬ
        РегистрБухгалтерииХозрасчетныйОстатки.Счет,
        ВЫБОР
            КОГДА РегистрБухгалтерииХозрасчетныйОстатки.Счет.Вид = &Пассивный
                ТОГДА РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокКт
            ИНАЧЕ РегистрБухгалтерииХозрасчетныйОстатки.СуммаОстатокДт
        КОНЕЦ КАК Сумма,
        ВЫБОР
            КОГДА РегистрБухгалтерииХозрасчетныйОстатки.Счет.Вид = &Пассивный
                ТОГДА "Пассив"
            ИНАЧЕ "Актив"
        КОНЕЦ КАК Вид
    ИЗ
        РегистрБухгалтерии.РегистрБухгалтерииХозрасчетный.Остатки(, (НЕ Счет.Забалансовый), , ) КАК РегистрБухгалтерииХозрасчетныйОстатки