Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Нетиповые задачки по б/у

Нетиповые задачки по б/у
Я
   ivangrant
 
20.03.19 - 16:38
Решаю тестовые задачки по БУ от автора экзамена 1С: Спец.
Но даже подобных не могу найти в билетах :(
Даже решение сравнить не с чем.
Может кто-то видел их или решал?
ДЗ
_____
Необходимо создать документ «Операция», с помощью которого пользователь должен иметь возможность ввести проводки с произвольной корреспонденцией счетов. При решении задачи следует учитывать возможность наличия проводок, сформированных с помощью данного документа.
Компания занимается торговлей продуктами питания. Учет товаров ведется в разрезе сроков годности. Под сроком годности понимается календарная дата, до которой товар годен к употреблению. На один и тот же товар с разными сроками годности при его поступлении может указываться разная цена. Например, на товар со сроком годности 10 января 2010 цена может быть ниже, чем на товар со сроком годности 30 января 2010. Товар с одинаковым сроком годности может поступать разными документами и по разной цене. Возможна ситуация когда в одном документе один и тот же товар поступает с разными сроками годности (и по разной цене). Учет товаров в разрезе складов не ведется.
Документ «Приходная накладная» реализует следующую проводку:
Дт «Товары» - Кт «Поставщики» на количество и сумму закупаемого товара.
Продажа товара регистрируется документом «Расходная накладная». Срок годности указывается в табличной части документа. Себестоимость рассчитывается как средняя по номенклатурной позиции в разрезе срока годности.
Документ «Расходная накладная» реализует следующие проводки:
Дт «Прибыли и убытки» - Кт «Товары» на количество и сумму себестоимости;
Дт «Покупатели» - Кт «Прибыли и убытки» на сумму в продажных ценах.
При первоначальном проведении документа «Расходная накладная» себестоимость не формируется. Фиксируется только количество продаваемого товара.
Для формирования себестоимости списываемых товаров необходимо запустить специальную обработку «Формирование себестоимости», которая для всех расходных накладных, введенных в заданном в обработке периоде, переформирует необходимые проводки с учетом рассчитанной на момент проведения документа себестоимости.
_________

+ ДЗ
_________
Необходимо создать документ «Операция», с помощью которого пользователь должен иметь возможность ввести проводки с произвольной корреспонденцией счетов. При решении задачи следует учитывать возможность наличия проводок, сформированных с помощью данного документа.
Компания занимается закупкой, сборкой и продажей мебели. Покупать и продавать можно как отдельные детали, так и мебель в целом. Факт закупки отражается документом «Приходная накладная», факт продажи – документом «Расходная накладная».
Каждый вид мебели состоит из отдельных деталей. Например, стол состоит из четырех ножек и столешницы. В информационной базе необходимо хранить информацию о том, какая мебель, из каких деталей состоит. Один вид мебели не может в качестве детали использовать другой вид мебели.
Для описания каждого вида мебели к нему добавляется произвольное количество характеристик. Набор этих характеристик является свойством. Например: стол «обеденный, дубовый» или стул «офисный, металлический, белый». «Офисный», «белый» это характеристики, а «офисный, металлический, белый» это свойство. Учет мебели, но не деталей, ведется в разрезе ее свойств. Механизм свойств должен быть реализован с помощью плана вида характеристик. Одно и то же свойство может быть указано у различных видов мебели.
Документ «Приходная накладная» формирует следующие проводки:

Дт «Товары» - Кт «Поставщики»

на количество и сумму закупаемой мебели.

Дт «Материалы» - Кт «Поставщики»

на количество и сумму закупаемых деталей.

Документ «Расходная накладная» формирует следующие проводки:

Дт «Прибыли и убытки» - Кт «Товары»

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

Дт «Прибыли и убытки» - Кт «Материалы»

на количество и сумму себестоимости продаваемой деталей. Себестоимость рассчитывается как средняя для каждой детали по каждому складу.

Дт «Покупатели» - Кт «Прибыли и убытки»
на сумму в продажных ценах.
Операция сборки мебели оформляется в системе с помощью документа «Сборка». В шапке этого документа указывается склад, с которого происходит списание деталей, и склад, на который приходуется готовая продукция. В табличной части документа - собираемая мебель и ее количество.
Документ «Сборка» формирует следующие проводки:
Дт «Основное производство» - Кт «Материалы»
на списываемое количество деталей и их себестоимость. Себестоимость деталей рассчитывается так же, как и в случае продажи.
Дт «Товары» - Кт «Основное производство»
на собранное количество мебели и на стоимость списанных деталей.
________________

Заранее спасибо.
 
 
   Cyberhawk
 
1 - 20.03.19 - 16:39
Пожалуйста
   palsergeich
 
2 - 20.03.19 - 16:56
Вопрос то в чем?
   ivangrant
 
3 - 04.04.19 - 09:27
Прдолжаю бороться с задачками. В приниципен все решил)
Осталось разобраться с документом Сборка.
Проблема в записи регистра бухгалтерии. При списании и проверке на остатки, детали списываются корректно, себестоиомсть тоже пересчитывается.
А при записи собранного товара, у меня каждая запись дублируется на каждое количество списания каждой детали.
То есть, три детали одного собранного товара списались, и тут же второй проводкой этот собранный товар записался три раза.
Как можно настроить, чтобы вторая проводка была только по количеству добавленного товара?
________________
Процедура ОбработкаПроведения(Отказ, Режим)

    //Программное удаление существующих движений при перепроведении документа путем записи «пустого набора»

    Движения.Управленческий.Записывать = Истина;
    Движения.Управленческий.Записать();
    
    //Установка управляемых блокировок на записи тех таблиц информационной базы, к данным которых будут применены внутри транзакции операции и чтения, и записи

    Блокировка = новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
    ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Материалы);
    ЭлементБлокировки.УстановитьЗначение(ПланыВидовХарактеристик.ВидыСубконто.Склад, СкладСписания);
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = Товар;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Наименование");
    Блокировка.Заблокировать();

        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    
    //Получение необходимых данных для формирования набора записей регистра

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

        |ВЫБРАТЬ
        |    УправленческийОстатки.Субконто1 КАК Номенклатура,
        |    УправленческийОстатки.Субконто3 КАК Склад,
        |    СУММА(УправленческийОстатки.СуммаОстаток) КАК СуммаОстаток,
        |    СУММА(УправленческийОстатки.КоличествоОстаток) КАК КоличествоОстаток
        |ПОМЕСТИТЬ ВТ_РегистрМатериалы
        |ИЗ
        |    РегистрБухгалтерии.Управленческий.Остатки(&МоментВремени, Счет = &Материалы, , ) КАК УправленческийОстатки
        |
        |СГРУППИРОВАТЬ ПО
        |    УправленческийОстатки.Субконто1,
        |    УправленческийОстатки.Субконто3
        |;
        |
        ////////////////////////////////////////////////////////////////////////////////

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

                    Если ВыборкаДетальныеЗаписи.КоличествоОстаток <= 0 Тогда
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Отсутствует товар "+ВыборкаДетальныеЗаписи.Деталь+" на этом складе.";
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЕсли;
            
            Если Отказ Тогда
                Продолжить;
            КонецЕсли;
            
            //Проверяем остатки

        Нехватка = ВыборкаДетальныеЗаписи.КоличествоДетали - ВыборкаДетальныеЗаписи.КоличествоОстаток;
        Если Нехватка > 0 Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Недостаточно товара: " +ВыборкаДетальныеЗаписи.НаименованиеДетали+" в количестве "+Нехватка+" шт.";
            Сообщение.Сообщить(); 
        КонецЕсли;
        
                    Если Отказ Тогда
                Продолжить;
            КонецЕсли;
            
            //Считаем себестоиомсть

                    Если ВыборкаДетальныеЗаписи.КоличествоДетали = ВыборкаДетальныеЗаписи.КоличествоОстаток ИЛИ ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда
            СуммаСписания = ВыборкаДетальныеЗаписи.СуммаОстаток;
        Иначе
            СуммаСписания = ВыборкаДетальныеЗаписи.КоличествоДетали * ВыборкаДетальныеЗаписи.СуммаОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток;
        КонецЕсли;
            
        // Записываем в регистр Управленческий 

        Движение = Движения.Управленческий.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
        Движение.СчетКт = ПланыСчетов.Управленческий.Материалы;
        Движение.Период = Дата;
        Движение.Сумма = СуммаСписания;
        Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДетали;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.НаименованиеДетали;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = СкладСписания;
        
        Если НЕ Отказ Тогда    
        // Записываем в регистр Управленческий 

        Движение = Движения.Управленческий.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
        Движение.СчетКт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
        Движение.Период = Дата;
        Движение.Сумма = СуммаСписания;
        Движение.КоличествоДт = 1;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.НаименованиеТовара;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = СкладПриходования;
        КонецЕсли;
        
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


    
        //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!



    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры
___________
   catena
 
4 - 04.04.19 - 10:28
(3)Не добавлять товар в цикле по деталям.
   ivangrant
 
5 - 04.04.19 - 10:46
То есть после цикла по деталям сделать отдельный по товару?
   ivangrant
 
6 - 04.04.19 - 10:49
Еща вариант нашел: добавить в цикл по деталям:
_______
[code]
        // Записываем в регистр Управленческий 


        Движение = Движения.Управленческий.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
        Движение.СчетКт = ПланыСчетов.Управленческий.Материалы;
        Движение.Период = Дата;
        Движение.Сумма = СуммаСписания;
        Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДетали;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.НаименованиеДетали;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = СкладСписания;
        
СебестоимостьТовара = СебестоимостьТовара + Движение.СуммаСписания;

        Если НЕ Отказ Тогда    
        // Записываем в регистр Управленческий 


        Движение = Движения.Управленческий.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
        Движение.СчетКт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
        Движение.Период = Дата;
Движение.Сумма = СебестоиомстьТовара;
        Движение.КоличествоДт = 1;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.НаименованиеТовара;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = СкладПриходования;
        КонецЕсли;
        
    КонецЦикла;
    
[/code]

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.