SaveText.Ru

без отчетов
  1. 1. Создаем недостающие справочники. Должно получиться так
  2. (Валюты,
  3.  Номенклатура на закладке данные создать реквизит ВидНоменклатуры тип ПеречислениеСсылка.ВидыНоменклатуры,
  4.  Контрагенты,
  5.  (расчеты)ФизическиеЛица на закладке данные создать реквизит Стаж тип число 10.0,
  6.  (расчеты)Подразделения,
  7.  (оперучет)Склады,
  8.  (расчеты)График,
  9.  Должности).
  10.  
  11. 2. Добавляем регистры сведений. Должно получиться так
  12. --(оперучет)РегистрАдресации (на закладке данные добавляем Измерения Исполнитель тип справочник.ФизЛица, Подразделение тип СправочникСсылка.Подразделения, Должность тип СправочникСсылка.Должности,),
  13. --(-)КурсыВалют (на закладке данные добавляем Измерения Валюта тип СправочникСсылка.Валюта и Ресурс Курс тип число 5.2. неотриц.),
  14. --(расчеты)ГрафикРаботы (на закладке данные добавим Измерения Дата тип дата, и Ресурс Значение тип число 5.2. неотриц.),
  15. --(расчеты)СведенияОСотрудниках (на закладке Основные Переодичность В пределах дня, на закладке Данные добавляем Измерения Сотрудник тип СправочникСсылка.ФизЛица, Подразделение тип СправочникСсылка.Подразделения, и Ресурс Оклад тип число 10.2.неотриц. ),
  16. --(оперучет)УчетнаяПолитика(на закладке основные Переодичность в течение года, на закладке данные добавляем ресурс учетная политика, тип перечисления.учетнаяполитика),
  17. --(расчеты)ШкалаЗначенийПремии(на закладке данные добавляем измерение стаж и ресурс процентапремии тип число)).
  18.  
  19. 3. Добавляем регистры накопления должно полчиться так
  20. --(оперучет)ОстаткиНоменклатуры (На закладке данные добавим Измерения Номенклатура тип СправочникСсылка.Номенклатура, Склад тип СправочникСсылка.Склады, и Ресурс Количество тип число 10.0., На закладке Регистраторы ставим галочки Приходная и Расходная)
  21. --(оперучет)Себестоимость (На закладке Данные добавляем Измерения Номенклатура тип СправочникСсылка.Номенклатура, Партия тип ДокументСсылка.ПриходнаяНакладная, И Ресурсы Сумма тип 10.2., Количество тип 10.0. На заклдаке Регистраторы ставим галочки на Приходной и Расходной)
  22.  
  23. 4. (бухучет)Изменяем ПланСчетов Управленчиский
  24. --На закладке данные добавляем Признак учета Количественный тип булево
  25. --На закладке Субконто добавляем Признак учета субконто Суммовой тип булево
  26.  
  27. 5. (бухучет)Создаем РегистрБухгалтерии Хозрасчетный
  28. --Хозрасчетный (Основные - План счетов Управленческий. Данные Ресурсы - Сумма тип число 10.0., Количество тип число 10.0.. Регистраторы Приходная, Расходная, Операция).
  29.  
  30. 6. (расчеты)Создаем РегистрРасчета ОсновныеНачисления.
  31. --ОсновныеНачисления (На закладке Основные выбераем ПланВидовРасчета ОсновныеНачисления, ПериодДействия ставим галочку, График - ГрафикиРаботы, ЗначениеГрафика - Значение, ДатаГрафика - Дата, БазовыйПериод - ставим галочку, Переодичность - Месяц
  32. На закладке данные создаем Измерения Сотрудник тип СправочникСсылка.ФизЛица, создаем Ресурс Результат тип число 10.0., Реквизиты График тип СправочникССылка.График, и ПроцентПремии тип число 10.2.)
  33. На закладке Регистратоы ставим галочку НачислениеЗарплаты)
  34.  
  35. ПЛАНВИДОВХАРАКТЕРИСТИК
  36. СвойстваОбъектов тип значения характеристик (Строка)
  37. ВидыСубконто тип значения характеристик (СправочникСсылка.Номенклатура, Дата)
  38.  
  39.  
  40. 7. (оперучет)Изменяем документ ПриходнаяНакладная должно получиться так
  41. -- На закладке данные Реквизиты - СуммаПоДокументу тип число 12.2., Склад тип СправочникСсылка.Склады)
  42. -- Добавляем Табличные части СписокНоменклатуры, Добавляем Реквизиты к табличной части СписокНоменклатуры,
  43. Номенклатура - тип СправочникСсылка.Номенклатура
  44. Количество - тип число 10.0. неотриц.
  45. Цена - тип число 10.2. неотриц.
  46. Сумма - тип число 12.2. неотриц
  47. СрокГодности - тип дата
  48. -- На закладке Движения выбераем Проведение Разрешить, Оперативное проведение Разрешить, Удаление движений Удалять автоматически при отмене проведения.
  49. Выбераем Регистры накопления - ОстаткиНоменклатуры и Себестоимость, РегистрыБухгалтерии Хозрасчетный. Создаем конструктор движения.
  50. На закладке Формы создаем форму документа, в форме документа на закладке Реквизиты переносим Склад(ы) в командную панель.
  51. На закладке прочее переходим в модуль объекта.
  52. -- Создем Процедуру ОбработкаПрвоедения(Отказ, Режим)
  53. Создаем конструктор запроса, в Таблицы переносим ПриходнаяНакладная в Поле переносим Номенклатура, Количество, Сумма. На закладке группировка в групповое поле переносим Номенклатура, в Суммироемое поле переносим Количество и Сумма.
  54. На закладке Условие Создаем условие - 1) Номенклатура = Ссылка, 2) ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар).
  55. Нажимаем готово, получаем запрос.
  56. Должно получиться так
  57. (Запрос = Новый Запрос;
  58.         Запрос.Текст =
  59.                 "ВЫБРАТЬ
  60.                 |       ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
  61.                 |       СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
  62.                 |       СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
  63.                 |ИЗ
  64.                 |       Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
  65.                 |ГДЕ
  66.                 |       ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
  67.                 |       И ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
  68.                 |
  69.                 |СГРУППИРОВАТЬ ПО
  70.                 |       ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура";
  71.        
  72.         Запрос.УстановитьПараметр("Ссылка", Ссылка);)
  73. Выполняем запрос, РезультатЗапроса = Запрос.Выполнить();
  74.  
  75. ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  76.  
  77. Указываем платформе что по завершению проведения движения нужно записать в регистры.
  78. Движения.ОстаткиНоменклатуры.Записать = Истина;
  79. Движения.Себестоимость.Записывать = Истина;
  80.  
  81. Движения
  82. Пока.ВыборкаДетальныеЗаписи.Слудующий() Цикл
  83.         //Приход Остатки номенклатуры
  84.                 Движение = Движения.ОстаткиНоменклатуры.Добавить();
  85.                 Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
  86.                 Движение.Период = Дата;
  87.                 Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
  88.                 Движение.Склад = Склад;
  89.                 Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
  90.                
  91.         //Приход Себестоимость
  92.                 Движение = Движения.Себестоимость.Добавить();
  93.                 Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
  94.                 Движение.Период = Дата;
  95.                 Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
  96.                 Движение.Партия = Ссылка;
  97.                 Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
  98.                 Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
  99. КонецЦикла;
  100.  
  101.         // Регистр Хозрасчетный
  102.         Движения.Хозрасчетный.Записывать = Истина;
  103.        
  104.         // Сгруппируем таб. часть по номенклатуре и срокам годности
  105.  
  106. Создаем запрос.
  107. В Таблицы переносим ПриходнаНакладнаяСписокНоменклатуры, далее в поля добавляем Номенклатура, Количество, СрокГодности, Сумма.
  108. На закладке группировка в групповое поле переносим Номенклатура и СрокГодности, а в Суммироемое поле Количество и Сумма.
  109. На закладке условие создаем два условия 1) СписокНомеклатуры = Ссылка(убираем галочку с произвольное). 2) ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
  110. Получаем запрос.
  111.  
  112. Далее пишем код.
  113. Запрос.УстановитьПараметр("Ссылка", Ссылка);
  114.  
  115. РезультатЗапроса = Запрос.Выполнить();
  116.  
  117. ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  118.  
  119. Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  120. Движение = Движения.Хозрасчетный.Добавить();
  121.                 Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
  122.                 Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;
  123.                 Движение.Период = Дата;
  124.                 Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
  125.                 Движение.КоличествоДт = ВыборкаДетальныеЗаписи.Количество;
  126.                 Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Номенклатура;
  127.                 Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = ВыборкаДетальныеЗаписи.СрокГодности;
  128.                
  129.         КонецЦикла;
  130.  
  131. КонецПроцедуры
  132.  
  133. 8. (расчеты)Создаем документ НачислениеЗарплаты
  134. --На закладке данные создаем Табличную часть ОсновныеНачисления и реквизиты к ней Сотрудник тип СправочникСсылка.ФизЛица, График тип СправочникСсылка.График, Подразделения тип СправочникСсылка.Подразделения,
  135. ВидРасчет тип ПланВидовРасчетаСсылка.ОсновныеНачисления, ДатаНачала тип Дата, ДатаОкончания тип Дата.
  136. --На закладке Движения Разрешаем Провидение, Запрщеаем ОперативноеПровидение, И при Удаление движений удаляем автоматически при проведении.
  137. --На закладке Движения выбераем Регистры расчета ОсновныеНачисления, нажимаем КонструкторДвижения.
  138. Создаем Движение.
  139. --На закладке Формы создаем Форму документа из реквизита объект в командную панель переносим,(ОсновныеНачисления) точнее; НомерСтроки, Сотрудник, График, Подразделение, ВидРасчета, ДатаНачала, ДатаОкончания, Результат.
  140. --В Комндную панель добавляем кнопку Рассчитать в модуле создаем процедуру.
  141.  
  142. &НаКлиенте
  143. Процедура Рассчитать(Команда)
  144.  
  145.         РассчитатьНаСервере()
  146.  
  147. КонецПроцедуры
  148.  
  149. Также создаем процедуру НаСервере
  150. &НаСервере
  151. Процедура РассчитатьНаСервере()
  152.         Движения = РеквизитФормыВзначение("Объект").Движения;
  153. (И ПЕРЕНОСИМ НИЖЕ ДВИЖЕНИЕ КОТОРОЕ ПОЛУЧИТСЯ В МОДУЛЕ ОБЪЕКТА ПОСЛЕ КОНСТРУКТОРА ДВИЖЕНИЯ)
  154.  Движения.ОсновныеНачисления.Записывать = Истина;
  155.        
  156.         // сформируем записи регистра по данным документа начисления (то что ввел пользователь)
  157.         Для Каждого ТекСтрокаОсновныеНачисления Из Объект.ОсновныеНачисления Цикл
  158.                 Движение = Движения.ОсновныеНачисления.Добавить();
  159.                 Движение.Сторно = Ложь;
  160.                 Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
  161.                 Движение.ПериодДействияНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
  162.                 Движение.ПериодДействияКонец = ТекСтрокаОсновныеНачисления.ДатаОкончания;
  163.                 Движение.ПериодРегистрации = Объект.Дата;
  164.                 Движение.БазовыйПериодНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
  165.                 Движение.БазовыйПериодКонец = ТекСтрокаОсновныеНачисления.ДатаОкончания;
  166.                 Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
  167.                 Движение.График = ТекСтрокаОсновныеНачисления.График;
  168.         КонецЦикла;
  169.        
  170.         Движения.Записать();
  171.        
  172.        
  173.        
  174.         ОбщийМодуль1.Расчет(Объект.Дата, Объект.Ссылка, Движения);
  175.        
  176.        
  177. КонецПроцедуры
  178.  
  179. В модуле объекта должно получиться так.
  180.  
  181. Процедура ОбработкаПроведения(Отказ, Режим)
  182.         //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
  183.         //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
  184.  
  185.         // регистр ОсновныеНачисления
  186.         Движения.ОсновныеНачисления.Записывать = Истина;
  187.        
  188.         // сформируем записи регистра по данным документа начисления (то что ввел пользователь)
  189.         Для Каждого ТекСтрокаОсновныеНачисления Из ОсновныеНачисления Цикл
  190.                 Движение = Движения.ОсновныеНачисления.Добавить();
  191.                 Движение.Сторно = Ложь;
  192.                 Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
  193.                 Движение.ПериодДействияНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
  194.                 Движение.ПериодДействияКонец = ТекСтрокаОсновныеНачисления.ДатаОкончания;
  195.                 Движение.ПериодРегистрации = Дата;
  196.                 Движение.БазовыйПериодНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
  197.                 Движение.БазовыйПериодКонец = ТекСтрокаОсновныеНачисления.ДатаОкончания;
  198.                 Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
  199.                 Движение.График = ТекСтрокаОсновныеНачисления.График;
  200.         КонецЦикла;
  201.        
  202.         Движения.Записать();
  203.         //в виртуальных таблицах регистра расчета сформировались движения, теперь можно на их основании получить данные графика и базового периода
  204.  
  205. КонецПроцедуры
  206.  
  207. 9. (бухучет)Создаем документ Операции.
  208. -- На закладке Движения создаем движение с регистром бухгалтерии Хозрасчетный.
  209. -- На закладке Формы создаем Форму документа
  210. В Форме в командную панель переносим из Реквизиты, Движения, Хозрасчетный, все движения до СУММЫ.
  211.  
  212. 10. (оперучет)Создаем документ РасходнаяНакладная.
  213. --На закладке Данные добавляем Реквизиты, СуммаПоДокументу тип число 12.2, Склад тип СправочникСсылка.Склады.
  214. Добавляем Табличную часть СписокНоменклатуры и Реквизиты к ней, Номенклатура тиип СправочникСсылка.Номенклатура, Количество тип число 10.0, Цена тип число 10.2, Сумма тип число 12.2.
  215.  
  216. --На закладке Движения создаем движения для ОстаткиНоменклатуры, Себестоимость, Хозрасчетный.
  217. --На закладке Формы создаем Форму документа
  218. В командную панель добавляем СуммаПоДокументу, Склад и СписокНоменклатуры до Суммы(включительно).
  219.  
  220.  
  221. --В модуле объекта должно получиться так!!!
  222.  
  223. Процедура ОбработкаПроведения(Отказ, Режим)
  224.        
  225.         //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
  226.         //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
  227.        
  228.         #Область ОперУчет
  229.        
  230.         //указываем платформе что движения нужно записать в регистры при выходе из обработки проведения
  231.         Движения.ОстаткиНоменклатуры.Записывать = Истина;
  232.  
  233.         //группируем строки накладной по номенклатуре, чтобы исключить лишние записи в регистр, с отбором по виду номенклатуры.
  234.         Запрос = Новый Запрос;
  235.         МВТ = новый МенеджерВременныхТаблиц;
  236.         Запрос.МенеджерВременныхТаблиц = МВТ;
  237.         Запрос.Текст =
  238.                 "ВЫБРАТЬ
  239.                 |       РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
  240.                 |       СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
  241.                 |       СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
  242.                 |ПОМЕСТИТЬ Товары
  243.                 |ИЗ
  244.                 |       Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
  245.                 |ГДЕ
  246.                 |       РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
  247.                 |       И РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
  248.                 |
  249.                 |СГРУППИРОВАТЬ ПО
  250.                 |       РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
  251.                 |;
  252.                 |
  253.                 |////////////////////////////////////////////////////////////////////////////////
  254.                 |ВЫБРАТЬ
  255.                 |       Товары.Номенклатура,
  256.                 |       Товары.Количество,
  257.                 |       Товары.Сумма
  258.                 |ИЗ
  259.                 |       Товары КАК Товары";
  260.        
  261.         Запрос.УстановитьПараметр("ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Товар);
  262.         Запрос.УстановитьПараметр("Ссылка", Ссылка);
  263.        
  264.         РезультатЗапроса = Запрос.Выполнить();
  265.        
  266.         ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  267.        
  268.         // регистр ОстаткиНоменклатуры Расход
  269.        
  270.         //проводим контроль остатков по новой методике, т.к. чтение будет производиться после записи в регистр.
  271.         //1. формируем набор записей
  272.         Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  273.                
  274.                 Движение = Движения.ОстаткиНоменклатуры.Добавить();
  275.                 Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
  276.                 Движение.Период = Дата;
  277.                 Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
  278.                 Движение.Склад = Склад;
  279.                 Движение.Количество = ВыборкаДетальныеЗаписи.Количество;
  280.                
  281.         КонецЦикла;
  282.        
  283.         //2. запишем в регистр
  284.         Движения.Записать();
  285.                
  286.         //3. контроль остатков, платформа  сама установит исключительные блокировки по нужным измерениям
  287.         Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
  288.        
  289.         Запрос.Текст =
  290.                 "ВЫБРАТЬ
  291.                 |       ОстаткиНоменклатурыОстатки.Номенклатура,
  292.                 |       ПРЕДСТАВЛЕНИЕ(ОстаткиНоменклатурыОстатки.Номенклатура) КАК ПРЕДСТАВЛЕНИЕ,
  293.                 |       ОстаткиНоменклатурыОстатки.Склад,
  294.                 |       ОстаткиНоменклатурыОстатки.КоличествоОстаток
  295.                 |ИЗ
  296.                 |       РегистрНакопления.ОстаткиНоменклатуры.Остатки(
  297.                 |                       &Граница,
  298.                 |                       Склад = &Склад
  299.                 |                               И Номенклатура В
  300.                 |                                       (ВЫБРАТЬ
  301.                 |                                               Товары.Номенклатура
  302.                 |                                       ИЗ
  303.                 |                                               Товары)) КАК ОстаткиНоменклатурыОстатки
  304.                 |ГДЕ
  305.                 |       ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";
  306.        
  307.         // данные получаем с учетом движений документа
  308.         Запрос.УстановитьПараметр("Граница", Новый граница((МоментВремени())));
  309.         Запрос.УстановитьПараметр("Склад", Склад);
  310.         РезультатЗапроса = Запрос.Выполнить();
  311.        
  312.         ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  313.        
  314.         Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  315.                 Отказ = ИСТИНА;
  316.                 Сообщить("Нет в наличии "+ ВыборкаДетальныеЗаписи.ПРЕДСТАВЛЕНИЕ);
  317.         КонецЦикла;
  318.        
  319.         // регистр Себестоимость Расход
  320.         Если НЕ Отказ Тогда  //товар точно есть, можно рассчитывать и списывать себестоимость с регистра себестоимости
  321.                
  322.         ТекстЗапроса =
  323.                 "ВЫБРАТЬ
  324.                 |       Товары.Номенклатура КАК Номенклатура,
  325.                 |       Товары.Количество КАК КоличествоКСписанию,
  326.                 |       СебестоимостьОстатки.Партия,
  327.                 |       СебестоимостьОстатки.СуммаОстаток,
  328.                 |       СебестоимостьОстатки.КоличествоОстаток КАК КоличествоОстаток
  329.                 |ИЗ
  330.                 |       Товары КАК Товары
  331.                 |               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Себестоимость.Остатки(
  332.                 |                               &МоментВремени,
  333.                 |                               Номенклатура В
  334.                 |                                       (ВЫБРАТЬ
  335.                 |                                               ТОВАРЫ.Номенклатура
  336.                 |                                       ИЗ
  337.                 |                                               ТОВАРЫ)) КАК СебестоимостьОстатки
  338.                 |               ПО Товары.Номенклатура = СебестоимостьОстатки.Номенклатура
  339.                 |
  340.                 |УПОРЯДОЧИТЬ ПО
  341.                 |       СебестоимостьОстатки.Партия.МоментВремени УБЫВ
  342.                 |ИТОГИ
  343.                 |       МАКСИМУМ(КоличествоКСписанию)
  344.                 |ПО
  345.                 |       Номенклатура";
  346.        
  347.         МетодСписания = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(МоментВремени());
  348.        
  349.         //текст запроса (упорядочить по) различается для ФИФО и ЛИФО
  350.         Если МетодСписания.УчетнаяПолитика = Перечисления.УчетнаяПолитика.ФИФО Тогда
  351.                 ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"УБЫВ", "");
  352.         КонецЕсли;     
  353.        
  354.         //используем предыдущий запрос, т.к. в нем есть нужная временная таблица с товарами
  355.         Запрос.Текст =  ТекстЗапроса;
  356.         //данные о себестоимости берем без учета движений этого документа
  357.         Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
  358.        
  359.        
  360.        
  361. Блокировка = Новый БлокировкаДанных;
  362. ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Себестоимость");
  363. ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
  364. ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
  365. ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
  366. Блокировка.Заблокировать();
  367.        
  368.         РезультатЗапроса = Запрос.Выполнить();
  369.        
  370.         //обходим каждый товар табличной части и списываем его количество и стоимость по партиям
  371.         ВыборкаПоТоварам = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
  372.        
  373.         Пока ВыборкаПоТоварам.Следующий() Цикл
  374.                
  375.                 ОстатокКСписанию = ВыборкаПоТоварам.КоличествоКСписанию;
  376.                 ВыборкаПоПартиям = ВыборкаПоТоварам.Выбрать();
  377.                
  378.                 //обходим все остатки с партиями этого товара
  379.                 Пока ОстатокКСписанию > 0 И ВыборкаПоПартиям.Следующий() Цикл
  380.                         //списываем максимально возможное количество с каждой партиии
  381.                         Движение = Движения.Себестоимость.Добавить();
  382.                         Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
  383.                         Движение.Период = Дата;
  384.                         Движение.Номенклатура = ВыборкаПоПартиям.Номенклатура;
  385.                         Движение.Количество = МИН(ОстатокКСписанию, ВыборкаПоПартиям.КоличествоОстаток);
  386.                         Движение.Партия = ВыборкаПоПартиям.Партия;
  387.                         //проблема копеек
  388.                         Движение.Сумма = ?(Движение.Количество = ВыборкаПоПартиям.КоличествоОстаток, ВыборкаПоПартиям.СуммаОстаток,
  389.                                                                 Движение.Количество/ВыборкаПоПартиям.КоличествоОстаток * ВыборкаПоПартиям.СуммаОстаток);
  390.                         //
  391.                         ОстатокКСписанию = ОстатокКСписанию - Движение.Количество;
  392.                 КонецЦикла;
  393.        
  394.         КонецЦикла;
  395.        
  396. Движения.Себестоимость.Записывать = Истина;
  397.                
  398. КонецЕсли;
  399. #КонецОбласти      
  400.  
  401. #Область БухУчет
  402.         // регистр Хозрасчетный
  403.         //т.к. перед записью в регистр выполняется его чтение для определения остатков и их стоимости, то методика проведения - старая.   
  404.         //очистим старые движения, чтобы они не повлияли на выборку.
  405.         Движения.Хозрасчетный.Записать();
  406.         //указываем платформе на необходимость записать движения по выходу из процедуры проведения       
  407.         Движения.Хозрасчетный.Записывать = Истина;
  408.        
  409.         //установка блокировки данных регистра в старой методике делается вручную.
  410.         //Отбор по измерению счет = "Товары" и субконто = "Номенклатура" из табл. части накладной
  411.         Блокировка = Новый БлокировкаДанных;
  412.         ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Хозрасчетный");
  413.         ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары);
  414.         ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
  415.         ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
  416.         //блокируем все записи с видом субконто = номенклатура и значениями = номенклатуре из таблицы товаров накладной.
  417.         ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Номенклатура");
  418.         Блокировка.Заблокировать();
  419.        
  420.         // получение данных из регистра
  421.         // нужны остатки по кол-ву и сумме на счете Товары в разрезе номенклатуры, и остатки по количеству для каждой номенклатуры в разрезе сроков годности
  422.         // такие данные можно получить только через соединение двух запросов, т.к. на субконто 2 отключены суммовые итоги
  423.         Запрос = Новый Запрос;
  424.         Запрос.Текст =
  425.                 "ВЫБРАТЬ
  426.                 |       РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
  427.                 |       СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоПродажи,
  428.                 |       СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаПродажи
  429.                 |ПОМЕСТИТЬ Товары
  430.                 |ИЗ
  431.                 |       Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
  432.                 |ГДЕ
  433.                 |       РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
  434.                 |
  435.                 |СГРУППИРОВАТЬ ПО
  436.                 |       РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
  437.                 |;
  438.                 |
  439.                 |////////////////////////////////////////////////////////////////////////////////
  440.                 |ВЫБРАТЬ
  441.                 |       Товары.Номенклатура КАК Номенклатура,
  442.                 |       ХозрасчетныйОстатки1.Субконто2 КАК СрокГодности,
  443.                 |       ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток,
  444.                 |       Товары.КоличествоПродажи КАК КоличествоПродажи,
  445.                 |       Товары.СуммаПродажи КАК СуммаПродажи,
  446.                 |       ХозрасчетныйОстатки.КоличествоОстаток КАК ОстатокТовара,
  447.                 |       ХозрасчетныйОстатки1.КоличествоОстаток КАК ОстатокВПартии
  448.                 |ИЗ
  449.                 |       Товары КАК Товары
  450.                 |               ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
  451.                 |                               &МоментВремени,
  452.                 |                               Счет = &Счет,
  453.                 |                               &Субконто,
  454.                 |                               Субконто1 В
  455.                 |                                       (ВЫБРАТЬ
  456.                 |                                               Товары.Номенклатура
  457.                 |                                       ИЗ
  458.                 |                                               Товары КАК Товары)) КАК ХозрасчетныйОстатки
  459.                 |               ПО Товары.Номенклатура = ХозрасчетныйОстатки.Субконто1
  460.                 |               ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
  461.                 |                               &МоментВремени,
  462.                 |                               Счет = &Счет,
  463.                 |                               &Субконто,
  464.                 |                               Субконто1 В
  465.                 |                                       (ВЫБРАТЬ
  466.                 |                                               Товары.Номенклатура
  467.                 |                                       ИЗ
  468.                 |                                               Товары КАК Товары)) КАК ХозрасчетныйОстатки1
  469.                 |               ПО (Товары.Номенклатура = ХозрасчетныйОстатки.Субконто1)
  470.                 |
  471.                 |УПОРЯДОЧИТЬ ПО
  472.                 |       СрокГодности
  473.                 |ИТОГИ
  474.                 |       МАКСИМУМ(СуммаОстаток),
  475.                 |       МАКСИМУМ(КоличествоПродажи),
  476.                 |       МАКСИМУМ(СуммаПродажи),
  477.                 |       МАКСИМУМ(ОстатокТовара)
  478.                 |ПО
  479.                 |       Номенклатура";
  480.        
  481.         // остатки получаем на момент до проведения этого документа, т.к. в расх. накладной используется оперативное проведение
  482.         Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
  483.         Запрос.УстановитьПараметр("Ссылка", Ссылка);
  484.        
  485.         //задаем фиксированный порядок видов субконто
  486.         Субконто = новый массив;
  487.         Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура);
  488.         Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.СрокГодности);
  489.         Запрос.УстановитьПараметр("Субконто", Субконто);
  490.        
  491.         Запрос.УстановитьПараметр("Счет", ПланыСчетов.Управленческий.Товары);
  492.        
  493.         РезультатЗапроса = Запрос.Выполнить();
  494.        
  495.         ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
  496.        
  497.         Пока ВыборкаНоменклатура.Следующий() Цикл
  498.         //на уровне номенклатуры в целом контролируем остатки и делаем движения по продажам       
  499.                 ОстатокКСписанию = ВыборкаНоменклатура.КоличествоПродажи;
  500.                
  501.                 Если НЕ Отказ И ВыборкаНоменклатура.ОстатокТовара >= ОстатокКСписанию Тогда
  502.                 //контроль остатков пройден
  503.                 //проблема копеек. Если списывается последнее кол-во, то сумма к списанию не рассчитывается, а списывается целиком
  504.                 Себестоимость = ВыборкаНоменклатура.СуммаОстаток/ВыборкаНоменклатура.ОстатокТовара;
  505.                 СуммаСписано = 0;
  506.                
  507.                 ВыборкаСрокГодности = ВыборкаНоменклатура.Выбрать();
  508.                
  509.                 Пока ОстатокКСписанию > 0 И ВыборкаСрокГодности.Следующий() Цикл
  510.                        
  511.                         // списание по партиям (срокам годности)
  512.                         КолвоКСписанию = МИН(ОстатокКСписанию, ВыборкаСрокГодности.ОстатокВПартии);
  513.                        
  514.                         //проблема копеек, если это последнее кол-во на остатке, то списываем всю оставшуюся стоимость этого товара
  515.                         СебестоимостьСписания = ?(ОстатокКСписанию = ВыборкаСрокГодности.ОстатокВПартии,
  516.                                                 ВыборкаНоменклатура.СуммаОстаток - СуммаСписано,
  517.                                                 Себестоимость * КолвоКСписанию);
  518.                        
  519.                         Движение = Движения.Хозрасчетный.Добавить();
  520.                         Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
  521.                         Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
  522.                         //заполняем виды субконто (измерения) для счета Товары
  523.                         Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаНоменклатура.Номенклатура;
  524.                         Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = ВыборкаСрокГодности.СрокГодности;
  525.                         Движение.КоличествоКт = КолвоКСписанию;
  526.                         Движение.Период = Дата;
  527.                         Движение.Сумма = СебестоимостьСписания;
  528.                        
  529.                         ОстатокКСписанию = ОстатокКСписанию - КолвоКСписанию;
  530.                         // проблема копеек
  531.                         СуммаСписано = СуммаСписано + СебестоимостьСписания;
  532.                        
  533.                 //товар списан по партиям (срокам годности)   
  534.                 КонецЦикла;
  535.                        
  536.                 Иначе     
  537.                   Отказ = ИСТИНА;
  538.                   Сообщить("нет на остатке");
  539.                   Продолжить;
  540.           КонецЕсли;
  541.          
  542.                 Движение = Движения.Хозрасчетный.Добавить();
  543.                 Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
  544.                 Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
  545.                 Движение.Период = Дата;
  546.                 Движение.Сумма = ВыборкаНоменклатура.СуммаПродажи;
  547.                
  548.         КонецЦикла;
  549.  
  550. #КонецОбласти      
  551.  
  552. КонецПроцедуры
  553.  
  554. -----------------------------------------------------------------------------------------------------------------------------------------
  555.  
  556. 11. Создаем ОбщийМодуль (ОбщийМодуль1) в нем должно получиться так.
  557.  
  558. Процедура Расчет(Дата, Ссылка, Движения) ЭКСПОРТ
  559.        
  560.         Оклад = ПланыВидовРасчета.ОсновныеНачисления.Оклад;
  561.         Премия = ПланыВидовРасчета.ОсновныеНачисления.Премия;
  562.        
  563.         //1. расчет оклада
  564.         // для расчета нужны данные о фактически отработанных днях и плановом рабочем времени
  565.         // получим данные для расчета оклада из вирт. таблицы ДанныеГрафика, обязательно с отбором по регистратору
  566.         Запрос = Новый Запрос;
  567.         Запрос.Текст =
  568.                 "ВЫБРАТЬ
  569.                 |       ОсновныеНачисленияДанныеГрафика.Сотрудник,
  570.                 |       ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия, 0) КАК План,
  571.                 |       ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия, 0) КАК Факт,
  572.                 |       ОсновныеНачисленияДанныеГрафика.НомерСтроки
  573.                 |ПОМЕСТИТЬ ДанныеГрафика
  574.                 |ИЗ
  575.                 |       РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
  576.                 |                       Регистратор = &Ссылка
  577.                 |                               И ВидРасчета = &Оклад) КАК ОсновныеНачисленияДанныеГрафика
  578.                 |;
  579.                 |
  580.                 |////////////////////////////////////////////////////////////////////////////////
  581.                 |ВЫБРАТЬ
  582.                 |       ЕСТЬNULL(СведенияОСотрудникахСрезПоследних.Оклад,0) КАК Оклад,
  583.                 |       ДанныеГрафика.План,
  584.                 |       ДанныеГрафика.Факт,
  585.                 |       ДанныеГрафика.НомерСтроки
  586.                 |ИЗ
  587.                 |       ДанныеГрафика КАК ДанныеГрафика
  588.                 |               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках.СрезПоследних(
  589.                 |                               &НачалоПериода,
  590.                 |                               Сотрудник В
  591.                 |                                       (ВЫБРАТЬ
  592.                 |                                               ДанныеГрафика.Сотрудник
  593.                 |                                       ИЗ
  594.                 |                                               ДанныеГрафика КАК ДанныеГрафика)) КАК СведенияОСотрудникахСрезПоследних
  595.                 |               ПО ДанныеГрафика.Сотрудник = СведенияОСотрудникахСрезПоследних.Сотрудник";
  596.        
  597.         Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Дата));
  598.         Запрос.УстановитьПараметр("Оклад", Оклад);
  599.         Запрос.УстановитьПараметр("Ссылка", Ссылка);
  600.        
  601.         РезультатЗапроса = Запрос.Выполнить();
  602.        
  603.         ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  604.        
  605.         Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  606.                
  607.                 // по индексу находим нужную запись из набора движений
  608.                 СтрокаНабора = Движения.ОсновныеНачисления[ВыборкаДетальныеЗаписи.НомерСтроки-1];
  609.                 // рассчитаем результат по формуле вида расчета "Оклад"
  610.                 // и вносим изменение в найденную по индексу запись основной таблицы регистра расчета
  611.                
  612.                 СтрокаНабора.Результат = ?(ВыборкаДетальныеЗаписи.План = 0, 0,
  613.                 ВыборкаДетальныеЗаписи.Факт / ВыборкаДетальныеЗаписи.План * ВыборкаДетальныеЗаписи.Оклад);
  614.        
  615.         КонецЦикла;
  616.        
  617.         // обязательно запишем движения, т.к. они будут использоваться при расчете премии
  618.         Движения.ОсновныеНачисления.Записать(,,ЛОЖЬ);
  619.         //оптимизация - физическую таблицу фактических периодов не будем перезаписывать, она не изменилась, изменилась только основная таблица
  620.        
  621.        
  622.         //2. расчет премии.
  623.         // для расчета нужен базовый период оклада и начисленная сумма оклада
  624.         // данные получаем из виртуальной таблицы того регистра, в котором находится вид расчета Премия.
  625.         // а имя виртуальной таблицы должно содержать имя регистра, в котором находится Оклад.
  626.  
  627.         Запрос = Новый Запрос;
  628.         Запрос.Текст =
  629.                 "ВЫБРАТЬ
  630.                 |       ОсновныеНачисленияБазаОсновныеНачисления.РезультатБаза,
  631.                 |       ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки,
  632.                 |       ЕСТЬNULL(ШкалаЗначенийПремии.ПроцентПремии, 0) КАК ПроцентПремии
  633.                 |ПОМЕСТИТЬ ВТ
  634.                 |ИЗ
  635.                 |       РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(
  636.                 |                       &Измерения,
  637.                 |                       &Измерения,
  638.                 |                       ,
  639.                 |                       Регистратор = &Ссылка
  640.                 |                               И ВидРасчета = &Премия) КАК ОсновныеНачисленияБазаОсновныеНачисления
  641.                 |               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШкалаЗначенийПремии КАК ШкалаЗначенийПремии
  642.                 |               ПО ОсновныеНачисленияБазаОсновныеНачисления.Сотрудник.Стаж < ШкалаЗначенийПремии.Стаж
  643.                 |;
  644.                 |
  645.                 |////////////////////////////////////////////////////////////////////////////////
  646.                 |ВЫБРАТЬ
  647.                 |       ВТ.РезультатБаза КАК Оклад,
  648.                 |       ВТ.НомерСтроки,
  649.                 |       МИНИМУМ(ВТ.ПроцентПремии) КАК ПроцентПремии
  650.                 |ИЗ
  651.                 |       ВТ КАК ВТ
  652.                 |
  653.                 |СГРУППИРОВАТЬ ПО
  654.                 |       ВТ.РезультатБаза,
  655.                 |       ВТ.НомерСтроки";
  656.        
  657.         Запрос.УстановитьПараметр("Премия", Премия);
  658.         Запрос.УстановитьПараметр("Ссылка", Ссылка);
  659.         //обязательно указываем массив измерений, по которым делается отбор записей из вирт. таблицы База
  660.         Измерения = новый массив();
  661.         Измерения.Добавить("Сотрудник");     
  662.         Запрос.УстановитьПараметр("Измерения", Измерения);
  663.        
  664.         РезультатЗапроса = Запрос.Выполнить();
  665.        
  666.         ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
  667.        
  668.         Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  669.                
  670.                 // по индексу находим нужную запись из набора движений
  671.                 СтрокаНабора = Движения.ОсновныеНачисления[ВыборкаДетальныеЗаписи.НомерСтроки-1];
  672.                 // считаем результат по формуле вида расчета "Премия"
  673.                 // и вносим изменение в выбранную запись из основной таблицы регистра расчета
  674.                
  675.                 СтрокаНабора.Результат = ВыборкаДетальныеЗаписи.Оклад * ВыборкаДетальныеЗаписи.ПроцентПремии / 100;
  676.                 СтрокаНабора.ПроцентПремии = ВыборкаДетальныеЗаписи.ПроцентПремии;
  677.        
  678.         КонецЦикла;
  679.        
  680.         Движения.ОсновныеНачисления.Записать(,,ЛОЖЬ);
  681.  
  682.        
  683. КонецПроцедуры   
  684.  
  685. -------------------------------------------------------------------------------------------------------------------------------------
  686. 12. СОЗДАТЬ ПОЛНЫЕ ПРАВА
  687.  
  688. 13.(ОперУчет)Создать бизнес процесс (БП), Создать Задачи (ЗадачиИсполнителям)
  689. В БП создать ФормуБизнесПроцесса в модуле написать
  690. &НаСервере
  691. Процедура ПриЧтенииНаСервере(ТекущийОбъект)
  692.        
  693.         ПолеГрафическойСхемы = ТекущийОбъект.ПолучитьКартуМаршрута();
  694.        
  695. КонецПроцедуры
  696.  
  697. (Карта маршрута должна быть такой
  698. -На самом верху зеленый пятиугольник который показывает вниз(Стар)
  699. -Дальше Прямоугольник(Менеджер. ОтделПродаж. Заявка)
  700. -Красный треугольник показывает вниз
  701. -С одной стороны в прямоугольниках (Петров, Оплата), с другой (Кладовщик, Отгрузка)
  702. -Затем голубой треугольник показывает вверх
  703. -прямоугольник (Бухгалтер, Сверка)
  704. -Зеленый пятиугольник показывает наверх(Завершение)).
  705.  
  706. В ЗадачиИсполнителям на закладке Адресация создать три реквизита адресации, Исполнитель тип СправочникСсылка.ФизическиеЛица, Должность тип СправочникСсылка.Должности, Подразделение тип СправочникСсылка.Подразделения.
  707. Адресация: РегистрАдресации
  708. Основной реквизит адресации: Исполнитель
  709. Текущий исполнитель: ТекущийПользователь.
  710. На закладке формы создать ЗадачиТекПользователя
  711. Должно быть так.
  712. Список
  713.    Командная панель
  714.    Строка поиска
  715.    Состояние просмотра
  716.    Управление поиском
  717.    Номер
  718.    Наименование
  719.    Дата
  720.    Выполнение
  721.    БизнесПроцесс
  722.    ТочкаМаршрута
  723.  
  724. 1. Определяем минимально возможное количество регистров, их измерения и ресурсы.
  725.  Ключевой момент - себестоимость(сумма и кол-во) и остатки нужно списывать раздельно:
  726.  1.1. Остатки списываются только в разрезе складов (с контролем остатков). Создаем регистр остатков с измерениями Склад и Номенклатура
  727.   и ресурсом Количество. На этом регистре ведем учет остатков на складах.
  728.  1.2. Себестоимость списывается с регистра себестоимости в разрезе партий (без учета складов). Создаем регистр остатков с измерениями Партия и Номенклатура
  729.   и ресурсами Количество и Сумма. На этом регистре рассчитываем себестоимость. Себестоимость списываем по партиям в порядке согласно учетной политике.
  730. 2. Определяем методы проведения и контроля остатков.
  731.  2.1. Перед записью в регистр учета складских остатков чтение этого регистра не выполняется, поэтому можно использовать новую методику.
  732.   Контроль остатков выполняем после записи.
  733.  2.2. Перед записью в регистр себестоимости выполняем его чтение, поэтому необходимо использовать старую методику. Контроль остатков
  734.   выполняем в процессе списания (если остатка в партии не достаточно, берем следующую).
  735. 3. Формируем процедуры проведения и отчет.
  736.  
  737.  
  738.  
  739.  Определяем минимально необходимый состав используемых видов субконто.
  740.  Определяем структуру регистра бухгалтерии (измерения, субконто). Остатки регистра по всем измерениям должны закрываться в ноль.
  741.  Определяем состав счетов и заполняем их настройки в плане счетов.
  742.  Создаем процедуры проведения.
  743.  Создаем отчет.
  744.  
  745. 1. Присутствует аналитика учета товаров - срок годности. По ней нужно производить контроль остатков при партионном списании.
  746.    При этом итог по сумме на счете Товары в разрезе сроков годности не нужен, т.к. по условию себестоимость единицы товара
  747.     одинакова для всех его сроков годности и в расчете будет использоваться только сумма в разрезе номенклатуры.
  748.    По умолчанию суммовой учет ведется на всех субконто счета. Чтобы его отключить необходимо ввести признак учета субконто
  749.    Поэтому:
  750.    1.1. Добавим в план видов субконто новый вид субкнто "Срок годности", тип "Дата".
  751.         Добавим к счету "Товары" аналитики "Номенклатура" и "Срок годности".
  752.    1.2. Добавим к признакам учета плана счетов новый признак "Количественный".
  753.         Добавим в регистр бухгалтерии ресурс "Количество".
  754.         Т.к. остатки регистра по кол-ву нужны не на всех счетах, то используем признак учета ("Количественный"). Включим его на счете "Товары"
  755.         Т.к. учет по кол-ву не на всех счетах используется, то флаг "Балансовый" у этого ресурса снимаем.
  756.    1.3. Добавим к признакам учета субконто плана счетов новый признак "Суммовой" для возможности отключения суммового учета по субконто,
  757.         т.к. суммовой остаток не нужен по субконто "Срок годности" счета "Товары".
  758.         Отключим "Суммовой учет" для субконто "Срок годности" на счете "Товары" (иначе после списания по количеству на этом субконто
  759.          будет оставаться остаток по стоимости на разницу между суммой оприходования и суммой списания).
  760.         Добавим в регистр бухгалтерии ресурс "Сумма" и укажем его признак учета субконто "Суммовой".
  761. 2. На счетах "Поставщики" и "Покупатели" не обязательно добавлять субконто "Контрагент", учет по кол-ву также не нужен.
  762. 3. На активно/пассивном счете "Прибыли и убытки" учет по кол-ву не нужен.
  763. 4. Отчет строится по остаткам счета "Товары". Т.к. суммовые остатки по субконто "Срок годности" не ведутся, себестоимость каждой партии
  764.    нужно рассчитать по среднему.
  765.     Для этого берем остатки и сумму Товаров в целом (для получения средней себестоимости каждой единицы)
  766.      и соединяем с выборкой по остаткам товаров по срокам годности (партиям).
  767.    В вычисляемом поле рассчитываем себестоимость остатков по партии как  Количество Товары / Количество Партия * Сумма Товары
  768.    
  769.    
  770.  
  771.  
  772. 1. Определяем виды расчета и для каждого составляем формулу получения результата расчета.
  773.  Для каждого элемента формулы определяем или место его хранения (если он получается прямым чтением из базы) или
  774. способ его получения.
  775.  
  776. 1.1 Оклад.
  777. Результат = Фиксированный размер оклада / Кол-во рабочего времени (в днях) * Кол-во фактического времени (в днях).
  778. Размер оклада. Берем из периодического регистра сведений с измерением Сотрудник и ресурсом Сумма, т.к. по условию
  779.  требуется вести историю изменений (иначе можно было бы просто писать в реквизит справочника Сотрудники). Значение
  780.  получим или в запросе (срез последних) или через ПолучитьПоследнее
  781. Кол-во рабочих дней. Это вид времени "Рабочее" (плановое), оно всегда получается через данные графика.
  782. Кол-во отработанных дней. Это вид времени "Фактическое". Для его расчета по методу отклонений тоже используются
  783.  данные графика.
  784.  
  785. 2.1 Премия от оклада.
  786. Результат = Процент премии * результат начисления по окладу.
  787. Процент премии. Значение процента получаем из непериодического регистра сведений СтавкиЗаСтаж, а сам стаж из реквизита
  788.  сотрудника "Стаж".  
  789. Результат начисления по окладу. Т.к. оклад уже начислен, то результат начисления должен находиться в регистре расчета.
  790.  Для получения результата расчета оклада используется механизм расчета по базе. Для расчета по базе необходимо
  791.  знать базовый период. По условию это тот же период, в котором делается начисление премии.  
  792.  
  793. 2. Определяем последовательность получения результатов по видам расчета.
  794. По порядку проверяем все виды расчета. Если в формуле расчета не используется результат других видов расчета, его можно
  795. ставить первым.
  796.  Таким образом, приоритеты расчеты: Оклад = 1, Премия = 2 (т.к. использует результат расчета оклада).
  797.  
  798. 3. Определяем зависимости между полученными видами расчетов и необходимость учета по периоду действия.
  799. Заполняем таблицу по порядку установленных приоритетов.
  800. Вытесняющий - есть ли у этого вида расчета вытесняющие виды расчета ? Да, если такая возможность прямо
  801.  указана в условии задачи и в формуле расчета есть получение фактического времени из данных графика.
  802. Базовый - если в формуле расчета есть получение базы.
  803. Ведущий - если в условии используются перерасчеты.
  804. Учет по периоду действия - если в формуле расчета необходимо получать данные графика (присутствует рабочее время),
  805.  или вид расчета участвует в настройке вытесняющих видов расчета (сам вытесняет или его вытесняют другие виды расчета).
  806.  
  807.  
  808. Вид расчета                   Есть вытесняющий         Есть базовый         Ведущий          Учет по периоду действия
  809. ----------------------------------------------------------------------------------------------------
  810. Оклад                  нет                     нет                нет                             да
  811. Премия                               нет                     Оклад              нет               да
  812.  
  813.  
  814. 4. Переносим настройки в конфигурацию
  815. 4.1. Создаем предопределенные виды расчета в планах видов расчета в порядке их приоритетов.
  816.  На вкладке Расчет проставляем флажки согласно таблице: Используется период действия, Зависимость от базы и Базовые виды расчета.
  817.  В свойствах каждого вида расчета проставляем флажки для базовых, ведущих и вытесняющих видов расчета.
  818.  Если у видов расчета свойство "Учет по периоду действия" совпадает, их можно поместить в один план видов расчета.
  819. 4.2 Создаем регистры расчета.
  820.  Придерживаемся правила "один план видов расчета - один регистр".
  821.  Настройка по периоду действия и по базу будут такие же как в плане.
  822.  Периодичность - месяц, берем из условия "Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно".
  823.  Регистратор - документ "Начисление зарплаты".
  824.  
  825.  Т.к. используется период действия и в формулах есть получение данных графика, значит нужно указать график для регистра.
  826.   В качестве графика платформа требует использовать непериодический регистр сведений с минимум одним измерением типа Дата и
  827.  одним ресурсом типа Число. В задаче ведется учет только по кол-ву отработанных дней, поэтому у графика будет только
  828.  один ресурс - "Дней", в котором для каждой даты будет записано значение 0 или 1.
  829.   Указываем этот регистр (выбираем из состава конфигурации регистр "Графики работы").
  830.   Далее определяем, сколько разных графиков будет использоваться в задаче:  один, ограниченый перечень или неограниченый перечень.
  831.  Из условия следует, что количество графиков неограничено, поэтому добавляем в регистр сведений "Графики работы" еще одно измерение
  832.  "График" с типом Справочник "Графики". Добавим в него предопределенный элемент "Пятидневка".
  833.  
  834.  Определим структуру регистра: ресурсы, измерения и реквизиты.  
  835.  Всегда добавляем обязательный ресурс "Результат", в котором будем хранить результат расчета в рублях и копейках.
  836.  Т.к. используется график, то устанавливаем связь регистра расчета с регистром "Графики работы".
  837.  По условию для каждого сотрудника можно указать гарфик работы, и кол-во разных графиков неограничено.
  838.  Детализацию расчетов по графикам работы делать не принято, сумма рассчитывается в целом по сотруднику, поэтому указать график в
  839.   качестве измерения регистра будет не корректно. Поэтому добавляем в регистр расчета реквизит "График" и устанавливаем
  840.   по нему связь с регистром "Графики работы". Теперь при получении платформой данных графика значение этого реквизита будет
  841.   использоваться в качестве отбора по регистру сведений "Графики работы".
  842.  Далее смотрим какие данные нужно вывести в отчет. Трудовой стаж это реквизит справочника сотрудники, а вот Процент премии будет
  843.  получаться расчетным путем. Добавим его тоже в качестве реквизита для быстрого построения отчета без дополнительных соединений.
  844.    
  845.  Теперь определяем состав измерений. Всегда добавляем измерение "Сотрудник". Других измерений по этой задаче не требуется.  
  846.  
  847.  5. Расчет результата всегда выполняется при проведении документа Начисление зарплаты.
  848.  Создаем движения этого документа, но предварительно изменим набор его реквизитов.
  849.  Т.к. в расчетах используются разные графики, добавим в табличную часть реквизит График.
  850.  Поменяем тип значения для вида расчета (вместо составного укажем только Основные начисления).
  851.  Оперативное проведение запрещаем, т.к. движения будущей датой разрешены.
  852.  Методика проведения документа начисления зарплаты состоит из двух этапов, т.к. при расчете результата используются предыдущие записи.
  853.  
  854.  5.1. Конструктором формируем и записываем набор движений по регистру расчета на основании данных табличной части документа.
  855.  5.2. Получаем запросом все необходимые данные для расчета результата и помещаем в таблицу.
  856.  5.3. Затем обходим в цикле записи из набора движений и отдельно по каждому виду расчета делаем расчет результата.
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  

Share with your friends:

Print