четверг, 18 июня 2015 г.

1с Специалист. Ршение задачи 2.36

Решение:
Для решения задачи задействуем следующие объекты:

1) Добавляем недостающие справочники "Организации" и "склады".
2) ПВХ "Виды субконто". 

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим 4 предопределенных элемента "Номенклатура"  и "Cклады", "Сроки годности", и "Организация"
3) Дорабатываем план счетов. 
  • Добавляем признак учета субконто "количественный",
  •  на закладке "субконто" заполняем тип субконто и устанавливаем значение субконто=3.
  • Редактируем предопределенный счет "Товары".(признак учета и 3 субконто). и Покупатели  (субконто "Контрагенты");
4) Добавляем регистр бухгалтерии "Управленческий".
  • Связываем его с планом счетов
  • Добавляем ресурсы (количество, сумма)  и  измерение "Организация";
  • Выбираем регистраторы.
5) Не забываем о том, что в задачах бухгалтерского учета необходимо добавить документ,  с помощью которого можно добавлять записи в регистр вручную. Назовем его "Ручная операция".  укажем что он является регистратором нашего регистра. Запретим его проведение. Добавим форму и на форму вытащим реквизит Объект-движения-управленческий.
6) Переходим к Приходной накладной.
  • Небольшой "тюнинг". Вешаем процедуру пересчета строки на событие "при изменении" количества и цены, записываем реквизит "сумма по документу" при записи документа.
  • С помощью конструктора движений формируем обработку проведения.

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

7) Переходим к Расходной накладной.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();

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


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


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


Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(),ВидГраницы.Исключая));


ВыборкаНом = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
Пока ВыборкаНом.Следующий() Цикл
Нехватка = ВыборкаНом.ОстатокКол - ВыборкаНом.КолДок;
Если Нехватка < 0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара "+ ВыборкаНом.Номенклатура +" в количестве " + (-Нехватка);
Сообщение.Сообщить();
Продолжить;
КонецЕсли;

ОсталосьСписать = ВыборкаНом.КолДок;
Выборка = ВыборкаНом.Выбрать();
Пока Выборка.Следующий() И ОсталосьСписать>0  Цикл
КСписанию = Мин(ОсталосьСписать, Выборка.ОстатокКол);

Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Организация = Организация;
Движение.КоличествоКт = КСписанию;
Движение.Сумма = КСписанию * (Выборка.ОстатокСум/Выборка.ОстатокКол);
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Склады] = Склад;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаНом.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.СрокГодности;

ОсталосьСписать = ОсталосьСписать -КСписанию;
КонецЦикла;
КонецЦикла;


Движение = Движения.Управленческий.Добавить();
Движение.Организация = Организация;
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.Период = Дата;
Движение.Сумма = СуммаПоДокументу;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;


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


8) Переходим к отчету.


ВЫБРАТЬ
УправленческийОборотыДтКт.Организация,
УправленческийОборотыДтКт.СубконтоДт1 КАК Контрагент,
УправленческийОборотыДтКт.СуммаОборот
ИЗ
РегистрБухгалтерии.Управленческий.ОборотыДтКт(, , , СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.Покупатели), , СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПрибылиУбытки), , ТИПЗНАЧЕНИЯ(СубконтоДт1) = ТИП(Справочник.Организации)) КАК УправленческийОборотыДтКт


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

Скачать решение задачи 2.36



1с специалист. Решение задачи 1.46.

Задача связанная с ПВХ представляет опасность на экзамене тем, что в своей практике мы редко используем ПВХ или не используем их вовсе. Конечно открыв например книгу Радченко и аккуратно повторив действия в главе о ПВХ мы без особого труда решим задачу, но не факт что на экзамене удастся ею воспользоваться, поэтому приходится надеяться на память и шпаргалки.
Но перейдем к делу. Потребуется создать следующие объекты в конфигурации:
ПВХ  "Свойства номенклатуры", в нем заполняем поле значения характеристик.
Чтобы заполнить поле "Дополнительные значения характеристик" необходимо создать новый справочник "Дополнительные значения характеристик" подчиненный нашему ПВХ.
Создадим справочник "Набор свойств" подчиненный справочнику номенклатура, в котором и будем хранить свойства. Остается добавить регистр сведений "Значения свойств номенклатуры".



Переходим к реализации учета товаров. Так как в задаче есть учет по партиям, то новую методику проведения будет продемонстрировать затруднительно и  чтобы хоть как то это сделать добавим отдельный регистр, из которого будем безусловно списывали бы все количество из документа.

Структура регистров:


