Содержание общего модуля «Работа с документами»:
Процедура РассчитатьСумму (СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Процедура РассчитатьСуммуБезНДС (СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.СуммаБезНДС = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Процедура РассчитатьСтоимость (СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Стоимость =СтрокаТабличнойЧасти.СуммаБезНДС + (СтрокаТабличнойЧасти.СуммаБезНДС * СтрокаТабличнойЧасти.Процент);
КонецПроцедуры
Содержание общего модуля «Работа со справочниками»:
Функция РоничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Цена;
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.НомерШтрихКодаТовара;
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.НомерКодаТовара;
КонецФункции
Функция ШтрихКод(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.ШтрихКод;
КонецФункции
Функция Артикул(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Артикул;
КонецФункции
Функция Цена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Цена;
КонецФункции
Функция Скидка(АктуальнаяДата, ЭлементПользователи) Экспорт
Отбор = Новый Структура("Пользователь", ЭлементПользователи);
ЗначенияРесурсов = РегистрыСведений.НакопительнаяСистема.ПолучитьПоследнее(АктуальнаяДата,Отбор);
Возврат ЗначенияРесурсов.Скидка;
КонецФункции
Содержание общего модуля «Скидка»:
Процедура РассчитатьСуммуСоСкидкой (СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Итого = СтрокаТабличнойЧасти.СуммаБезСкидки + (СтрокаТабличнойЧасти.СуммаБезСкидки * СтрокаТабличнойЧасти.Скидка);
КонецПроцедуры
Содержание общего модуля «Проведение расчетов»:
Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,
СписокСотрудников) Экспорт
Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;
Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,
| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.Начисления.ДанныеГрафика(Регистратор = &Регистратор И
| ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников))
| КАК НачисленияДанныеГрафика";
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
СтруктураНомер = Новый Структура("НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата.Сбросить();
Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
Если ВыборкаРезультата.Норма = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Вид расчета: Оклад – Нет рабочих дней в заданном периоде";
Сообщение.Сообщить();
ЗаписьРегистра.Результат = 0;
Иначе
ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма) * ВыборкаРезультата.Факт;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Выполнен расчет " + ЗаписьРегистра.Регистратор
+ " – " + ЗаписьРегистра.ВидРасчета + " – " +
ЗаписьРегистра.Сотрудник;
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияБазаНачисления.РезультатБаза КАК База,
| НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.Начисления.БазаНачисления(&ИзмеренияОсновного,
| &ИзмеренияБазового,, Регистратор =
| &Регистратор И ВидРасчета = &ВидРасчета И
| Сотрудник В (&СписокСотрудников))
| КАК НачисленияБазаНачисления";
Измер = Новый Массив(1);
Измер[0] = "Сотрудник";
Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);
Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);
Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);
ВыборкаРезультата = Запрос.Выполнить().Выбрать();
Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
СтруктураНомер = Новый Структура("НомерСтроки");
СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;
ВыборкаРезультата.Сбросить();
Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда
ЗаписьРегистра.Результат = ВыборкаРезультата.База * (10 / 100);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Выполнен расчет " + ЗаписьРегистра.Регистратор + " – " +
ЗаписьРегистра.ВидРасчета + " – " + ЗаписьРегистра.Сотрудник;
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
| НачисленияПерерасчет.ОбъектПерерасчета КАК ОбъектПерерасчета,
| НачисленияПерерасчет.Сотрудник
|ИЗ
| РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет
|ГДЕ
| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета
|ИТОГИ ПО
| ОбъектПерерасчета");
Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);
СписокСотрудников = Новый СписокЗначений;
ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоРегистратору.Следующий() Цикл
Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;
ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();
СписокСотрудников.Очистить();
Пока ВыборкаПоСотрудникам.Следующий() Цикл
СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);
КонецЦикла;
НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;
НаборЗаписей.Прочитать();
РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);
НаборЗаписей.Записать(, Истина);
НаборЗаписейПерерасчета =
РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();
НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;
НаборЗаписейПерерасчета.Записать();
КонецЦикла;
КонецПроцедуры
Содержание модуля объекта «Продажа»:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ПродажаТовары.Наименование КАК Наименование,
| СУММА(ПродажаТовары.Сумма) КАК СуммаВДокументе,
| СУММА(ПродажаТовары.Количество) КАК КоличествоВДокументе,
| ПродажаТовары.Наименование.ВидНомеклатура КАК ВидНоменклатуры
|ПОМЕСТИТЬ ТоварыДокумента
|ИЗ
| Документ.Продажа.Товары КАК ПродажаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Продажа КАК Продажа
| ПО ПродажаТовары.Ссылка = Продажа.Ссылка
|ГДЕ
| ПродажаТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПродажаТовары.Наименование.ВидНомеклатура,
| ПродажаТовары.Наименование";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество,
| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ТоварыДокумента.Наименование,
| ТоварыДокумента.ВидНоменклатуры,
| ТоварыДокумента.СуммаВДокументе,
| ТоварыДокумента.КоличествоВДокументе
|ИЗ
| ТоварыДокумента КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки
| ПО ТоварыДокумента.Наименование = ОстаткиМатериаловОстатки.Материал
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки КАК СтоимостьМатериаловОстатки
| ПО ТоварыДокумента.Наименование = СтоимостьМатериаловОстатки.Материал";
Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
Движения.СтоимостьМатериалов.Записать();
Движения.ОстаткиМатериалов.Записать();
Результат = Запрос2.Выполнить();
ТЗ=Результат.Выгрузить();
ТекСтрокаТовары = Результат.Выбрать();
Пока ТекСтрокаТовары.Следующий() Цикл
Если ТекСтрокаТовары.Количество = 0 Тогда
СтоимостьМатериала = 0;
Иначе
СтоимостьМатериала = ТекСтрокаТовары.Стоимость / ТекСтрокаТовары.Количество;
КонецЕсли;
если ТекСтрокаТовары.Наименование.ВидНомеклатура = Перечисления.ВидыНоменклатуры.Товар тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.ТоварыВРознице;
Движение.СчетКт = ПланыСчетов.Основной.Касса;
Движение.Период = Дата;
Движение.КоличествоДт = ТекСтрокаТовары.КоличествоВДокументе;
Движение.Сумма = ТекСтрокаТовары.СуммаВДокументе;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаТовары.Наименование;
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Наименование;
Движение.Кассир = Кассир;
Движение.Количество = ТекСтрокаТовары.КоличествоВДокументе;
Движение.Выручка = ТекСтрокаТовары.СуммаВДокументе;
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаТовары.Наименование;
Движение.Стоимость = ТекСтрокаТовары.СуммаВДокументе;
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаТовары.Наименование;
Движение.Количество = ТекСтрокаТовары.КоличествоВДокументе;
КонецЕсли;
КонецЦикла;
Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст = "ВЫБРАТЬ
| ОстаткиМатериаловОстатки.Материал,
| ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки(
|,
| Материал В
| (ВЫБРАТЬ
| ТоварыДокумента.Наименование
| ИЗ
| ТоварыДокумента)) КАК ОстаткиМатериаловОстатки
|ГДЕ
| ОстаткиМатериаловОстатки.КоличествоОстаток < 0";
Запрос3.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос3.Выполнить();
ТекСтрокаТовары = РезультатЗапроса.Выбрать();
Пока ТекСтрокаТовары.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает " + Строка(- ТекСтрокаТовары.КоличествоОстаток) +
" единиц материала """ + ТекСтрокаТовары.Материал + """";
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Содержание модуля менеджера «Продажа»:
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
Макет = Документы.Продажа.ПолучитьМакет("Печать");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Продажа.Дата,
| Продажа.Кассир,
| Продажа.Номер,
| Продажа.Склад,
| Продажа.ПереченьНоменклатуры.(
| НомерСтроки,
| Номеклатура,
| Количество,
| Цена,
| Сумма
|)
|ИЗ
| Документ.Продажа КАК Продажа
|ГДЕ
| Продажа.Ссылка В (&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьПереченьНоменклатурыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");
ОбластьПереченьНоменклатуры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");
ОбластьИтог = Макет.ПолучитьОбласть("Всего");
ТабДок.Очистить();
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаголовок);
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьПереченьНоменклатурыШапка);
ВыборкаПереченьНоменклатуры = Выборка.ПереченьНоменклатуры.Выбрать();
СуммаИтог = 0;
Пока ВыборкаПереченьНоменклатуры.Следующий() Цикл
ОбластьПереченьНоменклатуры.Параметры.Заполнить(ВыборкаПереченьНоменклатуры);
ТабДок.Вывести(ОбластьПереченьНоменклатуры, ВыборкаПереченьНоменклатуры.Уровень());
СуммаИтог = СуммаИтог + ВыборкаПереченьНоменклатуры.Сумма;
КонецЦикла;
ОбластьИтог.Параметры.ВсегоПоДокументу = СуммаИтог;
ТабДок.Вывести(ОбластьИтог);
ВставлятьРазделительСтраниц = Истина;
КонецЦикла;
//}}
КонецПроцедуры
Содержание модуля объекта «Приходная накладная»:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
Для Каждого ТекСтрокаСодержание Из Содержание Цикл
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаСодержание.Наименование;
Движение.Стоимость = ТекСтрокаСодержание.СуммаБезНДС;
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаСодержание.Наименование;
Движение.Количество = ТекСтрокаСодержание.Количество;
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.Товары;
Движение.СчетКт = ПланыСчетов.Основной.РасчетыСПоставщиками;
Движение.Период = Дата;
Движение.КоличествоДт = ТекСтрокаСодержание.Количество;
Движение.Сумма = ТекСтрокаСодержание.СуммаБезНДС;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаСодержание.Наименование;
КонецЦикла
КонецПроцедуры
Содержание модуля менеджера «Приходная накладная»:
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать1)
Макет = Документы.ПриходнаяНакладная.ПолучитьМакет("ТоварНаклад");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходнаяНакладная.Номер,
| ПриходнаяНакладная.Дата,
| ПриходнаяНакладная.Поставщик,
| ПриходнаяНакладная.Плательщик,
| ПриходнаяНакладная.Содержание.(
| Наименование,
| Код,
| Цена,
| Количество,
| СуммаБезНДС,
| Ставка,
| Процент,
| Стоимость
|)
|ИЗ
| Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
|ГДЕ
| ПриходнаяНакладная.Ссылка В(&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСодержаниеШапка = Макет.ПолучитьОбласть("СодержаниеШапка");
ОбластьСодержание = Макет.ПолучитьОбласть("Содержание");
ОбластьИтог = Макет.ПолучитьОбласть("Итого");
ТабДок.Очистить();
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаголовок);
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьСодержаниеШапка);
ВыборкаСодержание = Выборка.Содержание.Выбрать();
ЦенаИтог = 0;
СуммаИтог=0;
КоличествоИтог=0;
СтоимостьИтог=0;
Пока ВыборкаСодержание.Следующий() Цикл
ОбластьСодержание.Параметры.Заполнить(ВыборкаСодержание);
ТабДок.Вывести(ОбластьСодержание, ВыборкаСодержание.Уровень());
СуммаИтог=СуммаИтог + ВыборкаСодержание.СуммаБезНДС;
КоличествоИтог=КоличествоИтог + ВыборкаСодержание.Количество;
ЦенаИтог=ЦенаИтог + ВыборкаСодержание.Цена;
СтоимостьИтог=СтоимостьИтог + ВыборкаСодержание.Стоимость;
КонецЦикла;
ОбластьИтог.Параметры.ВсегоЦена = ЦенаИтог;
ОбластьИтог.Параметры.ВсегоКоличество = КоличествоИтог;
ОбластьИтог.Параметры.ВсегоСуммаБезНДС = СуммаИтог;
ОбластьИтог.Параметры.ВсегоСтоимость = СтоимостьИтог;
ТабДок.Вывести(ОбластьИтог);
ВставлятьРазделительСтраниц = Истина;
КонецЦикла;
//}}
КонецПроцедуры
Содержание модуля объекта «Расходная накладная»:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСодержание.Наименование,
| РасходнаяНакладнаяСодержание.Наименование.ВидНомеклатура КАК ВидНоменклатуры,
| СУММА(РасходнаяНакладнаяСодержание.Количество) КАК КоличествоВДокументе,
| СУММА(РасходнаяНакладнаяСодержание.Сумма) КАК СуммаВДокументе
|ПОМЕСТИТЬ ТоварыДокумента
|ИЗ
| Документ.РасходнаяНакладная.Содержание КАК РасходнаяНакладнаяСодержание
|ГДЕ
| РасходнаяНакладнаяСодержание.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСодержание.Наименование,
| РасходнаяНакладнаяСодержание.Наименование.ВидНомеклатура";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество,
| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ТоварыДокумента.Наименование,
| ТоварыДокумента.ВидНоменклатуры,
| ТоварыДокумента.СуммаВДокументе,
| ТоварыДокумента.КоличествоВДокументе
|ИЗ
| ТоварыДокумента КАК ТоварыДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки
| ПО ТоварыДокумента.Наименование = ОстаткиМатериаловОстатки.Материал
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки КАК СтоимостьМатериаловОстатки
| ПО ТоварыДокумента.Наименование = СтоимостьМатериаловОстатки.Материал";
Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
Движения.СтоимостьМатериалов.Записать();
Движения.ОстаткиМатериалов.Записать();
Результат = Запрос2.Выполнить();
ТЗ=Результат.Выгрузить();
ТекСтрокаТовары = Результат.Выбрать();
Пока ТекСтрокаТовары.Следующий() Цикл
Если ТекСтрокаТовары.Количество = 0 Тогда
СтоимостьМатериала = 0;
Иначе
СтоимостьМатериала = ТекСтрокаТовары.Стоимость / ТекСтрокаТовары.Количество;
КонецЕсли;
если ТекСтрокаТовары.Наименование.ВидНомеклатура = Перечисления.ВидыНоменклатуры.Материал тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.ТоварыВРознице;
Движение.СчетКт = ПланыСчетов.Основной.Касса;
Движение.Период = Дата;
Движение.КоличествоДт = ТекСтрокаТовары.КоличествоВДокументе;
Движение.Сумма = ТекСтрокаТовары.СуммаВДокументе;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаТовары.Наименование;
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Наименование;
Движение.Количество = ТекСтрокаТовары.КоличествоВДокументе;
Движение.Выручка = ТекСтрокаТовары.СуммаВДокументе;
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаТовары.Наименование;
Движение.Стоимость = ТекСтрокаТовары.СуммаВДокументе;
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаТовары.Наименование;
Движение.Количество = ТекСтрокаТовары.КоличествоВДокументе;
КонецЕсли;
КонецЦикла;
Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст = "ВЫБРАТЬ
| ОстаткиМатериаловОстатки.Материал,
| ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки(
|,
| Материал В
| (ВЫБРАТЬ
| ТоварыДокумента.Наименование
| ИЗ
| ТоварыДокумента)) КАК ОстаткиМатериаловОстатки
|ГДЕ
| ОстаткиМатериаловОстатки.КоличествоОстаток < 0";
РезультатЗапроса = Запрос3.Выполнить();
ТекСтрокаТовары = РезультатЗапроса.Выбрать();
Пока ТекСтрокаТовары.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает " + Строка(- ТекСтрокаТовары.КоличествоОстаток) +
" единиц материала """ + ТекСтрокаТовары.Материал + """";
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Содержание модуля менеджера документа «Расходная накладная»:
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать1)
Макет = Документы.РасходнаяНакладная.ПолучитьМакет("РасНаклад");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладная.Номер,
| РасходнаяНакладная.Дата,
| РасходнаяНакладная.Поставщик,
| РасходнаяНакладная.Плательщик,
| РасходнаяНакладная.Содержание.(
| НомерСтроки,
| Наименование,
| Код,
| Цена,
| Количество,
| Сумма
|)
|ИЗ
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Ссылка В(&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСодержаниеШапка = Макет.ПолучитьОбласть("СодержаниеШапка");
ОбластьСодержание = Макет.ПолучитьОбласть("Содержание");
ОбластьИтог = Макет.ПолучитьОбласть("Итого");
ТабДок.Очистить();
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаголовок);
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьСодержаниеШапка);
ВыборкаСодержание = Выборка.Содержание.Выбрать();
ЦенаИтог = 0;
СуммаИтог=0;
КоличествоИтог=0;
Пока ВыборкаСодержание.Следующий() Цикл
ОбластьСодержание.Параметры.Заполнить(ВыборкаСодержание);
ТабДок.Вывести(ОбластьСодержание, ВыборкаСодержание.Уровень());
СуммаИтог=СуммаИтог + ВыборкаСодержание.Сумма;
КоличествоИтог=КоличествоИтог + ВыборкаСодержание.Количество;
ЦенаИтог=ЦенаИтог + ВыборкаСодержание.Цена;
КонецЦикла;
ОбластьИтог.Параметры.ВсегоЦена = ЦенаИтог;
ОбластьИтог.Параметры.ВсегоКоличество = КоличествоИтог;
ОбластьИтог.Параметры.ВсегоСумма = СуммаИтог;
ТабДок.Вывести(ОбластьИтог);
ВставлятьРазделительСтраниц = Истина;
КонецЦикла;
//}}
КонецПроцедуры
Содержание модуля объекта документа «Акт списания товаров»:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Движения.СтоимостьМатериалов.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
Для Каждого ТекСтрокаСодержание Из Содержание Цикл
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаСодержание.Наименование;
Движение.Стоимость = ТекСтрокаСодержание.Сумма;
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаСодержание.Наименование;
Движение.Количество = ТекСтрокаСодержание.Количество;
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.РасходыНаПродажу;
Движение.СчетКт = ПланыСчетов.Основной.Товары;
Движение.Период = Дата;
Движение.КоличествоДт = ТекСтрокаСодержание.Количество;
Движение.КоличествоКт = ТекСтрокаСодержание.Количество;
Движение.Сумма = ТекСтрокаСодержание.Сумма;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаСодержание.Наименование;
КонецЦикла;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
// Заполнение шапки
Организация = ДанныеЗаполнения.Плательщик;
Для Каждого ТекСтрокаСодержание Из ДанныеЗаполнения.Содержание Цикл
НоваяСтрока = Содержание.Добавить();
НоваяСтрока.Код = ТекСтрокаСодержание.Код;
НоваяСтрока.Количество = ТекСтрокаСодержание.Количество;
НоваяСтрока.Наименование = ТекСтрокаСодержание.Наименование;
НоваяСтрока.Сумма = ТекСтрокаСодержание.СуммаБезНДС;
НоваяСтрока.Цена = ТекСтрокаСодержание.Цена;
КонецЦикла;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Продажа") Тогда
// Заполнение шапки
Для Каждого ТекСтрокаРасчет Из ДанныеЗаполнения.Расчет Цикл
НоваяСтрока = Содержание.Добавить();
НоваяСтрока.Сумма = ТекСтрокаРасчет.СуммаБезСкидки;
КонецЦикла;
Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = Содержание.Добавить();
НоваяСтрока.Количество = ТекСтрокаТовары.Количество;
НоваяСтрока.Наименование = ТекСтрокаТовары.Наименование;
НоваяСтрока.Код = ТекСтрокаТовары.Номер;
НоваяСтрока.Цена = ТекСтрокаТовары.Цена;
КонецЦикла;
КонецЕсли;
//}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры
Содержание модуля менеджера документа «Акт о списании товаров»
Процедура Печать(ТабДок, Ссылка) Экспорт
//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать1)
Макет = Документы.АктОСписанииТовара.ПолучитьМакет("Акт");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АктОСписанииТовара.Номер,
| АктОСписанииТовара.Дата,
| АктОСписанииТовара.Содержание.(
| НомерСтроки,
| Наименование,
| Артикул,
| Цена,
| Количество,
| Сумма,
| ПричинаСписания
|),
| АктОСписанииТовара.Организация,
| АктОСписанииТовара.ФИО,
| АктОСписанииТовара.Должность
|ИЗ
| Документ.АктОСписанииТовара КАК АктОСписанииТовара
|ГДЕ
| АктОСписанииТовара.Ссылка В(&Ссылка)";
Запрос.Параметры.Вставить("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСодержаниеШапка = Макет.ПолучитьОбласть("СодержаниеШапка");
ОбластьСодержание = Макет.ПолучитьОбласть("Содержание");
ОбластьИтог = Макет.ПолучитьОбласть("Итого");
ТабДок.Очистить();
ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьЗаголовок);
Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьСодержаниеШапка);
ВыборкаСодержание = Выборка.Содержание.Выбрать();
ЦенаИтог = 0;
СуммаИтог=0;
КоличествоИтог=0;
Пока ВыборкаСодержание.Следующий() Цикл
ОбластьСодержание.Параметры.Заполнить(ВыборкаСодержание);
ТабДок.Вывести(ОбластьСодержание, ВыборкаСодержание.Уровень());
СуммаИтог=СуммаИтог + ВыборкаСодержание.Сумма;
КоличествоИтог=КоличествоИтог + ВыборкаСодержание.Количество;
ЦенаИтог=ЦенаИтог + ВыборкаСодержание.Цена;
КонецЦикла;
ОбластьИтог.Параметры.ВсегоЦена = ЦенаИтог;
ОбластьИтог.Параметры.ВсегоКоличество = КоличествоИтог;
ОбластьИтог.Параметры.ВсегоСумма = СуммаИтог;
ТабДок.Вывести(ОбластьИтог);
ВставлятьРазделительСтраниц = Истина;
КонецЦикла;
//}}
КонецПроцедуры
Содержание модуля объекта документа «Начисления сотрудникам»:
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр Начисления
Движения.Начисления.Записывать = Истина;
Для Каждого ТекСтрокаНачисления Из Начисления Цикл
Движение = Движения.Начисления.Добавить();
Движение.Сторно = Ложь;
Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Движение.ПериодРегистрации = Дата;
Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.БазовыйПериодКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;
Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы;
Движение.ИсходныеДанные = ТекСтрокаНачисления.Начислено;
КонецЦикла;
Движения.Начисления.Записать();
Запрос = Новый Запрос("ВЫБРАТЬ
| НачисленияСотрудникамНачисления.Сотрудник КАК Сотрудник
|ИЗ
| Документ.НачисленияСотрудникам.Начисления КАК НачисленияСотрудникамНачисления
|ГДЕ
| НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");
Запрос.УстановитьПараметр("ТекущийДокумент",Ссылка);
ТаблЗнач = Запрос.Выполнить().Выгрузить();
МассивСотрудников = ТаблЗнач.ВыгрузитьКолонку("Сотрудник");
ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления,ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников);
Движения.Начисления.Записать(, Истина);
ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, МассивСотрудников);
Движения.Начисления.Записать(, Истина);
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Содержание запроса в отчете «Материалы»:
ВЫБРАТЬ
ОстаткиМатериаловОстаткиИОбороты.Материал,
ОстаткиМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток,
ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход,
ОстаткиМатериаловОстаткиИОбороты.КоличествоРасход,
ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты КАК ОстаткиМатериаловОстаткиИОбороты
Содержание запроса в отчете «Реестр документов оказание услуги»:
ВЫБРАТЬ
Продажа.Ссылка КАК Документ,
Продажа.Склад,
Продажа.Кассир
ИЗ
Документ.Продажа КАК Продажа
УПОРЯДОЧИТЬ ПО
Документ
Содержание запроса в отчете «Выручка»:
ВЫБРАТЬ
ПродажиОбороты.Период,
ПродажиОбороты.Кассир,
ПродажиОбороты.ВыручкаОборот КАК Выручка
ИЗ
РегистрНакопления.Продажи.Обороты(,, День,) КАК ПродажиОбороты
Содержание запроса в отчете «Универсальный»: