diff --git a/diploma-c-howto-accounting.md b/diploma-c-howto-accounting.md index ea5907b..34c7e28 100644 --- a/diploma-c-howto-accounting.md +++ b/diploma-c-howto-accounting.md @@ -32,7 +32,7 @@ * С корреспонденцией * С ресурсами: * **Сумма** (ОпределяемыйТип.Сумма) - * **Количество** (ОпределяемыйТип.Количество) - с признаком учета **Количественный** + * **Количество** (ОпределяемыйТип.Количество) - с признаком учета **Количественный** и со снятым флажком **Балансовый** * В регистраторы добавить документы: * **ПоступлениеТоваровИУслуг** * **РеализацияТоваровИУслуг** @@ -45,7 +45,7 @@ 5. Доработать обработчик проведения документа **РеализацияТоваровИУслуг**: * Формировать движение Дт **РасчетыСПокупателями** с заполнением субконто Контрагенты - Кт **Доходы** на общую сумму продажи (по всем строкам). - * Для строк с номенклатурой вида Товар формировать движение Дт **Расходы** - Кт **Товары** с заполнением субконто Номенклатура на сумму себестоимости списанного товара. Себестоимость должна рассчитываться по данным регистра бухгалтерии, а не по данным регистра накопления **Товары**. Данные регистра бухгалтерии нужно получать запросом к виртуальной таблице **РегистрБухгалтерии.Управленческий.Остатки** на МоментВремени() проводимого документа. + * Для строк с номенклатурой вида Товар формировать движение Дт **Расходы** - Кт **Товары** с заполнением субконто Номенклатура на сумму себестоимости списанного товара. Себестоимость должна рассчитываться по данным регистра бухгалтерии, а не по данным регистра накопления **Товары**. Данные регистра бухгалтерии нужно получать запросом к виртуальной таблице **РегистрБухгалтерии.Управленческий.Остатки** на МоментВремени() проводимого документа. При списании необходимо проверять, что количества товара достаточно для списания. 6. Доработать документ **ПоступлениеДенежныхСредств**: * Тип реквизита **Плательщик** сделать составным и расширить его типом **СправочникСсылка.Сотрудники**. diff --git a/diploma-c-howto-salary.md b/diploma-c-howto-salary.md index 5091a07..0ef0a00 100644 --- a/diploma-c-howto-salary.md +++ b/diploma-c-howto-salary.md @@ -39,23 +39,20 @@ * Создать для него понятную форму документа. * На закладке "Движения" сделать его регистратором для регистра расчета **Зарплата** и для регистра бухгалтерии **Управленческий** * В обработке проведения: - * Запросом выбрать оклады (реквизит **Оклад** из справочника **Сотрудники**) по сотрудникам из табличной части. Проще всего передать в запрос массив сотрудников, выгруженный из табличной части методом **ВыгрузитьКолонку**. * Записать движения, пока без сумм, по регистру расчета **Зарплата**. При этом: * В качестве периода регистрации указать дату документа, а в качестве периода действия - начало и конец месяца даты **ЗаМесяц**. * В качестве вида расчета указать предопределенный ПланыВидовРасчета.Начисления.ОплатаПоОкладу. - * Записав движения, обойти их повторно и для каждой записи рассчитать сумму оплаты по окладу. При этом: - * Оклад определить, найдя сотрудника в ранее выбранных данных. - * Факт и норму определить вызовом метода **ПолучитьДанныеГрафика**, а сумму - умножением оклада на частное деления факта на норму: + * После записи движений документа, выполнить запрос к ним, в запросе: + * Получить оклад для каждого сотрудника. + * Получить факт и норму из соответствующей виртуальной таблицы регистра расчета. + * Получить номер строки движений для последующего обращения к нужному. + * Обойти результат запроса, на каждой итерации цикла выполнив расчет сумму путем умножения оклада на частное деления факта на норму: ```bsl - ТаблицаНорма = Движение.ПолучитьДанныеГрафика( - ВидПериодаРегистраРасчета.ПериодДействия); - Норма = ТаблицаНорма[0].Рабочий; - ТаблицаФакт = Движение.ПолучитьДанныеГрафика( - ВидПериодаРегистраРасчета.ФактическийПериодДействия); - Факт = ТаблицаФакт[0].Рабочий; - Движение.Сумма = ?(Норма = 0, 0, Оклад * Факт / Норма); - + Пока Выборка.Следующий() Цикл + Движение = Движения.Зарплата[Выборка.НомерСтроки - 1]; + Движение.Сумма = Выборка.Оклад * Выборка.Факт / Выборка.План; + КонецЦикла; ``` * Определив сумму, сформировать парное движение на такую же сумму по регистру бухгалтерии **Управленческий** в Дт счета **Расходы** и в Кт счета **РасчетыССотрудникми**, заполнив субконто **Сотрудник**. @@ -74,39 +71,13 @@ * Записать движения, пока без сумм, по регистру расчета **Зарплата**. При этом: * В качестве периода регистрации указать дату документа, а в качестве периода действия и базового периода действия - начало и конец месяца даты **ЗаМесяц**. * В качестве вида расчета указать предопределенный ПланыВидовРасчета.Начисления.ПремияПроцентом. - * Записав движения, получить базу запросом: - -```bsl - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ЗарплатаБазаЗарплата.Сотрудник КАК Сотрудник, - | ЗарплатаБазаЗарплата.СуммаБаза КАК СуммаБаза - |ИЗ - | РегистрРасчета.Зарплата.БазаЗарплата( - | &Измерения, - | &Измерения, - | , - | Регистратор = &Регистратор - | И ВидРасчета = &ВидРасчета) КАК ЗарплатаБазаЗарплата"); - Запрос.УстановитьПараметр("Регистратор", Ссылка); - Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.Начисления.ПремияПроцентом); - Измерения = Новый Массив; - Измерения.Добавить("Сотрудник"); - Запрос.УстановитьПараметр("Измерения", Измерения); - База = Запрос.Выполнить().Выгрузить(); -``` - - * Обойти движения повторно и для каждой записи рассчитать сумму премии процентом. При этом: - * Базу определить, найдя сотрудника в ранее выбранной таблице **База**. - * Сумму определить, умножив базу на процент премии и поделив на 100. + * Записав движения, получить базу запросом к соответствующей виртуальной таблице. + * Обойти результат запроса, на каждой итерации цикла выполнив расчет премии, умножив базу на процент премии и поделив на 100. ```bsl - Для Каждого Движение Из Движения.Зарплата Цикл - СтрокаБазы = База.Найти(Движение.Сотрудник); - Если СтрокаБазы = Неопределено Тогда - Продолжить; - КонецЕсли; - Движение.Сумма = СтрокаБазы.СуммаБаза * Процент / 100; + Пока Выборка.Следующий() Цикл + Движение = Движения.Зарплата[Выборка.НомерСтроки - 1]; + Движение.Сумма = Выборка.СуммаБаза * Процент / 100; КонецЦикла; ``` diff --git a/diploma-c-reqs.md b/diploma-c-reqs.md index c8ee9ca..683a003 100644 --- a/diploma-c-reqs.md +++ b/diploma-c-reqs.md @@ -1,4 +1,14 @@ -## Требования к результату +# Требования к результату + +## Технические требования + +* Программный код всех модулей должен быть оформлен в соответствии со стандартами разработки на платформе 1С:Предприятие по ссылке: https://its.1c.ru/db/v8std#content:456:hdoc + +* Недопустимо выполнять запросы в цикле, в том числе неявные при обращении через точку к реквизиту ссылки. То есть обращение `Строка.Номенклатура.ТипНоменклатуры` недопустимо. + +* При работе с регистрами расчета необходимо получать данные для расчета через виртуальные таблицы. Недопустимо использовать объектную модель для обращения к регистрам расчета. + +## Функциональные требования Выгрузка информационной базы (файл с расширением dt), включающий демоданные и конфигурацию с именем "УправлениеИТФирмой" из диплома блока Б, дополненную: @@ -35,7 +45,7 @@ * Для услуг - Дт **Расходы** - Кт **РасчетыСПоставщиками** с заполнением субконто Контрагенты на сумму закупки. * Документ **РеализацияТоваровИУслуг**: * Для всех строк - Дт **РасчетыСПокупателями** с заполнением субконто Контрагенты - Кт **Доходы** на сумму продажи. - * Для товаров - Дт **Расходы** - Кт **Товары** с заполнением субконто Номенклатура на сумму себестоимости списанного товара. Себестоимость должна рассчитываться по данным регистра бухгалтерии, а не по данным регистра накопления **Товары**. + * Для товаров - Дт **Расходы** - Кт **Товары** с заполнением субконто Номенклатура на сумму себестоимости списанного товара. Себестоимость должна рассчитываться по данным регистра бухгалтерии, а не по данным регистра накопления **Товары**. Недопустимо списание товара в минус. * Документ **ПоступлениеДенежныхСредств** (после расширения типа реквизита **Плательщик** типом **СправочникСсылка.Сотрудники**): * Для контрагентов - Дт **ДенежныеСредства** - Кт **РасчетыСПокупателями** с заполнением субконто **Контрагенты** на сумму платежа. * Для сотрудников - Дт **ДенежныеСредства** - Кт **РасчетыССотрудниками** с заполнением субконто **Сотрудники** на сумму платежа.