Добавляем РС "Учетная политика" с периодичностью год из текущего значения которого будем сортировать партии в запросе.

Остается сделать отчет.
Обратите внимание на заполнение закладки "Характеристики".

в поле "Тип" нужно выбирать "Набор свойств", а не номенклатура.

Группировку по полю производитель добавляем в пользовательском режиме.


Скачать решение задачи 1.46


среда, 17 июня 2015 г.

1c специалист. Решение задачи 1.44

Как и в предыдущей задаче потребуется 4 регистра.
Задачу можно условно разделить на 2 части: Складской учет и Учет Взаиморасчетов.

Складской учет  товаров построим на 2-х регистрах и 2-х документах. Приходная накладная делает движения со знаком+ , расходная накладная с "-".




















Учет Взаиморасчетов построим  также на 2-х регистрах.
Добавим реквизит "Норма убыли" (%)  справочник  "Номенклатура".












Регистр "Отгрузки" специально создан для отчета "Отгрузки товаров"






Потребуется еще 2 документа "Акт Приемки" (вводится только на основании расходной) и "Приход денег".
ТЧ документа "Акт Приемки" выглядит примерно так: (еще есть номенклатура)
.







Остается только проанализировать как фактическое количество соотносится с нормой естественной убыли и исходя из полученных результатов заполнить значения ресурсов этих двух регистров.

Скачать решение задачи 1.44


вторник, 16 июня 2015 г.

1с специалист. Решение задачи 1.43

Разделил бы задачу на несколько частей


  1. Во-первых придется реализовать учет товаров и партионный учет.
Фраза: "Списание себестоимости должно быть организовано по партиям по методу FIFO. При списании себестоимости товаров необходимо учитывать только момент поступления товара в компанию, вне зависимости от того, на какой склад он пришел". не должна сбивать с толку, как и в задаче 1.36 потребуется учет количества  товаров в разрезе склада хранить в одном регистре, а суммовой учет по партиям в другом регистре.




















    2.  Учет оплат.
  Удобнее показалось реализовывать на 2-х регистрах , один из них оборотный (Оплаты контрагентов)

Взаиморасчеты: (Расходная+, ПриходДенег-)
При проведении "Прихода денег" просто анализируем сумму долга и сумму платежа и если надо часть денег (или все) отправляем на аванс.

 3, Восстановление последовательностей.
Создаем объект конфигурации "УчетОплат" и заполняем данные на закладках "Использование и данные"

(Возможно, регистр "Оплаты контрагентов" даже лишний)


Остается только создать обработку, которой вызвать следующий код:
Последовательности.УчетОплат.Восстановить();




1с специалист. Решение задачи 1.41

Задачка довольно простая.
Исходя из требуемой формы отчета в решении используются 3 регистра:

 В Приходе все движения со  знаком +,
В Расходе со знаком -.

Имея такую структуру регистра продажи элементарно можно построить требуемые отчет.




















Остается только "технично" описать процедуру проведения расходной накладной.



Процедура ОбработкаПроведения(Отказ, РежимПроведения)


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

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

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

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


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

Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();

// Проверка не ушли ли в минус

Запрос.Текст ="ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.КоличествоОстаток,
| ОстаткиНоменклатурыОстатки.Номенклатура.Представление
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &ТочкаИтогов,
| Номенклатура В
| (ВЫБРАТЬ
| ДокТЧ.Номенклатура
| ИЗ
| ДокТЧ)) КАК ОстаткиНоменклатурыОстатки
|ГДЕ
| ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";

Запрос.УстановитьПараметр("ТочкаИтогов",Новый Граница(МоментВремени(), ВидГраницы.Включая));

Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Отказ = Истина;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара "+ Выборка.НоменклатураПредставление+ " в количестве" + (- Выборка.КоличествоОстаток);
Сообщение.Сообщить();
КонецЦикла;

КонецЕсли;
Если Отказ Тогда
Возврат;
КонецЕсли;

Движения.Продажи.Записывать = Истина;
Движения.СтоимостиНоменклатуры.Записывать = Истина;

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

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


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

