|
задача 1.7. специалист | ☑ | ||
---|---|---|---|---|
0
wwwqwert2014
22.05.13
✎
17:56
|
Решаю задачу 1.7 из сборника задач по платформе 8.2.
вот условие задачи Компания занимается оптовой торговлей. Поступление товаров отражается документом «Приходная накладная», продажа - «Расходная накладная». Помимо продажи товара, могут оказываться дополнительные услуги, например по доставке. И услуги и товары указываются в одной табличной части. Учет товаров ведется в разрезе складов. Поступление и продажа осуществляются с указанием склада (в шапке документа). При проведении документа «Расходная накладная» необходимо производить только списание товара со склада. В том случае, когда товара не хватает, документ проводиться не должен. Расчет себестоимости списанного товара должен происходить позднее с помощью регламентной обработки «Расчет себестоимости». Запуск этой обработки должен происходить автоматически с использованием регламентного задания, но может быть произведен и вручную по желанию пользователя. Обработка должна автоматически определять самый первый документ, нуждающийся в расчете себестоимости, и рассчитывать себестоимость для всех остальных документов начиная с него. Списание себестоимости должно быть организовано по партиям, в зависимости от текущего значения принятого на этот год в учетной политике метода списания себестоимости (FIFO или LIFO). Еще раз подчеркивается - учетная политика действует год. На следующий год метод списания может смениться. Для расчета себестоимости при списании товара необходимо учитывать только момент поступления товара в компанию, вне зависимости от того, на какой склад он пришел. Предположим, для метода списания FIFO первое поступление портсигара произошло на склад «Основной» документом «Приходная накладная №1», а потом на склад «Транзитный» документом «Приходная накладная №2». В этом случае при продаже товара со склада «Транзитный» в первую очередь должна быть списана себестоимость портсигара по документу «Приходная накладная №1», так как она пришла раньше Необходимо построить отчет по продажам товаров за период и остаткам товара по складам на указанную дату. все вроде понятно, да и сделал я почти все, за исключением следующего абзаца: Для расчета себестоимости при списании товара необходимо учитывать только момент поступления товара в компанию, вне зависимости от того, на какой склад он пришел. Предположим, для метода списания FIFO первое поступление портсигара произошло на склад «Основной» документом «Приходная накладная №1», а потом на склад «Транзитный» документом «Приходная накладная №2». В этом случае при продаже товара со склада «Транзитный» в первую очередь должна быть списана себестоимость портсигара по документу «Приходная накладная №1», так как она пришла раньше Необходимо построить отчет по продажам товаров за период и остаткам товара по складам на указанную дату. Алгоритм расчета себестоимости я так до конца и не смог продумать. Может подскажете? Я думаю как-то так надо делать: Взять таблицу ОстаткиНоменклатуры и выбрать из нее через ГДЕ те записи, у которых ОстаткиНоменклатуры.Себестоимость = НЕОПРЕДЕЛЕНО; Далее её помещаю во временную таблицу ВТ_ДляРасчета. Следующим этапом соединяю её с таблицей ОстаткиНомнклатурыОстаткиИОбороты по полям Номенклатура, Склад, Партия. И дальше по сути надо проверять: Если расход номенклатуры по партии равен остаткам (списалась вся партия), тогда нужно в себестоимость расхода перенести всю себестоимость из остатков. В противном случае надо считать: себестоимостьРасхода = СебестоимостьОстатков*КоличествоРасхода/КоличествоОстатков. Это надо сделать, чтобы регистр выводился в 0 и не было проблемы копеек. А вот как это сделать, я до конца понять не могу. Наверно Это все надо взять из ОстаткиНоменклатурыОстаткиИОбороты, брать на текущую дату и к этой дате прибавить 1 секунду (чтобы остатки просчитались). Вот DT-шник, что я начал делать. http://zalil.ru/34523173 |
|||
1
wwwqwert2014
22.05.13
✎
17:57
|
а вот начал запрос составлять.
Процедура Рассчитать () Экспорт //узнаем текущую ценовую политику Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УчетнаяПолитикаСрезПоследних.ТекущаяУчетнаяПолитика |ИЗ | РегистрСведений.УчетнаяПолитика.СрезПоследних(&ТекущаяДата, ) КАК УчетнаяПолитикаСрезПоследних"; Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата()); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); ТекущаяУчетнаяПолитика = ""; Если Не ВыборкаДетальныеЗаписи.Следующий() Тогда // Вставить обработку выборки ВыборкаДетальныеЗаписи Сообщить("Не выбрана учетная политика"); Отказ = Истина; Возврат; Иначе Если ВыборкаДетальныеЗаписи.ТекущаяУчетнаяПолитика = Перечисления.УчетнаяПолитика.ЛИФО Тогда ТекущаяУчетнаяПолитика = " УБЫВ"; КонецЕСли; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиНоменклатуры.Номенклатура, | ОстаткиНоменклатуры.Партия, | ОстаткиНоменклатуры.Склад |ПОМЕСТИТЬ ВТ_ДляРасчета |ИЗ | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры |ГДЕ | ОстаткиНоменклатуры.Себестоимость = НЕОПРЕДЕЛЕНО |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура, | ОстаткиНоменклатурыОстаткиИОбороты.Склад, | ОстаткиНоменклатурыОстаткиИОбороты.Партия КАК Партия, | ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход, | ОстаткиНоменклатурыОстаткиИОбороты.СебестоимостьРасход, | ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход, | ОстаткиНоменклатурыОстаткиИОбороты.СебестоимостьПриход |ИЗ | ВТ_ДляРасчета КАК ВТ_ДляРасчета | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(, &ДатаОкончания, , , ) КАК ОстаткиНоменклатурыОстаткиИОбороты | ПО ВТ_ДляРасчета.Номенклатура = ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура | И ВТ_ДляРасчета.Партия = ОстаткиНоменклатурыОстаткиИОбороты.Партия | И ВТ_ДляРасчета.Склад = ОстаткиНоменклатурыОстаткиИОбороты.Склад | |УПОРЯДОЧИТЬ ПО | ОстаткиНоменклатурыОстаткиИОбороты.Партия.МоментВремени |ИТОГИ ПО | Партия";//пока что запрос работает без учета текущей учетной политики Запрос.УстановитьПараметр("ДатаОкончания", ТекущаяДата()); Результат = Запрос.Выполнить(); ВыборкаПартия = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПартия.Следующий() Цикл//цикл по партиям // Вставить обработку выборки ВыборкаПартия ВыборкаДетальныеЗаписи = ВыборкаПартия.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл //внутри партий проходим по номенклатуре // Вставить обработку выборки ВыборкаДетальныеЗаписи КонецЦикла; КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецПроцедуры подскажите, пожалуйста |
|||
2
zak555
22.05.13
✎
18:07
|
> Помимо продажи товара, могут оказываться дополнительные услуги, например по доставке. И услуги и товары указываются в одной табличной части.
> При проведении документа «Расходная накладная» необходимо производить только списание товара со склада. факт продажи услуги не надо отражать ? |
|||
3
Relader
22.05.13
✎
18:48
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |