среда, 22 апреля 2015 г.

Задачи по Управляемым формам 5.5-5.9


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

Задача 5.6
Для решение потребуется:

  • Добавить регистр сведений с периодичностью = "день" с измерением сотрудник и ресурсом типа булево
  • Добавить реквизиты "Старший менеджер" в документы.
  • Добавить ФО  и заполнить ее состав
  • Добавить Параметр ФО "Сотрудник".
  • Добавить несколько пользователей.
  • В модуле сеанса установим параметр "ТекПользователь"
  • При начале работы установим параметры ФО.


Процедура ПриНачалеРаботыСистемы()
ПараметрыФО = Новый Структура("Сотрудник", Уф.ПолучитьТекПользователя());
УстановитьПараметрыФункциональныхОпцийИнтерфейса(ПараметрыФО);
КонецПроцедуры

Функция ПолучитьТекПользователя() Экспорт
Возврат ПараметрыСеанса.ТекПользователь;
КонецФункции

  • В документах установим видимость реквизита "Менеджер" при смене даты.

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
УстановитьВидимостьМенеджера()
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьМенеджера()
ПараметрыФО = Новый Структура("Сотрудник, Период", Уф.ПолучитьТекПользователя(),Объект.Дата);
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
 КонецПроцедуры


Задача 5.7

Разделим область формы списка на 2 части: в левой будет список документов, во второй движения по регистрам  выбранного документа. Для этого добавим 3 группы, в группу 2 переместим  основной реквизит "список". Добавим  реквизиты (тип динамический список) для каждого из регистров расчета, с помощью конструктора выбираем необходимые таблицы и задаем условие на регистратор.
В форме списка добавим процедуры

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

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
ОсновныеНачисления.Параметры.УстановитьЗначениеПараметра("Регистратор", Элемент.ТекущаяСтрока);
Удержания.Параметры.УстановитьЗначениеПараметра("Регистратор", Элемент.ТекущаяСтрока);
КонецПроцедуры

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

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

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

Задача 5.9
Нужно, чтобы пользователь из формы мог сразу получить доступ к разделу справки.




пишем текст что-то типа: "Справка для вызова раздела Справочники"
с ссылкой  "v8help://1cv8/EnterprWorkingWithCatalogs"

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


воскресенье, 19 апреля 2015 г.

1c специалист задача 3.40

Решение:
Самая мутная задача пока из встреченных в сборнике. Основные претензии:

  1. ЗП начисляется еженедельно, а отчет за месяц. Также за базовый период для расчетов равен также месяцу. Отсюда основной вопрос какую периодичность выбрать день или месяц. Если бы в условии было сказано о том, что базу нужно брать за неделю тогда точно необходимо было бы брать = "день", в этом же случае решил выбрать периодичность = "месяц", но тогда встает другая проблема: Что делать если неделя лежит в разных месяцах?  Как мне показалось будет справедливо если начисления разделить пропорционально дням недели. То есть если в одном месяце 3 дня недели, то и начислено будет 3/7 от расчета за неделю. В связи с этим и решил все начисления поместить в ПВР "Основные начисления". 
  2. "Сотруднику предприятия выплачивается надбавка, рассчитываемая как общая сумма оплат пассажиров за прошлый месяц, полученная сотрудником, умноженная на определенный процент. Значение процента для надбавки может быть изменено только один раз в течение расчетного периода, но берется на начало периода расчетов."  Отсюда непонятно нужно ли контролировать изменение процента более 1 раза в неделю или нет.
  3. "В зависимости от общего пробега автомобиля с каждого сотрудника удерживается определенная сумма денег в качестве компенсации затрат на ремонт автомобиля".  Как то странно это условие согласуется с этим "Все сотрудники работают на автомобилях предприятия, поэтому возможен обмен автомобилями между водителями." То есть если за неделю водитель отработал на 5 разных автомобилях, то и удерживать с него нужно нужно за каждый авто? Это же маразм человек будет работать в минус. Решил так: Прямо в документе расчетчик вносит пробег авто и происходит расчет в зависимости от введенного значения.
  4. "Один календарный месяц в году сотрудникам предоставляется оплачиваемый отпуск". Работает же фантазия у составителей сборника.
Остается уповать на то, что сия задача не попадется на экзамене. иначе перспективы успешной сдачи будут весьма туманными.

Скачать решение задачи 3.40 (1с специалист по платформе)

понедельник, 6 апреля 2015 г.

1c специалист. Задача 2.28

Задача очень похожа на предыдущую (Задача 2.27).
Особенность заключается в отчете: комплекты нужно разделить на стандартные и нестандартные. Вопрос: По какому признаку это сделать?. Возможно зацепка в загадочной фразе "Считается, что на производстве из стремятся сделать максимальное количество стандартных комплектов из указанных комплектующих".
В общем решил так: Пользователь может в ТЧ документа изменять количество комплектующих. Если пользователь изменил количество (количество не равно количеству в регистре), то комплект нестандартный иначе стандартный.
Скачать решение 2.28

пятница, 3 апреля 2015 г.

Задачи по Бизнес-процессам 4.1-4.10

Задачи по Бизнес-процессам 4.1-4.10

Все задачи решаются по одному шаблону, поэтому ограничусь описанием решения задачи 4.3.
Остальные решаются аналогично. Пункты можно менять местами

Решение:
1) Добавляем подсистему БизнесПроцесс 
2) Добавляем справочник Должности. Добавляем 2 предопределенные должности: Кладовщик и Менеджер.

3) В регистр сведений адресации добавляем 2 измерения: Подразделение, Должность. 


4) Добавляем задачу: Задача1

5) Добавляем параметр сеанса «Текущий пользователь»  тип—  справочникссылка. физические лица
Чтобы его заполнить в модуле сеанса добавляем код:

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
ТекПользователь =Справочники.ФизическиеЛица.НайтиПоНаименованию(ИмяПользователя());
Если  ТекПользователь.Пустая() тогда
НовПользователь =Справочники.ФизическиеЛица.СоздатьЭлемент();
НовПользователь.Наименование =ИмяПользователя();
НовПользователь.Записать(); 
ТекПользователь= НовПользователь;
КонецЕсли;
ПараметрыСеанса.ТекущийИсполнитель=ТекПользователь;
КонецПроцедуры

6) Указываем у задачи регистр адресации, добавляем реквизиты адресации: Исполнитель, Должность, Подразделение. У каждого реквизиты указываем в свойствах на закладке адресации связь с регистром.



Указываем у задачи Основной реквизит адресации — Исполнитель
Указываем у задачи Текущий исполнитель — параметр сеанса ТекущийПользователь
7) Добавляем БизнесПроцесс — БизнесПроцесс1. БП связываем с задачей. 
У БП создаем форму. На форму размещаем карту и команду"Обновить". 
 В модуле формы создаем создаем процедуры:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбновитьСхему()
КонецПроцедуры
           
&НаСервере
Процедура ОбновитьСхему()
    БизнесПроцесс = РеквизитФормыВЗначение("Объект");
Карта = БизнесПроцесс.ПолучитьКартуМаршрута();
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
ОбновитьСхему()
КонецПроцедуры

Увы кнопка "Обновить" не работает в текущей версии платформы по причине ошибки в платформе, поэтому необходимо заново открывать форму чтобы увидеть состояние процесса.

8)У БП Продажи рисуем карту маршрута и указываем параметры на закладке адресация согласно заданию.
9)Создаем роль «ПолныеПрава» и  добавляем пользователей для отладки
Добавляем форму списка задачи(не основная) . Указываем для динамического списка источник по исполнителю. В параметрах списка указываем отбор.

10) Размещаем созданную форму на рабочий стол.
11) В режиме предприятие заполняем регистр адресации. Это самый важный этап.

понедельник, 30 марта 2015 г.

Задачи по Управляемым формам 5.1- 5.4

5.1) Необходимо добавить кнопку в форме списка документа, с помощью которой можно просмотреть какие движения делает текущий документ.


Реализация изображена с помощью скриншота




5.2) Задание про фотки сотрудников.

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


5.3)  В справочнике «Контрагенты» необходимо создать управляемую основную форму элемента, в которой пользователь сможет увидеть все движения с участием этого контрагента по регистру бухгалтерии. Доступ к этой информации должен осуществляться из панели навигации.


1)  Добавляем форму списка регистра бухгалтерии
2) Добавляем параметр "Контрагент"в эту форму.
3) Делаем произвольный запрос для динамического списка, в нем добавляем условие на субконто.
4) Устанавливаем параметр запроса динамического списка

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.Параметры.УстановитьЗначениеПараметра("Контрагент", Параметры.Контрагент);

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

5) Добавляем команду в справочник контрагенты





&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыФормы = Новый Структура("Контрагент", ПараметрКоманды );
ОткрытьФорму("РегистрБухгалтерии.Управленческий.Форма.ФормаСпискаОтборПОКонтрагенту", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры

Скачать решение задачи 5.3 (на базе задачи 2.25)

5.4) Организовать хранение продажных цен деталей в разрезе типов цен (оптовые, розничные и т.д.). В документе «Расходная накладная» необходимо иметь возможность указывать тип цен, по которым осуществляется отпуск товара. В форме выбора деталей, для каждой детали, дополнительно необходимо отображать ее цену (согласно указанному в документе типу цен), а также текущий остаток на складе. Склад, как и тип цен, указывается в шапке документа «Расходная накладная». При выборе детали в документ должна добавляться не только сама деталь, но и соответствующая цена


1) Добавляем в РН необходимые реквизиты (Склад, ВидЦены).
2) Добавляем на форму команду подбора.
Процедура Подбор(Команда)
Парам = Новый Структура("ДатаСреза, ВидЦены,Склад", Объект.Дата,Объект.ВидЦены,Объект.Склад); 
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", Парам, Элементы.СписокНоменклатуры);
КонецПроцедуры

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

5) Заполняем параметры в форме выбора.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.Параметры.УстановитьЗначениеПараметра("Склад", Параметры.Склад);
Список.Параметры.УстановитьЗначениеПараметра("ВидЦены", Параметры.ВидЦены);
Список.Параметры.УстановитьЗначениеПараметра("ДатаСреза", Параметры.ДатаСреза);
КонецПроцедуры

6) Обрабатываем выбор значения.

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекДанные = Элемент.ТекущиеДанные;
СтруктураЗначений = Новый Структура("Номенклатура, Цена", Значение, ТекДанные.Цена);
ОповеститьОВыборе(СтруктураЗначений);
КонецПроцедуры

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




четверг, 26 марта 2015 г.

1c специалист. Задача 2.27

Решение:
Для решения задачи задействуем следующие объекты:
1) ПВХ "Виды субконто". 

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

 5) Переходим к Приходной накладной.

При решении задания решил использовать вспомогательный регистр "Остатки номенклатуры" для демонстрации методики  оперативного проведения.
  • С помощью конструктора движений формируем обработку проведения.


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

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

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

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

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

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

6) Потребуется регистр сведений "Состав комплекта"
Добавляем проверку чтобы выполнялось условие задачи (Комплект не может быть частью другого комплекта)

&НаКлиенте
Процедура НоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение.ЭтоКомплект Тогда 
СтандартнаяОбработка = Ложь;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Комплект не может быть выбран";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры


7) Переходим к "Сборке".

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

&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьНаСервере();
КонецПроцедуры

Запретим пользователям в поле комплект выбирать не комплекты

&НаКлиенте
Процедура КомплектОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если Не ВыбранноеЗначение.ЭтоКомплект Тогда 
СтандартнаяОбработка = Ложь;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Необходимо выбрать комплект";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры


  • Пишем процедуру проведения.

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

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


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

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


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

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



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



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


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

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

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

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

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


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

СГРУППИРОВАТЬ ПО
УправленческийОборотыДтКт.СубконтоДт3,
УправленческийОборотыДтКт.СубконтоДт2


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