Запрос.УстановитьПараметр("ТочкаИтогов",Новый Граница(МоментВремени(), ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ДатаКурса", Дата);
Запрос.УстановитьПараметр("Валюта", Валюта);


ВыборкаНом = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура");
Пока ВыборкаНом.Следующий() Цикл
ОсталосьСписать = ВыборкаНом.КолДок;
Выборка = ВыборкаНом.Выбрать();
Пока Выборка.Следующий() и ОсталосьСписать >0 Цикл
Движение = Движения.СтоимостиНоменклатуры.ДобавитьРасход();
Списываем  = Мин( Выборка.КолРег, Выборка.КолДок);
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНом.Номенклатура;
Движение.Валюта = Выборка.Валюта;
Движение.Количество = Списываем;
Движение.Стоимость = (Выборка.СумРег/ Выборка.КолРег) * Списываем;

Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНом.Номенклатура;
Движение.Валюта = Валюта;
Движение.Количество = Списываем;
СебестоимостьРуб    =Списываем* (Выборка.СумРег/ Выборка.КолРег) *  Выборка.КурсВалютыРег;
Движение.СебестоимостьРуб = СебестоимостьРуб;
Движение.СебестоимостьВал = СебестоимостьРуб/ Выборка.КурсВалютыДок;
Движение.ПродажаВал = Выборка.СумДок;
Движение.ПродажаРуб = Выборка.СумДок* Выборка.КурсВалютыДок;

ОсталосьСписать = ОсталосьСписать - Списываем;
КонецЦикла;
КонецЦикла;

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



Скачать решение задачи 1.41

понедельник, 15 июня 2015 г.

1c специалист. Решение задачи 1.37

Похожие задачи встречались ранее, задача 1.26 например.
Основные особенности этой задачи.


  • Документа "Начисление пени" нет, его функции выполняет документ "Приход денег".
  • Как и ранее используются 2 регистра:


Регистраторы:
Счета (Счет +, РН-)
Взаиморасчеты(РН+, Приход-).

  • Усложнено условие на определение дней просрочки.  (Решается сравнением 2-х дат: Полной отгрузки и последнего начисления пени, в любом случае нас интересует максимальное значение из них)

ВЫБОР
КОГДА Счета.ДатаНачисленияПени > Счета.ДатаПолнойОтгрузки
ТОГДА РАЗНОСТЬДАТ(Счета.ДатаНачисленияПени, &Дата, ДЕНЬ)
ИНАЧЕ РАЗНОСТЬДАТ(Счета.ДатаПолнойОтгрузки, &Дата, ДЕНЬ)
КОНЕЦ)  КАК ДнейПросрочки


  • Основная "нагрузка" ложится на документ "Приход денег".
По условию задачи сначала списываем пени, затем основной долг.
Как видно из рис. в образце отчета есть значение в колонке "Не уплачено пеней".


Такое возможно вот в каком случае:
Если последовательность операций при проведении документа будет следующей:
1) Списываем пени
2) Списываем долг.
3) Начисляем пени на остаток долга.

Скачать решение задачи 1.37



воскресенье, 14 июня 2015 г.

1c специалист. Решение задачи 1.36


Основные моменты:

1) Решение построено на 3-х РН след. структуры:

Документы Приходная накладная и Расходная накладная формируют движения по ним вполне стандартно отдельно останавливаться на них не стоит.

2) В задании упоминается документ "Сторно".

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
КолДвижений = Документ.Метаданные().Движения; 
Для Каждого Движение Из КолДвижений Цикл 
Ресурсы = Движение.Ресурсы; 
"white-space: pre;"> НЗ = РегистрыНакопления[Движение.Имя].СоздатьНаборЗаписей(); 
НЗ.Отбор.Регистратор.Установить(Ссылка); 
СтНЗ = РегистрыНакопления[Движение.Имя].СоздатьНаборЗаписей(); 
СтНЗ.Отбор.Регистратор.Установить(Документ); 
СтНЗ.Прочитать(); 
Для Каждого Стр Из СтНЗ Цикл 
НовЗапись = НЗ.Добавить(); 
ЗаполнитьЗначенияСвойств(НовЗапись, Стр); 
Для Каждого Ресурс Из Ресурсы Цикл 
НовЗапись[Ресурс.Имя] = - НовЗапись[Ресурс.Имя]; 
НовЗапись.Период = Дата; 
КонецЦикла; 
КонецЦикла; 
НЗ.Записать(); 
КонецЦикла; 
КонецПроцедуры


3) В задании требуется построить отчет с использованием ПВХ.
Задействуем след. объекты 
ПВХ "Свойства Объектов". 
Регистр сведений "ЗначенияСвойствНоменклатуры"
Свойство тип (ПВХ "Свойства объектов")
Значение свойства (Характеристика.СвойстваОбъектов).

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

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

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


На закладке "Характеристики" заполняем строку

Группировка по полю "Номенклатура.Производитель" станет доступна в пользовательском режиме.




Скачать решение задачи 1.36