"Забыла , эта часть отчета откуда растут ноги.<br>Процедура Сформировать(ФлагЗакрытияФормы = 0)<br> Перем ДатаДляШапкиОтчета;<br><br> Расшифровка = СоздатьОбъект("СписокЗначений");<br> Расшифровка.Установить("Отчет", ?(ПустаяСтрока(РасположениеФайла()) = 1, "Дефицитка", РасположениеФайла()));<br> Расшифровка.Установить("ДатаКон", ДатаКон);<br> Расшифровка.Установить("ТаблицаПродукцииФормы", ТаблицаПродукцииФормы);<br> Расшифровка.Установить("ОпределениеКоличества", ОпределениеКоличества);<br> Расшифровка.Установить("ВыводПолуфабрикатов", ВыводПолуфабрикатов);<br> Расшифровка.Установить("ТолькоДефицит", ТолькоДефицит);<br> Расшифровка.Установить("ГруппироватьПоПродукции", ГруппироватьПоПродукции);<br><br> Расшифровка.Установить("СписокУсловие1", СписокУсловие1);<br> Расшифровка.Установить("СписокУсловие2", СписокУсловие2);<br> Расшифровка.Установить("СписокУсловие3", СписокУсловие3);<br><br> ТаблицаИспользованныхМатериалов = СоздатьОбъект("ТаблицаЗначений");<br> ТаблицаИспользованныхМатериалов.НоваяКолонка("Материал", "Справочник");<br> ТаблицаИспользованныхМатериалов.НоваяКолонка("Количество", "Число");<br><br> Если ДатаКон >= ПолучитьДатуТА() Тогда<br> ПериодЗапроса = """";<br> ДатаДляШапкиОтчета = Формат(ПолучитьДатуТА(), "Д ДДММГГГГ") + " " + ПолучитьВремяТА(,,);<br> Иначе<br> ДатаДляШапкиОтчета = ДатаКон;<br> ПериодЗапроса = "Период с ДатаКон по ДатаКон;";<br> КонецЕсли;<br><br> ТаблицаПродукцииОтчета = СоздатьОбъект("ТаблицаЗначений");<br> ТаблицаПродукцииОтчета.НоваяКолонка("Продукция", "Справочник");<br> ТаблицаПродукцииОтчета.НоваяКолонка("Количество", "Число");<br> ТаблицаПродукцииОтчета.НоваяКолонка("Спецификация");<br><br> Если ОпределениеКоличества = 1 Тогда // Указать в таблице<br> ТаблицаПродукцииФормы.Выгрузить(ТаблицаПродукцииОтчета);<br> Иначе<br> СписокПродукции = СоздатьОбъект("СписокЗначений");<br> ТаблицаПродукцииФормы.Выгрузить(СписокПродукции, , , "Продукция");<br><br> Запрос = СоздатьОбъект("Запрос");<br> Если ОпределениеКоличества = 2 Тогда // План выпуска<br> Текст = "<br> |" + ПериодЗапроса + "<br> |Без Итогов;<br> // |ВидМПЗ = регистр.МестаХранения.ВидМПЗ;<br> |Продукция = Регистр.План.Номенклатура,регистр.Заявки.Номенклатура;<br> |КолВып = Регистр.План.Количество;<br> |КолПартии = Регистр.Заявки.Количество;<br> |Функция КолВыпуск = КонОст(КолВып);<br> |Функция Расход = КонОст(КолПартии);<br> |Функция Расход1 = Расход(КолПартии);<br> // |Группировка Продукция без групп;<br> |<br> |Условие (Продукция в СписокПродукции);<br> |";<br> ИначеЕсли ОпределениеКоличества = 3 Тогда // Заявки минус остаток на складах<br> СписокВидовМПЗ = СоздатьОбъект("СписокЗначений");<br> СписокВидовМПЗ.ДобавитьЗначение(Перечисление.ВидыМПЗ.Продукция);<br> СписокВидовМПЗ.ДобавитьЗначение(Перечисление.ВидыМПЗ.Полуфабрикаты);<br><br> Текст = "<br> |" + ПериодЗапроса + "<br> |Без Итогов;<br> |<br> |Продукция = Регистр.Заявки.Номенклатура, Регистр.МестаХранения.МПЗ;<br> |КолОтг = Регистр.Заявки.Количество;<br> |КолОст = Регистр.МестаХранения.Количество;<br> |ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;<br> |<br> |Функция КолОтгрузка = КонОст(КолОтг);<br> |Функция КолОстаток = КонОст(КолОст);<br> |<br> |Группировка Продукция без групп;<br> |<br> |Условие (ВидМПЗ в СписокВидовМПЗ);<br> |Условие (Продукция в СписокПродукции);<br> |";<br> ИначеЕсли ОпределениеКоличества = 4 Тогда // Заявки минус резерв на складах<br> Текст = "<br> |" + ПериодЗапроса + "<br> |Без Итогов;<br> |<br> |Продукция = Регистр.Заявки.Номенклатура, Регистр.Резервы.Номенклатура;<br> |КолОтг = Регистр.Заявки.Количество;<br> |КолРез = Регистр.Резервы.Количество;<br> |<br> |Функция КолОтгрузка = КонОст(КолОтг);<br> |Функция КолРезерв = КонОст(КолРез);<br> |<br> |Группировка Продукция без групп;<br> |<br> |Условие (Продукция в СписокПродукции);<br> |";<br> Иначе<br> Предупреждение("Неверно установлен способ определения количества продукции.");<br> Возврат;<br> КонецЕсли;<br> Запрос.Выполнить(Текст);<br><br> // если состав продукции в таблице не указан<br> Если ТаблицаПродукцииФормы.КоличествоСтрок() = 0 Тогда<br> Пока Запрос.Группировка() = 1 Цикл<br> Если Запрос.Продукция.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар Тогда<br> Продолжить;<br> КонецЕсли;<br> Если ОпределениеКоличества = 2 Тогда // План выпуска<br> // если запрос.КолВыпуск> запрос.расход Тогда<br> Количество = Запрос.КолВыпуск-Запрос.Расход;<br> // Иначе Количество=Запрос.КолВыпуск;<br> // КонецЕсли;<br> ИначеЕсли ОпределениеКоличества = 3 Тогда // Заявки минус остаток на складах<br> Если Запрос.КолОтгрузка > Запрос.КолОстаток Тогда<br> Количество = Запрос.КолОтгрузка - Запрос.КолОстаток;<br> Иначе<br> Количество = Запрос.КолОтгрузка;<br> КонецЕсли;<br> ИначеЕсли ОпределениеКоличества = 4 Тогда // Заявки минус резерв на складах<br> Если Запрос.КолОтгрузка > Запрос.КолРезерв Тогда<br> Количество = Запрос.КолОтгрузка - Запрос.КолРезерв;<br> Иначе<br> Количество = Запрос.КолОтгрузка;<br> КонецЕсли;<br> КонецЕсли;<br> Если Количество = 0 Тогда<br> Продолжить;<br> КонецЕсли;<br><br> Если Количество <> 0 Тогда<br> ТаблицаПродукцииОтчета.НоваяСтрока();<br> ТаблицаПродукцииОтчета.Продукция = Запрос.Продукция;<br> ТаблицаПродукцииОтчета.Количество = Количество;<br> ТаблицаПродукцииОтчета.Спецификация = Запрос.Продукция.ОсновнаяСпецификация;<br> КонецЕсли;<br> КонецЦикла;<br><br> // если в таблице указан состав продукции<br> Иначе<br> ТаблицаПродукцииФормы.ВыбратьСтроки();<br> Пока ТаблицаПродукцииФормы.ПолучитьСтроку() = 1 Цикл<br> Продукция = ТаблицаПродукцииФормы.Продукция;<br> ТаблицаПродукцииОтчета.НоваяСтрока();<br> ТаблицаПродукцииОтчета.Продукция = Продукция;<br> ТаблицаПродукцииОтчета.Спецификация = ТаблицаПродукцииФормы.Спецификация;<br> Если Запрос.Получить(Продукция) = 0 Тогда<br> ТаблицаПродукцииОтчета.Количество = 0;<br> ИначеЕсли ОпределениеКоличества = 2 Тогда // План выпуска<br> ТаблицаПродукцииОтчета.Количество = Запрос.КолВыпуск;<br> ИначеЕсли ОпределениеКоличества = 3 Тогда // Заявки минус остаток на складах<br> Если Запрос.КолОтгрузка > Запрос.КолОстаток Тогда<br> ТаблицаПродукцииОтчета.Количество = Запрос.КолОтгрузка - Запрос.КолОстаток;<br> Иначе<br> ТаблицаПродукцииОтчета.Количество = Запрос.КолОтгрузка;<br> КонецЕсли;<br> ИначеЕсли ОпределениеКоличества = 4 Тогда // Заявки минус резерв на складах<br> Если Запрос.КолОтгрузка > Запрос.КолРезерв Тогда<br> ТаблицаПродукцииОтчета.Количество = Запрос.КолОтгрузка - Запрос.КолРезерв;<br> Иначе<br> ТаблицаПродукцииОтчета.Количество = Запрос.КолОтгрузка;<br> КонецЕсли;<br> КонецЕсли;<br> КонецЦикла;<br> КонецЕсли;<br> КонецЕсли;<br><br> Если (ТипЗначенияСтр(Таб) <> "Таблица") или (Обновить = 0) Тогда<br> Таб = СоздатьОбъект("Таблица");<br> Иначе<br> Таб.Очистить();<br> КонецЕсли;<br><br> Таб.ИсходнаяТаблица("Дефицитка");<br> Состояние("Заполнение выходной таблицы...");<br> Таб.ВывестиСекцию("Кнопки");<br><br> Если ОпределениеКоличества = 1 Тогда // Указать в таблице<br> Заголовок = "Количество продукции: Указано вручную.";<br> ИначеЕсли ОпределениеКоличества = 2 Тогда // План выпуска<br> Заголовок = "Количество продукции: План выпуска.";<br> ИначеЕсли ОпределениеКоличества = 3 Тогда // Заявки минус остаток на складах<br> Заголовок = "Количество продукции: Заявки минус остаток на складах.";<br> ИначеЕсли ОпределениеКоличества = 4 Тогда // Заявки минус резерв на складах<br> Заголовок = "Количество продукции: Заявки минус резерв на складах.";<br> КонецЕсли;<br> Если ВыводПолуфабрикатов = 1 Тогда<br> Заголовок = Заголовок + РазделительСтрок + "Полуфабрикаты: Выводятся полуфабрикаты.";<br> ИначеЕсли ВыводПолуфабрикатов = 2 Тогда<br> Заголовок = Заголовок + РазделительСтрок + "Полуфабрикаты: Выводятся входящие в их состав материалы.";<br> КонецЕсли;<br> Если ТолькоДефицит = 1 Тогда<br> Заголовок = Заголовок + РазделительСтрок + "Материалы: Выводятся только дефицитные материалы.";<br> Иначе<br> Заголовок = Заголовок + РазделительСтрок + "Материалы: Выводятся все необходимые материалы.";<br> КонецЕсли;<br><br> Заголовок = Заголовок + РазделительСтрок + "Выбранные условия: "; <br><br> ЗаголовокПоУсловиям(Заголовок, СписокУсловие1, "Места хранения");<br> ЗаголовокПоУсловиям(Заголовок, СписокУсловие2, "МПЗ");<br> ЗаголовокПоУсловиям(Заголовок, СписокУсловие3, "Владелец МПЗ");<br> <br> Если Прав(Заголовок, 19) = "Выбранные условия: " Тогда<br> Заголовок = Заголовок + "нет.";<br> Иначе<br> Заголовок = Заголовок + ".";<br> КонецЕсли;<br><br> Если ГруппироватьПоПродукции = 1 Тогда<br> ЗаголовокПервойКолонки = "Продукция / Материалы";<br> ЗаголовокТретьейКолонки = "Можно выпустить/" + РазделительСтрок + "Наличествует";<br> Иначе<br> ЗаголовокПервойКолонки = "Материалы";<br> ЗаголовокТретьейКолонки = "Наличествует";<br> КонецЕсли;<br> Таб.ВывестиСекцию("Заголовок");<br><br> РасшифровкаНаличествуетМат = СоздатьОбъект("СписокЗначений");<br> РасшифровкаНаличествуетМат.Установить("Отчет", "СкладскойУчетМПЗ");<br> <br> РасшифровкаНаличествуетМат.Установить("ДатаНач", ДатаКон);<br> РасшифровкаНаличествуетМат.Установить("ДатаКон", ДатаКон);<br> <br> РасшифровкаНаличествуетМат.Установить("МоноУсловие2", """");<br> <br> РасшифровкаНаличествуетМат.Установить("ФлажокУсловие1", 0);<br> РасшифровкаНаличествуетМат.Установить("ФлажокУсловие2", 0);<br> РасшифровкаНаличествуетМат.Установить("ФлажокУсловие3", 0);<br> РасшифровкаНаличествуетМат.Установить("ФлажокУсловие4", 0);<br> <br> РасшифровкаНаличествуетМат.Установить("СписокУсловие1", СоздатьОбъект("СписокЗначений"));<br> РасшифровкаНаличествуетМат.Установить("СписокУсловие2", СоздатьОбъект("СписокЗначений"));<br> РасшифровкаНаличествуетМат.Установить("СписокУсловие3", СоздатьОбъект("СписокЗначений"));<br> РасшифровкаНаличествуетМат.Установить("СписокУсловие4", СоздатьОбъект("СписокЗначений"));<br> <br> Группировки = СоздатьОбъект("СписокЗначений");<br> <br> Группировки.ДобавитьЗначение("""", "Вид МПЗ");<br> Группировки.ДобавитьЗначение("""", "Место хранения");<br> Группировки.ДобавитьЗначение("""", "МПЗ");<br> Группировки.ДобавитьЗначение("""", "Владелец");<br> Группировки.ДобавитьЗначение("""", "По документам");<br> <br> Группировки.Пометка(2, 1);<br> <br> РасшифровкаНаличествуетМат.Установить("Группировки", Группировки);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьНачОст", 0);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьПриход", 0);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьРасход", 0);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьКонОст", 1);<br> РасшифровкаНаличествуетМат.Установить("ВидОтчета",1);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьСвободныеОстатки",0);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьОтрицательныеОстатки",0);<br> РасшифровкаНаличествуетМат.Установить("ВыводитьОстаткиСЦенами",0);<br><br> ТаблицаМатериалов = СоздатьОбъект("ТаблицаЗначений");<br> ТаблицаМатериалов.НоваяКолонка("Материал", "Справочник");<br> ТаблицаМатериалов.НоваяКолонка("Требуется", "Число");<br> ТаблицаМатериалов.НоваяКолонка("Наличествует", "Число");<br> ТаблицаМатериалов.НоваяКолонка("Излишек", "Число");<br> ТаблицаМатериалов.НоваяКолонка("Процент", "Число");<br> ТаблицаМатериалов.НоваяКолонка("ВидЭлемента");<br> <br> Если ГруппироватьПоПродукции = 1 Тогда<br> Если ОпределениеКоличества <> 1 Тогда // Указать в таблице<br> РасшифровкаТребуетсяПрод = СоздатьОбъект("СписокЗначений");<br> <br> РасшифровкаТребуетсяПрод.Установить("ДатаНач", ДатаКон);<br> РасшифровкаТребуетсяПрод.Установить("ДатаКон", ДатаКон);<br> РасшифровкаТребуетсяПрод.Установить("ВыводитьКонОст", 1);<br> РасшифровкаТребуетсяПрод.Установить("ВыводитьКоличество", 1);<br> РасшифровкаТребуетсяПрод.Установить("ВыводитьРезерв", 1);<br> <br> Группировки = СоздатьОбъект("СписокЗначений");<br> Группировки.ДобавитьЗначение("""", "Номенклатура");<br> <br> СписокЗначений = СоздатьОбъект("СписокЗначений");<br> РасшифровкаТребуетсяПрод.Установить("СписокУсловие1", СписокЗначений);<br> РасшифровкаТребуетсяПрод.Установить("СписокУсловие2", СписокЗначений);<br> РасшифровкаТребуетсяПрод.Установить("СписокУсловие3", СписокЗначений);<br> РасшифровкаТребуетсяПрод.Установить("СписокУсловие4", СписокЗначений);<br> РасшифровкаТребуетсяПрод.Установить("СписокУсловие5", СписокЗначений);<br> РасшифровкаТребуетсяПрод.Установить("СписокУсловие6", СписокЗначений);<br> <br> Если ОпределениеКоличества = 2 Тогда // Заказы на производство<br> РасшифровкаТребуетсяПрод.Установить("Отчет", "Планы");<br> <br> Группировки.ДобавитьЗначение("""", "Заказ на пр-во");<br> Иначе // Заявки от покупателя<br> РасшифровкаТребуетсяПрод.Установить("Отчет", "Заявки");<br> <br> Группировки.ДобавитьЗначение("""", "Заявка");<br> КонецЕсли;<br> <br> Группировки.Пометка(1, 1);<br> Группировки.Пометка(2, 1);<br> РасшифровкаТребуетсяПрод.Установить("Группировки", Группировки);<br> РасшифровкаТребуетсяПрод.Установить("Группировки", Группировки);<br> КонецЕсли;<br><br> ТаблицаПродукцииОтчета.ВыбратьСтроки();<br> Пока ТаблицаПродукцииОтчета.ПолучитьСтроку() = 1 Цикл<br> Наимен = ТаблицаПродукцииОтчета.Продукция;<br> Если ОпределениеКоличества <> 1 Тогда // Указать в таблице<br> Если ОпределениеКоличества = 2 Тогда<br> РасшифровкаТребуетсяПрод.Установить("МоноУсловие1", Наимен);<br> ИначеЕсли (ОпределениеКоличества = 3) или (ОпределениеКоличества = 4) Тогда<br> РасшифровкаТребуетсяПрод.Установить("МоноУсловие3", Наимен);<br> КонецЕсли;<br> КонецЕсли;<br> Требуется = ТаблицаПродукцииОтчета.Количество;<br> ТаблицаМатериалов.УдалитьСтроки();<br> СформироватьТаблицуМатериалов(ТаблицаМатериалов, Наимен, ТаблицаПродукцииОтчета.Спецификация, Требуется, 1);<br> Если ТаблицаМатериалов.КоличествоСтрок() = 0 Тогда<br> Наличествует = Требуется;<br> Иначе<br> Норма = ТаблицаМатериалов.ПолучитьЗначение(1, "Требуется");<br> Есть = ТаблицаМатериалов.ПолучитьЗначение(1, "Наличествует");<br> НормаЕд = ?(Требуется = 0, 0, Норма/Требуется);<br> Наличествует = ?(НормаЕд = 0, 0, Есть/НормаЕд);<br> КонецЕсли;<br> Излишек = Наличествует - Требуется;<br> Процент = ?(Требуется = 0, 0, Излишек/Требуется*100);<br> Таб.ВывестиСекцию("Строка1");<br> Если ОпределениеКоличества = 1 Тогда // Указать в таблице<br> Таб.Область(Таб.ВысотаТаблицы(), 3).Расшифровка("""", 2);<br> КонецЕсли;<br><br> ВывестиМатериалы(ТаблицаМатериалов);<br> КонецЦикла;<br> Иначе<br> ТаблицаПродукцииОтчета.ВыбратьСтроки();<br> Пока ТаблицаПродукцииОтчета.ПолучитьСтроку() = 1 Цикл<br> Наимен = ТаблицаПродукцииОтчета.Продукция;<br> Требуется = ТаблицаПродукцииОтчета.Количество;<br> СформироватьТаблицуМатериалов(ТаблицаМатериалов, Наимен, ТаблицаПродукцииОтчета.Спецификация, Требуется, 0);<br> КонецЦикла;<br><br> ОбсчитатьТаблицуМатериалов(ТаблицаМатериалов);<br> ВывестиМатериалы(ТаблицаМатериалов);<br> КонецЕсли;<br> Таб.Область(Таб.ВысотаТаблицы(), 2, Таб.ВысотаТаблицы(), Таб.ШиринаТаблицы()).РамкаСнизу(4);<br><br> глПоказатьТаблицу(Таб, "Дефицитка", "Ведомость дефицита материалов и полуфабрикатов");<br><br> Если (ФлагЗакрытияФормы = 1) или (Обновить = 2) Тогда<br> СтрокаДействийФормы = "#Закрыть";<br> КонецЕсли;<br>КонецПроцедуры // Сформировать<br>"