Продвинутый курс. Домашнее задание №13
Эта запись посвящена второму потоку продвинутого курса по программированию.
Для выполнения рекомендуется изучить следующие главы 2-го блока.
Глава 9. Расчет стоимости.
Глава 10. Кейсы.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
— залогиньтесь.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.
Задание выполнил.
При решении использовал учет по альтернативному методу FIFO (РАУЗ). При проведении документов «Поступление товаров и услуг» и «Реализация товаров и услуг» двигается созданный регистр накопления СуммаТоваров, соответственно приход и расход. Сумма списания рассчитывается по плановой себестоимости товара, хранящейся в регистре сведений ПлановаяСебестоимость.
В конце месяца вводится документ «Закрытие месяца» корректирующий сумму списания себестоимости по альтернативному методу FIFO. Модуль объекта документа «Закрытие месяца»:
<code>
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.СуммаТоваров.Очистить();
Движения.СуммаТоваров.Записать();
Движения.СуммаТоваров.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| СуммаТоваровОстаткиИОбороты.Номенклатура КАК Номенклатура,
| СуммаТоваровОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
| СуммаТоваровОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
| СуммаТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
| СуммаТоваровОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
| СуммаТоваровОстаткиИОбороты.КоличествоПриход,
| СуммаТоваровОстаткиИОбороты.СуммаПриход,
| СуммаТоваровОстаткиИОбороты.Регистратор
|ИЗ
| РегистрНакопления.СуммаТоваров.ОстаткиИОбороты(&ДатаНачала, &ДатаКонца, Регистратор, , ) КАК СуммаТоваровОстаткиИОбороты
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| СуммаТоваровОстаткиИОбороты.Регистратор.МоментВремени УБЫВ
|ИТОГИ
| СУММА(КоличествоНачальныйОстаток),
| СУММА(СуммаНачальныйОстаток),
| СУММА(КоличествоКонечныйОстаток),
| СУММА(СуммаКонечныйОстаток)
|ПО
| Номенклатура”;
Запрос.УстановитьПараметр(“ДатаКонца”, КонецМесяца(ДатаЗакрытия));
Запрос.УстановитьПараметр(“ДатаНачала”, НачалоМесяца(ДатаЗакрытия));
Результат = Запрос.Выполнить();
ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.КоличествоКонечныйОстаток < 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Недостаточно товара ” + ВыборкаНоменклатура.Номенклатура;
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
Если НЕ Отказ Тогда
ВыборкаДокумент = ВыборкаНоменклатура.Выбрать();
ОсталосьРаспределить = ВыборкаНоменклатура.КоличествоКонечныйОстаток;
СуммаОстаток = 0;
Пока ВыборкаДокумент.Следующий() И ОсталосьРаспределить > 0 Цикл
Количество = Мин(ОсталосьРаспределить, ВыборкаДокумент.КоличествоПриход);
Если ВыборкаДокумент.КоличествоПриход = 0 Тогда
СуммаОстаток = СуммаОстаток + ВыборкаДокумент.СуммаПриход;
Иначе
СуммаОстаток = СуммаОстаток + Количество * ВыборкаДокумент.СуммаПриход / ВыборкаДокумент.КоличествоПриход;
КонецЕсли;
КонецЦикла;
Если ОсталосьРаспределить > 0 Тогда
Количество = Мин(ОсталосьРаспределить, ВыборкаНоменклатура.КоличествоНачальныйОстаток);
Если ВыборкаНоменклатура.КоличествоНачальныйОстаток = 0 Тогда
СуммаОстаток = СуммаОстаток + ВыборкаНоменклатура.СуммаНачальныйОстаток;
Иначе
СуммаОстаток = СуммаОстаток + Количество * ВыборкаНоменклатура.СуммаНачальныйОстаток / ВыборкаНоменклатура.КоличествоНачальныйОстаток;
КонецЕсли;
КонецЕсли;
Движение = Движения.СуммаТоваров.ДобавитьРасход();
Движение.Период = КонецМесяца(ДатаЗакрытия);
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = 0;
Движение.Сумма = ВыборкаНоменклатура.СуммаКонечныйОстаток – СуммаОстаток;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
</code>
Здесь ДатаЗакрытия – реквизит документа типа Дата.
Для контроля возникновения коллизий при работе задним числом была создана последовательность СуммаТоваров со следующими свойствами:
Перемещение границ при провдении: Перемещать
Входящие документы: Документ.ЗакрытиеМесяца
Движения, влияющие на последовательность: РегистрНакопления.СуммаТоваров.
Последовательность восстанавливается с помощью обработки, в которой определяются и последовательно проводятся документы «Закрытие месяца», которые находятся после границы последовательности. Таким образом, при работе задним числом, перепроведение документов «Поступление товаров и услуг» и «Реализация товаров и услуг» не требуется.
Задание выполнил. С последовательностями ранее работал, но восстановление последовательности было очень интересно.
Обратная связь:
1. Новые темы для меня это пожалуй агрегаты и блокировка данных, СКД и бизнес-процессы – пока в изучения процессе :)
2. Затруднений не было.
3. В целом всего хватает. Что-то конкретное приходит на практике.
Задание выполнил.
По аналогии с уроками создал необходимые объекты. Регистр накопления СтоимостьТоваров с измерениями Номенклатура, Количество, Сумма. Последовательность ТорговыеДокументы. Добавил запись прихода в обработку проведения поступления товаров. Создал обработку ВосстановениеПоследовательности, которая определяет состав документов и допроводит их по регистру СтоимостьТоваров. Себестоимость списывается по среднескользящей оценке. В общем все как в видео. Затруднений в процессе не возникло.
*Регистр накопления СтоимостьТоваров с измерением Номенклатура и ресурсами Количество, Сумма.
Задание выполнил. Все, практически, как в уроках по среднескользящей оценке себестоимости. За одним исключением: условие на получения списка документов ставил на строгое неравенство (ведь в противном случае, когда >=, даже в восстановленной последовательности, если последный документ «Реализация», в запросе будет как минимум один документ). Просто при обработки сдвига границы последовательности НАЗАД документом «РеализацияТоваровУслуг» проходиться ставить границу не на МоментВремени документа, а, как вариант, на момент времени начало секунды документа (правда и здесь, между началом секунды и моментомВремени документа легко может оказаться даже не один документ, который попадет под восстановление последовательности, но зато у пользователя не будет вопросов).
Задани ебыло решено, отчёт ошибочно разместил в решении ДЗ №13*
Ок.
Задание выполнено
Создал РН остаткой СтоимостьНоменклатуры, измерение: Номенклатура, ресурсы: Количество и Стоимость, регистраторы: ПоступлениеТоваровИУслуг и РеализацияТоваровИУслуг. Изменил обработку проведения документа ПоступлениеТоваровИУслуг, добавив запись приходов по регистру СтоимостьНоменклатуры.
Движения по расходу для документа РеализацияТоваровИУслуг формируются допроведением при помощи регламентной обработкой восстановления последовательности. Для этого создал последовательность с перемещением границы при проведении “Не перемещать”, входящий документ РеализацияТоваровИУслуг, движения влияющие на последовательность – РН ОстаткиНоменклатуры. Ну и саму обработку восстановления последовательности. В обработке сделал запрос по аналогии с видеоуроками, расчет среднескользящей стоимости товара и запись расхода в РН СтоимостьНоменклатуры. После выполнения допроведения документа граница последовательности сдвигается на момент времени документа-регистратора.
Нигде не нашел просьбы оставить обратную связь, но поскольку другие участники курса её написали, вставлю свои “пять копеек”.
1. Агрегаты, блокировки данных, бизнес-процессы. Очень понравилась глава Кейсы и СКД. По СКД вообще открыл для себя много новых фишек, которые раньше не использовал.
2. Все доступно объясняется.
Сделал.
Для расчета стоимости использовал алгоритм среднескользящей оценки. Добавил, как в уроках,
регистр накопления Стоимость (номенклатура, количество, сумма), регистраторы – документы поступления и реализации. При проведении документа поступления делаются приходные движения в созданный регистр. Расходные движения для документа реализации производятся регламентно с помощью обработки восстановления последовательности. Далее создал последовательность (не перемещать), входящие документы – реализация, влияющие движения – РН Остатки.
Создал обработку восстановления последовательности.
В ней по полученной запросом последовательности документов производится контроль остатков, расчет себестоимости и запись в РН Стоимость расходных движений. Перед допроведением на регистр накладывается блокировка данных по номенклатуре. После каждого успешного допроведения сдвигается граница последовательности.
Обратная связь:
1.Блокировки, агрегаты, последовательности. Понравилась тема по расчету себестоимости. За СКД – отдельное спасибо.
2.Серьезных затруднений не возникло.
3.Кейсы.
Задание выполнила.
Добавила регистр накопления « СтоимостьТоваров». Регистраторы – документы ПоступлениеТоваров и РеализацияТоваров. В обработку проведения документа поступления добавлены строки для записи движений в новый регистр. Создала Последовательность: входящий документ РеализацияТоваров, движения влияющие на последовательность – РН «ОстаткиТоваров», границу – Не перемещать.
Создала обработку «ВосстановлениеПоследовательности». В ней запросом выбираются документы из таблицы Последовательность, момент времени которых >=границы последовательности.
При обходе результата запросом получаем списываемое количество и номенклатуру из РН «ОстаткиТоваров» по регистратору. Соединяем таблицу с РегистрНакопления.СтоимостьТоваров.Остатки левым соединением по номенклатуре, выбираем поля КоличествоОстаток и СтоимостьОстаток. Проверяю остатки. Если остатка хватает, выполняю движение расход по регистру «СтоимостьТоваров». Стоимость считаю по среднескользящей: Запись.Сумма=ВыборкаДетальныеЗаписи.Количество*ВыборкаДетальныеЗаписи.СтоимостьОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток;
Последовательность сдвигаю на ВыборкаДетальныеЗаписи.Регистратор.МоментВремени().
Обратная связь:
1. Много новой информации в темах агрегаты, блокировки данных, расчет себестоимости, кейсы. Бизнесс-процессы и СКД я еще не смотрела
2. Все изложено понятно, просто некоторые темы нужно просмотреть несколько раз и воспроизвести самостоятельно
3.На ваше усмотрение
Задание выполнил!
Т.к. по условию задания нельзя изменять концепцию контроля остатков при проведении расходных документов, я решил добавить еще один регистр накопления СтоимостиТоваров где дополнительной обработкой будут сформированы движения по стоимости товаров. Т.к. в задании не оговорено по какому методу формировать стоимости было решено учитывать стоимость по среднескользящему методу.
Создал Последовательность РасходныеДокументы с признаком НеПеремещать и входящими документами РеализацияТоваров. В ней при проведении будут регистрироваться РеализацииТоваров.
Далее создал обработку СписаниеСтоимостиТоваров, которая выбирает документы из последовательности РасходныеДокументы, получает остатки из регистра СтоимостиТоваров и выполняет добавление движения по документу регистратору. Запросы в обработке использовал такие же как в уроках по допроведению документов.
Обратная связь:
1. В данном блоке для меня было много новой информации (агрегаты, блокировки данных, альтернативный учет по ФИФО) и это я еще не смотрел главы 10 и 11:)
2. особенных затруднений не возникло
3.хотелось бы более подробно на примерах раскрыть тему по агрегатам.
Для учета стоимости номенклатуры использовал отдельный регистр сведений «Партии товаров» с измерениями «Номенклатура» и «Партия» и ресурсами «Количество» и «Стоимость». При проведении документов «Поступления» они делают движения по приходу в этот регистр.
Для реализации концепции контроля остатков «Сначала запись, потом проверка» использовал списание по плановой стоимости. Для хранения плановой стоимости создал периодический регистр сведений «Плановая цена номенклатуры» и при проведении документа «Реализация» стоимость определял как «Количество»* «Плановая цена» из регистра сведений, при этом измерение «Партия» не заполнялось. Контроль остатков по регистру «Партии товаров» осуществлялся полностью аналогично контролю остатков по регистру «Остатки товаров» и потребовал незначительной доработки процедур подписки на события. В принципе можно было не проверять остатки по партиям поскольку остатки проверялись по регистру «Остатки товаров», а движения по этим двум регистрам осуществляются синхронно, но для повышения надежности решения, учитывая, что в дальнейшем возможно различие, как в составе этих регистров, так и в документах осуществляющих их движения, проверку все же реализовал.
Для корректного списания по партиям в соответствии с методом FIFO у меня предназначалась регламентная обработка «Восстановление последовательности», которая автоматически определяя список документов для обработки на основе созданной последовательности «Партионный учет», допроводила документы «Реализации» выполняя уже корректный расход с указанием партий в регистре «Партии товаров» и с контролем общего остатки по номенклатуре.
Обратная связь.
Полностью новыми для меня были темы «Агрегаты», «Блокировки данных», «СКД», «Бизнесс-процессы».
Небольшие сложности возникли при изучении концепции альтернативного партионного учета (РАУЗ), пришлось прорабатывать ее несколько раз, пока не понял ее принцип. У меня есть клиенты, у которых постоянная проблема с партионным учетом, восстанавливать последовательность никого не заставишь, а директор хочет видеть реальную прибыль. Решения которые помогают не решить, а облегчить восстановление есть, но они дороги, как поллиативное решение отказались от партионного учета вообще, а себестоимость определяли по цене закупа на дату проведения документа реализации. Теперь увидел решение проблемы в использовании РАУЗ и если подумать решение достаточно простое и элегантное. А проводить регламентный документ корректирующий себестоимость в конце месяца не сложно.
На ваше усмотрение.