-
Вот решил для 8.2. Может кто прокомментирет решение?
Вложения:
1520959.dt
-
В принципе, все нормально, единственное что БлокироватьДляИзменения нужно использовать только в том случае, если проведение идет по новой методике, то есть если происходит сначала запись набора движений, то, таким образом, блокируются нужные комбинации полей измерений, но, повторюсь, только в том случае, если сначала делается запись в регистр.
Если же сначала происходит чтение, как здесь, то для того, чтобы обеспечить неизменность данных нужно создавать объект типа БлокировкаДанных и описывать его, поскольку подразумевается, что должен быть использован управляемый режим блокировок. И еще, я когда решала эту задачу дополнительно в обработке проведения приходной делала проверку на наличие отрицательных остатков и если они были, погашала их. По сути, партионное списание только наоборот.
НЕ знаю, надо это делать на экзамене и если это сделать, не будет ли это усложнением, а если не сделать не будет ли это упрощением задачи.
-
Quote (alice)
я когда решала эту задачу
можешь выложить своё решение? интересует как раз списание отрицательных остатков в приходной, хочу свериться.
-
на экзамене в этой задаче немного иное условие :
Оптовая торговля,поступление товаров - прих накл, продажа - расх накл.
учет товаров - в разрезе сроков годностей.
При поступлении у товара указывается срок годности.
Складской учет не ведется.
Списание себестоимости - в зависимости от срока годности,начиная с самого раннего.
информация о поступлении на склад может приходить позднее фактического поступления.
Документы задним числом не вводятся.
существует система, когда продается товар, которого еще нет.
Осуществить такую возможность.
Построить отчет по движениям за период. (отчет только один)
-
Выкладываю базу на 8.2. По идее, нужно бы еще последовательность создать, но у меня этого нет...
-
Забыла прикрепить.
Вложения:
2506449.dt
-
Не останусь в стороне, мой вариант
Вложения:
106_1CCoder.dt
-
Quote (alice)
И еще, я когда решала эту задачу дополнительно в обработке проведения приходной делала проверку на наличие отрицательных остатков и если они были, погашала их. По сути, партионное списание только наоборот.
НЕ знаю, надо это делать на экзамене и если это сделать, не будет ли это усложнением, а если не сделать не будет ли это упрощением задачи.
Получается например: Расходная Карандаш -3 на сумму 0 (т.к. в остатках его нету). Делаем приходную например Карандаш 5 шт. на сумму 50. И что получается: Списываем минус: 3 шт по цене (какой 0?????) и добавляем еще 2 по цене 20. Так что ли???? Мне кажется не совсем правильно....Отчет кривой будет
-
Почему кривой, все правильно будет посчитано, себестоимость одной штуки в партии 10 р.
соотв, раз мы до этого списывали с нулевой себестоимостью 3 шт, а теперь она нам стала известна, то надо сделать расход на эту себестоимость 3*10, единственное что, если
расходную распровести тогда получатся неправильные цифры, но для этого нужно будет делать восстановление последовательности и перепроводить приходные.
-
Посмотри в отчет в задачнике...Начальный Остаток 0, Был Приход 2 шт стоимостью 32, Расхода не было и на остатке осталось 0. (Последняя строчка). Тогда надо делать Расход (В приходной) на дату Расходной..... Иначе расход попадет в отчет (хотя на самом деле его быть не должно). И что получается:
Например:
Была Расходная (10.05.2010): списали 3 шт стоимостью 0 (расход) Партия - Пустая.
Потом как то была Приходная (12.07.2010) : 5 шт. по цене 50 (приход) - Партия - Ссылка . Сдесь же получаются еще движения: Приход 3шт. стоимостью 0 (на дату расходной) Партия - Пустая, и Расход 3 шт. стоимость 30 (на дату расходной) Партия Ссылка. Так чтоли???
-
Честно говоря, я не понимаю, что имеется ввиду, если по комбинации измерений есть приход - расход, то и кон остаток получается исходя из начального остатка и всех операций.
Ситуация описанная в сборнике, если судить здраво, возможна только в том случае, если формирование отчета было запущено во время проведения каких-либо массовых операций с БД (некого регламента) и в отчет попали данные незафиксированных транзакций. Не вижу в моем решении противоречия, исходя из полноты формулировки приведенной в задаче и формата реализации за "час с небольшим".
Опять же, я не могу читать чужие мысли, и, соотв., не могу утверждать, как, впрочем, и все остальные, что именно имеют ввиду этим составители.
А ты, что думаешь по этому поводу, и можешь ли предложить свой алгоритм реализации решения при таком раскладе.
-
я же описал свой метод, только вместо Партия Пустая - Писать СсылкуРасходной
-
Не знаю принципиально ли это, можно, в принципе, у преподавателя уточнить, если он ответит. В любом случае формулировка задания звучит "Предоставить возможность списывать товар при продаже в минус", и здесь ничего не сказано конкретно, что именно нужно сделать, поэтому, на мой взгляд, доказать, что писать пустую партию или расходную нельзя, опять же преподаватель, царь и бог, и если он будет настаивать на чем-то, то тут ничего ему не докажешь.
Ведь нигде нет контроля правильности решений этих задач, с которым можно было бы свериться или к которым можно было бы апеллировать.
-
Просто если писать ПустуюСсылку, дату документа расходной не достанешь, если вдруг надо делать движение на дату расходной....у тебя просто в ноль регистр не уйдет
-
Регистр всегда выйдет в ноль при такой схеме, отрицательные остатки погашаются без привязки к расходной.
Добавлено (06.08.2010, 11:40)
---------------------------------------------
Аналогично при учете авансов, когда аванс - это пустая ссылка
-
Документ задним числом не вводится, но перепроводится....Это что - Последовательность?
-
Не могу отчет Номенклатуру со сроком годности в группировку объединить....
Вложения:
1509687.dt
-
Quote (napan)
Не могу отчет Номенклатуру со сроком годности в группировку объединить....
Если я правильно поняла, то в отчете надо добавить подчиненную группировку по детальным записям (на закладке "Настройки") Получится:
Бодиан Дианы 29.07.2010
---Прих-я накл...........
---Прих-я накл...........
---Прих-я накл...........
-
Quote (alice)
Честно говоря, я не понимаю, что имеется ввиду, если по комбинации измерений есть приход - расход, то и кон остаток получается исходя из начального остатка и всех операций.
Ситуация описанная в сборнике, если судить здраво, возможна только в том случае, если формирование отчета было запущено во время проведения каких-либо массовых операций с БД (некого регламента) и в отчет попали данные незафиксированных транзакций.
Такое вообще разве возможно?
Скорее вместо минусовых остатков в отчет выводятся нули.
-
Quote
Скорее вместо минусовых остатков в отчет выводятся нули
пришел к такому же выводу, после долгих попыток смоделировать эту ситуацию)Добавлено (20.08.2010, 21:40)
---------------------------------------------
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=560073
-
Quote (Amali)
Quote (napan)Не могу отчет Номенклатуру со сроком годности в группировку объединить.... Если я правильно поняла, то в отчете надо добавить подчиненную группировку по детальным записям (на закладке "Настройки") Получится: Бодиан Дианы 29.07.2010 ---Прих-я накл........... ---Прих-я накл........... ---Прих-я накл...........
Не понял, что такое подчинённая группировка.
Я создавал в общем модуле функцию которая складывала два параметра номенклатура и срок годности.
В скд создавал вычисляемое поле, собственно вызов этой функции.
Эсли кто понял что такое подчинённая групировка напишите плиз. А то другого способа, как создать функцию в общем модуле не нашёл. А это как то не айс по мойму.
-
В принципе задача от решения на 8.1 ничем не отличается. Просмотрел ту ветку форума, мне больше всего понравился принцип решения Tarja: Регистр один - изм: Номернклатура, СрокГодности, ресурсы: Количество, Сумма.
Приходную делаем конструктором В расходной, если в учетной политике разрешено списание в минус, получаем остатки ВСЕ остатки (МоментВремени = Неопределено), если нет, то на момент проведения документа. Списываем в минус с пустой партией, себестоимость, партию и срок годности заполняем после перепроведения всех раходных накладных, которые делали движения с пустой партией.
Никак не могу разобраться, как последовательность сюда лучше прикрутить: у меня в нее включены только расходные, измерение, связал с реквизитом регистра, все равно туда попадают почему то еще и Приходные .
Отчеты, вроде как в задании)
Вложения:
1.6.dt
-
С чего ты
Quote (SergTH000)
все равно туда попадают почему то еще и Приходные
Консоль запросов показывает что в последовательности только Расходные.
Измерение в последовательности не нужно.
-
Zhora_Vlg, Черт, не помню что там уже)))Слушай, если решал эту задачу, покажи решение свое, плз. Я сделал измерение, чтоб в последовательность попадали только расходные кот. сделали движения с пустой партией, по идее другие то не надо перепроводить. Когда перепроводим документ с движением по пустой партией он видит все остатки и ориентируется на них. может не догоняю чего нету времени совсем вникать глубоко в эти последовательности)
Приходные видел когда заходишь в упр. приложении все функции-провдение документов-там последняя закладка!
Надо ли програмно ее двигать?
-
Quote (petrov86)
Не понял, что такое подчинённая группировка.
Отчет для базы 1509687.dt.
Вложения:
8045893.erf
-
Посмотрел все решения.
Ни у кого не увидел отчета по продажам с учетом срока годности?!
-
У меня посмотри, в другой теме 1.6
-
А разве приходная накладная не должна влиять на последовательность?
-
User_OKA, Тут все дело для чего ты используешь последовательность. Моя последовательность для расчета себестоимости, т.е. необходимо перепровести только расходные чтобы ее расчитать. Вот пример расходная списала в минус, себестоимость, срок годности и партия не заполнены. Потом товар оприходовали. Перепроводим расходную, она "видит" уже и следующие приходные и вместо старых своих движений, списывает еще и партию которая пришла позже ее даты. Соответственно, что бы рассчитать себестоимость на данный момент нужно перепровести все расходные, которые сделали движения с пустой партией.
А вот если пользователь что то изменил задним числом, то тут нужна другая последовательность в нее будут входить и приходные и расходные, которые нужно перепровести начиная с даты самого раннего изменения
-
По поводу решения
наверное все таки в РасхНакл должно быть
|ИТОГИ
| МАКСИУМ(Количество), Если продаем несколько одинаковых товаров с разными сроками годности СуммаПродажи записывается общая для каждого товара?!
Выходит для данной задачи требуется 2 последовательности?
-
User_OKA, Да у меня ошибка, конечно итоги по по количеству в расходной надо брать МАКС или МИН.
Quote
Если продаем несколько одинаковых товаров с разными сроками годности СуммаПродажи записывается общая для каждого товара?!
Ну да, для одинаковых товаров, по каждому сроку годности, записываем сумму продажи. Там же отчет в разрезе сроков годности, на иначе как?
По поводу последовательностей, если неоперативное проведение задним числом - общее требование, то я думаю вообще во всех задачах она нужна. Выходит, что две.
-
Quote (Amali)
Quote (petrov86)Не понял, что такое подчинённая группировка. Отчет для базы 1509687.dt.
Прикрепления: 8045893.erf(6Kb)
Понял. Спасибо
-
Доброго времени суток! Подскажите, а нельзя вот так решить: создается еще доп. регистр накопления МинусовыеОстатки, измерение номенклатура, ресурс кол-во. Если разрешена продажа в минус, то расходная делает поступление по этому регистру на не хватающее кол-во. При проведении приходной, она смотрит этот регистр и помимо прихода формирует движение расход по обоим регистрам на перебранное кол-во. По условию задним числом документы не вводятся, так что даже если мы продали без наличия, приход будет более поздней датой. И если мы перепроводим расход, то он не увидит новое поступление.
-
User67, думаю если можно решить с одним регистром, то лучше решать с одним
-
pershinsergei, это что такое:
Code
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаПоДокументу=СписокНоменклатуры.Итог("Сумма");
Если НачалоДня(ТекущаяДата())>НачалоДня(Дата) и ЭтоНовый() Тогда
Сообщить("нельзя проводить док задним числом");
Отказ=Истина;
КонецЕсли;
КонецПроцедуры
причем тут проводить нельзя задним числом, если мы хотим записать, наверное помимо анализа даты, надо еще проверить РежимЗаписи?
видимо вот так:
Code
....
Если НачалоДня(ТекущаяДата())>НачалоДня(Дата) и РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
...
КонецЕсли;
-
мое решение:
Вложения:
Quest_1_6.dt
-
"_"
-
Вот как я делал
Добавлено (18.09.2010, 01:18)
---------------------------------------------
тут разместил http://forum.chistov.pro/index.php?topic=987.msg3#msg3
-
Вот мое решение
Вложения:
1.06.dt
-
SergTH000, может быть нужно при проведении приходной накладной двигать границу последовательности, если "до нее" есть минусовые остатки по номенклатуре, присутствующей в самой приходной?
ведь когда ты списываешь товар в минус, а потом приходуешь его, система не знает что последовательность нарушена
-
Всем доброго времени суток!
ut2k5, просмотрела твое решение. У тебя ошибка. При проведении расходной накладной не делается запись "в минус" в регистре накопления ОстаткиНоменклатуры.
-
Выкладываю свое решение. В отличие от предыдущих, в нем чтобы разобраться с записями "в минус" нужно просто перепровести Расходную накладную, которая эти записи и сделала.
Прошу прокомментировать мой вариант решения.
Добавлено (21.09.2010, 14:57)
---------------------------------------------
marku, у тебя ошибка вылетает при проведении Расходной накладной
Вложения:
_1.06.dt
-
aworld, Почему не знает? Знает, когда расходная в минус списала, вот оттуда и надо перепроводить.
Добавлено (21.09.2010, 16:10)
---------------------------------------------
Пока та расходная не закроет партию какую-то и уберется из последовательности
-
SergTH000, может я не правильно понимаю ка работает последовательность , но я так думал :
с каждым новым проведенным документом граница последовательности сдвигается. Если перепроводим старый документ, граница сдвигается на момент времени этого документа, и в дальнейшем система будет проводить документы с этого момента времени.
В этой же задаче предпологается что приходная будет создаваться и проводиться после расходной, то есть при проведении такой запоздалой приходной у нее просто граница встанет "правее" расходной, и будет там пока мы не перепроведем расходную.
-
aworld, Приходные не нужны в этой последовательности вообще. Смотри если расходная сделала движение с пустой партией, то она должна попасть в последовательность. Если последующая тоже сделала движение с пустой партией то она тоже должна попасть, но вот границу двигать не должна. То есть в последовательности хранятся все расходные которые сделали движение с пустой партией, а граница должна быть на самой первой из них. Как в программе реализовать это сам пока сомневаюсь, попозже вернусь к этому вопросу, наверное надо все таки програмно ею управлять. Это немного осложнит задачу, но зато приходную то мы конструктором делаем
Добавлено (21.09.2010, 16:29)
---------------------------------------------
Границу можно двигать, а можно не двигать от настрек последовательности зависит
Добавлено (21.09.2010, 16:32)
---------------------------------------------
Если приходная придет после расходной, то при разрешенном списании в минус, расходная "увидит" ее и спишет как надо. Правда получится что сначала списали партию, а потом она пришла, но ведь условие именно такое!
Добавлено (21.09.2010, 16:33)
---------------------------------------------
А когда расходная закроет полностью партию и у нее не будет движений с пустой партией то она не попадает в последовательность.
-
SergTH000, понятно, просто мы говорим о разных вещах. Ты говоришь о последовательности просто как о массиве документов, а я - как о упорядоченной логически последовательности.
Я думал проверять самую первую расходную с пустой партией и нужной номенклатурой и устанавливать границу на эту расходную.
-
aworld, Хм, ну вот взять например классический вариант: приходные и расходные состовляют последоваетльность. Пользователь что меняет задним числом, граница сдвигается на этот документ. После перепроведения всех приходных и расходных с этого момента мы получим нормальное состояние учета на текущий момент.
Если рассуждать с такой точки зрения, то при проведении приходной нужно дать понять пользователю что необходимо перепровести расходные с пустой партией, с момента самой ранней. Хотя сама приходная в последовательность все таки не входит
То есть получается так. При проведении расходных, если они делают движения с пустой партией, просто заполняем ими последовательность. Границу двигаем. А при проведении приходной сдвигаем границу назад на самую раннюю расходную. Что вроде этого =)
-
SergTH000, да)
-
Ksenium, При проведении расходной накладной не делается запись "в минус"
а зачем?... ведь явно в задаче не сказано об этом, но решается у меня это путем добавления следующего кода после цикла детальной выборки:
Code
Если КоличествоСписать > 0 Тогда
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.Период = Дата;
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Номенклатура = Номенклатура;
Движение.Количество = КоличествоСписать;
Движение.Сумма = 0;
КонецЕсли;
просила прокомментировать:
...твое решение отлично будет работать на предприятии где малый документооборот, а что делать, если в день будет проходить 1000 расходных, т.о. когда прийдет приходная, тебе прийдется перепроводить 1000 накладных, благо в 8.2 есть множественный выбор, но и это не спасает, потому что перепроводить-то надо только те расходные, которые "ушли в минус"..., так что задача надо бы решить последовательностью...
однако идеального решения не бывает, и твое имеет место быть...
... еще нашел ошибку, где третий отчет "остатки товаров"?
-
ut2k5, в твоей выгрузке под названием Quest_1_6.dt отсутствует представленный тобой код после цикла детальной выборки. Потому-то мне и было непонятно, как происходит учет "в минус".
Спасибо, что просмотрел мое решение. Верно подмечено, что с большим документооборотом оно нежизнеспособно. Но ведь в задаче ничего не сказано про объемы документации
...кстати, про третий отчет "Остатки товаров" там тоже ничего не сказано
-
Quote (Ksenium)
Но ведь в задаче ничего не сказано про объемы документации
это нужно учитывать по умолчанию, кстати в задачах действительно многое не сказано, ведь это все уже есть в общих требованиях, очень важно изучить от А до Я список типичных ошибок, выложенный на офиц. сайте 1С, т.к. их в первую очередь и проверяют
-
Ksenium, учет "в минус" - не означает, что товар должен делать отрицательные остатки, достаточно того, что их 0...
... кроме того, такой учет необходим только в тех случаях, когда списать нужно прям здесь и сейчас, а завтра прийдет накладная и мы ее проведем задним число, зачастую тот товар который якобы списывается в "минус" на самом деле есть на складе, его просто нет у нас в базе (нет накладной приходной), поэтому представленый мною код может присутствовать, а может и не нужен вовсе, это двоякий взгляд на задачу не меняющий сути..., в любом случаем запись с пустыми ссылками (партия) и минус по ресурсам - ошибочные и лишь временные, вот если бы в задаче было условие, что необходимо знать сколько и какого товара отгрузили в минус, тогда это было бы принципиально...
...на счет третьего отчета, у меня сборник за август 2009 года, там три отчета, может по этому я и пристал к тебе с этим отчетом
-
по-моему, правильно
Вложения:
InSurgent-1.6.dt
-
Не понятно как реализовать:
Приход январь
10 штук по 1 рублю
20 штук по 2 рубля
Реализация февраль
20 штук по 2 рубля
10 штук по 1 рублю
5 штук 0 рублей
Приход март (задним числом вводить не можем по условию задачи)
30 штук по 3 рубля
Получается я должен скорректировать движения февральской реализации,
теперь с учетом мартовского прихода они должны быть следующими:
30 штук по 3 рубля
5 штук по 2 рублю
отсторнировать реализацию и сделать приходником новые движения?
-
User_OKA, юзай "последовательность", а приходная должна быть задним числом, ужо несколько раз это обсуждалось даже под 8.1 читай полностью эту ветку..., и если хочешь вот тут: http://forum.chistov.pro/index.php?topic=333.msg1#msg1
-
ut2k5
Если задним числом можно, тогда все намного проще.
Только ответа на вопрос можно ли задним числом вводить приходную накладную я не нашел. Попробуем достучаться до составителей сборника.
-
ut2k5, При проведении расходной - получаем остатки на МоментВремени документа с непустым сроком годности, если количество больше делаем списание с пустым сроком.
Для приходной получаем остатки с пустым сроком годности, если он есть делаем три движения
Закрываем пустой срок на общее количество такого товара в документе
Делаем приход товара на сроки, указанные в документе
Делаем расход товара на сроки, указанные в документе
Если что то осталось делаем приход.
Никаких последовательностей не нужно. Я описал ситуацию когда партий товаров нет и списание в минус разрешено.Добавлено (05.10.2010, 10:34)
---------------------------------------------
User_OKA, Мне задача попалась на экзамене и первым делом препод открыл модуль Приходной, только тогда я сразу понял, что он хотел там увидеть
-
SergTH000, ты сдавал выездную, преподы всегда лояльнее, нежели удаленно...
общался со своим знакомым, которому тоже попалась похожая задача, он решал через последовательность, и у него не было ни одной ошибки... по крайней мере в опер учете, он спец еще с прошлого года..., так что я смотрю мнения разделяются до сих пор...
Уважаемый Павел, помогите нам, пока мы не подрались тута кстати SergTH000, как там экзамен? можно поздравлять?
-
ut2k5, Свою слезную историю написал тут http://forum.chistov.pro/index.php?topic=993.msg9#msg9
Скажи поконкретнее про твое решение, я тоже решал через последовательность и препод не принял решение, ну точнее сказал что так решать плохо
-
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
-
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
Во-во..комментарии излишни..
-
ладненько, соглашусь с "отсторнировать, приход по расх. накл, расход по расх. накл и приход всех остальных", но честно говоря не очень то все красиво получается, в отчетах будут все равно болтаться пустые движения, если не сделать специальное условие, задача не на знание платформы получается, а на умения прикрутить заплатку на дырку
все таки с последовательностью и созданием приходной задним числом все красивей выходит..., но что поделать..., 1с преподы из нас делают зубрилок, а не спецов...., жаль - жаль....
-
Исходя из рекомендаций преподавателя 1С, возник следующий вопрос. Например:
Приход январь
10 штук по 1 рублю
20 штук по 2 рубля
Реализация февраль
20 штук по 2 рубля
10 штук по 1 рублю
5 штук 0 рублей
Приход март (задним числом вводить не можем по условию задачи)
30 штук по 3 рубля
1. Мы должны целиком отсторнировать февральскую реализацию и с учетом мартовского прихода
они должны быть следующими:
30 штук по 3 рубля
5 штук по 2 рублю
2. или мы сторнируем наши 5 штук которые мы списали по 0 стоимости в феврале и с учетом мартовского прихода
они должны быть следующими:
5 штук по 3 рубля
?
накидал 2 вариант.
Вложения:
User_OKA_1_06.dt
-
Кто-нибудь мой вариант смотрел ?
-
User_OKA,
Quote
Приход март (задним числом вводить не можем по условию задачи)
30 штук по 3 рубля
, тут немного по другому:
сторнируешь только в той части, где ушло в минус, т.о.
1) сторно = Приход 5 штук 0 рублей
2) приход в этой же части Приход 5 штук по 3 рубля
3) расход (копия расходной) = Расход 5 штук по 3 рубля
4) приход остальных позиций = Приход 25 штук по 3 руб. (2) и (4) можно и вместе, но наверное лучше чтобы у этих записей были разные периоды, типа сторно день реализации
, а остальной приход на дату приходу...., это потому как я не видел в отчете (в задании) минусовых записей...
Добавлено (06.10.2010, 16:31)
---------------------------------------------
кста родилась еще одна идея, вот только не знаю как реализовать, вообщем идея в том, что бы при приходе лезть в движения расходной и подставлять там сумму себестоимости и партию, тогда запись прихода составит только "приход остальных позиций"
-
ut2k5,
Quote (ut2k5)
сторно = Приход 5 штук 0 рублей
в данном случае, сторно я понимаю как приход прошлой датой(датой расходной накладной). так?
у 1)-3) какими будут периоды записей?
и какой срок годности будет при списании (в расходной) 5 штук по 0 ?
-
Quote
в данном случае, сторно я понимаю как приход прошлой датой(датой расходной накладной). так?
Нет, товар пришел тогда, когда он пришел, все датой прихода реальной. В приходе при списании сортируешь как указано в задании по возрастанию. Да, в отчете будут движения с пустым сроком,ну и что хотели то, при списании в минус?
-
Вот набросал решение
вызывает затруднение отчет продажи
в разрезе номенклатуры, сроков годности
с ресурсами Себестоимость, Продажа
кто нибудь сделал?
Вложения:
5309610.dt
-
User_OKA,
тут еще до отчетов надо поковырять, не правильно работает база. тестировал не смотря код
ситуация:
прих1 10 100
прих2 10 100
реализуем
расх 25 500
движения:
расход 10
расход 10
расход 40 (должно быть 25-20=5) смотрю код
Добавлено (07.10.2010, 14:28)
---------------------------------------------
при выборе таб части в запросе нет ссылки на документ, то есть собираешь таб части не только текущего документа
дальше, допустим, списалось 40. если после это этого списать еще 11 по 550 (на данный момент остатков вообще нет), то выходит ошибка = деление на 0!
дальше, после этих жвижений есть приход на 13 суммой 150.
движения:
+ ПартияХ 13 150
- ПартияХ 13 150 (то есть первая строчка полностью затерла вторую)
и самое интересное:
- (-40) 0 (ВидДвиженияНакопления.Расход и Сумма=-40) помоему это неправильно.
к сожалению на работе не могу прикрепить дтшник своего решения, если тока на почту отправить, либо вечером выложу
Добавлено (07.10.2010, 14:42)
---------------------------------------------
думаю после этого всем станет ясно принцип решения данной задачи
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
-
hugo
про ссылку на документ я забыл в запросе условие, параметр определил, а условие не описал
деление на ноль подправил, если остатков нет, то все кидаем на пустую партию
конечно затерла
был приход
10 по 100
10 по 100
затем расход
25 по 100
10 по 150
в результате зависло 15 штук
приход
13 по 150
тут же
сторно реализации (можно либо приход на 15 штук, либо расход на -15 штук)
обычное списание 13 штук
ну и 2 штук не хватило снова кидаем на пустую партию
Что с отчетом по продажам?
Вложения:
1710342.dt
-
User_OKA,
просто тупо запустил отчет Продажи, прибыль в минусе, директор будет в ярости Добавлено (07.10.2010, 16:20)
---------------------------------------------
вроде все норм,
Quote (User_OKA)
сторно реализации (можно либо приход на 15 штук, либо расход на -15 штук)
все же "расход -15" как то напрягает, но если так можно, я не против.
-
Чет вы, имхо, колесо изобретаете с этой задачей, не усложняйте себе жизнь.
По поводу сторно: сторно надо делать с тем-же видом движения (и остальным набором параметров соответственно), что и оригинал, только с обратным знаком. Иначе это будет уже не сторно.
-
1C_CoderVamp, то есть в приходнике запись сторно будет Приход (-15) так?
-
hugo,
Суть "сторнирования" заключается в том, чтобы фактически не удаляя запись, свести ее значение к 0.
К примеру есть поступление на 01.10.2010 - 10 шт:
1) сторно - тоже самое поступление, только кол-во = -1 * 10 шт., итог:
Остаток на 01.10.2010 (23.59.59) - 0шт.
Приход за 01.10.2010 - 0шт.
Расход за 01.10.2010 - 0шт. 2) тоже самое поступление, только ВидДвижения = Расход, итог:
Остаток на 01.10.2010 (23.59.59) - 0шт.
Приход за 01.10.2010 - 10шт.
Расход за 01.10.2010 - 10шт.
Проще говоря, все зависит от того результата, который требуется добиться.
-
utk25 (прости если не правильно по памяти пишу)
Quote
кста родилась еще одна идея, вот только не знаю как реализовать, вообщем идея в том, что бы при приходе лезть в движения расходной и подставлять там сумму себестоимости и партию, тогда запись прихода составит только "приход остальных позиций"
Теоретически можно, нужно получить регистратор (расходную, которая сделала те движения в минус), создать набор записей регистра накопления и тд (все как в расчетных задачах)
Но повторюсь, это не верно, товар пришел тогда когда он пришел, нужно видеть в отчете, что товар списывали в минус, это мое мнение. Опять же это усложнит задачу, все таки считаю, что дата прихода должна быть фактической.
Добавлено (09.10.2010, 22:21)
---------------------------------------------
Чето сейчас засомневался, на какую дату делать расход, после сторнирования=) скорее действительно на дату расходной.
Все-таки идея менять движения расходной рискованная, как то сразу задача выделяется из всего списка по опер учету. У меня уже сложилось твердое убеждение, что задачи проверяют одни и те же механизмы и инициатива как правило наказуема=)
-
SergTH000, вот поэтому и пушу "не знаю как реализовать", я то знаю, как получить движения (например через менеджер и набор), но вот не знаю, как бы это так чтобы вот так короче не правильно это...., это только в расчетных задачах правильно но там нету оперативных (быстрых) операций... так то....
короче, я уже ненавижу эту задачу....
-
Продажи тоже нужно как-то корректировать. Есть идеи?
-
User_OKA, Да также можно сторнировать с пустым сроком (просто перед суммой поставить знак минус) и записывать движение со сроком годности в приходной.
А вообще забейте на продажи на экзамене в билете их нет в отчете, они нигде не нужны=)
-
Quote (SergTH000)
А вообще забейте на продажи на экзамене в билете их нет в отчете, они нигде не нужны=)
Абсолютно согласен, не усложняйте себе и другим жизнь. Стремление идеально решить поставленную задачу понятно, но это невозможно, невозможно уже потому, как ставятся условия, плюс временное ограничение (час с хвостиком на раздел). Все равно реальные навыки программирования придут только на практике, а сертификат специалиста - это лишь приятное дополнение, вкусная плюшка так сказать
-
SergTH000, Допустим уп разрешает продавать товары в минус. Предположим что в расходной указывается 50 ед товара, а по данным учета в наличии есть только 25. То есть 25 должно быть продано как обычно, а 25 в минус? Тогда в чем смысл получать остатки на момент времени который равен неопределено?
-
Danan,
Эту тему надо убить вообще, решение которое я выложил не верное, что я узнал на экзамене=) А вообще на момент неопределено ты получишь ВСЕ остатки, то есть увидишь если был приход позже момента документа и рассчитаешь себестоимость, но повторюсь не бери это в голову, вот здесь пришли к единому мнению как надо решать задачу
http://forum.chistov.pro/index.php?topic=987.msg7#msg7
-
всем, снова привет, сегодня на экзамене попалась эта задача, решил так как советовал SergTH000...
результата еще не знаю...., последоавтельность не прикручивал..., так что смотри мой друг...
правда я млин в приходной в запросе забыл упорядочить по сроку годности, что бы минусовые расходы тоже в соответствии со сроком годности списались..., надеюсь не замЭтят ведь в расходной все ок
-
В общем то, как я понял эту задачу, главное реализовать списание себестоимости в том виде, как сказано в условии, а именно: по партиям в зависимости от срока годности, внутри одного срока годности в первую очередь более дорогой.
Из этого следует, что мы не можем списав товар реализацией на этом успокоиться , даже если его хватило на остатке. Потому как документы, которые формируют реальную себестоимость возможно еще в пути.
В связи с этим предлагаю добавить в документ «ПриходнаяНакладная» реквизит «Дата поступления». И при каждом поступлении проверять, не продавался ли данный товар, начиная с этой даты до момента текущего поступления, если продавался, то сторнировать все продажи этого товара и формировать новые с учетом этого поступления.
а в минус он был списан или нет, какая разница, себестоимость должна корректироваться при любой реализации если после неё приходят документы с датой поступления более ранней.
Вложения:
1Cv8_sada_1_06.dt
-
sada, на экзамене нет условия: "внутри одного срока годности в первую очередь более дорогой", да и вообще нет партий, только срок годности, и отчет вместо партии - расходная накладная...
-
ut2k5, а как отчет называется на экзамене, тут он ведомость по партиям а там, чтото я не предствляю такой отчет , тоесть нач. остаток по расходной , приход по расходной , расход по расходной, не пониятно цель такого отчета в чем?
В разрезе расходных надо движения и остаток показать или продажи?
-
"движение товаров за период" как то так и он один без продаж, плиз глянь сюда, если есть воемя http://forum.chistov.pro/index.php?topic=1259.msg1#msg1
-
sada, Там просто Товар, СрокГодности - НачОст, Приход, Расход, КонОст. Цель отчета - в самом отчете=)
-
Я постарался сделать описанную в задаче модель учёта максимально приближенной к реальной жизни.
Создал 3 регистра:
- ОстаткиНоменклатуры
- ОстаткиПартий
- Продажи
В первом регистре отрицательные остатки контролируются или не контролируются согласно политики. Кстати, насчёт политики. Я не смотрел все варианты, но почему есть тенденция, что при вводе политики не контролируется, есть ли движения по интересующим нас регистрам внутри устанавливаемого периода? У себя я такую проверку сделал и при наличии движений делаю откат транзакции.
2-й и 3-й регистр при оперативном проведении вообще не заполняются. Их заполнение предусмотрено стандартной командой перепроводки документов, вызываемой из "Все функции", т.е. когда выполняется неоперативное проведение. При проводке по этим регистрам я всегда контролирую отрицательные остатки, механика списания повторяется во многом типовая, останавливаться на ней не буду. В регистр продаж пишу и себестоимость, поэтому в отчёте не соединяю 2 виртуальные таблицы.
Что касается тезисов в постановке задачи, что ввод документов задним числом не происходит - тут, как мне кажется, то ли недосмотр составителей, то ли сознательная "подножка" для аттестующихся. Очевидно, что приходная накладная проводится неоперативно, дял удобства неоперативного проведения сегодняшней датой я поставил запрет оперативной проводки. Считаю, что в корне ошибочно делать какие-то заумные движения при приходе, сторно всякие и пр. Выравнивание остатков партий и себестоимости должно быть регламентной операцией, пакетным перепроведением базы данных в часы, когда не работают операторы. В противном случае в реальной работе возникнут ожидания на блокировках и тормоза при проведениях.
Файл конфигурации прилагаю.
P.S.
Посмотрел несколько решений из ветки, видно, что многие тиражируют друг у друга код )) Плагиат - это простительно при подготовке, ну а где же в решениях работа с управляемыми блокировками? В большинстве случаев, когда идёт работа с расчётом себестоимости, без БлокировкаДанных в режиме Исключительный никак не обойтись, ИМХО.
Вложения:
1Cv8_task_1.6.cf
-
detec, чтото я не понял, приходная просто приходует, расходная просто списывает, в какой момент списание становится верным?
Где определяется по каким именно товарам необходимо делать перерасчет списания, где сам перерасчет?
-
sada, а про мою реализацию что скажешь ?
4-ая страница
-
sada, вы внимательно читали мой пост? У меня выравнивается всё автоматически при неоперативном перепроведении документов. Если точнее, при неоперативной проводке РасходнойНакладной. В этот момент и рассчитывается себестоимость списываемых партий, если документ в принципе можно провести (если более ранней датой был введён под него приход).
-
Quote (detec)
(если более ранней датой был введён под него приход).
Перепроводить все документы хотите? т.е. двигать все товары в каждой накладной, даже те, по которым с приходами полный порядок?
В условии сказано, что приходы могут вводится после реализаций, и при этом только текущей датой (задим числом вводить нельзя).
Как реализация учтет такие приходы?
-
Да, я считаю, что нужно перепроводить документы, двигающие регистр, если часть из документов вносится неоперативно. Условие про "задним числом вводить нельзя", как я понимаю, означает для аттестующихся, что не нужно использовать последовательность для документов прихода и расхода. В типовых конфигурациях, да и в переписанных под управленческий учёт, вводится дата запрета редактирования для закрытытх периодов. Всё, что сверху этой даты, может сколько угодно перепроводиться, меняться и выравниваться.
Я также отмечу, что нигде в условии задачи явно не запрещено пользоваться перепроводкой документов для расчёта себестоимости и опять же нигде нет в условиях, что расчёт себестоимости должен выполняться только оперативно, путём проводки документов только в оперативном режиме.
В какой-то из более ранних по номеру задач, кажется 1.03, в документе расхода в явно виде в реквизитах или построчно в табличной части указывается ссылка на партию-приходную накладную. В такой модели учёта действительно, мы можем сначала продать товар в минус, не указав при этом руками партию, а потом, после поступления товара, перепровести расходную накладную. А если у нас сложный алгоритм со допустимыми отрицательными остатками, да ещё и со сроками годности, то без неоперативного внесения приходов мы в реально работающем учёте не обойдёмся. В качестве примера я могу привести своё предприятие, где в полностью самописной управленческой конфигурации отрицательные остатки запрещены всегда и везде, списание партий делается оперативно. Но в конце каждого месяца, на выходных, расходные документы, как минимум, перепроводятся. Количество пользовтаелей - 80-100 одновременно висящих в одной базе.
-
detec, т.е. в вашем решении приходы всегда будут вводится перед реализациями, иногда задним числом, а потом вы все реализации перепроводите?
-
sada, именно так.
Кстати, в условии задачи ничего про это не пишется, но все пробовали в своих решениях менять табличную часть проведённых документов и потом перепроводить их? А это очень частая практика. Поэтому я против "хитрых" оперативных расчётов себестоимости, только топорная перепроводка базы, где каждый документ делает движения по своему прямому назначению.
-
detec, Я считаю это не верно, потому, что в условии сказано четко "Документы задним числом вводить нельзя". И перепроводить все документы реализации, чтобы скорректировать списание одного товара в одном документе, по меньшей мере не оптимально.
-
sada, к сожалению, постановка задачи 1.6 в сборнике неполная. Во всяком случае, у нас бы я и коллеги в таком виде не взялись бы дорабатывать столь ответственный механизм как партионный учёт, без дополнительных разъяснений от финдира.
Кстати, у вас есть свежее решение этой задачи? Я скачивал вашу выгрузку с предыдущей страницы - там нет отчёта "Продажи" и исходя из структуры регистра "Продажи" непонятно, как рассчитать прибыль от реализации, если на одну строку номенклатуры вдруг будет списано более одной партии. То, что по слухам на экзамене в этой задаче нет отчёта - это формальность, сегодня нет - завтра ошибку исправят и требование к отчёту появится. А регистр "Продажи" и соответствующий ему отчёт самый важный в этой задаче, с точки зрения учёта.
-
Привет, коллеги!
InSurgent, посмотрел Ваше решение. Списание/оприходование работает корректно, но
не понятно одно: зачем приходная накладная делает:
1. приход в соответствии с таб частью документа,
2. такой же приход, но с пустой партией и себестоимостью расходной накладной
3. сторнирует 1-й шаг. Можно же было оставить только 2-й шаг.
И еще остается нюанс с искажением показателей прибыли, т.к. товар списывается не
по его реальной цене (указанной в приходной), а по непонятной взятой с потолка.
В моем тестовом примере был один приход 10 Йогуртов на сумму 100 руб.
Списал одной расходной 15 шт: списалось 10 шт. на сумму 100 руб. и 5 шт. на сумму 150 руб... откуда товар подорожал сразу втрое не понятно.
Так что, свой вариант я еще ваяю
-
detec, на данный момент считаю свое решение вреным, отчет не добавил именно по причине отсутсвия его на экзамене.
-
Товарищи, извиняюсь если повторил чью-то мысль по данной задаче (постов тут много ).
имхо сторнировать "расходные" движения со сроками годности, которые больше или равны сроку годности из проводимой партии(прихода) считаю ненужным - поправьте, если ктото думает иначе. Пример: если по номенклатуре "Товар 1" до определенной даты было "всё ровно" - то есть "сколько купили столько и продали"
напр. в разное время купили 2шт. со сроком до 01.04.10, 3шт. со сроком до 20.06.10, 1шт. со сроком до 10.08.10,
после чего также планомерно все 6 штук продали: напр. последняя партия была 01.05.10
Если 20.05.10 поступил "Товар 1" со сроком 01.06.10 - не нужно же сторнировать то что было продано ранее(где срок товара равен 20.06.10 и 10.08.10) и затем перепроводить по цепочке.
Вариант такой: если при продаже остаток внезапно уходит в "минус" - делать движения по расходу остатка, НО с пустым сроком годности. Впоследствии, когда приходит новая партия, проверяем отрицательный остаток с пустым сроком, сторнируем это "вспомогательное" движение и датой расходной накладной записываем уже "нормальное" движение.
Реализовывать пока не "кидался" - возможно кто-то из уважаемых пользователей форума "забракует" данную идею.
Может кто прокомментирует...
-
sada, еще не полностью проанализировал твое решение, но при открытии
обработок проведения уже бросились в глаза строки:
1) Движения.ОстаткиНоменклатуры.Записывать =Истина;
2) Движения.ОстаткиНоменклатуры.Очистить();
3) Движения.ОстаткиНоменклатуры.Записать();
.........
.........
4) Движения.ОстаткиНоменклатуры.Записать(); Так вот, если вначале мы указываем стр. 1), то запись стр. 4) нам не нужна, т.к. запись и так запишется.
Потом, стр. 2) лишняя, т.к. запись в регистр происходит с замещением, т.е. все старое затирается.
Не нашел управляемых блокировок, за которые можно не здать экзамен.
Прошу воспринимать не как придирки, а как обмен опытом
-
artkor
Я считаю что сторнировать нужно только тогда, когда накладная приходит с опозданием, при этом сторнировать нужно движения всех продаж за период с даты (указанной в самой накладной, т.е дата прихода по накладной) и по текущую дату (т.е. по дату от корой мы эту накладную вводим в систему). Для определения этого периода, я ввел реквизит накладной "ДатаПоступления" - эта та дата, когда накладная должна была прейти, без опозданий, а в стандартный реквизит дата уже указываем ту дату, когда накладная добралась до нас.
Я сторнирую не реализации а только их движения и только по тем товарам, которые в есть в текущей накладной, и при этом были проданы за указанный период.
т.е. не важно какой строк годности, не важно в минус был продан товар или нет, важно то, что если накладная пришла позже того как товар поступил, необходимо сторнировать движения по списанию себестоимости товара который успели продать за этот промежуток времени.
Добавлено (09.11.2010, 18:34)
---------------------------------------------
GranatUA
Quote (sada)
если вначале мы указываем стр. 1), то запись стр. 4) нам не нужна
не факт, что не нужна , про какой модуль речь ?
Quote (sada)
2) лишняя, т.к. запись в регистр происходит с замещением, т.е. все старое затирается
это для отладки в толстом клиенте , иначе при нажатии на кнопку провести из документа , движения просто добавляются, столько раз сколько раз будет нажата кнопка провести, а мне нужно было увидеть результат перепроведения.
Quote (sada)
Не нашел управляемых блокировок
Не помню, ставил блокировки или нет, конечно на экзамене они нужны, но там все однообразно, по этому иногда не ставлю для упрощения :)
-
GranatUA, если товар не поступил в организацию, но он продаётся, то нам не известно, ни его себестоимость, ни его срок годности. Поэтому я списываю расходной накладной товар в количестве и сумме его продажи.
Затем при поступлении товара сначала происходит его оприходование в полном количестве, потом я сторнирую запись с пустыми значениями(срок годности и партия). Из этих записей я беру списываемое количество и сумму продажи. Третий шаг соответственно списание самой номенклатуры, которое должна была совершить расходная накладная. Так как нам известны все данные о продаже, то формируем движение в регистре Продажи.
-
InSurgent, спасибо за пояснения, интересный подход. Но пугает громоздкость
реализации этой задачи (не именно Ваше решение, а вообще все, что я успел посмотреть),
а время на экзамене лимитированно. sada, если для отладки на толстом клиенте, тогда вполне приемлемо, но на экзамене могут
придраться, т.к. реализация должна быть ориентирована на тонкий клиент. Кстати, хорошо об
этом рассказал Фарит Насипов и Дмитрий Гилев в своих бонусных видеокурсах.
-
Внимание всем!!! Эта задача уже сто раз обсуждалась, смотрите посты SergTH000, у меня на экзамене попадалась эта задача, решил как советовал гуру SergTH000..., нареканий по опер учету (кроме "нет отбора в параметрах виртуальной таблицы") не было, поэтому считают решение через сторнирование пустых сроков (партий) и оприходование их же в приходной накладной верным решением, отчета по продажам НЕТ НА ЭКЗАМЕНЕ, все тот же SergTH000 четко описал какой отчет присутствует на экзамене, кстати задача на экзамене немного легче, но зато с явным жестким указанием на то, что "Документы задним числом вводить нельзя", помоему даже перепроводить нельзя, поэтому на экзамене ни разу при отладке не приходилось заходить в старые документы...., так что не нужно изобретать велосипед, у sada, все правильно решено...
но если кто-то еще не уверовал то вот выкладываю баян, который мелькает тут как минимум третий раз:
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
-
ut2k5,
жестко :)
-
GranatUA, насчёт громоздкости не знаю. Сегодня попробовал заново её решить по своему методу, уложился в час десять минут вместе с отладкой. Это тебе не 1.49. Главное помнить как её решать
-
1C_CoderVamp, а что делать? тему пора бы уже прикрыть, а мы ее уже пол-года мусолим
-
Я решил немного извратиться и попробовать обойтись без даты поступления в приходной и вот что получилось...
Даже если не делать в продажах аналитику по срокам, то получается более сложно чем у Sada.
Но я все-таки решил сделать как в билете в книжке и добавил сроки в рег продаж.
Основная заморочь в том что мы должны, после того как сделаем приход, сделать сторно только тех расходов которые сделаны по пустой партии и сроку. Потом как бы заполнить в них правильную партию и срок. Для этого делаем соединение: справа обороты с пустой парией и сроком, а слева ТЧ и обороты по продажам с пустым сроком. ТО что лишнее, то опять записываем с пустыми париями и сроками. Ну и не меньшая заморочь с продажами. Сумму надо распределить по срокам пропорционально количеству. И при этом избежать проблемы бесконечных дробей в результате деления. Алгоритм получился забавный
Вложения:
1.6_.dt
-
И еще я все таки решил добавить в решение sada аналитику по срокам в продажах. Теперь это похоже на идеальное решение.
Тот же алгоритм распределения суммы по срокам
Вложения:
3881767.dt
-
мой вариант такой.
Не смог добится првильного оформления отчёта "Ведомость по партиям", как оформить Номенклатуру и СрокГодности в одну колонку (с названием "Номенклатура")? Пересмотрел все решения, ни в одном решении не нашёл правильно оформленного отчёта.
Вложения:
8659963.dt
-
Это косяк платформы наверное. В других настройках есть поле реквизиты вместе с владельцем или просто в месте... не помню. Ни то не другое не работает.
-
Чуть подправил версию sada исправил несколько ошибок
добавил отчет о продажах
Вложения:
1_6.dt
-
У меня такой вопрос по этой задаче:
1)Допустим есть 3 партии товара по 10 ед в каждой. Уп позволяет списывать товары в минус. В расходной хотят списать 50 ед этого товара. Надо списать 30 ед как обычно, а 20 списать в минус? Или все 50 списать в минус?
-
Danan, Надо списать 30 ед как обычно, а 20 списать в минус.
-
Мое решение
Вложения:
5466163.dt
-
Мой взгляд на решение такой задачи:
Три регистра: ОстаткиНоменклатуры, ОтрицательныеОстаткНоменклатуры и Продажи. Я думаю, что в регистре ОстаткиНоменклатуры лучше хранить данные только по реальному списанию товаров. Вся номенклатура списанная в минус идет в другой регистр остатков. В момент проведения приходной проверяется наличие списанной в минус номенклатуры, в случае ее наличия оформляется поступление и погашение списанной в минус номенклатуры. В качестве примера в моем решении расходная №1 погашается приходной №1, а расходная №2 погашается дальнейшими приходными.
Точного сходства ведомость товаров не имеет, на продажи махнул, потому что тут кто сказал что на экзамене такого отчета не будет и мне стало лень.
Вложения:
Task_1_6..dt
-
Danan,
Гы-гы... а почему нет регистра "Положительные остатки номенклатуры "?
-
Задачу пока не решал, как вы думаете, возможен вариант когда приходная накладная изменяет движения расходных накладных (не сторнирует, а именно изменят через НаборДвижений), или лучше так не делать?
-
Gulf_Stream,
Лучше не делать, потому что если приходной накладной изменить движения росходной, то после проведения расходной, движения снова станут кривыми. А в условии сказано что существующие документы могут перепроводится.
-
Посмотрел решения - а почему движения не группируются? например было сторнирование и обратно стало такое же движение
в итоге обороты увеличиваются, что не правильно...
-
rus, Твое решение не совсем верно. Движения должны сторнироваться, то есть должно быть не приход 150 Дасцилл синеточечный, а расход -150.
Quote (maxximilisan)
Посмотрел решения - а почему движения не группируются? например было сторнирование и обратно стало такое же движение в итоге обороты увеличиваются, что не правильно...
Если смотрел правильное решение, например у sada, то обороты не увеличиваются. происходит замена одного на другое, например меняется срок годности и партия. Приведи конкретный пример.
pako_amadi, у тебя неверно. В 22.40 расход Big (капилярная) 10 штук со сроком годности до 02.01.2011. В 22.42 зафиксирован приход 30 штук со сроком годности до 17.12.2010 и ты пытаешься поменять в реализации расход 10 штук до 02.01.2011 на 17.12.2010, но при этом сохраняешь приход со сроком до 17.12.2010 полностью, а 10 штук до 02.01.2011 теряешь. Или другими словами у тебя было в начале 30 штук до 17.12.2010 и 10 штук до 02.01.2011. Ты списываешь 10 штук до 17.12.2011 и остается в остатке 30 штук до 17.12.2011. А должно быть на остатке 20 штук до 17.12.2010 и 10 штук до 02.01.2011.
-
Какие то получаются не равноценные задачи на сертификации. Одни скучно решать - другие черт ногу сломит. Еще условия недосказанные... Попробовал та - только механизмы списания без продаж и типа учетной политики. С продажами вообще не понятно - как считать прибыль от проданного товара которого еще нет на складе. Какая себестоимость? Или вообще его не считать... По идее хорошо бы в оба регистра Продажи и Остатки завести измерения - типа по честному продаем или то чего нет. Указывать в документе оприходования дату "реального" попадания на склад не стал.
Вложения:
1723264.dt
-
вроде даже работает:)
Вложения:
1_6_lukashov.dt
-
Пришёл пока к тому, что остатки не стоит списывать в минус, информация о продаже хранится в "Продажи", когда поступает "Приходная" просто сделать сторно и на количество проданного сделать приход и списание, как буд то продажа(без товара) - это как бы заказ с предоплатой, но тогда дата продажи сместится на дату прихода.
п.с. остаётся вопрос - продажи без поступления надо отображать в отчёте или нет ?
-
Quote (ArturLn)
п.с. остаётся вопрос - продажи без поступления надо отображать в отчёте или нет ?
мне думается надо, продажа была - была, значит надо отобразить, только себестоимость будет пока 0, и соответственно люди работающие по этой схеме будут видеть общее количество и сумму продаж а то что себестоимость 0 будет говорить о том что приходы еще не разнесены
-
А вообще надо ли Приходной хоть что нибудь списывать, если можно в минус ? Вот думаю, что действительно - в Приходной нужен реквизит, в котором будет дата РеальногоПоступления товара, потому что именно с неё списываться будет неправильно, даже если товара хватает, то может списаться не того срока годности(пришёл товар позже, но срок годности у него более ранний) и значить с неправильной себестоимостью.
По этому если можно списывать в минус надо использовать новый алгорит проведения, если низя - то старый. То есть это задача - как бы 2в1 - на новый и старый метод списания с переключением в начале года, и в первом случае Приходная будет аналогом регламентного документа, который списывает себестоимость, только он списывает не за месяц, а по условию - за произвольный период - с момента реального поступления товара(указываемого в документе) до фактического поступления товарного документа.
п.с. под старым и новым методом списания имеется в виду, что если надо списать сразу и себестоимость - то старый метод, а если только количество - то новый.
-
ArturLn, Перечитай тему, тут уже давно все перетерли..http://forum.chistov.pro/index.php?topic=987.msg11845#msg11845
-
Посмотрел вариант решения от Sada, пришел к выводу что вариант решения наиболее верный. Сам так тоже решил
-
А вот и мое решение
Вложения:
1_6_kravius.dt
-
Мысль такая: Два регистра
«Остатки»
- Номенклатура
- Срок
- Партия
= Количество
= Сумма
= СуммаВыручка
«Обороты»
- Номенклатура
- Срок
= Количество
= Сумма
= СуммаСеб
Приходная – безусловно читает «отрицательные» остатки и преобразует их в «положительные»
Расходная - в зависимости от учетной политики или контролирует, или нет «отрицательные» остатки
В реализации функциональны две очень похожие ОбработкиПроведения (Приходная/Расходная) – в расходную перенесена процедура от приходной и подкорректирована (синонимы остались от приходной).
Вложения:
V1slan_1.06.dt
-
kravius, и interslaner,
Я понял, что у вас алгоритм работает так
1. Если в расходе нахватает товара, вы фиксируете нехватку
2. В приходной накладной понимаете, сколько не хватила товара и до списываете необходимое количество.
Наверно это не правильно, так как если приходная была первый, то сортировка товара была бы другой. Соответственно порядок списания другой и стоимость списания другая.
Приведу пример (Списываем по стоимости от большей к меньшей)
Документ Кол. сумма
2 июня Прих. нак №1 5шт. 100грн.
3 июня Прих. нак №2 4шт. 30 грн.
4 июня Расх нак №1 10шт.
Стоимость=5*100+4*30=620 грн.
Нехватка 1шт
5 июня Прих. нак №3 10шт. 1000 грн.
По вашему алгоритму стоимость :
Стоимость=620+1*1000=1620 грн.
Что неправильно, так как 5 июня Прих. нак №3 только фиксируется факт прихода бумажных документов. А на складе этот товар уже есть, и нельзя не учитывать его стоимость при списании. Соответственно таблица для списания должна иметь вид:
Прих. нак №3 10шт. 1000 грн
Прих. нак №1 5шт. 100грн.
Прих. нак №2 4шт. 30 грн
Стоимость=10*1000=10 000грн.
Поэтому нужно сторнировать все движения Расх нак №1 по :
Прих. нак №1
Прих. нак №2
А потом запускать алгоритм списания в Прих. нак №3.
Данный подход реализован в решении sada
-
kow1976, Спасибо
> ... Прих. нак №3 только фиксируется факт прихода бумажных документов. А на складе этот товар уже есть ...
этот факт для ненаметанного глаза из условия задачи сразу не читается ...
1. Насколько я понял, сейчас наиболее оптимальным принято решение завести реквизит "ДатаПоступление" (это тоже для новичка не очевидно) и от него сторнировать/списывают ...
2. С последовательностями не связываются, потому что SergTH000 имеет негативный опыт в этом направлении ...
-
В решении использую следующий алгоритм
1. В приходной проверяю необходимость (есть отрицательные остатки) и возможность (хватает прихода в проводимом документе для списания) реализации сторнирования по номенклатуре.
2. Сторнирую все расходы от даты документа реализации вызвавшего отрицательные остатки до, текущей приходной.
3. В общем модуле списываю себестоимость и продажи по срокам годности и партиям.
4. В оборотный регистр продаж записываю приходной или расходной накладной, но только если хватает остатков.
В остаточный регистр ОстаткиНоменклатуры добавляю ресурс «Продажи» - для получения цен из расходных накладных для расчета выручки по номенклатуре и срокам годности при списании отрицательных остатков.
Отчет ведомость по партиям как в задании смоделировать, не получиться, так как по условию списание должно быть упорядочено по себестоимости. А в приведенном отчете столбец «Расход» упорядочен по неизвестному принципу.
Ведомость получается только если включить запрет отрицательных остатков.
Спасибо за комментарии и оценки
Вложения:
0424164.dt
-
kow1976,
Я-то думал идея с «ДатаПоступления» (а у Вас его почему-то нет) определяющая для этой задачи (или я не прав ?).
А почему бы просто не записать поступление на дату «ДатаПоступления» (отвязать движение от даты документа), а потом перепровести (в приходной накладной) все расходные (взяв их из оборотов регистра остатков), по которым был оборот в расход.?
Как-то так
Пока Выборка.Следующий() Цикл
// перепроводим расходные
Выборка.Регистратор.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
-
interslaner,
Пример
01 .01. 11 Расх нак. 1 В минус 2ед
01 .02. 11 Расх нак. 2 В минус 3ед(-2-3=-5)
01 .03. 11 Расх нак. 3 в минус 4ед(-5-4=-9)
01 .05. 11 прих.нак. в плюс 3ед
01 .06. 11 прих.нак. в плюс 3ед(3+3=6)
01 .07. 11 прих.нак. в плюс 3ед (6+3=9) записываем движения на 01 .01. 11 в плюс 9 ед.
Тогда при перепроведении
01 .01. 11 Расх нак. 1 В минус 2ед (9-2=5)
01 .02. 11 Расх нак.2 В минус 3ед (5-3=3)
И т.д.
Я думаю, не стоит менять прошлое из будущего.
Идея с датой остается, только я определяю ее программным образом (определяю дату документа вызвавшего отрицательные остатки). И сторнирую все расходы до текущей даты.
01 .07. 11 прих. нак. Расход -9ед (-9+9=0)
Потом списываю, согласно задания.
-
kow1976,
1. Алгоритм не запускал. Меня отпугивает навороченность – я бы долго набивал и еще дольше отлаживал.
2. Идея с расходной в партиях прикольная
3. Блокировки ?
4.
Движения.ОстаткиНоменклатуры.Загрузить(Результат.Выгрузить());
Движения.ОстаткиНоменклатуры.Записать(ложь);
Думаю это уже не есть хорошо (хотя можно заменить на добавление по выборке), а вот запросы в цикле имхо - это зло во плоти.
5. Отстраненный вопрос: А Вы оперативное/неопреративное пытаетесь реализовать – это такие требования для экзамена где-то прописаны (я упустил что-то этот вопрос из виду)?
6. Я почему-то думаю, что любое решение для этой задачи будет для экзамена нормальным (вплоть до моего первоначального), если выполнить следующие условия:
- процедура проведения приходной не должна быть пустой (кроме прихода там требуется какая-то логика по обработке отрицательных остатков)
- не использовать последовательности и не использовать перепроведение расходных (как у меня постом выше), т.к. Белоусов из двух вариантов выбрал сторнирование, плюс такие действия должны выноситься на регламент, о чем в условии задачи не упоминается.
- суметь объяснить, как понял условие.
7. Реквизит «ДатаПоступления» сильно упрощает решение и я не вижу у него отрицательных сторон (у товара же должна быть дата фактического появления в организации). Тем более, что он может появиться и на момент, когда расходные не формируют отрицательных остатков, а выправлять по сроку годности я так понял требуется по условию задачи.
-
На экзамене конечно лучше решать наиболее коротким и эффективным способом, но хорошо когда есть понимания достоинств и недостатков решения.
Метод
Движения.ОстаткиНоменклатуры.Загрузить(Результат.Выгрузить());
Движения.ОстаткиНоменклатуры.Записать(ложь);
Применяю, чтоб уменьшить текст программы и время набора. записывать движения по частям действительно не хорошо(снимут балл)
При оперативном проведении остатки надо брать из текущихитогов на 3999г (неопределенно)
При не оперативном МоментВремени()
«Если при проведении документа используются каким-то образом данные, считываемые из регистров, обязательно требуется предусмотреть получение таких данных на момент проведения документа -1 балл»
Запрос в цикле это действительно большое несчастье в решении (могут не засчитать все решение)
Реквизит ДатаПоступления имеет свои недостатки.
1 Сторнирует всю номенклатуру из дока в независимости есть отрицательные остатки или нет.
2 От сторнированные могут быть еще раз от сторнированы в следующем по оси времени документе, что увеличивает количество записей в прогрессии.
3. Нужно знать дату поступления товара(Найти в списке расходных нужную дату).
По, этому в цикле я обрабатываю каждую номенклатуру. У каждой номенклатурной позиции будет своя ДатаПоступления. Сторнироваться будет только номенклатура с отрицательным остатком.
Может быть передать в параметре массив дат ?
-
kow1976,
Очередной раз убеждаюсь, что Вы сами усложняете себе решение! Не подумайте плохого, но Ваше решение, возможно, взятое из реальной практики, к экзамену по спецу применимо отчасти. Или Вы ищете свое решение, отличное от изложенного на сайте, но насколько оно состоятельно!? Это мое мнение, основанное на следующих аргументах:
1. Расходная .. в обработке проведения необходимо всего лишь получить остатки по товару и, в зависимости от учетной политики, осуществить проведение ..
Скажите, для решения этого пункта задачи использование общего модуля, в Вашем случае, оправдано? Зачем вот это .. ?
////////////////////////
ПроведениеДокументов.Проведение(МенеджерВТ,Движения,Ссылка,Отказ,ОперативноеПроведение);
////////////////////////
1.1. соглашусь с товарищем interslaner насчет оперативного проведения .. в задаче про реализацию опер. проведения ничего не говориться .. ну зачем лишнее .. ?
//////////////////////////////
ОперативноеПроведение=Режим=РежимПроведенияДокумента.Оперативный;
/////////////////////////////
На решение это не повлияет, но без этого можно и обойтись!
1.2. СписокНоменклатуры.Итог("Сумма"); - это видимо оЧепятка .. )))
2. Регистры накопления .. в каком то из регистров ресурс Продажи лишний .. а где именно, мыслю в Остатках .. Чтобы получить обороты, получается их можно взять из Остатков .. тогда зачем Продажи ..!?
3. Приходная .. на скриншоте 1 я получил, что списание производится не верно .. суммируете товар, а ведь себестоимость у прихода разная ..
////////////////////////
Получил в коде ..
Результат=Запрос.Выполнить();
Движения.ОстаткиНоменклатуры.Загрузить(Результат.Выгрузить());
Движения.ОстаткиНоменклатуры.Записать(ложь);
Если не Результат.Пустой() тогда <- сюда так и не зашел
ПроведениеДокументов.Проведение(МенеджерВТ,Движения,Ссылка,Отказ,ОперативноеПроведение);
Конецесли;
////////////////////////////
ну а скриншот 2 .. выдал только приход, а ведь этот товар должен был быть сразу списан!
///////////////////
Конечно, запросы в цикле .. не айс!
4. Считаю, что применение дополнительного реквизита ДатаПоступления, предложенный товарищем Sada, пока, наилучший вариант (может кто -нибудь придумает что то лучше!) и Ваши доводы (недостатки) можно парировать:
1) Если заполнен реквизит ДатаПост. значит отрицательные остатки есть и только тогда нужно осуществлять сторнирование .. добавленные движения все равно уйдут в 0;
2) Новый записи в регистры осуществляются только на основании текущего документа и вероятность коллизий за конкуренцию с другими документами .. мыслю .. маловероятна;
3) А вот дату - это, полностью согласен, надо еще поискать, как тут быть .. надо думать! )))))
Все сказанное выше, мое мнение, не подумайте плохого .. Где ошибаюсь .. поправьте! Но все равно считаю - решение сложное!
Вложения:
s0020053.jpg
s0852326.jpg
-
Большое спасибо за комментарий и анализ.
Quote (DoctorRoza)
Скажите, для решения этого пункта задачи использование общего модуля, в Вашем случае, оправдано? Зачем вот это .. ?
////////////////////////
ПроведениеДокументов.Проведение(МенеджерВТ,Движения,Ссылка,Отказ,ОперативноеПроведение);
Учитываю случай когда товара хватило на расходах и он корректно списался расх №1 и№2 на скрине
Quote (DoctorRoza)
в задаче про реализацию опер. проведения ничего не говориться .. ну зачем лишнее .. ?
29.8.11 проводим расход
Если на МоментВремени()
Система возьмет итоги на 31.07.11 и добавит из физической таблицы все записи за месяц. Их может быть тысячи. Скорость проведения будет зависеть от количества записей. Зачем это делать, если есть уже посчитанные текущие итоги.
Quote (DoctorRoza)
Регистры накопления .. в каком то из регистров ресурс Продажи лишний .. а где именно, мыслю в Остатках .. Чтобы получить обороты, получается их можно взять из Остатков .. тогда зачем Продажи ..!?
В остатках ресурс продажи использую для восстановления информации по ценам продаж (Разное количество одного и того же товара продано по разным ценам). Цены нужны для распределения выручки по срокам годности в оборотном регистре. Сразу распределить невозможно, если есть отрицательные продажи.
В оборотном регистре продажи ресурс продажи отражает выручку по номенклатуре и сроку годности.
Но это нужно, только если на экзамене нужен отчет по продажам. В том виде как на рисунке в книге. На экзамене вроде одна ведомость, поэтому задача сильно упроститься. Одна треть кода отвалиться и вполне можно успеть за час двадцать решить задачу.
Quote (DoctorRoza)
Приходная .. на скриншоте 1 я получил, что списание производится не верно .. суммируете товар, а ведь себестоимость у прихода разная ..
По алгоритму сторнируем все отрицательные остатки
На остатках после сторно
10.08.11 100ед на 10 000грн
12.08.11 1ед на 30грн.
Поэтому 11*100=1100грн.
А по 30грн. спишется 101 ед согласно условия задачи.
(если я правильно понял проблему)
Quote
ну а скриншот 2 .. выдал только приход, а ведь этот товар должен был быть сразу списан!
Специально так сделано зачем списывать если товара не хватает. Будут идти приходы до тех пор, пока не хватит для списания
Quote
1) Если заполнен реквизит ДатаПост. значит отрицательные остатки есть и только тогда нужно осуществлять сторнирование .. добавленные движения все равно уйдут в 0;
2) Новый записи в регистры осуществляются только на основании текущего документа и вероятность коллизий за конкуренцию с другими документами .. мыслю .. маловероятна;
Коллизий, конечно, может и не быть, но работать пользователю будет очень тяжко.
Можно представить ситуацию приходуется 10 номенклатурных(бумажный документ один) позиций в конце месяца, отрицательные остатки только по одной и то в начале месяца. От сторнируются и оприходуются вся номенклатура за весь месяц. А хуже всего то, что в приходной накладной может опять не хватить товара. Списание будет не завершено и далеко не очевидно, какую дату, для какой номенклатурной позиции ставить в следующий раз. База будет разрастаться с огромной скоростью.
Я хотел вначале использовать ссылку на документ расх. Нак. в место даты поступления, но это не решает проблемы
Вложения:
s2279431.jpg
-
Quote (kow1976)
Специально так сделано зачем списывать если товара не хватает. Будут идти приходы до тех пор, пока не хватит для списания
А вот это странно .. Получается, что у Вас в системе будут отрицательные остатки и, в то же время, будет присутствовать товар!?
Quote (kow1976)
На остатках после сторно
10.08.11 100ед на 10 000грн
12.08.11 1ед на 30грн.
Поэтому 11*100=1100грн.
А по 30грн. спишется 101 ед согласно условия задачи.
(если я правильно понял проблему)
///////////////////////////////
я понял иначе
10.08.11 г. 100 ед. по 10000 грн.
11.08.11 г. 1 ед. по 30 грн.
/////////////////////////////////////
12.08.11 г. списываем 101, движения будут
-100 по 10000
-1 по 30 .. в условиях задачи сказано, что списание идет по партиям ..
-
Да отрицательные пока не будет возможности их закрыть. При наличии ДатыПоступления все доже самое только решает пользователь когда сторнировать.
По партиям от срока годности
Нет откуда сто нет такого расхода
Расход 11ед
-
Решал данную задачу на экзамене 2 билет.Задача несколько упрощена.Без регистра продаж и учетной политики, остальное тоже самое.Сделал обычное списание по срокам годности ,если остался остаток то в минус без себестоимости и срока годности.В отчете просто видим минусы.Погашения отриц.остатков не делал. Экзаменатор ничего не сказал и замечаний по задаче не было.Нужно ли морочиться с приходной?
-
А у моего возникли:
по типа решения Sada минус партии - решение не верное, результат
"проверка проданного "В минус" товара сделана неверно, не учитываются сроки годности и количество товара в приходной накладной"
Итог - оценка 2 (еще по БУ ошибка с балансовым признаковым РБ и УФ с картинкой)
проверил в задачнике есть условие "Запрет продажи товара с «отрицательными остатками» или разрешение определяется учетной политикой организации, которая может меняться только в начале года." -- в билете такого не было...
-
Покритикуйте плз, сделал по своему, партии списываются при оприходовании, никаких дат нету...
-
Quote (Toxicoff)
Покритикуйте плз, сделал по своему, партии списываются при оприходовании, никаких дат нету.
А где ваше решение?
-
Как в фильме.
-Суслика видишь?
-Нет
-А он там есть ..
-
я балбес) не прикрепил
Вложения:
toxicoff_1.6.dt
-
Toxicoff, подход интересный - приходная определяет остатки с пустыми партиями, списывает их и записывает движения с заполненными партиями. Вот только прокатит ли это на экзамене, непонятно. Кто бы заценил....
Есть описки ( движение приход в списании). Если на пустой базе попытаться провести расходную - получим деление на ноль (это серьезно).
В моем решении используется дата поступления в приходной (как у многих). Но дополнительно в расходной может быть установлен (при отр. остатках) реквизит "Перепроведение". Собственно говоря, на этом можно было бы и закончить, так как в условии прямо сказано, что можно открыть документ и перепровести. То есть, после каждого запоздавшего прихода перепроводим документы с этой галочкой и все.
Если будет время на экзамене (шутка), то добавлю маленькую процедурку перепроведения.
Вобщем, получилось компактно. Это решение для таких тугодумов как я, имеющих привычку зависать над клавиатурой
Вложения:
1_06_bonig.dt
-
Мой вариант решения: в приходную добавляем реквизит «Дата поступления», пишем подписку на событие ОбработкаПроведения, которая (если дата поступления отличается от даты ввода документа) ищет все расходные между датой поступления и моментом времени с такой же номенклатурой и просто их перепроводит.
Прокатит ли такой вариант на экзамене? Лично мне он кажется наиболее простым и логичным, т.к. перепроводятся только те документы, которые нужно, и не образуется бардака в движениях.
Вложения:
facedancer_1-6.dt
-
Мое решение второго билета...
Задача 1.6 решена до конца, сдавала в УЦ№1 30.09.11...получила ХОР, но потому что не решила последнюю, на упр. формы...
А так замечаний ни одного не было...
Вложения:
7674896.dt
-
bonig,
вообще тут ссылочка где то болтается, где преподаватель из 1с на форуме пишет, что необходимо сторнировать старый документ в момент проведения приходной... прочел -сделал так)
+ SUBAlady тоже так сделала)
Поздравляю)
-
SUBALady, спасибо!
-
Долго думал родил только это.
Прошу глянуть.
Если просто сторнировать -куча проблем,Например сказано что документ может перепроводится
Вложения:
_2.dt
-
Посмотрел базу SUBAlady касательно задчи оперативного учета - попробовал сначала провести документ расходная накладная от 10.01 а потом уже провел приходную от 05.01 в итоге движения расходной не сторнировались, документ приходная просто провелся в обычном режиме -считаю поставленная задача не реализована.
Есть видео по решению этой задачи на сайте http://see1c.ru - там в момент проведения приходного документа происходит сторнирование всех "расходных" записей с момента Дата поступления товара (указывается в приходной) по момент времени Приходной накладной и дальнейшее списание товаров уже с учетом введеного документ Поступления (фактически перепроведение тех расходных документов, введеных в этот интервал времени)
-
fancy,
Quote (fancy)
Есть видео по решению этой задачи на сайте http://see1c.ru
если не влом, кинь в меня ссылочкой на видео.
вот моё скромное творчество...
Вложения:
chili_1_6.dt
-
par_62, очень сложное решение. Насколько я понял, вы попытались реализовать решение в условиях оперативного проведения и перепроведения. Однако, в задаче не сказано, что документы должны перепроводиться оперативно.
Здесь на форуме неоднократно отмечалось, что на экзамене оперативное проведение не проверяется. Я думаю, чтобы не порождать тупиковых ситуаций.
Возьмем цепочку: приход, расход, оперативное перепроведение прихода. В результате время прихода сдвигается и на завтра невозможно перепровести расход (при запрете отрицательных остатков). Это касается и вашего решения, и почти всех на этом форуме. И не исправляется ничем, только ручным вмешательством. Интересно, что это касается и примера решения от компании 1С. В нем нет никаких Очистить(), Записывать(), только МоментВремени().
Мелочи, которые могут испортить оценку на экзамене. Бросается в глаза транзакция внутри обработки проведения. Но обработка проведения сама по себе запускает транзакцию. Перед функцией Записать() совсем необязательно устанавливать флаг Записывать. Читается набор движений, а потом очищается. Но ведь он и так изначально пустой.
-
спасибо SUBAlady !!!!
-
SUBALady, спасибо за решение, но при сторнировании в приходной накладной при движении в "+" надо убрать партию и срок годности, а то регистр в 0 не выводится
-
и кстати почему большинство засовывает новый ресурс себестоимости в регистр продажи?
Вложения:
gosn1ck_1-06.dt
-
мой вариант решения
Вложения:
kol118_task_1_6.dt
-
посмотрите плиз мою..
Quote (gosn1ck)
и кстати почему большинство засовывает новый ресурс себестоимости в регистр продажи?
чтобы проще строить отчет, вроде как..
Вложения:
scorp7mix_1_6.dt
-
удалить
-
Учел замечания по производительности.Решил решить по новой.Думаю что "изюминка " этой задачи в том,что указывать дату прихода как раз не надо(где то здесь уже на экзамене упоминали сто это неверно).Зная приколы составителей и то что указывает Белоусов о том что реальная жизнь это одно, а экзамен другое,Почему то вылилось такое решение.
Основное чего не увидел у многих здесь в модуле Приходной в запросе где остатки с пустыми сроками годности являются как
бы табличной частью а данные документа остатками.
Вобщем гляньте - буду рад критике.
Задача в составе 2 билета
Вложения:
7833401.dt
-
После долгих размышлений , пришел к выводу, что факт запрета или разрешения продаж в минус, не влияет на логику работы ( кроме очевидного, не учитывать минусы при проведении расходной). Смысла в сторнировании тоже не вижу. Если можно продавать в минус, продаем без контроля, недостача на пустую партию и срок. При проведении приходной у которой дата регистрации больше даты прихода, приходуем по дате прихода, выбираем все расходные за данный интервал и данной номенклатурой и последовательно перепроводим. Так как отчета по продажам с учетом срока годности вроде нет, то оборотный регистр (изм.номенклатура, ресурсы-кол и сум), все равно в расходной нет информ. о сроках годности (что по жизни глупо (на складе 100 просроченного кефира, а в учете все свежее) ), то при любом расчете возможны погрешности. Если отчет понадобится, то пусть все расчеты будут там . Потестил вроде все сходится. Непонятно почему все против использования последовательности, удобный механизм, тем более авт. перемещение границы можно отключить, и имеем таблицу где необходимые нам ссылки на расходные, упорядоченные по оси времени причем в разрезе номенклатуры. Сам правда вытянул эти ссылки из регистра . P.S. Здесь на сайте интерес волнами, первые три прошли :D, причем сортировка по убыванию .
Вложения:
1.6.dt
-
tan1c,
Quote
Смысла в сторнировании тоже не вижу
Ну удачи тебе защитить решение...xD
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
-
Quote (SergTH000)
Ну удачи тебе защитить решение...xD
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
Мнение Павла Белоусова от 05.10.2010 могло изменится
По крайней мере на разных его курсах всего через месяц, по некоторым вопросам были разные варианты.
Более того, он часто сам говорил, что многие вещи можно реализовывать по разному, главное потом объяснить почему именно так.
Например, (это я от себя) в проведении приходной, можно заполнить из табличной части (так быстрее на экзамене ), а можно запросом сгруппировать, отсечь услуги. За первое решение можно сказать, что оно лучше обеспечивает синхронизацию данных документа и регистра, и если вдруг , понадобиться информация о всех(не сгруппированных записях) , то их можно получить из регистра не просматривая все документы. А за второе, что сгруппированные записи уменьшают объем и время обработки, а информация о дублях несущественна.
А потом, мы не вводим документ задним числом, приходная фиксируется датой ввода (требование задачи выполнено), а запись в регистре делается на дату поступления, как раз тот случай когда дата документа и записи в регистре отличаются. Добавлено (22.01.2012, 20:02)
---------------------------------------------
Кстати как при сторнировании быть в таком случае. Минус в декабре. Частичный Приход по нему в январе след. года.
Политика - в прошлом году отрицательные остатки разрешены, в новом запрещены. Итог - приходная не проводится.
Добавлено (22.01.2012, 20:15)
---------------------------------------------
Также при таком сторнировании (сторнируем расходные датой приходной и расходуем тоже на её момент времени), вся месячная отчетность кривая (если смещение в следующий месяц).
-
tan1c,
В вашем решении есть одно слабое место. Это то, что вы перепроводите все документы в цикле. А это запросы транзакции блокировки. (в табличной части яблоко в минусе а перепроводить будете всю табличную часть, а там товара может быть не мало )
Получите все данные в одном запросе отсортируйте их и спишите за один раз.
-
Quote (kow1976)
tan1c,
В вашем решении есть одно слабое место. Это то, что вы перепроводите все документы в цикле. А это запросы транзакции блокировки. (в табличной части яблоко в минусе а перепроводить будете всю табличную часть, а там товара может быть не мало )
Получите все данные в одном запросе отсортируйте их и спишите за один раз.
Спасибо, что посмотрели решение.
Но вопрос, не в том как реализовать, а в логике решения. Можно старые документы не трогать. А работать только с наборами записей регистра, в качестве регистратора брать приходную.
Вопрос в какие даты использовать.
1) Приход внести на дату приходной накладной или на дату поступления товара (реквизит в котором фиксируется реальная дата прихода товара).
2)Сторнировать и вводить новые записи по списанию датами расходных, или тоже датой приходной.
Если использовать везде дату приходной накладной получается полный абсурд .
По жизни за такую автоматизацию по головке не погладят.
Использовал перепроведение для упрощения, основное, что все даты брал по реальным движениям товара. Неважно, что информация о них поступала позже.
-
На мой взгляд, можно обойтись и без даты прихода
1. Получаем всю номенклатуру ,по которой есть отрицательные остатки
2. Получаем все движения этой номенклатуры от даты возникновения отрицательных остатков до даты вводимой приходной накладной
3. Сторнируем все движения по полученной номенклатуре (приводим учет в состояние до возникновения отрицательных остатков на дату приходной накладной)
4. Списываем согласно заданию по стандартной процедуре.
При перепроведении мы теряем информацию о том когда и какие были отрицательные остатки.
-
Quote (kow1976)
На мой взгляд, можно обойтись и без даты прихода
дело же не только в отрицательных остатках.
Дело в том что расчет себестоимости и в тех накладных, где хватило товара, рассчитан неверно.
И если сторнировать на дату приходной (дату ввода приходной), то возникают уже описанные мною выше проблемы перехода декабрь - январь, если меняется политика по отрицательным остаткам.
А смысл информации о неправильно проведенной расходной, которая искажает реальное положение дел?
-
Quote (tan1c)
Дело в том что расчет себестоимости и в тех накладных, где хватило товара, рассчитан неверно.
Приведите пример?
Quote (tan1c)
А смысл информации о неправильно проведенной расходной, которая искажает реальное положение дел?
Вы оперируете показателем Дата поступления в задаче нет такого показателя. За то есть факт отгрузки в минус. И это не неправильные накладные, а реальное положение учета на заданную дату.
-
Есть реальность . Пришло 2 партии одного товара по разной себестоимости и сроками годности.Из за того, что одну накладную потеряли (завалилась ). В учете списывали (могли списывать, как повезет), не по правилам учетной политики, пока даже не идет речь о минусах, товара полно. Месяц закрыли барыши подсчитали, премии раздали . в следующем месяце нашли старую накладную, а там себестоимость в разы выше или ниже (для образности), и срок годности меньше. А на складе люди работали как часы, т.е. действовали в соответствии политикой партии, сначала отгружали с меньшим сроком годности, а при одинаковых сроках-по большей себестоимости. Еще хуже если переход на конец года... А минусы, они только усугубляют, ведь у них себестоимость 0.
-
Не вижу проблемы
01.01
1 Сторнируем все движения по номенклатуре из наклад до даты накладной
2. Оформляем поступление 01.01
3. Списываем все еще раз 01.01. (приводим состояние учет к его фактическому положению).
Перепроводить документы в этом случае категорически нельзя.
При этом остается информация кто на косячил и когда. Да и если все сдано в налоговую инспекцию, изменить уже ни чего нельзя. Только внести правки следующим месяцем.
Quote (tan1c)
Месяц закрыли барыши подсчитали, премии раздали
А инвентаризацию в конце месяца проводить не надо? Как это получили премия, если у вас на остатках одно а в базе другое. Тут не премии а трудовые надо выдавать.
-
Quote (kow1976)
Не вижу проблемы
01.01
1 Сторнируем все движения по номенклатуре из наклад до даты накладной
2. Оформляем поступление 01.01
3. Списываем все еще раз 01.01. (приводим состояние учет к его фактическому положению).
1.Если не использовать дату фактического прихода, придется сторнировать за все предыдущие 20 лет, сотни тысяч позиций... (использование этой даты существенно ограничит это сторнирование )
Фактически вы предлагаете из-за сохранения накосяченных накладных, "забыть" про учет до 01.01
и начать новую жизнь с нового года, (потом с 1 марта, 1 апреля ...).
ИМХО Если так важны накосяченные накладные, сохраните базу на этот момент, а рабочую следует привести в "рабочее" состояние. Цель учета не в накоплении ошибок, а в их отсутствии, учет должен соответствовать реальному положению дел.
А факт, что накладная была введена позже итак сохраняется в базе.Добавлено (24.01.2012, 14:38)
---------------------------------------------
P.S. Вообще смысл слова сторнировать - отменить какую-то операцию, причем остается информация какую именно (дата прежней операции и т.д.). А при отмене нескольких разных операций (разные даты) , одной (с одной датой) , это уже не сторнирование, а произвольное изменение в учете, причем ИМХО ничем не обоснованное.
-
Давайте рассуждать так( по задаче)
Остатки по номенклатуре яблоко ушли в минус
Остатки по номенклатуре груша остались в плюсе(себестоимость рассчитана)
Приход
Яблоко и груша.
Так вот по яблоку проводим сторнирование и расчет себестоимости, а по груше нет (она пришла сегодня датой накладной).
Причем процесс сторнирования и восстановления стоимости нужно начинать если прихода по яблоку больше всего расхода.
Если есть «Завалящая накладная» она вводится датой поступления (это пользовательская проблема) и нужно осуществлять перепроведение в штатном режиме.
Можно конечно добавить дату поступления в шапку, можно в табличную часть каждой номенклатурной позиции. Но этого в ТЗ нет. Это самодеятельность.
Вы в своем решение продублировали штатную процедуру восстановление последовательности.
-
Идея добавить в шапку реквизит "реальная дата прихода", не моя, но мне нравится . Она есть в большинстве решений данной задачи. И запрета на ее добавление в ТЗ нет. Там говорится, как я понимаю, о дате приходной, стандартном реквизите документа (фраза -документы задним числом не вводятся).
Также в ТЗ указана процедура списания, и если не учитывать "реальную дату прихода", то она будет проведена неверно.
Возможно, имеет смысл на экзамене уточнить, что важнее. Так как цель сдать экзамен, а не правильно автоматизировать . Важно мнение конкретного экзаменатора.
-
Абсолютно с вами согласен решений множество. Прочтений тоже может быть много. Нужно уточнять на экзамене или писать комментарий если такой возможности нет.
Добавлено (25.01.2012, 06:07)
---------------------------------------------
Пример
Остатки
Яблоко (-10) шт. 0грн
Груша 5шт 100грн.
Приходная №55
Яблоко (4) шт. 20 грн
Груша 1шт 3грн.
//Сторнирование и расчет себестоимости не выполняем
Приход Яблоко Приходная №55 4 шт 20грн
Приход Груша Приходная №55 1 шт 3грн
Приходная №56
Яблоко (4) шт. 24 грн
Груша 1шт 4грн.
//Сторнирование и расчет себестоимости не выполняем
Приход Яблоко Приходная №56 4 шт 24грн
Приход Груша Приходная №56 1 шт 4грн
Приходная №57
Яблоко (5) шт. 35 грн
Груша 1шт 6грн.
//Сторно запись
Расход Яблоко (-10) 0 грн.
//Себестоимость
Расход Яблоко Приходная №55 4шт 20грн
Расход Яблоко Приходная №56 4шт 24грн
Расход Яблоко Приходная №57 2шт 14грн
//Приходуем остаток
Приход Яблоко Приходная №57 3 шт 21грн
Приход Груша Приходная №57 1 шт 6грн
Все датами документа. Себестоимость по ФИФО и абсолютно правильно. При этом не нужны "ДатыПоступления" .
Хотя с датами поступления я так понял решения задач засчитывают.
Это всего лишь вариант решения, а как правильно решит тот кто проверяет.
-
tan1c,
Quote
Например, (это я от себя) в проведении приходной, можно заполнить из табличной части (так быстрее на экзамене ), а можно запросом сгруппировать, отсечь услуги. За первое решение можно сказать, что оно лучше обеспечивает синхронизацию данных документа и регистра, и если вдруг , понадобиться информация о всех(не сгруппированных записях) , то их можно получить из регистра не просматривая все документы. А за второе, что сгруппированные записи уменьшают объем и время обработки, а информация о дублях несущественна.
OMG, это facepalm xDDD: услуги должны отсекаться в поступлении на момент ввода пользователем (в форме документа), а не в обработке проведения а это Quote
лучше обеспечивает синхронизацию данных документа и регистра
кому нужна эта синхронизация? регистры (накопления) и нужны для того чтобы иметь максимально сгруппированные записи..
Quote
понадобиться информация о всех(не сгруппированных записях) , то их можно получить из регистра не просматривая все документы
Конечно пользователь полезет в регистр смотреть все записи всех документов, отборы там наверное будет делать по регистратору...
По поводу того что мнение Белоусова могло измениться - ну да: человек составил задачу для сборника, принимал по ней экзамен, комментировал на форуме имея ввиду такое видение решения задачи, а потом подумал: не-е, не правильное это решение..хаха конечно
Добавлено (25.01.2012, 15:41)
---------------------------------------------
Quote
Важно мнение конкретного экзаменатора.
Quote
Мнение Павла Белоусова от 05.10.2010 могло изменится
Наверное экзаменаторам нужно постоянно обновлять/повторять свои "мнения"
-
Про услуги в приходной, погорячился , имел ввиду расходную.
Суть в том, группировать записи (тогда запрос), или как есть конструктором (что быстрее).
А про синхронизацию, это вы зря. Именно Павел обращал на это наше внимание. Одна из проблем платформы (и нашей) это обеспечить синхронизацию документов и регистров, чтобы данные были достоверными. Ведь регистры это лишнее звено, добавлены искусственно для облегчения жизни компа , в реальной модели их нет.
А по поводу изменения мнений, многие формулировки задач уже изменились, некоторые еще будут меняться, ошибки или опечатки составителей (а это не только Павел) признаются (сам читал сообщения на форуме от Павла "это ошибка" ).Добавлено (25.01.2012, 18:07)
---------------------------------------------
kow1976, в своем примере вы сильно упростили себе жизнь, пока не закрыли минус, у вас только приходные . А также не рассматриваете то, что есть периоды отчетности месяц, квартал, год. Если у вас данные разнесены по периодам, то отчетность в них тоже нарушена. ИМХО суть документа, привязка ко времени (по реальным событиям), а здесь сбой.
-
tan1c,
Quote
А про синхронизацию, это вы зря. Именно Павел обращал на это наше внимание. Одна из проблем платформы (и нашей) это обеспечить синхронизацию документов и регистров, чтобы данные были достоверными. Ведь регистры это лишнее звено, добавлены искусственно для облегчения жизни компа biggrin , в реальной модели их нет.
Оо по этому и пред. твоим постам следует что при обходе ТЧ в цикле для записи в регистр данные будут более достоверными? Это значит если данные получать запросом и группировать они менее достоверны? Достоверность данных к данному разговору вообще отношения не имеет.
Quote
Про услуги в приходной, погорячился biggrin , имел ввиду расходную.
Да причем тут услуги? если говорить про расходную у тебя там все равно запрос, блин да даже если не запрос а тоже обход ТЧ, что при обходе цикла нельзя отсечь услуги?
Quote
А по поводу изменения мнений, многие формулировки задач уже изменились, некоторые еще будут меняться, ошибки или опечатки составителей (а это не только Павел) признаются (сам читал сообщения на форуме от Павла "это ошибка" biggrin ).
Формулировка этой задачи абсолютно такая же как в 8.1,а это еще более старый сборник. Да причем тут опечатки и ошибки? в той ссылке которую я тебе написал, Белоусов конкретно соглашается с прложенной схемой решения задачи, блин, кароче ты походу любитель поспорить ни о чем, но самое главное я на 100% уверен что ты последовательностью решать задачу на экзамене не будешь, хотя здесь конечно можно с пеной у рта защищать свое решение. Мне первый раз попалась эта задача и я решал именно через последовательность - мне ее не защитали. НЕ Белоусов.
-
По поводу достоверности. Любая группировка, это упрощение (уменьшение) входной информации, независимо нужна она или нет. Если в приходе одна деталь вбита несколько раз, то после группировки информация о этом исчезнет, т.е. в документе есть эта информация, в регистре уже нет.
На экзамене естественно, я выясню у экзаменатора .
Ну и действительно, здесь полностью согласен, что мы постепенно приближаемся к флуду. Извини если не отвечу .
-
Quote (SergTH000)
блин да даже если не запрос а тоже обход ТЧ, что при обходе цикла нельзя отсечь услуги?
SergTH000, в этом случае Вы создадите хоть и неявный, но запрос в цикле
-
Альберт, Вы, уважаемый Альберт, чрезвычайно проницательны. Хотя бы сначала прочитали нашу переписку, если собрались ее комментировать. Я никому не предлагаю отсекать услуги в цикле обхода тч (как раз наоборот). Представьте себе, как это ни странно, я знаю, что в этом случае произойдет неявный запрос.
-
SergTH000, c вашим опытом уже пора избавиться от "синдрома третьеразрядника"... вот всё жду этого момента, но никак не дождусь
-
Gyd, Че? Че за синдром третьеразрядника?
-
Успешность программиста заключается не только в отличном знании матчасти, но в умении корректно выражать свои мысли. Даже если хочется ругаться Будьте успешны, SergTH000!
-
Gyd, Иди СПР порешай, успешный, ЛОЛ.
-
SergTH000, что помешало здесь написать то, что вы мне в личку написали? Или вы из тех людей которые смелые только на форумах?
П.С. Извините, за термин. Зря я его использовал, вы конечно с ним незнакомы. Скажу по-простому: уважайте других участников форума. И подбирайте фразы для выражения своих мыслей, здесь не "гоха.ру".
-
а закидайте помидорами мою мысль!
я думаю в тех приходных накладных, у которых заполнена дата фактического поступления товара, движения прихода делать не на дату документа а на дату фактического поступления. И запросом в разрезе регистратора получать список документов расходная накладная с даты фактического поступления до даты документа приходная накладная. Выводить их в отдельное окно и предлагать пользователю их сразу провести. Ведь в задании сказано, что документы можно открывать и перепроводить. Я так думаю, для того чтобы выровнять себестоимость по "неправильно" проведенным расходным.
-
Gyd,
Quote
что помешало здесь написать то, что вы мне в личку написали? Или вы из тех людей которые смелые только на форумах?
Все очень просто - здесь модераторы и пост могли удалить до того как ты прочитаешь.Добавлено (29.01.2012, 14:55)
---------------------------------------------
Как это сделали с пред постом Альберту
-
Ок, продолжим общение в личке.
И не забудьте друзей побольше собрать, если решитесь на встречу. По опыту знаю что такие парни как вы - одни никуда не ходят
-
Gyd,
Quote
По опыту знаю что такие парни как вы - одни никуда не ходят smile
Печальный у тебя опыт. Я жду.
-
SergTH000, вы меня разочаровываете всё больше. Про маты в личку я молчу, но изменение репутации со второго аккаунта - это сильно :))))))) заведите еще несколько аккаунтов - процесс пойдёт быстрее)))))
-
Gyd, Я подумаю
-
Не обижусь если "загоните" меня в минус ))))
-
Объясните мне, пожалуйста, если решать эту задачу без применения дополнительного реквизита ДатаПоступления, то чем будет плохо подобное решение при условии, что документы в нем делают следующие движения:
Вложения:
s3828037.png
-
Альберт, Здесь проблема в трактовке условий задачи и исходных данных. В вашем примере срок годности в последней приходной (№3) выбран удачно , а если взять срок годности у товара из (№3) меньше (например 09.02.2012), чем у товара из расходных накладных (№1 и 2), то списание себестоимости расх. №1 проведено неверно. По условиям первым списывается товар с меньшим сроком. Т.е. расходная №1 в вашем примере сначала должна списать 10 шт. с себест. 100р/шт из приходной №3, которая пришла до 31.01.2012, но была вбита позже.
-
проверьте не очень понял задачу, мозг можно сломать
Вложения:
1.6_max_osodoev.dt
-
Коллеги, насколько корректно использовать измерение типа дата. Не лучше ли создать измерение ссылочного типа и Справочник "Серии" с реквизитом СрокГодности.
Придираются на экзамене к не ссылочным измерениям???Добавлено (26.02.2012, 15:49)
---------------------------------------------
max_osodoev, в моём задачнике нужно сделать отчёт ведомость по товарам и продажи. И везде присутствует срок годности!!! У Вас задачник какой редакции?
У меня редакция 3 июнь 2010. Есть подозрение, что с этим отчётом по Продажам составители погорячились. В принципе решить это можно создав измерение СрокГодности в регистре "Продажи" и распределять сумму продажи по документу пропорционально количеству списанному по каждому сроку годности.
-
safer, я тоже думаю, они погорячились. но, видимо, наконец снизошли до нас -простых смертных и, говорят, отчета по продажам в разрезе сроков годности на экзамене нет. Иначе, если решать, как sada (и это правильно, что подтверждает Белоусов, хотя из постановки задачи в сборнике совершенно не очевидно), то сумму продажи действительно надо распределять, получается очень много работы для экзамена- не представляю, как можно уложиться.
-
А кто сможет подсказать возможны ли следующие исходные данные?
И если да, то как их стоило бы обрабатывать (на данный момент интересует списание себестоимости)?
РН №1 от 10.01(январь) Товар1 15шт.
РН №2 от 20.01 Товар1 4шт.
ПН №1 от 20.02 (дата поступления товара 16.01) Товар1 5шт. СГ(срок годности) - 01.02
ПН №2 от 25.02 (ДП 05.01) Товар1 20шт. СГ - 05.02
-
Roman, На мой взгляд любые комбинации возможны, только в Вашем случае рн не должна проводиться, если в учетной политике не разрешено продавать в минус, если разрешили, то сг, партия и себестоимость пустые, остальное по плану..
потом 20.02 при оформлении пн №1 сторно записей рн №1 и №2, приход и расход 5 шт и т.д., если конечно номенклатура из пн есть в регистренакопления.остаткиноменклатуры.обороты
-
vallerikk, спасибо за ответ, но
Quote (vallerikk)
потом 20.02 при оформлении пн №1 сторно записей рн №1 и №2, приход и расход 5 шт и т.д.,
Сторнировать рн№1 нет смысла - приход актуален на 16.01, на дату рн№1 товара все ещё нет на складе (данные по нему ещё не введены).
Прикол начинается при оформлении пн№2:
1) сторнируем рн№1 и рн№2
2) выбираем остатки с сортировками по СГ и стоимости
3) списываем
И получаем, что по первой расходной списали 5ед. Товара1 из пн№1 (СГ меньше) и 10ед. Товара1 из пн№2, а по второй - 4ед. Товара1 из пн№2.
А это неправильно, поскольку, опять же, на 10.01 по данным приходных на складе только 20ед. Товара1 с СГ-05.02. Т.е. фактически после проведения пн№2 должна получиться следующая картина по списаниям и остаткам:
РН№1: списано 15ед. Товара1, СГ-05.02
РН№2: списано 4ед. Товара1, СГ-01.02
Остатки:
Товар1, СГ-05.02 5ед
Товар1, СГ-01.02 1ед
Насколько я понял и проверял выложенные здесь решения, они такой картинки не дадут (если ошибаюсь - буду рад за подсказку ). Сейчас мысли крутятся вокруг использования последовательности и записи движений в приходной задним числом. Но насколько это будет корректно (дата приходной - текущая, а дата движений по приходной - дата поступления товара)? Прокатит ли это при условии "документы задним числом вводить нельзя"? Или, если это некорректно для данной задачи, остается вариант с дублированием механизма получения остатков на определенную дату, что не кажется рациональным...
Вот такие соображения :(. Поэтому и решил спросить на форуме.
-
Quote (Roman)
Сейчас мысли крутятся вокруг использования последовательности и записи движений в приходной задним числом.
Roman, вы читали посты SergTH000 и ut2k5 в этой теме? Чем вас не устраивает их вариант решения?
-
Мой вариант:
1. Решение получилось достаточно простое, никаких МенеджеровВТ, доп.реквизитов, доп.регистров.
2. Схема "сначала приход, потом расход" - тут стандартно, только с проверкой учетной политики и записью в регистр продажи себестоимости.
3. Схема "сначала расход, потом приход" - расходная делает запись в регистр с суммой и количеством, потом при появлении прихода эти данные сторнируются (1) и делаются движения прихода (2) и расхода (3), а также запись в регистр продажи с себестоимостью (4).
4. Есть возможность продавать товар без срока годности.
5. Плюсы: просто. Минусы: нет реальной даты продажи, не знаю как относятся к проверке типа документа в запросе, в документе прихода может быть товар только с одним сроком годности (не знаю насколько это критично).
6. Отчеты реализованы в требуемом виде.
Вложения:
Gyd_1_6.dt
-
Мое решение. Все вроде нормально, одно не понятно пока -- можно ли привести продажи к нормальному виду. И нужно ли?
Т.е. у меня остаются строки фиктивных продаж в минус по пустому сроку годности
--------------------------------------------------------------------------------------------------
Считаю свое решение не законченным... Не решена задача корректировки продаж. Можно наверно упростить ее в плане при фиктивной реализации фиксировать продажи только того товара, который был в остатке, а по мере прихода дописывать... В принципе продажи без срока годности и сс -- с натяжкой можно считать нужными. Но есть такая мысль, реализовать которую не получилось пока: реализацию в минуса фиксировать партией самого документа реализация с пустым сроком годности. В приходе отрицательный остаток товара по партиям расходных накладных соединять с таблицей прихода. Получаем какие реализации закрываются какими строками прихода. А по док. реализации из рег.Продажи можно вытянуть сумму продажи. Получается у нас все будет для сторнирования продаж Номенклатура + СрокГодности+Количество+Себестоимость из Прихода, Продажную стоимость из рег.Продажи...
Вложения:
sv_mikh_01_06_2.dt
-
Quote (sada)
В общем то, как я понял эту задачу, главное реализовать списание себестоимости в том виде, как сказано в условии, а именно: по партиям в зависимости от срока годности, внутри одного срока годности в первую очередь более дорогой.
Из этого следует, что мы не можем списав товар реализацией на этом успокоиться , даже если его хватило на остатке. Потому как документы, которые формируют реальную себестоимость возможно еще в пути.
В связи с этим предлагаю добавить в документ «ПриходнаяНакладная» реквизит «Дата поступления». И при каждом поступлении проверять, не продавался ли данный товар, начиная с этой даты до момента текущего поступления, если продавался, то сторнировать все продажи этого товара и формировать новые с учетом этого поступления.
а в минус он был списан или нет, какая разница, себестоимость должна корректироваться при любой реализации если после неё приходят документы с датой поступления более ранней.
Прикрепления: 1Cv8_sada_1_06.dt(150Kb)
Чего-то я застрял с этой базой. Добавил количества в реализацию (сделал 105 штук), ввёл ещё несколько поступлений.
Из минусов вышло, но всё равно в движениях получается,:
Code
Период Регистратор Номер строки Номенклатура Срок годности Партия Количество Сумма
+10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 1 Big (капилярная) 03.01.2012 Приходная накладная 000000007 от 10.11.2010 12:00:00 20 320,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 2 Big (капилярная) 02.01.2011 Приходная накладная 000000001 от 01.01.2010 0:00:00 -5 -50,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 3 Big (капилярная) 01.01.2011 Приходная накладная 000000002 от 02.01.2010 0:00:00 -10 -100,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 4 Big (капилярная) 02.01.2011 Приходная накладная 000000005 от 01.11.2010 12:00:00 -20 -320,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 5 Big (капилярная) 02.01.2011 Приходная накладная 000000004 от 31.10.2010 20:45:55 -30 -400,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 6 Big (капилярная) 01.01.2011 Приходная накладная 000000004 от 31.10.2010 20:45:55 -30 -400,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 7 Big (капилярная) 02.01.2011 Приходная накладная 000000003 от 03.01.2010 12:00:00 -10 -150,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 8 Big (капилярная) 01.01.2011 Приходная накладная 000000004 от 31.10.2010 20:45:55 30 400,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 9 Big (капилярная) 01.01.2011 Приходная накладная 000000002 от 02.01.2010 0:00:00 10 100,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 10 Big (капилярная) 02.01.2011 Приходная накладная 000000005 от 01.11.2010 12:00:00 20 320,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 11 Big (капилярная) 02.01.2011 Приходная накладная 000000003 от 03.01.2010 12:00:00 10 150,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 12 Big (капилярная) 02.01.2011 Приходная накладная 000000004 от 31.10.2010 20:45:55 30 400,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 13 Big (капилярная) 02.01.2011 Приходная накладная 000000001 от 01.01.2010 0:00:00 5 50,00
Проще говоря сторнирование работает даже когда уже не нужно (ушли в плюс, сроки годности более новые)
отсортирую движения приходника и покажу последние колонки для понятности:
-5 -50,00
5 50,00
-10 -100,00
10 100,00
-10 -150,00
10 150,00
-30 -400,00
-30 -400,00
30 400,00
30 400,00
-20 -320,00
20 320,00
20 320,00 - вот это вот сам приход, одна строчка, остальное - накопившиеся сторно
Как всё это побороть?
Или так и нужно? Но регистр же растёт! Что-то мне подсказывает, что экзаменатор за такое зубами загрызёт!
Особенно интересует поступление после расходной товара со сроком годности меньше или с тем же сроком, но большей ценой, чем в предыдущем приходе. Приходная начнёт сторнирование с перекидкой списанного на другую партию и пересписание заново! это правильно или нет? Может быть те, которые уже списаны по партиям - вообще не трогать, а перебрасывать только те которые пустые? Получается, что формально при этом будет нарушен порядок списания?
-
java, а зачем у вас вот это:
Quote (java)
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 2 Big (капилярная) 02.01.2011 Приходная накладная 000000001 от 01.01.2010 0:00:00 -5 -50,00
-10.11.2010 12:00:00 Приходная накладная 000000007 от 10.11.2010 12:00:00 3 Big (капилярная) 01.01.2011 Приходная накладная 000000002 от 02.01.2010 0:00:00 -10 -100,00
что этим достигается?
А переброска для чего? Я правильно понял, если допустим расход списал несколько партий и еще сделал движения в минус, то при следующем приходе вы отмените все движения расхода и что-то заново там с ними сделаете? По-моему это как то чересчур сложно.
-
Quote (Gyd)
А переброска для чего? Я правильно понял, если допустим расход списал несколько партий и еще сделал движения в минус, то при следующем приходе вы отмените все движения расхода и что-то заново там с ними сделаете? По-моему это как то чересчур сложно.
Я сейчас сам делаю решение, хотел посмотреть готовое решение sada, которое здесь в теме активно обсуждали. И теперь даже не знаю как правильно.
Там есть
3 прихода
прих№1 1.01.2011 10шт 100 руб срок годности 2.01.2011
прих№2 2.01.2011 10шт 100 руб срок годности 1.01.2011
прих№3 3.01.2011 10шт 150 руб срок годности 2.01.2011
расходная 30.10.2011
35 штук
списывает сначала по партии док№2, потом № 3, потом№1, потом 5 штук висят без партии по 0 сумме
новый приход №4 31.10.2011 срок годности 1.01.2011
30 штук по 400
так вот этот приход сторнирует не только 5 штук по 0, но также сторнирует списание по партиям (№1,2,3) и пересписывает так:
1)сначала 30 штук по партии №4, потому что она по сроку годности (01.01.2011) и себестоимости (13.3) оказывается приоритетней, чем партия №2
2) потом 5 штук по партии №2
Вот что я имел в виду: если запоздалый приход оказывается впереди предыдущего за счёт более раннего срока годности . Нужно ли в таком случае сторнировать уже списанные партии и пересписывать заново, с учётом нужного нам порядка списания по срокам годности?
Более того, в указанном решении сторно-записи будут попадать в каждый следующий документ поступления.
Есть идея, что лучше оставить в покое уже списанное и списывать только висящие минуса с пустыми партиями - но тогда нарушится порядок списания, не является ли это нарушением условий задачи?
-
Quote (java)
Есть идея, что лучше оставить в покое уже списанное и списывать только висящие минуса с пустыми партиями - но тогда нарушится порядок списания, не является ли это нарушением условий задачи?
Думаю sada усложнил задачу, если так глубоко копать то можно начать сторнировать списаное еще в позапрошлом году :), я бы остановился на варианте с минусами и пустыми партиями.
-
Quote (Gyd)
Думаю sada усложнил задачу, если так глубоко копать то можно начать сторнировать списаное еще в позапрошлом году :), я бы остановился на варианте с минусами и пустыми партиями.
Я бы тоже на этом остановился. Вопрос в том, не расценит ли преподаватель (или тот кто проверяет дистанционные задания) это упрощением условия задачи? Вдруг сбросит баллы или не засчитает.
Как там сказано:
Quote
Списание себестоимости товаров должно быть организовано по партиям, в
зависимости от срока годности.
С другой стороны, если не упростить таким образом - то вообще непонятно как делать
-
java, даже с этим "упрощением" она всё равно будет не простая
Думаю условие "списывается в первую очередь более дорогой товар" создано для обычного порядка списания - "приход, потом расход" (аля ФИФО/ЛИФО).
-
А что делать с регистром продажи?
1)С одной стороны товар уже продан и его надо записать в "продажи" для отчета.
Но если расходником писать при продаже в минус в регистр "продажи", получается оборот с пустым сроком годности.
В отчёте "продажи" будет висеть строчка с количеством, но нулевой себестоимостью (т.к. не поступило, а значит и прибыль покажет равную сумме. Может в этом случае вообще не выводить ни сумму, ни прибыль, ни себестоимость, а одно только количество?)
2)С другой стороны хоть и продан, а не понятно с каким сроком годности,это станет известно позже.
А что если не писать минус в "продажи" расходником, а записать приходником, уже после сторнирования остатков?
Но тогда отчёт "Продажи" будет показывать не то что реально продано, а сколько получилось списать с нынешним остатком. А это уже не отражает сути отчёта, который показывает проданное, а не списанное.
Как лучше поступить?
-
java, вы не смотрели моё решение? Там реализовано то о чём вы спрашиваете. Посмотрите принцип.
-
Quote (Gyd)
java, вы не смотрели моё решение? Там реализовано то о чём вы спрашиваете. Посмотрите принцип.
Посмотрел. Я понял, что вы заносите в регистр продажи приходником, когда товар списывается и сторнируется минусовой приход, т.е. считате товар проданным только когда он поступил по документам прихода и закрылись минуса.
Таким образом гарантированно не будут висеть минусовые продажи с ожидаемым поступлением.
Будем надеяться, что преподаватели с этим согласны и не захотят увидеть количество проданных в минус.
Кстати, заметил в вашем решении:
сторнирование идёт по пустым ссылкам в измерении "Партия", а расходная - партия ссылка, значит не выведет на ноль.
проведение списание идёт не в порядке срока годности.
Возможно вместо
Code
|УПОРЯДОЧИТЬ ПО
| Ном,
| Цена УБЫВ,
| Партия
стоит лучше задействовать что-то вроде :Code
УПОРЯДОЧИТЬ ПО
СрокГодности,
Цена УБЫВ
-
Quote (java)
Кстати, заметил в вашем решении:
сторнирование идёт по пустым ссылкам в измерении "Партия", а расходная - партия ссылка, значит не выведет на ноль.
Вы уверены что не выведет в ноль? Посмотрите внимательнее пожалуйста.
Quote (java)
проведение списание идёт не в порядке срока годности.
С этим соглашусь.
-
Quote (Gyd)
Вы уверены что не выведет в ноль?
Я недавно начал снова готовится, мне надо медленно, на пальцах...
Давайте рассмотрим:
При списании в минус срабатывает:
Code
Если НужноСписать > 0 Тогда
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = В2.Ном;
Движение.Партия = Ссылка;
Движение.Количество = НужноСписать;
Движение.Сумма = Движение.Количество*В2.Сумма/В2.Количество;
КонецЕсли;
В партию пишет ссылку на расходник, срок годности пустой, сумма и количество- пишется не себестоимость, а сумма продажная (спасибо за идею, пришлось рисовать таблицу, чтобы понять как сторнировать )
А теперь сторнирование:Code
Движение = Движения.ОстаткиНоменклатуры.Добавить(); //сторно
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = В.Ном;
Движение.Количество = КоличествоСписываем;
Движение.Сумма = СуммаСписываем;
Сторнирует по пустой партии, пустому сроку годности, сумма продажная.
Вывод: несводимость к нулю по Партии.
-
Мне кажется я ее сделал! Ключевая идея: в остатки номенклатуры уходят в минуса по партии расходной накладной. В приходе появляется возможность вытянуть по расходной накладной сумму продажи и корректно отсторнировать продажи. Отчеты во всяком случае вроде красивые получаются. Кому не трудно -- забракуйте решение
Вложения:
sv_mikh_01_06_3.dt
-
Quote (java)
Давайте рассмотрим:
А вы третье движение забыли. Давайте на пальцах рассмотрим:
Это было:
- Яблоко-ПустаяПартия-10 шт.- 500 руб. ("-") - результат проведения расходной.
Это появляется при проведении приходной:
- Яблоко-ПустаяПартия-10 шт.- 500 руб. ("+") - это списываем расход сделанный ранее, чтобы вывести регистр в ноль. 500 - сумма продажи.
- Яблоко-Партия 1 - 30 шт. - 300 руб. ("+") - это приходуем всё из документа.
- Яблоко- Партия 1- 10 шт. - 100 руб. ("-") - это списываем то что якобы списалось ранее по расходной.
Итого получается следующее:
- Яблоко-ПустаяПартия-10 шт.- 500 руб. ("-")
- Яблоко-ПустаяПартия-10 шт.- 500 руб. ("+")
-------------------------схлопываются и получается 0-----------------------
- Яблоко-Партия 1 - 30 шт. - 300 руб. ("+")
- Яблоко- Партия 1- 10 шт. - 100 руб. ("-")
----------остаток 20 шт. с суммой 200 руб. по партии Партия 1--------------
то есть у нас пришло 30 шт. и 10 из них списались по расходной.
-
sv_mikh, и Gyd,
А меня еще в данной задаче беспокоит цена по которой продается товар который ушел в минус.
sv_mikh,
Уходить в минус он может по разной цене продажи. А приходовать вы его будете по средней цене
Code
|
ПродажиОбороты.СуммаОборот / ПродажиОбороты.КоличествоОборот КАК ЦенаПродажи,
Соответственно у вас будет не правильная выручка по номенклатуре в разрезе срока годности.Добавлено (27.03.2012, 20:48)
---------------------------------------------
Как узнать цену по которой продавалась номенклатура с заданным сроком годности. если при продаже срок годности не указывается. А выбирается исходя из ТЗ по остаткам которых еще нет.
-
Quote (kow1976)
Соответственно у вас будет не правильная выручка по номенклатуре в разрезе срока годности.
Можете привести обоснованный пример, демонстрирующий ошибку? Я не вижу ничего страшного расчета по среднему
Quote (kow1976)
Как узнать цену по которой продавалась номенклатура с заданным сроком годности. если при продаже срок годности не указывается. А выбирается исходя из ТЗ по остаткам которых еще нет.
Я предлагаю это делать по регистратору.Добавлено (27.03.2012, 21:02)
---------------------------------------------
Quote (kow1976)
Соответственно у вас будет не правильная выручка по номенклатуре в разрезе срока годности.
Выручка будет правильно в целом по закрытым минусам. Если рассматривать каждый отдельный минус, то да, расчет по среднему. Но кто сказал, что это зло? В данном случае корректно все будет только в случае запрета отрицательных остатков. Пока Вы меня не убедили в ошибочности моего решения.
-
Quote (sv_mikh)
В данном случае корректно все будет только в случае запрета отрицательных остатков
Получится так что если делать так:
Приходуем потом продаем, не равно по выручке, операции продаем а потом приходуем. Но это только в разрезе сроков годности.
А в разрезе номенклатуры выручки будут равные.
Quote (sv_mikh)
Пока Вы меня не убедили в ошибочности моего решения
Это не ошибка. Это упрощение(причем вполне корректное на мой взгляд). Тем более в экзаменационном белеете этого отчета вроде нет.
Просто хорошо когда видишь проблему. И осознанно принимаешь решение брать цену из регистратора или достаточно рассчитать среднею. Или может быть есть какой нибудь другой способ.
-
Quote (kow1976)
Тем более в экзаменационном белеете этого отчета вроде нет.
Это существенно упрощает задачу. Не может не радовать.
Quote (kow1976)
Приходуем потом продаем, не равно по выручке, операции продаем а потом приходуем.
Но это Вы только предполагаете, или проверяли? Мне кажется должно быть равно.
-
Я не проверял но уверен на 99,(9). Средняя не может совпадать с единицей совокупности.
Но в принципе давайте проверим.
-
Quote (kow1976)
Я не проверял но уверен на 99,(9). Средняя не может совпадать с единицей совокупности.
Но в принципе давайте проверим.
Попробую порассуждать в чем проблема и есть ли она. Предположим мы продаем товар, которого заведомо нет.
Пусть так: на складе есть 30 шт. некоего товара... Срока годности мы его не знаем, но предполагаем, что он разный и по разным ценам.
Продаем его весь... 10 шт. по 10 руб за шт. 10 шт. по 20 руб. за шт., 10 шт. по 30 руб за шт. Сроков пока не знаем.
Произошел приход 40 шт. нужно отсторнировать 30 шт. В моем варианте мы о нем знаем, что есть -30 шт. по цене 20 руб за шт. (средняя по регистратору).
Мы будем сторнировать -10 шт. -200 руб. и приходовать/списывать по фактической. И так для каждой строки. Т.е.
Средняя не попадает в фактические цифры отчета -- она полностью отсторнируется. Реальный приход сформирует реальную себестоимость. Ошибки тут быть кажется не должно.
-
Кажется получилось воспроизвести проблему.
Добавлено (27.03.2012, 22:36)
---------------------------------------------
Одни и те же наборы данных приходуем в разных годах в одинаковой последовательности.
Вложения:
test_sv_mikh_01.dt
-
Quote (kow1976)
Кажется получилось воспроизвести проблему.
Да, косяк есть. Нужно еще думать.
-
Я так и не нашел нормального решения. Решил если попадется эта задача на экзамене, встану и пойду домой.
-
Quote (kow1976)
Решил если попадется эта задача на экзамене, встану и пойду домой.
Сильно :)... думаю вы не пойдёте
-
-
А я сейчас думаю, что тут не плохо бы еще один регистр сделать... Отложенное списание. Где бы фиксировал то, что продал без наличия... Т.е. с ОстатковНоменклатуры списывал то, что реально было оприходовано, то чего не было -- в этот регистр в количественной и стоимостной оценке по продаже. Gyd для этого использует сам регистр ОстаткиНоменклатуры, но это выглядит, как мне кажется не совсем логично. В приходе минуса смотрел на размер отложенного списания и соответственно сторнировал списание по пустому сроку и партии и списывал по приходованным. Продажи легко сторнировать по указанному регистру... В своем предыдущем решении регистратор в принципе не имеет большого смысла... Что средняя продажная по регистратору, что средняя по всему объему отложенного списания -- какая разница? При приходе вся эта масса будет все равно в той же оценке отсторнирована и заменена реальным приходом. Так я буду делать, если еще раз возьмусь за эту задачу. Но сейчас она уже не выглядит такой пугающей, если в принципе понимаешь как ее осилить. От указанного регистра в принципе можно обойтись каким образом: объем еще не сторнированных продаж можно вытянуть из самого регистра ОборотПродаж за период с начала деятельности до документа по пустому сроку годности (предполагаю, что он в любом случае должен быть заполнен)... Не знаю, насколько это не красиво, но тоже вариант.
-
Gyd,
Интересная идея в вашем решении. Но все таки регистр в ноль не выходит.
По кефиру покупаете 50 шт. Продайте все пятьдесят и посмотрите в консоли по всем полям.Добавлено (28.03.2012, 10:12)
---------------------------------------------
В приходной накладной
Движение = Движения.ОстаткиНоменклатуры.Добавить(); //сторно
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = В.Ном;
Движение.Партия=В.Партия; //корекция
Движение.Количество = КоличествоСписываем;
Движение.Сумма = СуммаСписываем;
И вроде тогда все работает.
-
Quote (Gyd)
Это было:
- Яблоко-ПустаяПартия-10 шт.- 500 руб. ("-") - результат проведения расходной.
Это понятно. Спасибо.
Я спрашивал, зачем в расходной вот это(выделено), в ссылке расходник, в сторно - пустая ссылка:
Quote
Если НужноСписать > 0 Тогда
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = В2.Ном;
Движение.Партия = Ссылка;
Движение.Количество = НужноСписать;
Движение.Сумма = Движение.Количество*В2.Сумма/В2.Количество;
КонецЕсли;
-
Кажется дорешал,и оно работаетЪ!
Вроде все условия выполнил, надеюсь на экзамене будет проще вариант, а то писать долго...
Вложения:
java_1_6.dt
-
kow1976, java, спасибо! Вы правы, что-то я забыл что в расходнике партию записываю
Исправленный вариант. Хотя сейчас тоже склоняюсь ко второму регистру, с ним проще будет.
Вложения:
Gyd_1_6_2.dt
-
Уважаемые форумчане, пожалуйста посмотрите моё решение(выше), комментарии и критика очень сильно ожидаются!!
Quote (Gyd)
Вы правы, что-то я забыл что в расходнике партию записываю
А я вообще расходник в партию не писал, всё равно минуса все в одной куче по пустой партии и сроку годности. У меня к ним прикручено сторнирование по партиям в порядке срока годности, чтобы эта куча по партиям расходилась нормально.
-
Quote (java)
А я вообще расходник в партию не писал, всё равно минуса все в одной куче по пустой партии и сроку годности. У меня к ним прикручено сторнирование по партиям в порядке срока годности, чтобы эта куча по партиям расходилась нормально.
Тоже считаю, что партия там ни каким боком не улучшит ситуацию, только усложнит.
-
Предлагаю еще одно решение. Как и предлагал, на доп. регистре "Отложенные продажи". На решение с отладкой ушел 1 ч 5 мин.
Кратко в чем идея. Состав регистров накопления: ОстаткиНоменклатуры, Продажи, ОтложенныеПродажи (Номенклатура, Количество, Сумма);
Если разрешены отрицательные остатки, то ОстаткиНоменклатуры в минуса не уходят, а списывается лишь то, что есть.
Несписанное количество в ценах расходной накладной записываем в ОтложенныеПродажи. Продажи проходят без срока годности и себестоимости.
В приходе соединяем ЛС остатки ОтложенныхПродаж с табличной частью и списываем ОстаткиНоменклатуры, ОтложенныеПРодажи, сторнируем Продажи с пустым сроком годности и пишем с реальным и реальной стоимостью.
Бегло по цифрам и аналитике посмотрел -- вроде похоже.
Вложения:
sv_mikh_01_06_5.dt
-
уважаемые коллеги, посмотрев многие решения возник вопрос: почему тот товар, которого вы не хватило вы приходуете, а не списываете? понятно, что в проверки на отрицательные остатки вы делаете отборы и т.д. но почему приходуете при списании, а не расходуете?
-
gosn1ck,
Не парьтесь, возьмите решение от sv_mikh'а, там все логично и вопросы отпадут. Вообще это не принципиально, но если это делается на одном регистре, то действительно не слишком красиво. Но иногда это может делаться(приход при списании или расход при приходе), сознательно ведь что бы сделать сторно прихода делают не расход, делают отрицательный приход(что бы не увеличивались обороты). так что или уточните что Вы имели ввиду(какое решение). Или довольствуйтесь моим супер абстрактным ответом ни о чем
-
спасибо, вы убедили меня остаться при своём мнении
-
Про выше упомянутое решение от sv_mikh'а, я имел ввиду крайний его вариант. Как раз вчера просмотрел его, правда только структуру регистров т.к. решал сам. Но мне оно понравилось больше чем альтернатива от Sada. Тем более на экзамене оно становиться много проще т.к. не требуются партии и что более важно сторно продаж(и вобще продажи как таковые).
-
Друзья товарищи. А может быть такая ситуация что в одном ПТУ есть один и тот же товар с одинаковыми сроками годности но разной ценой?
-
Quote (AvalonE2010)
Друзья товарищи. А может быть такая ситуация что в одном ПТУ есть один и тот же товар с одинаковыми сроками годности но разной ценой?
В большинстве задач это указывается явно, если не сказано иное то решение всегда на Ваше усмотрение. Т.е. да ведь не к чему еще обрабатывать запрет. Тем более, в сущности, это ни на что не влияет. Из регистра Вы получите их одной строкой по средней.
-
LEOON,ясно.Спасибо.
-
Выкладываю свое решение. Себестоимость рассчитывается регламентной обработкой "Расчет себестоимости". Более менее приближено к реальности)
Вложения:
1.6_Rizjiy.dt
-
решал раньше так же регламентной обработкой, но теперь посмотрев другие решения подумал а как вы спишете себестоимость если по партиям на остатке этого товара еще нет, регламентная обработка в таком слчае мне кажется не подойдет, либо я уже забыл свое решение напрочь.
Добавлено (21.08.2012, 17:14)
---------------------------------------------
это та же шляпа как авансы и задолжность их тоже необходимо гасить и выдавать только не в разрезе сумм а в разрезе количества и сумм, это можно сказать что наверное потяжелее будет.Добавлено (21.08.2012, 17:15)
---------------------------------------------
как говорится теперь смотрю на задачу с высоты прорешеных задач по всем разделам и вижу свои ошибки.
-
А почему нельзя использовать второй регистр
для решения этой задачи?
-
У кого все же из приведенных примеров решения задачи более верный вариант? Хочется на что то ориентироваться.
Добавлено (23.10.2012, 12:38)
---------------------------------------------
так я и не увидел ни у кого как считается себестоимость в этой задаче для отчета Продажи
Добавлено (23.10.2012, 15:20)
---------------------------------------------
посмотрел задачу sv_mikh_01_06_5.dt(162Kb)
не сильно ли сложно?
-
Нормально
-
Добрый день!
Решил задачу, использовал отрицательные остатки на ОстаткиНоменклатура с пустой Партией
1. С блокировками не уверен хотелось бы ясности
нужно ли блокировать БлокировкаДанных по источнику.
Если выше уже было БлокироватьДляИзменения = Истина;
Или набор данных в СписокНоменклатура (источнике) может быть другим
чем то что заблокировано при помощи БлокироватьДляИзменения = Истина;
поправьте пожалуйста.
2. Можно ли не использовать в отчете вычисляемое поле
Строка(Номенклатура) + " "+ Формат(СрокГодности,"ДФ=dd.MM.yyyy")
и с помощью компоновки это сделать.
Вложения:
1.06_semtesem.dt
-
Почему в расходная накладная по пустой партии делает запись суммой?
Вложения:
s2825290.png
-
Quote (semtesem)
2. Можно ли не использовать в отчете вычисляемое поле
Строка(Номенклатура) + " "+ Формат(СрокГодности,"ДФ=dd.MM.yyyy")
и с помощью компоновки это сделать.
Вложения:
3743642.png
-
Товарищи спецы, оцените решение. Оно вообще не замороченное, но вроде условиям задачи удовлетворяет. Фишка в том, что после прихода товара, расходная накладная(по отсутствующему товару или с недостающим количеством) перепроводится (возможность этого в задаче оговаривается, можно конечно автоматически сделать, но вроде и так подходит по условиям), а вместо момента времени, в обработке проведения расходной накладной остатки смотрим по границе на текущую дату.
Вложения:
_1.6.dt
-
Оцениваем мое решение
Вложения:
2777362.dt
-
Мой вариант решения. Решил как предложил sv_mikh с третьим регистром. Списывает, приходует - все кошерно.
Не смог настроить вид отчета В ТОЧНОСТИ как в задаче. Подскажите у кого получилось.
И вцелом покритикуйте пожалуйста. Спасибо.Добавлено (07.06.2013, 16:16)
---------------------------------------------
loOwA,
1. отчета нет одного
2. в конфигурации стоит режим блокировки автоматический
3.почему только один регистр "Остатоки Номенклатуры"? А где продажи и все с ними связанное?
...Этого уже достаточно что бы не засчитать весь билет. Рекомендую перечитать всю ветку... да что там, с первой задачи начать
Задача вообще не решена. Где вся соль надо которой тут бился народ ?
Добавлено (07.06.2013, 16:23)
---------------------------------------------
kkkkkkk,
1.где отчеты?
2.почему в конфигурации стоит режим блокировки автоматический?
3.почему нет подсистем??
4.почему в формах документов не выведены регистры???
5.допустим, у вас не было ничего, вы наперед продали 100 пар тапочек, они ушли в отрицательные продажи,
затем вам на склад пришли 100 пар тапочек. Но вы то их уже продали!!!! Где это учитывается?
Вы одни и те же тапки два раза можете продать получается.
Задача не решена.
Добавлено (07.06.2013, 16:28)
---------------------------------------------
Пипец... посмотрел около 5ти вариантов решений, ни у кого отчеты не настроены так, как в задании. А за это вроде снижают баллы : \
Ладно - буду дальше решать с отчетами уже в самом конце позаморачиваюсь
Вложения:
bilateral_upr_6.dt
-
Потерял уже с этой задачей дня 4. Прочитал тут все посты и конфы выложенные просмотрел.
Вот что не могу понять.
1. Разрешается ли приходовать в ОДНОЙ накладной одну и туже номенклатуру с разными сроками годности?
я не просто так задаю этот вопрос. - Это действительно важно для модуля проведения приходной накладной.
То, что если приходуется товар одинаковый несколькими строками но С ОДИНАКОВЫМ СРОКОМ ГОДНОСТИ - это не беда.
Сворачиваем Количество и Стоимость по (Номенклатуре, СрокГодности) - получается одна запись на один товар с одной себестоимостью и ОДНИМ сроком годности. А вот если несколько строк с разными сроками годности ОДНОГО ТОВАРА - вот это вопрос...
2. Пример 1.1.2013 продажа Ном1 1 шт X 10 руб = 10 руб
2.1.2013 продажа Ном1 1 шт X 17 руб = 17 руб
3.1.2013 продажа Ном1 1 шт X 20 руб = 20 руб
итого на 5.1.2013 по продажам имеем Ном1 СГ="" 3 шт 47 руб.
теперь..
5.1.2013 приход Ном1 2 шт X 5 руб = 10 руб. СГ 10.1.2013
понятно по остаткам товара + Ном1 СГ=10.1.2013 2шт 10руб
- Ном1 СГ=10.1.2013 2шт 10руб
Продажи... Ном1 СГ="" -2шт -............. руб (если считать по средней то получается 47/3 * -2 = -31.33 )
(кстати такие решения и предложено выше)
Но ведь должно быть не - 31.22 а 27!!!
Короче получается если по "средней" долю считать для сторнирования продаж и восстановления - то по сумме регистр продаж не закрывается (Ресурс не выводится в 0!!!) - по количеству - да по сумме нет. И косяк этот будет висеть теперь уж навсегда если его не выправить каким нибудь документом "Корректировка продаж" - но это уж не для это задачи точно.
3. Правильная мысль - ввести регистр "Продажи отложенные" - "Остатки". Всегда можем получить на МоментВремени по какой номенклатуре что не оприходовано (Регистр фиксирует ЧЕГО на СКОЛЬКО и на какую СУММУ не хватило на остатке при продаже ДОКУМЕНТОМ ПРОДАЖИ). Просто снять данные все не вычисляя через обороты. т.е. никакая доп дата не нужна в приходе. Вот только АБЫ не усреднять сумму продаж - Ввести еще одно измерение - Документ - это никто не написал (Тип- Док.Продажи) - позволит зафиксировать каким документом продажи на сколько продано - Это важно для правильного сторнирования продаж по СУММЕ продаж документом Приходная накладная.
Приходная - модуль проведения - вот изюминка этой задачи.
В Расходной ничего необычного не вижу.
Как и в отчетах собственно.
Добавлено (17.06.2013, 01:52)
---------------------------------------------
bilateral, отчеты я сделал. как в задании на компоновке. вот только п.1 не могу выяснить. хотелось бы сделать уж как следует и сразу выложить все сразу.
Добавлено (17.06.2013, 13:20)
---------------------------------------------
Ведь вообще то ситуация с приходом одного товара с разными сроками годности - задача часто встречается на практике. Касаемо задачи - если ТАКОГО вида приход запрещен - т.е. "ДУБЛЕЙ" номенклатуры из-за сроков действия нет - то задача решается отменно и красиво одним запросом, включая все возможные корректировки по продажам.
-
Выскажусь насчет регистра "Продажи отложенные", вместо которого можно использовать регистр остатков.
Если разрешены отрицательные остатки, то при проведении расходной накладной делаются проводки:
- списывается все, что есть на остатках,
- фиксируются продажи на это количество.
- вводятся отрицательные остатки (без партии и срока годности) на недостающее количество и сумму продажи этого недостающего количества
А при проведении приходной накладной - почти все тоже только наоборот
- приход как обычно
- если в остатке был минус, то он погашается
- на погашенное количество делаются записи в регистре продажи - себестоимость берется из приходника, а сумма недопроданного из остатков.
Как-то так.
-
мой вариант решения, единественное что не удалось - настроить отчет Ведомость по партиям товаров как в условиях задачи, хотя с отчетом Продажи это получилось: в регистре Продажи делаем измерение Номенклатура с типом Строка, при записи движения в регистр
Код
Движение.Номенклатура = Строка(ВыборкаНоменклатура.Номенклатура) + Строка(ГодностьДляПродаж);
Вложения:
8895447.dt
-
Цитата (Юрич)
Выскажусь насчет регистра "Продажи отложенные", вместо которого можно использовать регистр остатков.
1. "Продажи отложенные" - регистр остатков это совершенно точно.
2. Все это хорошо и делается одним запросом если в приходе не допускается 2-х и более позиций ОДНОГО и того же товара с РАЗНЫМИ СРОКАМИ ГОДНОСТИ. Даже уточню - не то чтобы нельзя это было - просто ситуация когда при проведении такого документа возникает потребность сразу в списании части или полностью прихода этим же документом - возникают вопросы по формированию записей в регистр продаж, сторнирование и восстановление (Это и правильный расчет СУММЫ продаж и СЕБЕСТОИМОСТИ продаж). Так как считают "По среднему" продажи во многих задачах - неверно. Я, конечно, выложу позднее свое решение этой задачи, но с условием #239 п.1 - как я уже писал. Может кто и модифицирует запрос из приходной накладной для нескольких сроков годности. Сделать то можно конечно - но выглядеть это будет не так красиво как хотелось бы.
а "цикл в запросе" или ТаблицаЗначений для хранения остатков - конечно же будут косяками на экземене. За первый - сразу -3 за второй -2. Т.е. дальше можно не проверять.:)
3. Отрицательные остатки я считаю недопустимыми тем более на партиях. Поэтому я за использование "Продажи отложенные". Кстати этот регистр фиксирует также нехватку товара с "пустым" сроком годности в количестве и сумме продаж конкретной расходной накладной.
-
Я имел ввиду использовать вместо нового регистра "Продажи отложенные" регистр "Остатки номенклатуры"
-
Вот мое решение. С отчетами как в задачнике.
но с условием #239 п.1 - см. выше.
Исходные данные - 4 ттн приходных и 3 расходных.
Можно посмотреть, Провести 3 приходных первые по датам и потом 3 расходных
4-ую приходную сделать непроведенной. т.е. схема - приход - продажа
И наоборот Сделать непроведенными весь приход - потом провести 3 расходные
и уже потом 4-ую приходную. т.е. схема - расход - потом приход (с восстановлением себестоимости в продажах)
И сравнить результаты через отчеты задачи.
С Уважением, Сергей.
Добавлено (17.06.2013, 18:07)
---------------------------------------------
artfa, не... не то. См. мой dt.
Вложения:
FS106.dt
-
#244 как ты в отчете склеил два поля Номенклатура и Срок годности, пока не пойму, объясни пож.
Добавлено (17.06.2013, 23:04)
---------------------------------------------
а все разобрался, на закладке НаборыДанных - Путь, а я все голову ломал, видно курс по СКД не внимательно смотрел
-
svsource, в вашем решении приходная накладная некорректно пишет данные в регистр: если распровести расходные накладные и оприходовать в одном документе 2 одинаковых позиции номенклатуры с разными сроками годности - в регистр ОстаткиНоменклатуры запишется 1 сгруппированная позиция с максимальным сроком годности. 2) при списании себестоимости нужно делать проверку:, если КоличествоКСписанию=КоличествоВРегистре тогда Сумма=СуммаВРегистре (мы списываем всю сумму из регистра ) Иначе КоличествоКСписанию / КоличествоВРегистре * СуммаВРегистре. Это рекомендация 1С.
-
fortune, Вы выше прочитайте, что я написал про приход в ОДНОМ документе Одной номенклатуры с разными сроками годности - Я это прекрасно знаю и писал про это. Серьезно разбирался с задачей.
А по п.2. ясно это все... Только там еще проверка на 0 делается - все эти рекомендации мне известны - исправлю конечно. Просто не заморачивался. Вот с п.1 что делать?????????????????? Можете переписать запрос - пробуйте. - Я лично не смог. А в условии задачи нет ни слова про такую комбинацию. Просто на практике часто очень бывает - пришел один товар с разными сроками годности - например в супермаркете молоко продукты да и с лекарствами может быть.
-
1. Исправил п.2 (#246)
2. Привел отчеты как в сборнике один к одному.
Вопрос по п.1 - открыт...
Вложения:
3869570.dt
-
Цитата (svsource)
Вопрос по п.1 - открыт...
1. В чем вопрос то? Что страшного, если один и тоже товар с разными сроками годности? По моему все очевидно: если товар один и тот же и сроки одинаковы - сворачивается, если сроки разные - будет несколько записей.
2. Коммент в приходной
Цитата
// !!! СБРОС НАБОРОВ ДАННЫХ НА ДИСК ПО ЗАВЕРШЕНИЮ ТРАНЗАКЦИИ
Просто убил :)))
3.
Цитата
Вот мое решение. С отчетами как в задачнике.
но с условием #239 п.1 - см. выше.
Исходные данные - 4 ттн приходных и 3 расходных.
Можно посмотреть, Провести 3 приходных первые по датам и потом 3 расходных
4-ую приходную сделать непроведенной. т.е. схема - приход - продажа
И наоборот Сделать непроведенными весь приход - потом провести 3 расходные
и уже потом 4-ую приходную. т.е. схема - расход - потом приход (с восстановлением себестоимости в продажах)
И сравнить результаты через отчеты задачи.
С Уважением, Сергей.
Добавлено (17.06.2013, 18:07)
---------------------------------------------
artfa, не... не то. См. мой dt.
Ваше решение понравилось больше всего. Единственное:
а) Со сроками годностями - косяк
б) доки ввел, смоделировал ситуацию, и больше трогать нельзя (перепроводить), иначе регистры поплывут Интересно это должно быть учтено при решении задачи
-
svsource,
Подправил приходную. Проблема со сроками + ОдинТовар_НесколькоСроковГодности - ушла. Движения по приходу надо делать не в верхней группировке, а в детальных записях.
DTшник прикрепил.
Вложения:
svsource_v2.dt
-
dam, 1. про "цитату" - имелось ввиду что по окончании транзакции наборы записей непустые с установленным флагом записывать = Истина - запишутся на диск - (в БД). 2. можно было просто написать - FLASH. 3. В конце концов эта фраза с курсов 1С преподавателя - я лично присутствовал на них и специально ее записал. Ничего в ней зазорного не вижу. Ну да ладно
теперь по конфигурации - НЕ ПРОКАТИТ ЭТО ВСЕ.
Вот специально прикрепил модифицированную тобой мою конфу, которую ты изменил с моими данными из :
(# 248)
ну и посмотри что получается если сначала продать (3 расходных проведено) и потом всего ОДНУ !!! позицию с ОДНИМ сроком годности оприходовать (одна накладная от 28.02.) - где уж там с двумя... т.е. приход позже расхода и посмотри отчет по остаткам товаров
.... достаточно загрузить только базу и отчет запустить по остаткам... Без комментариев. Посмотри сам.
Вообще я не то что не знаю как сделать эту задачу - я не знаю как сделать красиво или как бы сказать.. "академически правильно". А через ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! это я за 5 минут сработаю. Быстрее всех. И будет все работать. Но этот путь не для меня. Просто решая задачи из сборника я уже давно не ставлю перед собой задачу "КАК РЕШИТЬ" а ставлю задачу "КАК РЕШИТЬ КРАСИВО - ТЕХНИЧЕСКИ и МЕТОДОЛОГИЧЕСКИ ГРАМОТНО И ПРАВИЛЬНО". Чтобы решение не загнулось при активной работе с ним большого числа пользователей.
Так что вопрос п.1 открыт.
Конфу прикрепил.
С Уважением, Сергей
Вложения:
1Cv8_v3.dt
-
переделал решение, убрал все лишнее что нагородил в предыдущем варианте, работатет все четко, все условия задачи выполнеы и соблюдены
Вложения:
3851490.dt
-
Прочитав первые несколько страниц темы, удивился, почему так много коллег стремятся списывать какие-то несуществующие отрицательные остатки по какой-то абсурдной партии "Приходная.ПустаяССылка()", мучая потом систему сторнированием и прочими развлечениями.
На мой взгляд, все несколько иначе. Идея в следующем: если товар не оприходован, то и списывать его нечего, хотя продать можно. Спишем потом=)
Нужно просто воспользоваться последовательностью, включив в нее Расходную накладную.
Вместо отрицательных остатков я воспользовался нулевой себестоимостью, т.е. при списании в "-" расходная с остатков не списывает ничего, а в продажи пишет себестоимость = 0.
При проведении приходной из ВТ продажиОбороты() я узнаю, были ли вообще такие продажи, т.е. есть ли проданный, но не списанный товар. Если есть - остается восстановить последовательность расходных, и все.
Отчет правда кривой, я еще не добрался до макетов СКД=)
Вложения:
1.6_Lolkien.dt
-
Продолжаю подготовку. Решил 2-ую по счету задачу. До этого с чужими решениями этой задачи не знакомился, но во многом она схожа с 1.1, с которой я разбирался до этого. Выкладываю решение, может быть, кто-то прокомментирует. Заранее спасибо.
Добавлено (21.09.2013, 00:48)
---------------------------------------------
Предостерегаю тех, кто захотел бы посмотреть мое решение. Решение не удовлетворяет всем условиям задачи, а именно: не учитывается случай, когда допускается продажа товара, отсутствующего на складе, более того, система в этом случае выдает ошибку. Это результат недостаточного анализа задачи перед ее решением. Как доработаю, выложу еще раз.
Вложения:
Voyager_1.6.dt
-
Не догоняю)). как ведомость такого вида получить в одном столбике и кол. и сумма, номенклатура и срок годности
а так вроде решил на двух регистрах...остатки и ПродажиАвансом, куда записываем отгрузки не хватающего или не существуещего товара в системе на данный момент, с отчетом Продажи не стал парится и регистр Продажи тоже .
может кто глянет а
Вложения:
zorky1_6.dt
-
Цитата Lolkien (
)
При проведении приходной из ВТ продажиОбороты() я узнаю, были ли вообще такие продажи, т.е. есть ли проданный, но не списанный товар. Если есть - остается восстановить последовательность расходных, и все.
Мне понравилось ваше решение, только вот у вас там косяк похоже. Там где вы в движениях датам приравниваете период из расхода(отгрузок) наверно это не совсем верно ? Наверно нужно все таки установить на секунду меньше, тк иначе у вас в границе документ поступления все же будет после расходной. Конечно, это не повлияет на расчет себестоимости при восстановлении последовательности и перепроведении, но все же.Добавлено (08.11.2013, 13:36)
---------------------------------------------
Lolkien, + у вас проблема копеек. Думаю, что нужно накапливать распределенные суммы и, если после распределения у нас что-то осталось, то нужно из выборкаСрокГодности.Сумма-ТоЧтоОсталось приравнять сумме.
Добавлено (08.11.2013, 13:40)
---------------------------------------------
Lolkien, + наверно как-то не хорошо перепроводить документы просто так без страховки. Может быть их стоит заблокировать для изменения?
Добавлено (08.11.2013, 14:40)
---------------------------------------------
Lolkien, Думаю вот это
Код
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) / ВЫБОР
| КОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) = 0
| ТОГДА 1
| ИНАЧЕ ОстаткиНоменклатурыОстатки.КоличествоОстаток
| КОНЕЦ КАК Себестоимость
В РасходнойНакладной лишнее, тк Остатки либо есть либо нет в таблице остатков. Не будет там строк NULL.Добавлено (08.11.2013, 14:44)
---------------------------------------------
Lolkien, Индексировать по Себестоимости и Партии тоже не нужно. Нужно индексирование проводить только по тем полям по которым в Виртуальной таблице будет проводится соединение. Индексирование ускоряет поиск нужного поля и увеличивает: размер таблицы,скорость записи в таблицу(в любой базе данных).
Добавлено (08.11.2013, 14:45)
---------------------------------------------
Lolkien, Короче идея какая-то есть, но реализовано как-то не очень конечно. Хотя я еще не спец и наверно не мне судить.
Добавлено (08.11.2013, 14:51)
---------------------------------------------
Lolkien, Ну и в Расходной вы не там движения добавляете в продажи и не считаете себестоимость номенклатуры. Те у вас нет ПолнаяСебестоимость, которую следует добавить в Продажи.
Добавлено (08.11.2013, 15:00)
---------------------------------------------
Lolkien, + думаю при отборе остатков следует фильтровать не только Номенклатуру из списка товаров расходуемых, но и срок годности. Мы ведь хотим списать Номенклатуру с определенным сроком годности.
Добавлено (08.11.2013, 16:23)
---------------------------------------------
Voyager, те задача не решена и точка.
Добавлено (08.11.2013, 20:46)
---------------------------------------------
Voyager, а это вообще нормально восстанавливать последовательность каждый раз когда приходная накладная заводится после продажи? А если там 100 документов? насколько этот процесс долгий?.
Народ у вас есть решение которое проверку при сдаче прошло?
Я так понял есть 2 метода решения через сторнирование и через последовательности?
-
Итак, выкладываю 1.06 с выполненными отчетами.
Пожалуйста, критикуйте
Вложения:
201311130932__1.dt
-
Уважаемые коллеги! Помогите пожалуйста победить СКД!!!
Проблема в следующем: формирую отчет "Ведомость по партиям" Создаю группу, в которую включаю два поля (чтобы в отчете данные выводились в две строки количество/сумма).
КАК объеденить заголовок? выводится и заголовок группы и заголовки входящих в группу полей.
Я уже весь мозг сломал... Помогите плизз!
Вложения:
s4012710.jpeg
-
c помошью макета скд
-
Очень интересная задача. Не удивительно, что она вызвала столько откликов и решений. Вот честно, мне было лень читать 30-ть страниц топика, но я взял идею одного форумчанина:
Цитата
При расходе, когда уходим в минус при заданной учетной политике, мы излишки списываем на ПУСТУЮ ПАРТИЮ. Когда вводим новый документ прихода, то анализируем отрицательные остатки на пустой партии. Если они есть, то сторнируем их и проводим по расходной накладной, которая записала в минус. Таким образом регистр по пустышке идет в ноль, и мы записываем расход уже с реальной приходной накладной. Как-то так. ;)
Последовательности не использовал, хотя можно было и использовать, чтобы отслеживать изменения в регистрах и приходных, но по задаче этого не требуется, так как документы не вводятся задним числом, а только могут перепроводиться.
Выкладываю свое решение. Может быть кому пригодится. Буду благодарен, за комментарии.
Вложения:
mikas_1.06.dt
-
способа решения вообще-то два (может больше, если знаете напишите, интересено будет посмотреть):
1. через ПустаяПартия.
2. создание дополнительного регистра - в одном пишутся данные по ФИФО/ЛИФО, в другом по средней.
-
Цитата MorningStalker (
)
способа решения вообще-то два (может больше, если знаете напишите, интересено будет посмотреть): 1. через ПустаяПартия.
2. создание дополнительного регистра - в одном пишутся данные по ФИФО/ЛИФО, в другом по средней.
Простите, какой ФИФО и ЛИФО? Про это в данной задаче ни слова!!!
-
в этой ветке нашел 3 способа:
1. замороченное сторнирование с одним регистром
2. не замороченное сторнирование, но с 2-мя регистрами
3. через последовательность
..интересно какой более правильный
-
Цитата Denver (
)
..интересно какой более правильный
Я когда еще был студентом - математиком, нам всегда говорили. Практически любая задача имеет несколько решений. Как минимум 2-ва. В данном случае, как мне кажется играет роль эффективность, как в использовании инструментов, так и в реализации алгоритмов, так как в реальной жизни пользователю далеко паралельно, что там внутри и как крутятся шестеренки. Ему важно нажать на кнопку и быстро получить результат. А в нашем случае еще время реализации.
На экзамене, чтобы сэкономить время, я б выбрал решение с 2-мя регистрами. Количество регистров особой роли не сиграет, а вот скорости разработки добавит.
А еще есть мнение, что последовательности нужно избегать, так как они паралельную базу, делают последовательной, что не всегда хорошо сказывается на производительности, т.е. последовательности нужно использовать там, где без них не обойтись.
-
да, я тут где то читал, что Белоусов не одобрил использование последовательности в этой задаче. Только это было давно, ближе к началу ветки
-
Цитата mikas-2008 (
)
Простите, какой ФИФО и ЛИФО? Про это в данной задаче ни слова!!!
Точно, у меня от этих задач уже крыша едет. Это я с задачей 1-5 попутал.
-
регистр остатков: номенклатура, партия, срок годности; количество, сумма
расходная: по несуществующим остаткам пишем в регистр номенклатуру и количество, партия срок годности - пустые.
приходная: если есть по данной номенклатуре пустая партия, то вычисляем количество которое можем списать и делаем движения в расход по партиям и срокам годности, а из пустой партии это количество убираем.
кагтотаг.
ПыСы Чет все мои проектные решения по сложным задачам отличаются от форума, то ли лыжи не едут,...)), а комментов пока не получил((
-
Фух, выдержал праздники))
Вложения:
1Cv8_1_6.dt
-
вижу 2 решения этой задачи:
1) сторнирование движений расхода регистра остатков и последующее создание движений "правильного" расхода
2) приход на дату поступления приходной накладной и последующее перепроведение(либо частичная замена записей в наборе записей) каждой расходной, которая попала в интервал дата поступления-дата приходной.
у каждого из этих варинтов вижу свои минусы:
1)_приходная накладная делает сторнирование, в результате чего появляются движения с видом расход, что, на мой взгляд, несколько противоестественно и усложняет дальнейший анализ движений документов (обслуживание).
_в случае если было несколько приходных накладных, в которых товар пересекается, то может произойти, н-р, двойное сторнирование, т.е. будет происходить увеличение числа записей регистра в геометрической прогрессии
2)в этом случае придется обращаться ко всему объему набора записей каждой накладной. даже если после обработки мы будем записывать только измененые записи набора (а не перепроводить весь набор), то все-равно набор придется читать весь и потом искать в нем нужные.
первый варинт больше подходит для случая, если требуется большее быстродействие и случаев сторнирования/пересторнирования мало.
второй вариант подойдет там, где важно легко понять что откуда взялось и возможно пересторнирование или объем сторнирования составляет значительную часть.
выбор в пользу того или иного варианта должен быть сделан на основе специфики работы, но её нет и в этом трудность.
-
Решение задачи 1.6 для 8.2. Может кто нибудь посмотреть правильно ли решена задача?
Вложения:
_1.6.rar
-
Коллеги, проясните момент, будте добры: срок годности - это что за реквизит? Это число или дата? А то уже ум за разум зашел
-
Цитата giotto (
)
Коллеги, проясните момент, будте добры: срок годности - это что за реквизит? Это число или дата? А то уже ум за разум зашел
1. Полагаю можно сделать и так и так.
2. В таблицах отчета присутствует такой текст: Кефир 10.01.2010. Если судить по нему, то СрокГодности это Дата.
3. Если сделать СрокГодности числом, то придется делать много лишних телодвижений при формировании запросов и алгоритмов.
Резюмируя: я бы сделал Датой ( в принципе так и сделал когда решал :))
-
Посмотрите мое решение. Как себестоимость записывать в регистр продажи после проведения приходной не придумал. Есть идеи, кто как делал?
Вложения:
5003588.dt
-
Всем доброго времени суток. Посмотрите мою реализацию. Ткните носом если что не так. Буду благодарен.
Добавлено (15.04.2014, 10:18)
---------------------------------------------
YFred, посмотрел твою конфигурацию, есть пара замечаний:
1. Устанавливать БлокироватьДляИзменения не надо. БлокироватьДляИзменения используется только тогда, когда ты сначала пишешь в регистр потом контролируешь остатки. В противном случае нужно использовать БлокировкаДанных. Поэтому у тебя нужно оставить только объект БлокировкаДанных.
2. В расходной накладной ?(Движение.Количество = Выборка.КоличествоОстаток,Выборка.СуммаОстаток,Движение.Количество*Выборка.СуммаОстаток/Выборка.КоличествоОстаток) можно сократить до Движение.Количество*Выборка.СуммаОстаток/Выборка.КоличествоОстаток.
3. В расходной накладной можно изменить конструкцию в запросе:
ВЫБОР
КОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) / ОстаткиНоменклатурыОстатки.КоличествоОстаток
КОНЕЦ КАК ЦенаПрихода
на такую
ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) / ОстаткиНоменклатурыОстатки.КоличествоОстаток
КОНЕЦ КАК ЦенаПрихода
Прошу поправить если я ошибаюсь.
Вложения:
Demy_1_6.dt
-
Цитата Demy (
)
Ткните носом если что не так. Буду благодарен.
1. Не правильно наложены блокировки.
моделируем ситуацию:
на складе есть 5 табуреток. Документ №1 списывает все 5 штук. На складе остается 0.
перепроводим документ.
у тебя алгоритм следующий
а) записываются пустые движения по документу: Движения.ОстаткиНоменклатуры.Записать(); Т.е. после этой записи 5 табуреток снова будут на остатках.
б) блокируется регистр.
в) завершается транзакция, заново списывается 5 табуреток. Остаток на складе 0.
я ввожу Документ №2, продаю 1 табуретку и накладываю свою блокировку в момент, когда у Документа №1 уже выполнилась строка а), но еще не выполнилась строка б) - могу это сделать, т.к. Документ №1 еще не заблокировал регистр.
в результате если Документ №1 завершит транзакцию, то на складе будет -1 табуретка. Либо, если транзакция откатится назад, то на складе будут 4 табуретки, которые были проданы еще вчера.
Отсюда вывод:
сначала блокируем регистр, а потом записываем пустые движения.
2.
Движение.Партия = Документы.ПриходнаяНакладная.ПустаяСсылка();
Движение.СрокГодности = '00010101';
вот это писать не нужно, попробуй просто опустить эти строки, и ты увидишь, что при отсутствии значения в эти поля автоматически запишутся пустые ссылки.
3. я бы не стал замарачиваться с минусовыми движениями по регистру Продажи:
В Р/Н:
если осталось списать > 0 тогда пишем движения ТОЛЬКО по регистру Остатки и в качестве себестоимости указываем СУММУ ПРОДАЖИ.
В П/Н:
1. оприходуем товары из ТЧ.
если есть минусовые остатки тогда:
2 регистр ОстаткиНоменклатуры Расход (списываем обычные партии)
регистр ОстаткиНоменклатуры Приход (выравниваем минусовые остатки - пустые партии)
пишем движения по регистру Продажи: Количество - то что оприходовали, Себестоимость - то что оприходовали, Сумма - берем из минусовой себестоимости.
понятно что количество будет Мин(Приход, МинусовойОстаток), ну и остальные данные тоже будут браться исходя из количества. :).
4. не знаю насколько критично, но пакетными запросами я бы тоже не стал злоупотреблять. И в П/Н и в Р/Н запрос отлично управляется в 2 пакета: первый для ТЧ, второй для соединения ТЧ и регистра Остатки.
-
Посмотрите для примера мой вариант
Вложения:
6292875.dt
-
1. Устанавливать БлокироватьДляИзменения не надо. БлокироватьДляИзменения используется только тогда, когда ты сначала пишешь в регистр потом контролируешь остатки. В противном случае нужно использовать БлокировкаДанных. Поэтому у тебя нужно оставить только объект БлокировкаДанных.
БлокироватьДляИзменения по моему мнению нужно ставить, руководствовался статьей Чистова http://expert.chistov.pro/public/195591/ . Вполне возможно, что понял не правильно.
2. В расходной накладной ?(Движение.Количество = Выборка.КоличествоОстаток,Выборка.СуммаОстаток,Движение.Количество*Выборка.СуммаОстаток/Выборка.КоличествоОстаток) можно сократить до Движение.Количество*Выборка.СуммаОстаток/Выборка.КоличествоОстаток.
Нельзя так сокращать. Это делается для того чтобы регистр выводился в 0 при полном списании (не зависали копейки).
-
MorningStalker, благодарю за советы.
1. Довод очень логичной, но я опирался на конфигурацию 1С, которую мне с книжкой дали в качестве примера. У меня сделано как и там, то есть сначала запись потом блокировка. Думаю у них был повод так сделать. Возможно я опять что-то не так понял. Поэтому вопрос: ты уверен что так правильно?
2. Разумно, но у меня привычка инициализировать все поля. Насколько это критично? Я думаю несколько лишних машинных тактов на скорости не сильно отразятся. С другой стороны конечно лишняя писанина.
3. Да, это я перемудрил. Спасибо за замечание. Уже исправил.
4. Что-то не до конца понял что значит "не злоупотреблять". Использовать вложенные запросы?
БлокироватьДляИзменения по моему мнению нужно ставить, руководствовался статьей Чистова http://expert.chistov.pro/public/195591/ . Вполне возможно, что понял не правильно.
Как раз из этой статьи я и вынес что БлокироватьДляИзменения используется при новой методике проведения. Т.е. когда ты сначала пишешь движения в регистр, а потом контролируешь не ушел ли в минус.
Нельзя так сокращать. Это делается для того чтобы регистр выводился в 0 при полном списании (не зависали копейки).
Нет, проблемы копеек тут не возникнет. Возьмем пример: есть товар в количестве 1000 штук общей стоимостью 1 рубль (для примера :)). Нужно списать скажем 50. Также условимся что все числа имеют точность 2-а знака после запятой. Если при расчете стоимости списываемого товара мы будем выполнять сначала деление, тогда возникнет "проблема копеек". Т.е. :
ОбщаяСтоимость / Количество * Списываем = 1.00 / 1000 * 50 = 0.00.
Почему? Потому что при операции деления у нас потерялся разряд:
1 / 1000 = 0.001, но так как у нас только два знака после запятой, то: 1 / 1000 = 0.00.
Но если сначала выполнять операцию умножения:
Списываем * ОбщаяСтоимость / Количество = 50 * 1.00 / 1000 = 0.05.
Я оп крайней мере так понимаю эту проблему.
Вложения:
6498382.dt
-
Как раз из этой статьи я и вынес что БлокироватьДляИзменения используется при новой методике проведения.
Прочитай статью внимательнее. Там есть такой пункт:
"17. Устанавливаем свойство "БлокироватьДляИзменения". Это позволит заблокировать от чтения те данные которые сейчас будут удалены из регистра, вдруг транзакция будет отменена, не хотим чтобы кто-либо вместе с нами работал с этими данными.
Подобное действие не помешает и при смене даты или времени документа, а не только при оперативном проведении."
-
Цитата Demy (
)
1. Довод очень логичной, но я опирался на конфигурацию 1С, которую мне с книжкой дали в качестве примера. У меня сделано как и там, то есть сначала запись потом блокировка. Думаю у них был повод так сделать. Возможно я опять что-то не так понял. Поэтому вопрос: ты уверен что так правильно? 2. Разумно, но у меня привычка инициализировать все поля. Насколько это критично? Я думаю несколько лишних машинных тактов на скорости не сильно отразятся. С другой стороны конечно лишняя писанина.
3. Да, это я перемудрил. Спасибо за замечание. Уже исправил.
4. Что-то не до конца понял что значит "не злоупотреблять". Использовать вложенные запросы?
1. для себя я уверен, много всякого изучал по блокировкам - книги, интернет, реальное общение со специалистами 1С. про книжки могу уверенно сказать, что образцом для слепого подражания они не являются, и информацию из них нужно сравнивать с информацией из других источников (хотя 99.99% информации является верной). 100% касается, например, методичек по курсам бухгалтерского, расчетного учета, мы там кучу ляпов находили.
2. чем меньше кода - тем лучше. читабельней твой текст кода, легче проверяющим, меньше тебе телодвижений, экономия времени на экзамене и т.д. Хотя, конечно, это все не принципиально.
4. чем меньше пакетов - тем лучше. Зачем делать 4 телодвижения там, где можно 2? посмотри мои запросы и определись для себя сам. Я ни в коем случае не настаиваю на идеальности своего решения!!!
P.S. В конце концов, мы общаемся на этом форуме, выкладываем свои и смотрим чужие решения, для того чтобы найти как можно более идеальное решение! :). Так что сам делай выводы - нужны ли тебе элементы моего опыта или нет :).
Вложения:
_1-06.dt
-
Буду рад критики, мой вариант решения
Вложения:
3930731.dt
-
Цитата MorningStalker (
)
В конце концов, мы общаемся на этом форуме, выкладываем свои и смотрим чужие решения, для того чтобы найти как можно более идеальное решение! :). Так что сам делай выводы - нужны ли тебе элементы моего опыта или нет :).
Совершенно согласен. Я воспринимаю критику к своему решению ни как оскорбление в адрес своего гения :), но как возможность научиться чему-то новому и заполнить пробелы в знаниях. Поэтому каждое замечание для меня ценно. Но не являясь легковерным человеком я просто не могу не поспорить, так как в споре рождается истина. Теперь пройдемся по вопросам:
1. Порылся в интернете и не нашел особых доводов в защиту решения 1С, но тем не менее сохраняя надежду на разумность решения предлагаю сойтись на следующем: запись пустых движений производим после блокировки регистра, так как это не помешает.
2. Тут позволь не согласится. Меньше кода не всегда легче для чтения (могу привести код с++ :)). Я всегда пытаюсь инициализировать все поля значениями, зная при этом что они будут автоматически инициализированы этими же значениями, чтобы впоследствии другой программист читая мой код не подумал что я забыл про эти поля. Конечно на экзамене на это вряд ли обратят внимание. Но все равно спасибо.
4. Совершенно согласен, с удовольствием посмотрю твое решение. Спасибо.
Цитата YFred (
)
Прочитай статью внимательнее. Там есть такой пункт:
"17. Устанавливаем свойство "БлокироватьДляИзменения". Это позволит заблокировать от чтения те данные которые сейчас будут удалены из регистра, вдруг транзакция будет отменена, не хотим чтобы кто-либо вместе с нами работал с этими данными.
Подобное действие не помешает и при смене даты или времени документа, а не только при оперативном проведении."
Возможно, я на этот счет еще подумаю. Спасибо.Добавлено (20.04.2014, 12:53)
---------------------------------------------
MorningStalker, посмотрел твое решение. Не знаю насколько это критично (кстати хотелось бы узнать :)), но мне так решать проще. Кстати можно было сделать так чтобы возвращалась либо таблица с остатками, либо таблица с недостающими товарами. Так мне кажется было бы даже лучше в плане загрузки сети (но конечно больше сервер напрягает). Кстати хотелось бы спросить:
1. Почему все пишут такую конструкцию:
ВЫБОР
КОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) <> 0
ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) / ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0)
ИНАЧЕ 0
КОНЕЦ КАК Себестоимость
вместо такой:
ВЫБОР
КОГДА НЕ ОстаткиНоменклатурыОстатки.КоличествоОстаток ЕСТЬ NULL
ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) / ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИНАЧЕ 0
КОНЕЦ
Может я чего-то не понимаю?
2. В чем смысл конструкции:
Запрос.УстановитьПараметр("Момент", ?(Режим = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()));
тем более что регистр у нас и так заблокирован.
3. Думаю YFred правильно писал что нужно использовать флаг ЗаблокороватьДляИзменения. Ведь номенклатура, которая была в движениях документа может отличаться от номенклатуры в новых движениях документа.
Добавлено (20.04.2014, 12:57)
---------------------------------------------
SkaineT, посмотрел твое решения, и сразу вопрос: в задаче написано что срок годности указывается при поступлении. Нигде не написано что срок годности нужно указывать в расходнике.
Вложения:
5053314.dt
-
Цитата Demy (
)
2. В чем смысл конструкции: Запрос.УстановитьПараметр("Момент", ?(Режим = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()));
Регистр накопления (остатков) состоит из двух таблиц: таблицы движений и таблицы итогов. Таблица итогов содержит итоговые записи по каждому месяцу + актуальные итоги.
Если рассчитываем остатки на конкретную дату - программа возьмет остатки за месяц и движения только за указанный месяц, и рассчитывает необходимые остатки.
Если же мы проводим оперативно, то подразумеваем, что после этой даты ни одного движения нет. Так что можно взять актуальные итоги.
-
Цитата SeraFim1st (
)
Регистр накопления (остатков) состоит из двух таблиц: таблицы движений и таблицы итогов. Таблица итогов содержит итоговые записи по каждому месяцу + актуальные итоги.Если рассчитываем остатки на конкретную дату - программа возьмет остатки за месяц и движения только за указанный месяц, и рассчитывает необходимые остатки.
Если же мы проводим оперативно, то подразумеваем, что после этой даты ни одного движения нет. Так что можно взять актуальные итоги.
Другими словами запрос так отработает быстрей. Правильно?
-
Цитата Demy (
)
Другими словами запрос так отработает быстрей. Правильно?
да, при чем намного. Система постоянно хранит итоги на 3 999 год, то есть если ты обратился к актуальным итогам - она взяла их и выложила.
иначе она их будет высчитывать специально для тебя, что подразумевает увеличения времени и ресурсов на выполнение твоего запроса.
-
MorningStalker, спасибо за подробное объяснение.
-
Никак не могу разобраться с расчетом себестоимости, если в предыдущих задачах сним сложностей нет, то тут почему то мозг тупит, тот же вариант sv_mikh'a
http://imgur.com/9mINh7l
не могли бы расшифровать строки с вопросом? Почему в одном из вариантов используется расчет по данным документа, а в других по данным регистра?Добавлено (05.05.2014, 17:29)
---------------------------------------------
up вопросу
-
Разъясните пожалуйста, что делать с минусовыми продажами? они же потом в отчете продажи попадают с пустой себестоимостью и без срока годности.
В приходе мы сторнируем минусовые остатки и списываем "правильно", а продажи продолжают висеть?
-
Я делал это следующим образом:
1. При продаже отстутствующего товара, мы не пишем движения в регистр продажи, т.к. для этого у нас нет всех необходимых данных, а именно, срока годности.
2. Пишем движения по регистру ОстаткиНоменклатуры, загоняя его в минус, при этом вместо себестоимости в ресурс Сумма мы записываем СУММУПРОДАЖИ.
3. При оприходовании недостающего товара формируются недостающие записи по регистру Продажи, при этом количество и сумма берется из прихода, а сумма продажи берется из себестоимости минусовых записей по регистру ОстаткиНоменклатуры.
При такой реализации Остатки выводятся в ноль, продажи формируются корректно.
-
MorningStalker, я не видел твоего решения, но подозреваю что оно неверное.
Ты пишешь: "При продаже отстутствующего товара, мы не пишем движения в регистр продажи, т.к. для этого у нас нет всех необходимых данных, а именно, срока годности."
В этом случае в отчете "Продажи" мы не увидим ни каких данных на текущий момент, а это неверно. Мы должны видеть все продажи, даже если срока годности нет. Я так думаю. На счет твоих движений по регистру ОстаткиНоменклатуры не могу судить, описано непонятно.
-
Выкладываю своё решение. Буду благодарен если просмотрите его. Может чего интересного найдете. Буду рад критике. Кстати, мой вариант отчета "Ведомость по партиям товаров" в точности повторяет требуемую структуру отчета из задачника.
Вложения:
4358916.dt
-
Прошу оценить моё решение.
https://yadi.sk/d/GpwvWXF5Z6KQb
Заранее благодарю.
-
Всем привет! Объясните, зачем нужно делать сторно при проведении документа "Приходная накладная"? Если можно запросом отбирать обороты с пустой партией до регистратора и проводить регистратор. У нас же все равно приходная накладная благодаря реквизиту "Дата поступления" будет формировать приход на дату поступления, т.е. при проведении расходной накладной после даты поступления движения сами собой исправятся. Что в таком решении не правильно?
https://drive.google.com/file/d/0B9LJWOvcTpy7TnpEN0lmbjhObzQ/edit?usp=sharingДобавлено (06.08.2014, 09:52)
---------------------------------------------
Выкладываю своё решение. Буду благодарен если просмотрите его. Может чего интересного найдете. Буду рад критике. Кстати, мой вариант отчета "Ведомость по партиям товаров" в точности повторяет требуемую структуру отчета из задачника.
1. Нужно устанавливать период:
Запрос.УстановитьПараметр("Период",?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Ссылка.МоментВремени(),Неопределено));
2. Не могу понять, почему все делают сторно движения, причем в приходной, да потом еще и расход в приходной накладной, когда можно просто перепровести расходные с пустой партией?
-
Zanzarchik, а где в расходной вы увидели Дату поступления?
Приходные по условию задачи могут вводиться гораздо позже Расходных, поэтому Расходная даже при проведении с учётом существования ПН не будет знать, какую партию ей брать.
-
Zanzarchik, а где в расходной вы увидели Дату поступления?
Ну, в расходной накладной ее и не будет. Реквизит будет в документе поступления. Период формирования проводки = "дата поступления". Н-р: расходная от 01.08.2014, приходная от 08.08.2014, но дата поступления = 01.01.2014, т.е. приход падает на 01.01.2014, потом отбираются расходные с пустой партией, перепроводятся с учетом этого поступления. Также, пользователь может и сам перепроводить доки.
-
Прошу оценить мое решение )
https://drive.google.com/file/d/0B9FrJm4ndcNaUWtPNk13clZGUW8/edit?usp=sharing
-
Хорошая задача, много времени ушло на понимание самого условия задачи и то как хотят видеть это проверяющие.
Решение стандартное:
1) Приходная накладная. Движения - Приход.
Если разрешены отрицательные остатки, то сторно движений Расходных накладных + формирование новых движений с учетом прихода.
2) Расходная накладная. Движения - Расход. Списание по партиям с сортировкой по сроку годности и себестоимости за 1 ед продукции.
Делал сам, реализация может сильно отличаться.
Вложения:
prog1Cer_1.6.dt
-
Цитата Lionelho (
)
Выкладываю своё решение. Буду благодарен если просмотрите его. Может чего интересного найдете. Буду рад критике. Кстати, мой вариант отчета "Ведомость по партиям товаров" в точности повторяет требуемую структуру отчета из задачника.Прикрепления: 4358916.dt(173Kb)
Посмотрел твой вариант, неплохое решение. Вот только почему ты сторно делаешь только для тех позиций по которым отрицательные остатки? Ведь тут был пример с ответом Белоусова, где себестомость пересчитывалась для всех позиций документа.
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=567334
Вот посмотри, а в твоем решении как я понял, по 3 рубля спишется только 5 штук.
Вложения:
9966905.dt
-
а нужно ли пересчитывать списание по партиям (по расходным накладным) при поступлении со сроком годности, по которому уже было списание. Ведь в этом случае может быть ситуация, когда новый документ оприходовал товар с более высокой стоимость и его при последовательном вводе документов нужно было бы списывать в первую очередь, т.е. в этом случае была бы изменена себестоимость продаже.
-
Прошу оценить моё решение.
https://yadi.sk/d/GpwvWXF5Z6KQb
Заранее благодарю.
В приходной нет реквизита Дата поступления. Соответственно остатки берутся все до момента времени документа, а не за период...
-
Пересмотрел несколько решений и запутался немного, вспомнил про оccam's razor.
Встал вопрос почему не сделать через вызов проведения расходной сформировавшей отрицательные остатки из приходного ? Т .е. в модуле приходной записываем движения приходного в остатки, проверяем на минусовые остатки, и при наличии получаем список расходных и проводим их передав новый параметр даты расходного.
Какие минусы у данного решения и имеет ли оно право жить ?
-
Просмотрел несколько решений. Почему никто не блокирует удаляемые старые движения документа?
Если ориентироваться на _http://forum.chistov.pro/index.php?topic=1999.msg22182#msg22182, то при записи пустого набора нужно ставить БлокироватьДляИзменения = истина (на случай перепроведения с последующим откатом транзакции).
Тот же вывод можно сделать из статьи Чистова _http://1c.chistov.pro/2013/07/blog-post_25.html
Цитата
//16
Если Режим = РежимПроведенияДокумента.Оперативный Тогда Движения.СтоимостьТоваров.Очистить(); //17
Движения.СтоимостьТоваров.БлокироватьДляИзменения = Истина; Движения.СтоимостьТоваров.Записать();
КонецЕсли;
//
16. Проверяем оперативно ли проводится документ.
17. Устанавливаем свойство "БлокироватьДляИзменения". Это позволит
заблокировать от чтения те данные которые сейчас будут удалены из
регистра, вдруг транзакция будет отменена, не хотим чтобы кто-либо
вместе с нами работал с этими данными.
Кто что думает?
-
Подготовил решение:
При проведении реализации при формировании отрицательных остатков в партию пишем документ реализации, в сумму - сумму реализации.
В этом случае отрицательные остатки будут содержать информацию о еще не закрытых приходами продажах с указанием документа реализации и еще не закрытой суммы реализации.
При проведении прихода:
1. Формируем движения "Приход"
2. Сторнируем записи формирующие отрицательные остатки (датой реализации).
3. Формируем движения "Расход" (датой реализации)
4. Формируем движения "Продажи" (датой реализации)
Реализованные алгоритмы устойчивы к перепроведению.
(для случая когда корректировочные движения, сделанные датой реализации располагаются в регистре остатков до движений документа реализации).
Подскажите плизз как на форме выложить свое решение. (Не нашел "Загрузить файл")
В алгоритмах реализован
-
Цитата Gladkov79 (
)
Подскажите плизз как на форме выложить свое решение. (Не нашел "Загрузить файл")
Внизу надпись "Прикрепить файл", кнопка "Обзор". Возможно тебе еще не дали соответствующие права. Насколько я понял они даются только за какое-то количество сообщений на форуме. По крайней мере у меня было так.
-
Добрый день всем!!
Выкладываю свой вариант решения. Очень интересно услышать комментарии к решению, так как оно довольно простое и на мой взгляд правильное.
Промучился над задачей неделю! Прочитал много мнений по поводу решения, просмотрел разные решения, где-то делают сторно в приходной , где-то последовательности и тд.
Я считаю что решение не должно быть таким сложным как много вариантов решений в этой теме.
Плюс все сторно записи в ПН считаю неверными так как если перепровести РН то все движения собьются.
Считаю что движения по продажам и расходу должны быть сделаны только РН а не ПН.
Вообщем решил простым образом.
1. При проведении РН списывается все согласно задачи (и по остаткам и по продажам). Если не хватает партий то списывается без партий и без сроков.
2. При проведении ПН делается обычный приход с партиями и сроками на ДатуПоступления(реквизит ПН). Записи записываются, и потом перепроводятся все РН с датой между Дата ПН и ДатаПоступления(реквизит ПН) которые делали движения по номенклатуре из документа ПН.
Таким образом у приходных всегда будут движения по приходу, у расходных движения по расходу и продажам.
Отчеты легко построить так как все данные находятся в соответствующих регистрах.
-
А чем последовательности то не нравятся?
-
А чем последовательности то не нравятся?
Тем что нужно ее восстанавливать )) А так провел приход и все расходы пересчитались) как то так..)
Вы считаете что нужно задачу решать все-таки при помощи последовательности?
-
Присоединяюсь к вопросу по поводу Последовательностей. Очень интересно какой будет корректнее, т.е. на экзамене какой будет предпочтительней?
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
Спасибо!
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
Спасибо, будем копать.
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
Спасибо большое. Действительно через последовательность и красивее и правильней, а в фоне вообще!))
Один только вопрос к вашему руководству. В обработке проведения Приходной накладной я думаю нужно записать принудительно движения перед восстановлением последовательности!
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
У меня вопрос по поводу регистра "ОстаткиТоваров", не будет ли на экзамене это считаться как создание лишнего объкта метаданных, т.к. остатки можно контролировать и по регистру с партиями?
-
Партии - это документированная поставка. Остатки товаров - это фактические остатки.
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
Спасибо большое. Действительно через последовательность и красивее и правильней, а в фоне вообще!))
Один только вопрос к вашему руководству. В обработке проведения Приходной накладной я думаю нужно записать принудительно движения перед восстановлением последовательности!
Вопроса не понял. И почему он к руководству?
-
Решение задачи. Очень подробное: http://1c.chistov.pro/2014/11/106-1.html
Спасибо большое. Действительно через последовательность и красивее и правильней, а в фоне вообще!))
Один только вопрос к вашему руководству. В обработке проведения Приходной накладной я думаю нужно записать принудительно движения перед восстановлением последовательности!
Вопроса не понял. И почему он к руководству?
Вопрос по следующей части из руководства:
"Сам же модуль документа ПриходнаяНакладная будет выглядеть так:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиПартийТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ДатаФактическогоПоступления;
Движение.Товар = ТекСтрокаТовары.Товар;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение = Движения.ОстаткиПартийТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ДатаФактическогоПоступления;
Движение.Товар = ТекСтрокаТовары.Товар;
Движение.СрокГодности = ТекСтрокаТовары.СрокГодности;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Стоимость = ТекСтрокаТовары.Стоимость;
КонецЦикла;
Если НЕ Последовательности.ОстаткиТоваров.Проверить(МоментВремени()) Тогда
ПараметрыФоновогоЗадания = Новый Массив(1);
ПараметрыФоновогоЗадания[0] = МоментВремени();
ФоновыеЗадания.Выполнить("СервисныеМеханизмы.ВосстановлениеПоследовательности", ПараметрыФоновогоЗадания);
КонецЕсли;
КонецПроцедуры"
Сам собственно вопрос:
- Если мы перед проверкой последовательности принудительно не запишем записи в регистр, то последовательность и не сдвинется на
ДатуФактическогоПоступления
-
Согласен. Не учел.
-
Немного смущает такой метод, на экзамене такое решение примут? Формально мы вводим новый документ, но фактически мы вводим документ задним числом, т.е. подменили реквизит документа "дата", на реквизит "дата фактического поступления" и все, да и все движения он формирует задним числом. Формально, да, дата документа текущая, но если представить, что движения задним числом разрешены, то это будет абсолютно такое же решение, только без реквизита "дата поступления товара". Опасаюсь не будет на экзамене это расцениваться как попытка надуть экзаменатора и вводить документы задним числом, используя вместо стандартного реквизита "дата" свой "дата фактического поступления"?
-
Все требования задачи удволетварены. Предложите другое решение - обсудим.
-
Забыла прикрепить.<hr>Вложения:
<a href="./ucoz_attachments/9/2506449.dt">2506449.dt</a>
Можно ввести документ задним числом, в задании написано, что нужно запретить
-
Не путайте. В задании сказано что документы не вводятся задним число, а о том чтобы реализовать запрет нет ничего.
-
Я не могу понять, как вы реализовываете списание более дорогого товара при одинаковых сроках годности? Упорядочивание все делают по убыванию, но это означает, что всегда будет продаваться самый дорогой товар.
-
Сортировка по сроку годности и цене.
Не понял я видимо вопроса. УПОРЯДОЧИТЬ ПО и тут срок годности и цену с ключевым словом УБЫВ указываем.
В статье прямо написано:
|УПОРЯДОЧИТЬ ПО
| СрокГодности,
| Цена УБЫВ
-
Подскажите пожалуйста, не понял как реализовать: Документ задним числом вводить нельзя, но можно открыть существующий документ и перепровести его.
-
Подскажите пожалуйста, не понял как реализовать: Документ задним числом вводить нельзя, но можно открыть существующий документ и перепровести его.
Если ЭтоНовый И НачалоДня(Док.Дата) <> НачалоДня(ТекущаяДата) Тогда Отказ
-
Подскажите пожалуйста, не понял как реализовать: Документ задним числом вводить нельзя, но можно открыть существующий документ и перепровести его.
Не надо это никак реализовывать.
-
Подскажите пожалуйста, не понял как реализовать: Документ задним числом вводить нельзя, но можно открыть существующий документ и перепровести его.
Не надо это никак реализовывать.
А так не правильно?
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЭтоНовый() И РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если НачалоДня(ТекущаяДата()) > НачалоДня(Дата) Тогда
Сообщить("Документы задним числом не вводятся!");
Отказ = Истина;
КонецЕсли;
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если НачалоДня(ТекущаяДата())>НачалоДня(Дата)
И Дата <> Ссылка.Дата Тогда
Сообщить("Документы задним числом не вводятся!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
-
Немного смущает такой метод, на экзамене такое решение примут? Формально мы вводим новый документ, но фактически мы вводим документ задним числом, т.е. подменили реквизит документа "дата", на реквизит "дата фактического поступления" и все, да и все движения он формирует задним числом. Формально, да, дата документа текущая, но если представить, что движения задним числом разрешены, то это будет абсолютно такое же решение, только без реквизита "дата поступления товара". Опасаюсь не будет на экзамене это расцениваться как попытка надуть экзаменатора и вводить документы задним числом, используя вместо стандартного реквизита "дата" свой "дата фактического поступления"?
Не тебя одного смущает, здесь вся тема об этом моменте. Фактически это ввод в систему движений задним числом. Чем это отличается от ввода документов задним числом? Формулировкой? Придерутся или нет? Да здесь Павел Чистов может ответить, все условия соблюдены, если сдавать преподавателю, да еще удаленно, то так не ответишь. А вот если движения не вводить задним числом, то задача сразу приобретает сложность. И сторно в приходной накладной это один самых простых способов.
-
Я всегда готов обсудить нормально описанное решение.
Сделайте статью похожую по формату на мою и будем дискутировать.
Нули в стоимость писать нельзя - это неправильно даже с тупой точки зрения кладовика, он же материально ответственное лицо. Потом сторнировать что-то. Это не учет, а поделка программиста-стажера.
Я сейчас не в коем случае не хочу авторитетом давить, это просто мое мнение. И оно может быть ошибочным.
-
На статью конечно не претендую. Но при данном решении я исходил из следующих соображений:
Если отрицательные остатки разрешены, то кто запретит жить "неправильно", то есть сразу начать учет с РН? Данных по приходу нет, откуда взять стоимость? Она будет 0 и с этим стоит смириться. Дальше у меня было две мысли по "приходу" (поймите правильно =) ).
1. Через ДатуПоступления. В данном случае достаточно перепровести все РН начиная с Даты поступления. Способ реализации либо через последовательности, либо еще как-то.
2. "Честный" способ. Поступление оформлено позже, возникает необходимость убрать записи без сумм и пересчитать стоимость. Таким образом расходные движения будут формироваться и в расходной накладной и в приходной накладной. Здесь я и подумал, что вот он "пойнт" задания, написать универсальный алгоритм списания и для документов ПН и РН.
В итоге вышло вот что:
Процедура СписаниеПоПартиям(ДатаОстатков, Документы, Период, ДвиженияОстаткиНоменклатуры, ДвиженияПродажи, Отказ) Экспорт
РазрешитьОтрицательныеОстатки = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Период).РазрешитьОтрицательныеОстатки;
Если РазрешитьОтрицательныеОстатки = Неопределено Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не установлена учетная политика!";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
ЗапросСписокНомеклатуры = Новый Запрос;
ЗапросСписокНомеклатуры.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗапросСписокНомеклатуры.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТСписокНоменклатуры
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка В (&СписокДокументов)
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура";
ЗапросСписокНомеклатуры.УстановитьПараметр("СписокДокументов", Документы);
ЗапросСписокНомеклатуры.Выполнить();
ЗапросДляБлокировки = Новый Запрос("ВЫБРАТЬ Номенклатура ИЗ ВТСписокНоменклатуры");
ЗапросДляБлокировки.МенеджерВременныхТаблиц = ЗапросСписокНомеклатуры.МенеджерВременныхТаблиц;
РезультатЗапроса = ЗапросДляБлокировки.Выполнить();
БлокировкаДанных = Новый БлокировкаДанных();
ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
БлокировкаДанных.Заблокировать();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ЗапросСписокНомеклатуры.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номенклатура,
| ОстаткиНоменклатурыОстатки.СрокГодности,
| ОстаткиНоменклатурыОстатки.Партия,
| ОстаткиНоменклатурыОстатки.КоличествоОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток / ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК СебестомостьЗаЕдиницу
|ПОМЕСТИТЬ ВТПартии
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментВремени,
| Номенклатура В
| (ВЫБРАТЬ
| ВТСписокНоменклатуры.Номенклатура
| ИЗ
| ВТСписокНоменклатуры)) КАК ОстаткиНоменклатурыОстатки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТСписокНоменклатуры.Номенклатура КАК Номенклатура,
| ВТСписокНоменклатуры.Количество КАК Количество,
| ВТСписокНоменклатуры.Сумма КАК Сумма,
| ЕСТЬNULL(ВТПартии.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ВТПартии.СуммаОстаток, 0) КАК СуммаОстаток,
| ЕСТЬNULL(ВТПартии.СебестомостьЗаЕдиницу, 0) КАК СебестоимостьЗаЕдиницу,
| ВТПартии.Партия,
| ВТПартии.СрокГодности КАК СрокГодности
|ИЗ
| ВТСписокНоменклатуры КАК ВТСписокНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПартии КАК ВТПартии
| ПО ВТСписокНоменклатуры.Номенклатура = ВТПартии.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| СрокГодности,
| СебестоимостьЗаЕдиницу УБЫВ
|ИТОГИ
| МАКСИМУМ(Количество),
| МАКСИМУМ(Сумма),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура, СрокГодности";
Запрос.УстановитьПараметр("МоментВремени", ДатаОстатков);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если НЕ РазрешитьОтрицательныеОстатки Тогда
Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает товара " + Строка(ВыборкаНоменклатура.Номенклатура) + " " +
Строка(ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток);
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли
КонецЦикла;
ВыборкаНоменклатура.Сбросить();
КонецЕсли;
Пока ВыборкаНоменклатура.Следующий() Цикл
КоличествоСписано = 0;
СуммаСписано =0;
СуммаПродано = 0;
ВыборкаСрокГодности = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСрокГодности.Следующий() Цикл
КоличествоСписаноПоСроку = 0;
СуммаСписаноПоСроку =0;
ВыборкаДетальныеЗаписи = ВыборкаСрокГодности.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() И КоличествоСписано <> ВыборкаДетальныеЗаписи.Количество Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
ОсталосьСписать = ВыборкаДетальныеЗаписи.Количество - КоличествоСписано;
КоличествоКСписанию = Мин(ОсталосьСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);
СуммаКСписанию = ?(КоличествоКСписанию = ВыборкаДетальныеЗаписи.КоличествоОстаток,
ВыборкаДетальныеЗаписи.СуммаОстаток,
КоличествоКСписанию*ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток);
Если СуммаКСписанию и КоличествоКСписанию Тогда
Движение = ДвиженияОстаткиНоменклатуры.ДобавитьРасход();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.СрокГодности = ВыборкаДетальныеЗаписи.СрокГодности;
Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
Движение.Количество = КоличествоКСписанию;
Движение.Сумма = СуммаКСписанию;
КоличествоСписано = КоличествоСписано + КоличествоКСписанию;
СуммаСписано = СуммаСписано + СуммаКСписанию;
КоличествоСписаноПоСроку = КоличествоСписаноПоСроку + КоличествоКСписанию;
СуммаСписаноПоСроку = СуммаСписаноПоСроку + СуммаКСписанию;
КонецЕсли;
КонецЦикла;
СуммаКПродаже = ?(КоличествоСписано = ВыборкаНоменклатура.Количество,
ВыборкаНоменклатура.Сумма - СуммаПродано,
КоличествоСписаноПоСроку*ВыборкаНоменклатура.Сумма/ВыборкаНоменклатура.Количество);
Движение = ДвиженияПродажи.Добавить();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаСрокГодности.Номенклатура;
Движение.СрокГодности = ВыборкаСрокГодности.СрокГодности;
Движение.Количество = КоличествоСписаноПоСроку;
Движение.Сумма = СуммаКПродаже;
Движение.Себестоимость = СуммаСписаноПоСроку;
СуммаПродано = СуммаПродано + СуммаКПродаже;
КонецЦикла;
Если РазрешитьОтрицательныеОстатки
И ВыборкаНоменклатура.КоличествоОстаток = КоличествоСписано
И ВыборкаНоменклатура.Количество > КоличествоСписано Тогда
Движение = ДвиженияОстаткиНоменклатуры.ДобавитьРасход();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество - КоличествоСписано;
Движение = ДвиженияПродажи.Добавить();
Движение.Период = Период;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.Количество - КоличествоСписано;
Движение.Сумма = ВыборкаНоменклатура.Сумма - СуммаПродано;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Реализуется тоже итеративно. Сначала обычное списание с контролем остатков, потом функционал позволяющий отрицательные остатки.
Громоздкий код, да. Что он дает?
Проведение РН элементарное:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Записать();
СписокДокументов = Новый Массив();
СписокДокументов.Добавить(Ссылка);
ДатаОстатков = ?(РежимПроведенияДокумента.Оперативный = РежимПроведения, '00010101', МоментВремени());
Документы.РасходнаяНакладная.СписаниеПоПартиям(МоментВремени(), СписокДокументов, Дата,Движения.ОстаткиНоменклатуры, Движения.Продажи, Отказ);
КонецПроцедуры
Проведение ПН, чуть сложнее:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// Вставить содержимое обработчика.
Движения.ОстаткиНоменклатуры.Записывать = Истина;
РазрешитьОтрицательныеОстатки = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).РазрешитьОтрицательныеОстатки;
Если РазрешитьОтрицательныеОстатки = Неопределено Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не установлена учетная политика!";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| ПриходнаяНакладнаяСписокНоменклатуры.СрокГодности,
| &Ссылка КАК Партия,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
|ИЗ
| Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| ПриходнаяНакладнаяСписокНоменклатуры.СрокГодности";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Движение = Движения.ОстаткиНоменклатуры.ДобавитьПриход();
Движение.Период = Дата;
ЗаполнитьЗначенияСвойств(Движение, ВыборкаДетальныеЗаписи);
КонецЦикла;
Движения.Записать();
РазрешитьОтрицательныеОстатки = Истина;
Если РазрешитьОтрицательныеОстатки Тогда
Движения.ОстаткиНоменклатуры.Очистить();
Движения.Продажи.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОстаткиНоменклатурыОбороты.Регистратор,
| ОстаткиНоменклатурыОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Обороты(, , Регистратор, Партия = ЗНАЧЕНИЕ(Документ.ПриходнаяНакладная.ПустаяСсылка)) КАК ОстаткиНоменклатурыОбороты
|ГДЕ
| ОстаткиНоменклатурыОбороты.КоличествоОборот < 0";
РезультатЗапроса = Запрос.Выполнить();
СписокДокументов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Регистратор");
Документы.РасходнаяНакладная.СторноДвиженийДокументов(СписокДокументов, Дата, Движения.ОстаткиНоменклатуры, Движения.Продажи);
Движения.ОстаткиНоменклатуры.Записать(Ложь);
Движения.Продажи.Записать(Ложь);
ДатаОстатков = Новый Граница(МоментВремени(), ВидГраницы.Включая);
Документы.РасходнаяНакладная.СписаниеПоПартиям(ДатаОстатков, СписокДокументов, Дата, Движения.ОстаткиНоменклатуры, Движения.Продажи, Отказ);
Движения.ОстаткиНоменклатуры.Записать(Ложь);
Движения.Продажи.Записать(Ложь);
КонецЕсли;
КонецПроцедуры
Если разрешены отрицательные остатки, то по документу поступления определяем список номенклатуры, которую необходимо пересчитать, список документов РН, которые необходимо сторнировать и перезапустить расчет себестоимости.
Не используются последовательности, нет лишних блокировок системы.
И вот возникает вопрос, если в задаче явно не указано, что последовательности необходимо использовать, то надо ли? Как это будет оцениваться, что программист просто не умеет их использовать или наоборот умеет их не использовать? Диалектика.
-
Перечитал еще раз Вашу статью, статью из ИТС по последовательностям, там не рекомендуют двигать последовательности при проведении документов. У Вас в статье при проведении документа ПН, создается фоновое задание. 10 пользователей, каждый из них проводит ПН, будет 10 фоновых заданий?
-
Добрый день всем!
Понравилось решение, опубликованное на сайте (с последовательностями). Эстетично :)
Но появилась пара вопросов по коду:
1. Движения.ОстаткиТоваров.Записывать = Истина;
Зачем мы выставляем это свойство, если мы далее записываем этот набор записей принудительно, получается запись 2 раза в регистр?
2. Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Зачем устанавливаем эту блокировку? Ведь чуть выше мы делаем блокировку через БлокировкаДанных, а второй момент - БлокироватьДляИзменения ведь используется для контроля данных после записи в регистр, но поскольку мы в этой ветке полностью очищаем набор, потом его записываем - ничего же не заблокируется по идее.
-
1. Движения.ОстаткиТоваров.Записывать = Истина;
Зачем мы выставляем это свойство, если мы далее записываем этот набор записей принудительно, получается запись 2 раза в регистр?
2. Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Зачем устанавливаем эту блокировку? Ведь чуть выше мы делаем блокировку через БлокировкаДанных, а второй момент - БлокироватьДляИзменения ведь используется для контроля данных после записи в регистр, но поскольку мы в этой ветке полностью очищаем набор, потом его записываем - ничего же не заблокируется по идее.
Как там на сайте не видел, если имеется ввиду такой листинг
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();
то, 1-й строкой устанавливаем флаг записи в истину, 2-й строкой блокируем старые движения документа, чтоб если мы заменили товар и вдруг что-то пошло не так в это время никто не "спер":) наши старые товары, необходимо при установленной галочке в РН "Разрешить разделение итогов", где-то тут на форуме это уже обсуждалось, ну и 3-я строка просто очищает набор и включает блокировку для изменения.
-
Не совсем так, на сайте вот: http://1c.chistov.pro/2014/11/106-1.html
по 1-му пункту:
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаТовары.Товар;
Движение.Количество = ТекСтрокаТовары.Количество;
КонецЦикла;
Движения.Записать();
по 2-му :
//Установим блокировки
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиПартийТоваров");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Товар", "Товар");
Блокировка.Заблокировать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиПартийТоваров.Очистить();
Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Движения.ОстаткиПартийТоваров.Записать();
КонецЕсли;
-
Вот прочтите http://1c.chistov.pro/2013/07/blog-post_25.html
-
Вот прочтите http://1c.chistov.pro/2013/07/blog-post_25.html
Спасибо, почитаю.
-
Уважаемый GROOVY!
Задача 1.06: http://1c.chistov.pro/2014/11/106-1.html (http://1c.chistov.pro/2014/11/106-1.html)
Если можно, поясните, пожалуйста, зачем устанавливается ВТОРАЯ БЛОКИРОВКА?
Или она, в принципе, не нужна, ведь записи регистра уже заблокированы ПЕРВОЙ БЛОКИРОВКОЙ?
//Установим блокировки
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиПартийТоваров");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Товар", "Товар");
Блокировка.Заблокировать(); // ПЕРВАЯ БЛОКИРОВКА
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиПартийТоваров.Очистить();
Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина; // ВТОРАЯ БЛОКИРОВКА
Движения.ОстаткиПартийТоваров.Записать();
КонецЕсли;
Движения.ОстаткиПартийТоваров.Записывать = Истина;
-
Я не GROOVY, но отвечу, прочтите тоже статью по ссылке выше.
-
Почтеннейший, ksandr :)
Если Вам известен ответ - просветите, а посылать в статью не надо :), это всего лишь говорит о том, что Вы ответа не знаете (без обид)
Естественно, эта сложная для понимания статья была мной прочитана, но зачем ставить блокировку второй раз, мне все равно не понятно ))
Поэтому и спрашиваю, вдруг здесь есть обладатель мощного интеллекта? ))
-
Почтеннейший, ksandr :)
Если Вам известен ответ - просветите, а посылать в статью не надо :), это всего лишь говорит о том, что Вы ответа не знаете (без обид)
Естественно, эта сложная для понимания статья была мной прочитана, но зачем ставить блокировку второй раз, мне все равно не понятно ))
Поэтому и спрашиваю, вдруг здесь есть обладатель мощного интеллекта? ))
Для ответа на Ваш вопрос достаточно ответить на 2 вопроса: что Вы блокируете и зачем?
Есть понимание что блокируется в описанном механизме? Там блокировка на разные данные устанавливается.
-
Почтеннейший, ksandr :)
Если Вам известен ответ - просветите, а посылать в статью не надо :), это всего лишь говорит о том, что Вы ответа не знаете (без обид)
Естественно, эта сложная для понимания статья была мной прочитана, но зачем ставить блокировку второй раз, мне все равно не понятно ))
Поэтому и спрашиваю, вдруг здесь есть обладатель мощного интеллекта? ))
В этой сложной для понимания статье все расписано. В частности вот ответ на Ваш вопрос
"17. Устанавливаем свойство "БлокироватьДляИзменения". Это позволит заблокировать от чтения те данные которые сейчас будут удалены из регистра, вдруг транзакция будет отменена, не хотим чтобы кто-либо вместе с нами работал с этими данными.
Подобное действие не помешает и при смене даты или времени документа, а не только при оперативном проведении."
-
ksandr, GROOVY, спасибо! Разул глаза, подробоно изучил статью и понял смысл. Нашел пункт 17 и его обсуждение в статье, теперь все ясно:
//Установим блокировки
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиПартийТоваров");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Товар", "Товар");
Блокировка.Заблокировать(); // ПЕРВАЯ БЛОКИРОВКА
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиПартийТоваров.Очистить();
Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина; // ВТОРАЯ БЛОКИРОВКА
Движения.ОстаткиПартийТоваров.Записать();
КонецЕсли;
Движения.ОстаткиПартийТоваров.Записывать = Истина;
Первая блокировка блокирует записи по той "Номенклатуре", которя указана в ТЧ документа СЕЙЧАС,
а вторая - блокирует записи регистра по "номенклатуре", "партии" и "СрокуГодности", которые могут фигурировать в старых движениях.
-
Прощу проверить.
-
как , согласно решению этой задачи Павлом, будет происходить списание по РН ОстаткиПартииТоваров при отключенном контроле остатков, если не было приходных накладных?
-
Прощу проверить.
не увидела каких то ошибок, всё было сделано по аналогии со статьей Павла
только в РН при обходе цикла по деталям нет проверки на количество списания, из-за этого в регистр ОстаткиНоменклатуры попадают лишние строчки
ещё нет отчетов, наверно делать было лень))
не знаю ошибка это или нет, но так получилось, что в РН получилась пустая строка, из-за этого вывалилась ошибка "Деление на 0" (во всём виновато такси)
и вопрос оправдан ли запрос в ПН к регистру ОтрицательныеОстатки? закомментировала, ничего по регистрам вроде не изменилось
-
только в РН при обходе цикла по деталям нет проверки на количество списания
и вопрос оправдан ли запрос в ПН к регистру ОтрицательныеОстатки?
верные замечания
-
В решении которое описано в статье П. Чистова не учтено, что регистр Продажи тоже ведется в разрезе Сроков Годности. А в условии это есть, по крайней мере в отчете по продажам есть срок годности.
-
Появилось пару вопросов: как лучше с услугами быть, отсеивать их на форме? Иначе будет неявный запрос в цикле...
И кому попалась эта задача, подскажите - решение Павла если использовали, были какие нибудь замечания? Кто готовится, ау))
-
Появилось пару вопросов: как лучше с услугами быть, отсеивать их на форме? Иначе будет неявный запрос в цикле...
Я услуги обрабатываю в начале обработки проведения запросом (явным, зато одним :) ) из ТЧ документа - отсеиваю либо просто дополнительно подтягиваю ВидНоменклатуры (когда необходимо вести учет продаж).
-
да, но кто-то писал что получается двойное обращение к базе в приходной - сперва Чтение данных, потом Запись данных. А когда конструктором - читается из данных формы на клиенте, нету лишнего обращения к серверу. Поэтому выясняю как правильно, может через параметры выбора всё таки, кто сдавал и как делал? )) А терять 0.1 балл не хочется)
-
А вот мой вариант с разделением выручки по партиям, срокам годности и без этой них.
-
А вот мой вариант с разделением выручки по партиям, срокам годности и без этой них.
Я так понимаю этого задания нет в экзаменационных билетах.
Примеры билетов здесь:
http://forum.chistov.pro/index.php?topic=2670.0
-
Закон подлости знаете? Сейчас вроде нет готовых билетов, а есть генератор билетов.
-
где то тут прочитал )) сори что не помню где.
-
Здравствуйте. В статье - http://1c.chistov.pro/2014/11/106-1.html - в РН "Продажи" всегда попадает полная сумма продажи:
Списано = МИН(Выборка.Количество, Выборка.КоличествоОстаток);
Если Списано <> 0 Тогда
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Товар = Выборка.Товар;
Движение.Количество = Списано;
Движение.Себестоимость = СебестоимостьВсего;
Движение.Продажа = Выборка.Сумма;
КонецЕсли;
Нужно ли здесь рассчитывать сумму продажи как "{цена за ед. продажная} * Списано"?
-
мое решение
-
Можно все-таки разъяснить вопрос про очистку движений при новом и старом методе списания? Т.к. в ветке http://forum.chistov.pro/index.php?topic=3879.0 говорится
НЕ ПИШИ ТАК НА ЭКЗАМЕНЕ!
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиНоменклатуры.Записать();
пиши так:
Движения.ОстаткиНоменклатуры.Записать();
Я уточнял!!!!Не делай мои ошибки )
а в решении на сайте http://1c.chistov.pro/2014/11/106-1.html
//Установим блокировки
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиПартийТоваров");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Товар", "Товар");
Блокировка.Заблокировать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиПартийТоваров.Очистить();
Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Движения.ОстаткиПартийТоваров.Записать();
КонецЕсли;
Движения.ОстаткиПартийТоваров.Записывать = Истина;
П.С. желательно услышать мнения автора последней статьи)
-
Сделал задачу по Чистову, отчеты идентичны приведенному заданию.
-
Думаю, что можно реализовать эту задачу, сделав отдельную обработку или команду для расчета стоимости списания за заданный пользователем период. При этом проверку корректности указания периода для расчета возложить на самого пользователя. Один из инструментов проверки корректности расчетов - отсутствие отрицательных остатков в отчете. А так, предполагается, что только сам пользователь может знать, по какой период уже введены все поступления.
Логика здесь следующая:
1) Если допускается списание без контроля остатков, значит, расходная накладная сама рассчитывать себестоимость не может.
3) Приходная накладная тоже не может корректно рассчитать себестоимость. Потому что она "не знает", будет ли после нее еще какая-нибудь другая приходная, также предшествующая по дате расходной накладной, но с более ранним сроком годности или с более дорогим товаром, чем текущая приходная с меньшей датой. А перепроверять в каждой следующей приходной, что там "навводила" предыдущая и исправлять - это непрозрачный (а значит, не очень надежный и сложный в поддержке, если смотреть шире) и неэффективный подход. Представьте, что подряд идут 100 приходных, а после них одна расходная. Получается, что 99 первых зря проделают свою работу.
Отсюда вывод, что корректно рассчитать стоимость списания можно только после ввода ВСЕХ приходных накладных, предшествующих расходным, для которых рассчитывается эта стоимость. Очевидно, что автоматически определить, все ли такие приходные уже введены, нельзя. Это может сделать только пользователь, который и должен запустить в нужный момент соответствующую обработку.
Про запрет ввода документов прихода задних числом, думаю, что это все-таки некорректно сформулированное условие, просто скопированное из других задач.
Скорее всего, достаточно будет одного складского регистра. Процедура расчета себестоимости будет выбирать все расходные накладные за заданный период и переформировывать их движения в данном регистре в порядке возрастания момента времени расходных. Насчет последовательностей, вроде бы П.Белоусов говорил, что сейчас их использование на экзамене не требуется.
-
что скажете? :o
-
Можно все-таки разъяснить вопрос про очистку движений при новом и старом методе списания?
Условие "Если Режим = РежимПроведенияДокумента.Оперативный" - использовалось потому что, при Оперативном проведение - дата документа всегда увеличивается (до текущей). И, т.о. при получении остатков на МоментВремени() - гарантированно учитываются и движения текущего документа, если, конечно, они есть.
Смысл этого условия не в режиме проведения, а в том, что дата может быть сдвинута вперед.
Проблема в том, что при неоперативном проведении - дата может быть также быть сдвинута вперед, руками, - и мы получим аналогичную ситуацию. На дружественном ресурсе - я видел решение где анализируется, увеличилась ли Дата документа(в ПередЗаписью + ПриЗаписи), и, если увеличилась - то движения очищаются. Думаю, на сертификации нет смысла заморачиваться подобным образом, можно просто очищать безусловно.
-
Сторнировать расходную при проведении поступления не нужно. Кто против, готов поспорить. :)
Смотрите, по условию задачи, должна быть возможность продажи ещё неоприходованного товара, по сроку годности. Т.е. если физически он есть, но в системе не заведен. Всё равно должен быть продан товар с наименьшим сроком годности.
В случае если оказался оприходован товар с меньшим сроком годности, чем в движениях, при сторнировании нарушится логика задачи (первым списывается самый испорченный). Иначе мы можем получить ситуацию, что физически на складе испорченного товара нет, а в программе он есть. И только перепроведение документов списания, будет гарантировать нам то, что испорченные товары и в программе и на складе не останутся.
-
Сделал задачу по Чистову, отчеты идентичны приведенному заданию.
Подкорректировал
-
Начал готовиться к Спецу по платформе, наткнулся на пример решения задания 1.06
http://1c.chistov.pro/2014/11/106-1.html
Начал решать сам - заметил, что в решении Павла опущен подвох условия задания, что отчет по продажам нужен по измерениям "Номенклатура + Срок годности". Вилы в том, что у нас везде (документ реализации, остатки партий, обороты продаж) разные комбинации измерений и в отчет по продажам нормально (без возни с распределениями) не клеится себестоимость в заявленном разрезе, чтобы и продажи отразить и с ведомостью по партиям было сопоставимо. К Павлу, естественно, нет претензий (его статья ценна за иллюстрацию блокировок и общий мэйнстрим), но проверяющие могут и заминусовать за "упрощение".
Короче, вымутил вроде бы условно-непротиворечивое решение, которое обеспечивает проведение и с контролем остатков, и без контроля, при этом ведомость по продажам и ведомость по партиям сопоставимы в части себестоимости, а не обеспеченные остатками партий продажи (при отключенном контроле) пишутся в регистр продаж с пустым сроком годности ради отражения выручки по номенклатуре, что тоже имеет смысл (в отчете можно отбор сделать при надобности). Сумму продажи из ТЧ расходной накладной при проведении по регистру продаж распределяю пропорционально количеству проданного, относимому на сроки годности (вроде даже объехал проблему копеек при этом). На тестовом примере все закрылось по складу ровно и выручка в ведомости по продажам соответствует ТЧ документов.
Регистр количественных остатков по номенклатурам - не задействовал, т.к. он ни для чего не нужен, чтобы поднимать его как отдельную сущность (тут уже я сам рискую выхватить за "упрощение", но оно обосновано вводной из задания - "складской учет товаров не ведется").
Тема старенькая, да и в актуальных билетах не нашел этой задачки, но подвох в условиях ограниченного времени годный - прицеплю на всякий случай свой вариант решения.
P.S. Прикрутил ДатаДокСдвинутаВперед для анализа нужно ли записывать пустой набор по партиям при проведении расходной, чтобы не выхватить свои же движения в запросе. Что-то вошкотно выходит, так и до подписок с общими механизмами можно дойти - на экзамене это было бы, однако, перебор, ибо долго возиться.
-
Всем привет. Мое решение на обозрение)
-
Всем привет, я тут решил проконсультироваться с коллегой, и он мне указал на такой момент что в задании ни где не написано что необходимо сделать обработку или какой то код для того чтобы документы перепроводились. Зато написано что можно открыть существующий документ и перепровести его, т.е. пользователь сам это сделает. Тогда получается что зачем себе усложнять жизнь, если на экзамене и так не сильно много времени
-
Мне кажется, указывать отдельную дату поступления в приходной - неверно. У меня такой вариант решения. При выключенном контроле остатков Расходная накладная может делать движения с пустой партией и сроком годности. Приходная накладная при проведении анализирует, какая расходная сделала первое движение по комбинации:
Приходная.Номенклатура = ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура
И ОстаткиНоменклатурыОстаткиИОбороты.СрокГодности >= Приходная.СрокГодности
Берем дату этой расходной, и в приходной Период указываем равным этой дате. При проведении последовательность сдвигается на момент перед нужной расходной накладной. После восстановления последовательности и перепроведения расходных документов с этой даты, получаем корректный результат.
-
Мне кажется, указывать отдельную дату поступления в приходной - неверно. У меня такой вариант решения. При выключенном контроле остатков Расходная накладная может делать движения с пустой партией и сроком годности. Приходная накладная при проведении анализирует, какая расходная сделала первое движение по комбинации:
Приходная.Номенклатура = ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура
И ОстаткиНоменклатурыОстаткиИОбороты.СрокГодности >= Приходная.СрокГодности
Берем дату этой расходной, и в приходной Период указываем равным этой дате. При проведении последовательность сдвигается на момент перед нужной расходной накладной. После восстановления последовательности и перепроведения расходных документов с этой даты, получаем корректный результат.
Попробовал сначала провести расходную, затем приходную. Что то ничего не произошло))
-
У меня вопрос к спецам, будет ли правильным при поступлении товара перепроводить документы РасходнойНакладной датой, большей от ПриходнойНакладной ?
А находить эти документы я буду по отрицательным остаткам, записывая их в отдельный регистр.
При перепроведении РН, лишние записи будут очищаться сами.
В условии задачи разрешено перепроводить.