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