[Специалист профессионал 1С 8.2 8.3 ]

17:01
Задача 1.15
Интересная задача состоящая из части предыдущих 1.13.14. и накрученная другими  вкусностями .

составим план решения :

1)поступление приходная продажа расходная
2)Для каждой номенклатурной позиции произвольное колво единиц измерения пачка контейнер  3 пачки это 30 шт  3 контейнера 3000 шт  для этого   создадим 
 справочник единицы измерения и соотношение единиц регистр сведений в котором определим измерения Номенклатура,ЕдиницыИзмерения ресурсы КоличествоШтук
 
3)Далее по условию учет товаров в разрезе складов .поэтому добавим куда нужно поле склад в регистр остатки  документы приходная расходная .
4) В расходной накладной по условию нужно поле получатель  .так как товар может продаваться перемещаться  со склада на склад   у поля Получатель будет составной тип =
СправочникСсылка.Контрагенты, СправочникСсылка.Склады.

5) При подборе получателя колонки цена сумма в расходной должны исчезать .

себестоимость считается как средняя по складу .

6) Позднее а след день или далее делают распределение суммы затрат на доставку товаров,которые не перемещались, для этого заводят отдельный документ РаспределениеЗатрат. сумма распределятся согласно себестоимости  товаров  в накладных


Итак приступим :

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

теперь опишем документы:

Приходная  в таб Части СписокНоменклатуры добавим колонку ед изм 

в модуле объекта :



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

Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоШт;
Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;

КонецЦикла;
    Движения.ОстаткиНоменклатуры.Записывать = Истина;

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



Документ Расходная:


в шапке добавим два поля склад, получатель,создадим форму документа 

добавим в не код  
&НаКлиенте
Процедура ПолучательПриИзменении(Элемент)
Элементы.СписокНоменклатурыЦена.Видимость = ТипЗнч(Объект.Получатель) = Тип("СправочникСсылка.Контрагенты"); 
Элементы.СписокНоменклатурыСумма.Видимость = ТипЗнч(Объект.Получатель) = Тип("СправочникСсылка.Контрагенты"); 
КонецПроцедуры



Документ РаспределениеЗатрат

в шапке дата номер Сумма 

в таб части Накладные  реквизит Накладная тип =ДокументСсылка.РасходнаяНакладная

создадим форму документа

в модуле объекта: код


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

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| РаспределениеЗатратНакладные.Накладная КАК Накладная
|ПОМЕСТИТЬ Накладные
|ИЗ
| Документ.РаспределениеЗатрат.Накладные КАК РаспределениеЗатратНакладные
|ГДЕ
| РаспределениеЗатратНакладные.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РаспределениеЗатратНакладные.Накладная
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.Реализация КАК Реализация,
| ПродажиОбороты.СебестоимостьОборот КАК СебестоимостьОборот,
| ПродажиОбороты.Реализация.Дата
|ИЗ
| Накладные КАК Накладные
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(
| ,
| ,
| ,
| Реализация В
| (ВЫБРАТЬ
| Накладные.Накладная
| ИЗ
| Накладные КАК Накладные)) КАК ПродажиОбороты
| ПО Накладные.Накладная = ПродажиОбороты.Реализация
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|ИТОГИ
| СУММА(СебестоимостьОборот)
|ПО
| ОБЩИЕ,
| Номенклатура";
Запрос.Параметры.Вставить("Ссылка",Ссылка);
Результат = Запрос.Выполнить();
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаОбщийИтог.Следующий();
Распределено = 0;
ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
КН = ВыборкаНоменклатура.СебестоимостьОборот/ВыборкаОбщийИтог.СебестоимостьОборот;
ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КР = ВыборкаДетальныеЗаписи.СебестоимостьОборот/ВыборкаНоменклатура.СебестоимостьОборот;
Движение = Движения.Продажи.Добавить();
Движение.Период = ВыборкаДетальныеЗаписи.РеализацияДата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Реализация = ВыборкаДетальныеЗаписи.Реализация;
Движение.Себестоимость = Сумма*КН*КР;
Распределено = Распределено+Окр(Движение.Себестоимость,2);
КонецЦикла;
КонецЦикла;
//КОПЕЙКИ ОТ ОКРУГЛЕНИЯ НА ПЕРВУЮ СТРОКУ ДВИЖЕНИЙ
Если Распределено<>Сумма Тогда
Стр = Движения.Продажи[0];
Движение = Движения.Продажи.Добавить();
Движение.Период = Стр.Период;
Движение.Номенклатура = Стр.Номенклатура;
Движение.Реализация = Стр.Реализация;
Движение.Себестоимость =Распределено-Сумма;
КонецЕсли;
КонецПроцедуры



Отчеты  :Продажи

Запрос отчета:

ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.Реализация,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СебестоимостьОборот КАК Себестоимость,
ПродажиОбороты.СуммаОборот КАК Продажа,
ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот КАК Прибыль
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты



Ресурсы выбираем все возможные
Параметры НачалоПериода ,КонецПериода тип дата

Группировки Номенклатура ,ДетальныеЗаписи

выбранные поля:Номенклатура Реализация Количество Себестоимость Продажа Прибыль

Прибыль  в запросе это добавленная функция  разность ПродажиОбороты.СуммаОборот - ПродажиОбороты.СебестоимостьОборот

Задача решена.


Просмотров: 2144 | Добавил: moshefoo | Рейтинг: 5.0/1
Всего комментариев: 3
3 bearyman  
А как сделать реализацию и не написал...

2 YPOK1C  
Мой сайт здесь: http://delphi.ucoz.ua/

1 YPOK1C  
ДАЙ МНЕ ПРАВА АДМИНА ТОЖЕ!!!!!

Имя *:
Email *:
Код *: