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

15:22
Задача 1.10
В этой задаче  

создаем дополнительный справочник Единицы измерения .с реквизитом Коэффициент- число,2


в Приходной и Расходной добавляем реквизит склад

2)В регистр накопления остатки добавляем  измерение склад

3) создаем регистр Себестоимость тоже остатки

измерения номенклатура , ресурсы сумма ,количество

Добавим регистр сведений ЗначениеСвойствТоваров независим не периодич

измерения Номенклатура , ВидыСвойств тип  ПланВидовХарактеристикСсылка.СвойстваОбъектов

ресурс Значение  тип Характеристика.СвойстваОбъектов


Документы 

1) в приходной в модуле объекта:



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

Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
КонецЦикла;
Движения.Себестоимость.Записывать = Истина;
Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
Движение = Движения.Себестоимость.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
Движение.Количество = ТекСтрокаСписокНоменклатуры.Количество;
Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;
КонецЦикла;
КонецПроцедуры


В расходной:


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

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

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




Отчет:


В ведомости по складу 

два регистра :по двум регистрам запрос левое соединение в связи  по полю Номенклатура






Отбор параметр  склад, НачПериода Кон Периода, группировки производитель ,детальные записи

сам запрос:


ВЫБРАТЬ
ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура,
ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 0) КАК КолНачОст,
ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 0) КАК КолКонОст,
ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход, 0) КАК КолПриход,
ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход, 0) КАК КолРасход,
ВЫБОР
КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоНачальныйОстаток, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаНачальныйОстаток, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоНачальныйОстаток, 0)
КОНЕЦ КАК СуммаНачОст,
ВЫБОР
КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоКонечныйОстаток, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаКонечныйОстаток, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоКонечныйОстаток, 0)
КОНЕЦ КАК СуммаКонОст,
ВЫБОР
КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоПриход, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаПриход, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоПриход, 0)
КОНЕЦ КАК СуммаПриход,
ВЫБОР
КОГДА ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоРасход, 0) = 0
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход, 0) * ЕСТЬNULL(СебестоимостьОстаткиИОбороты.СуммаРасход, 0) / ЕСТЬNULL(СебестоимостьОстаткиИОбороты.КоличествоРасход, 0)
КОНЕЦ КАК СуммаРасход,
ОстаткиНоменклатурыОстаткиИОбороты.Склад
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты КАК ОстаткиНоменклатурыОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Себестоимость.ОстаткиИОбороты КАК СебестоимостьОстаткиИОбороты
ПО ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура = СебестоимостьОстаткиИОбороты.Номенклатура
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначениеСвойствТоваров
ПОЛЕОБЪЕКТА Номенклатура
ПОЛЕВИДА ВидыСвойств
ПОЛЕЗНАЧЕНИЯ Значение }


Просмотров: 2971 | Добавил: moshefoo | Рейтинг: 5.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: