7.7 добавить на кнопку ещё один отчёт

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем ProfforG, 18 фев 2013.

  1. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Всем доброго времени суток. проблема в следующем, не могу понять где добавить вывод последовательно ещё одного отчёта, при нажатии на кнопку "печать."

    код вот:

    Код:
    #ЗагрузитьИзФайла  KVI\PRG_P\МФ_ИзменениеКачества.TXT
    Перем СписокДействий;
    Перем ТекВидМПЗ;
    Перем СписокВидовМПЗ;
    Перем НачальнаяДатаДокумента;
    Перем ТаблицаПечФорм;  // список печатных форм документа
    Перем НомерТекущейФормы; // текущая печатная форма
    //******************************************************************************
    // УправлениеДиалогом()
    //
    // Параметры:
    //  Нет.
    //
    // Вызывается из формул элементов диалога:
    //  Нет.
    //
    // Описание:
    //  Управление видимостью и доступностью элементов диалога.
    //
    Процедура УправлениеДиалогом()
    
    Если (глСпособСписания("Продукция", ДатаДок) < 2) или
    (глСпособСписания("Материалы", ДатаДок) < 2) или
    (глСпособСписания("Товары", ДатаДок) < 2) Тогда
    Форма.Партия.Видимость(1);
    Форма.ПоказатьПартию.Видимость(1);
    Иначе
    Форма.Партия.Видимость(0);
    Форма.ПоказатьПартию.Видимость(0);
    КонецЕсли;
    
    КонецПроцедуры // УправлениеДиалогом()
    //******************************************************************************
    // УправлениеДоступностьюГраф()
    //
    // Параметры:
    //  Нет.
    //
    // Вызывается из формул элементов диалога:
    //  Нет.
    //
    // Описание:
    //  Управление доступностью граф табличной части документа.
    //
    Процедура УправлениеДоступностьюГраф()
    Если ПустоеЗначение(ВидМПЗ) = 0 Тогда
    Если (глСпособСписания(ВидМПЗ.Идентификатор(), ДатаДок) = 2) Тогда
    Форма.Партия.Доступность(0);
    Форма.ПоказатьПартию.Доступность(0);
    Иначе
    Форма.Партия.Доступность(1);
    Форма.ПоказатьПартию.Доступность(1);
    КонецЕсли;
    
    Иначе
    Форма.Партия.Доступность(0);
    Форма.ПоказатьПартию.Доступность(0);
    
    КонецЕсли;
    КонецПроцедуры // УправлениеДоступностьюГраф()
    //*****************************************************************************
    // ЗаголовокФормы()
    //
    // Параметры:
    //  Нет
    //
    // Возвращаемое значение:
    //  Название операции
    //
    // Описание:
    //  Формирует название операции и заголовок формы диалога.
    //
    Функция ЗаголовокФормы()
    
    Перем Заголовок, Название;
    
    Заголовок  = глНазваниеДокументаВЖурнале(Контекст);
    Название  = Заголовок+ " №";
    
    Если Выбран() = 1 Тогда 
    Если Проведен() = 1 Тогда
    Заголовок = Заголовок + ". Проведен";
    ИначеЕсли ПометкаУдаления() = 1 Тогда
    Заголовок = Заголовок + ". Помечен на удаление";
    Иначе
    Заголовок = Заголовок + ". Не проведен";
    КонецЕсли;
    Иначе
    Заголовок = Заголовок + ". Новый";
    КонецЕсли;
    Форма.Заголовок(Заголовок);			  
    Возврат Название;
    
    КонецФункции // ЗаголовокФормы()
    //******************************************************************************
    // ПриИзмененииМПЗ()
    //
    // Параметры:
    //  Нет.
    //
    // Вызывается из формул элементов диалога:
    //  - графа "МПЗ"
    //
    // Описание:
    //  Обработка изменения значения графы табличной части.
    //
    Процедура ПриИзмененииМПЗ()
    
    Если МПЗ.Выбран() = 1 Тогда
    Количество = ?(Количество = 0, 1, Количество);
    ЕдиницаИзмерения = МПЗ.ОсновнаяЕдиницаИзмерения;
    
    Иначе
    ЕдиницаИзмерения = "";
    КонецЕсли;
    
    КонецПроцедуры // ПриИзмененииМПЗ()
    //******************************************************************************
    // ПриИзмененииВидаМПЗ()
    //
    // Параметры:
    //  Нет.
    //
    // Вызывается из формул элементов диалога:
    //  - графа "Вид МПЗ".
    //
    // Описание:
    //  Обработка изменения значения графы.
    //
    Процедура ПриИзмененииВидаМПЗ()
    
    МПЗ = "";
    Партия = "";
    
    ПриИзмененииМПЗ();
    УправлениеДоступностьюГраф();
    
    КонецПроцедуры // ПриИзмененииВидаМПЗ()
    //******************************************************************************
    // Подбор()
    //
    // Параметры:
    // Нет.
    //
    // Возвращаемое значение:
    // Нет.
    //
    // Вызывается из формул элементов диалога:
    //  - кнопка "Подбор".
    //
    // Описание:
    // Заполнение табличной части подбором
    //
    Процедура Подбор()
    
    СписокВидовПодбора = СоздатьОбъект("СписокЗначений");
    СписокВидовПодбора.ДобавитьЗначение(Перечисление.ВидыМПЗ.Материалы, "Материалы");
    Если (КачествоИз <> Перечисление.КачествоМПЗ.БУ) и (КачествоВ <> Перечисление.КачествоМПЗ.БУ) Тогда
    СписокВидовПодбора.ДобавитьЗначение(Перечисление.ВидыМПЗ.Продукция, "Продукция");
    СписокВидовПодбора.ДобавитьЗначение(Перечисление.ВидыМПЗ.Полуфабрикаты, "Полуфабрикаты");
    СписокВидовПодбора.ДобавитьЗначение(Перечисление.ВидыМПЗ.Товары, "Товары");
    КонецЕсли;
    
    Значение = "";
    Если СписокВидовПодбора.РазмерСписка() = 1 Тогда
    Значение = СписокВидовПодбора.ПолучитьЗначение(1);
    
    ИначеЕсли (СписокВидовПодбора.ВыбратьЗначение(Значение, , , , 1) = 0) Тогда
    
    Возврат;
    
    КонецЕсли;
    СписокПараметровПодбора = СоздатьОбъект("СписокЗначений");
    СписокПараметровПодбора.Установить("МестоХранения", МестоХранения);
    Если ПустоеЗначение(Владелец) = 0 Тогда
    СписокПараметровПодбора.Установить("Владелец", Владелец);
    Иначе
    СписокПараметровПодбора.Установить("Владелец", "<не выбран - собственные МПЗ>");
    КонецЕсли;
    
    Если (КачествоИз = Перечисление.КачествоМПЗ.БУ) или (КачествоВ = Перечисление.КачествоМПЗ.БУ) Тогда
    СписокПараметровПодбора.Установить("ПризнакОтбора", "ПередачаВЭксплуатацию");
    КонецЕсли;
    ТекВидМПЗ = Значение;
    Если Значение = Перечисление.ВидыМПЗ.Материалы Тогда
    ОткрытьПодбор("Справочник.Материалы", "ДляПодбора",СписокПараметровПодбора);
    ИначеЕсли Значение = Перечисление.ВидыМПЗ.Продукция Тогда
    СписокПараметровПодбора.Установить("ТипНоменклатуры", Перечисление.ТипыНоменклатуры.Продукция);
    ОткрытьПодбор("Справочник.Номенклатура", "ДляПодбора",СписокПараметровПодбора);
    ИначеЕсли Значение = Перечисление.ВидыМПЗ.Полуфабрикаты Тогда
    СписокПараметровПодбора.Установить("ТипНоменклатуры", Перечисление.ТипыНоменклатуры.Полуфабрикат);
    ОткрытьПодбор("Справочник.Номенклатура", "ДляПодбора",СписокПараметровПодбора);
    ИначеЕсли Значение = Перечисление.ВидыМПЗ.Товары Тогда
    СписокПараметровПодбора.Установить("ТипНоменклатуры", Перечисление.ТипыНоменклатуры.Товар);
    ОткрытьПодбор("Справочник.Номенклатура", "ДляПодбора",СписокПараметровПодбора);
    КонецЕсли;
    
    КонецПроцедуры // Подбор()
    //*****************************************************************************
    // ЗаполнитьТабЧасть(ПоКнопке = 0)
    //
    // Параметры:
    //  ПоКнопке - число, 1 - заполнение таб.части вызвано по кнопке "Заполнить",
    //				   0 - при вводе на основании и выборе документа основания
    //
    // Возвращаемое значение:
    // Нет.
    //
    // Вызывается из формул элементов диалога:
    //  Нет.
    //
    // Описание:
    // Заполняет табличную часть документа по партии-источнику, складу-источнику.
    //
    Процедура ЗаполнитьТабЧасть(ПоКнопке = 0)
    
    
    ВариантЗаполнения = "";
    СписокВариантовЗаполнения = СоздатьОбъект("СписокЗначений");
    Если ПоКнопке = 1 Тогда
    Если ДокументОснование.Выбран() = 1 Тогда
    СписокВариантовЗаполнения.ДобавитьЗначение("ПоДокументуОснованию", "По документу основанию");
    СписокВариантовЗаполнения.ДобавитьЗначение("ПоПоДокументуОснованиюНеБольшеСклада", "По документу основанию не больше текущего остатка на складе");
    СтрВариантЗаполнения = "документу основанию";
    Иначе
    СписокВариантовЗаполнения.ДобавитьЗначение("ПоОстаткам", "По текущим остаткам на складе");
    СтрВариантЗаполнения = "текущим остаткам";
    КонецЕсли;
    Если СписокВариантовЗаполнения.ВыбратьЗначение(ВариантЗаполнения, , , , 1) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    Иначе
    ВариантЗаполнения = "ПоДокументуОснованию";
    СтрВариантЗаполнения = "документу основанию";
    КонецЕсли;
    
    Если (КоличествоСтрок() > 0) Тогда
    
    Если (Вопрос("Заполнить табличную часть по " + СтрВариантЗаполнения + "?
    |(перед заполнением табличная часть будет очищена)", "Да+Нет") = "Да") Тогда
    УдалитьСтроки();
    Иначе
    Возврат;
    КонецЕсли;
    
    КонецЕсли;
    
    
    Если (ВариантЗаполнения = "ПоДокументуОснованию") или (ВариантЗаполнения = "ПоПоДокументуОснованиюНеБольшеСклада") Тогда
    
    ПараметрДвижения = 1;
    
    ТабличнаяЧастьДокумента = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТабличнаяЧастьДокумента);
    
    ДокументОснование.ВыбратьСтроки();
    
    Пока ДокументОснование.ПолучитьСтроку() = 1 Цикл
    
    Если ДокументОснование.Вид() = "ПоступлениеМПЗПрочее" Тогда
    
    ТабличнаяЧастьДокумента.НоваяСтрока();
    
    ТабличнаяЧастьДокумента.ВидМПЗ = ДокументОснование.ВидМПЗвТЧ;
    ТабличнаяЧастьДокумента.МПЗ = ДокументОснование.МПЗ;
    ТабличнаяЧастьДокумента.Количество = глПолучитьБазовоеКоличество(ДокументОснование.Количество, ДокументОснование.ЕдиницаИзмерения);
    
    Если ДокументОснование.МПЗ.Вид() = "Материалы" Тогда
    
    Если СокрЛП(ДокументОснование.МПЗ.Субсчет.Код) = "003" Тогда
    Владелец = ДокументОснование.Владелец;
    КонецЕсли;
    
    ИначеЕсли ДокументОснование.МПЗ.Вид() = "Номенклатура" Тогда
    
    Если (ДокументОснование.МПЗ.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Продукция) или
    (ДокументОснование.МПЗ.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Полуфабрикат) Тогда
    Владелец = ДокументОснование.Владелец;
    КонецЕсли;
    
    КонецЕсли;
    
    Если глСпособСписания(ТабличнаяЧастьДокумента.ВидМПЗ.Идентификатор(), ДатаДок) < 2 Тогда
    ТабличнаяЧастьДокумента.Партия = ДокументОснование;
    КонецЕсли;
    
    ИначеЕсли (ДокументОснование.Вид() = "ПоступлениеМПЗИмпорт")
    или (ДокументОснование.Вид() = "ПоступлениеТоваров") Тогда
    
    ТабличнаяЧастьДокумента.НоваяСтрока();
    
    ТабличнаяЧастьДокумента.ВидМПЗ = ДокументОснование.ВидМПЗ;
    ТабличнаяЧастьДокумента.МПЗ = ДокументОснование.Товар;
    ТабличнаяЧастьДокумента.Количество = глПолучитьБазовоеКоличество(ДокументОснование.Количество, ДокументОснование.ЕдиницаИзмерения);
    
    Если (ДокументОснование.Вид() = "ПоступлениеТоваров")
    и (ДокументОснование.Товар.Вид() = "Материалы") Тогда
    
    Если СокрЛП(ДокументОснование.Товар.Субсчет.Код) = "003" Тогда
    Владелец = ДокументОснование.Контрагент;
    КонецЕсли;
    
    КонецЕсли;
    
    Если глСпособСписания(ТабличнаяЧастьДокумента.ВидМПЗ.Идентификатор(), ДатаДок) < 2 Тогда
    ТабличнаяЧастьДокумента.Партия = ДокументОснование;
    КонецЕсли;
    
    ИначеЕсли (ДокументОснование.Вид() = "Заявка") Тогда
    
    ТабличнаяЧастьДокумента.НоваяСтрока();
    
    ТипНоменклатуры = ДокументОснование.Товар.ТипНоменклатуры;
    Если ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Продукция Тогда
    ТабличнаяЧастьДокумента.ВидМПЗ = Перечисление.ВидыМПЗ.Продукция;
    
    ИначеЕсли ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Полуфабрикат Тогда
    ТабличнаяЧастьДокумента.ВидМПЗ = Перечисление.ВидыМПЗ.Полуфабрикаты;
    
    ИначеЕсли ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар Тогда
    ТабличнаяЧастьДокумента.ВидМПЗ = Перечисление.ВидыМПЗ.Товары;
    
    КонецЕсли;
    
    ТабличнаяЧастьДокумента.МПЗ = ДокументОснование.Товар;
    ТабличнаяЧастьДокумента.Количество = глПолучитьБазовоеКоличество(ДокументОснование.Количество, ДокументОснование.ЕдиницаИзмерения);
    
    КонецЕсли;
    КонецЦикла;
    
    Если ВариантЗаполнения = "ПоПоДокументуОснованиюНеБольшеСклада" Тогда
    
    // Найдем документ "Заявка от покупателя".
    УчетПоЗаявке = 0;
    Заявка = ПолучитьПустоеЗначение("Документ.Заявка");
    Если глПолучитьДокументПланирования(Контекст, Заявка) = 1 Тогда
    УчетПоЗаявке = Заявка.УчетПоЗаявке;
    КонецЕсли;
    
    РегМестаХранения = СоздатьОбъект("Регистр.МестаХранения");
    
    СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
    ТабличнаяЧастьДокумента.Выгрузить(СписокНоменклатуры, , , "МПЗ");
    
    РегМестаХранения.УстановитьЗначениеФильтра("МПЗ", СписокНоменклатуры, 2);
    РегМестаХранения.УстановитьЗначениеФильтра("МестоХранения", МестоХранения, 1);
    РегМестаХранения.УстановитьЗначениеФильтра("Владелец", Владелец, 1);
    
    ТекКачество = ?(КачествоИз = Перечисление.КачествоМПЗ.Новое, ПолучитьПустоеЗначение("Перечисление.КачествоМПЗ"), КачествоИз);
    РегМестаХранения.УстановитьЗначениеФильтра("Качество", ТекКачество, 1);
    
    ТабМестаХранения = СоздатьОбъект("ТаблицаЗначений");
    РегМестаХранения.ВыгрузитьИтоги(ТабМестаХранения,1);
    ТабМестаХранения.Свернуть("МПЗ","Количество");
    
    Если УчетПоЗаявке = 1 Тогда
    РегПартии = СоздатьОбъект("Регистр.Партии");
    РегПартии.УстановитьЗначениеФильтра("МПЗ", СписокНоменклатуры, 2);
    РегПартии.УстановитьЗначениеФильтра("Владелец", Владелец, 1);
    РегПартии.УстановитьЗначениеФильтра("Качество", ТекКачество, 1);
    РегПартии.УстановитьЗначениеФильтра("Заявка", Заявка, 1);
    
    ТабПартий = СоздатьОбъект("ТаблицаЗначений");
    РегПартии.ВыгрузитьИтоги(ТабПартий,1);
    ТабПартий.Свернуть("МПЗ","Количество");
    КонецЕсли;
    
    Сч = 1;
    Пока Сч <= ТабличнаяЧастьДокумента.КоличествоСтрок() Цикл
    ТабличнаяЧастьДокумента.ПолучитьСтрокуПоНомеру(Сч);
    Нстр = 0;
    
    Если ТабМестаХранения.НайтиЗначение(ТабличнаяЧастьДокумента.МПЗ, Нстр, "МПЗ") = 1 Тогда
    ТабМестаХранения.ПолучитьСтрокуПоНомеру(Нстр);
    
    ТабличнаяЧастьДокумента.Количество = Макс(Мин(ТабличнаяЧастьДокумента.Количество, ТабМестаХранения.Количество), 0);
    
    Если УчетПоЗаявке = 1 Тогда
    НстрПартии = 0;
    Если ТабПартий.НайтиЗначение(ТабличнаяЧастьДокумента.МПЗ, НстрПартии, "МПЗ") = 1 Тогда
    ТабПартий.ПолучитьСтрокуПоНомеру(НстрПартии);
    ТабличнаяЧастьДокумента.Количество = Макс(Мин(ТабличнаяЧастьДокумента.Количество, ТабПартий.Количество), 0);
    ТабПартий.Количество = ТабПартий.Количество - ТабличнаяЧастьДокумента.Количество;
    КонецЕсли;
    КонецЕсли;
    
    ТабМестаХранения.Количество = ТабМестаХранения.Количество - ТабличнаяЧастьДокумента.Количество;
    
    Если ТабМестаХранения.Количество = 0 Тогда
    ТабМестаХранения.УдалитьСтроку();
    КонецЕсли;
    Сч = Сч + 1;
    Иначе
    ТабличнаяЧастьДокумента.УдалитьСтроку();
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    
    ТабличнаяЧастьДокумента.ВыбратьСтроки();
    Пока ТабличнаяЧастьДокумента.ПолучитьСтроку() = 1 Цикл
    НоваяСтрока();
    ВидМПЗ = ТабличнаяЧастьДокумента.ВидМПЗ;
    МПЗ = ТабличнаяЧастьДокумента.МПЗ;
    ЕдиницаИзмерения = МПЗ.ОсновнаяЕдиницаИзмерения;
    Количество = ТабличнаяЧастьДокумента.Количество/?(ЕдиницаИзмерения.Коэффициент = 0, 1, ЕдиницаИзмерения.Коэффициент);
    Партия = ТабличнаяЧастьДокумента.Партия;
    КонецЦикла;
    
    ИначеЕсли ВариантЗаполнения = "ПоОстаткам" Тогда
    Если МестоХранения.Выбран() = 0 Тогда
    Предупреждение("Выберите исходное место хранения");
    Возврат;
    КонецЕсли;
    Если КачествоИз.Выбран() = 0 Тогда
    Предупреждение("Выберите исходное качество");
    Возврат;
    КонецЕсли;
    
    СтрПериод = "";
    Если Выбран() = 0 Тогда
    Если ДатаДок < ПолучитьДатуТА() Тогда
    СтрПериод = "Период с ДатаДок по ДатаДок ;";
    КонецЕсли;
    ИначеЕсли СравнитьТА() < 1 Тогда
    ТекДок = ТекущийДокумент();
    Если ДатаДок <> ТекДок.ДатаДок Тогда
    СтрПериод = "Период с ДатаДок по ДатаДок ;";
    ИначеЕсли ДатаДок < ПолучитьДатуТА() Тогда
    СтрПериод = "Период с ДатаДок по ТекДок ;";
    КонецЕсли;
    КонецЕсли;
    
    ТекКачество = ?(КачествоИз = Перечисление.КачествоМПЗ.Новое, ПолучитьПустоеЗначение("Перечисление.КачествоМПЗ"), КачествоИз);
    
    ЗапросМПЗ = СоздатьОбъект("Запрос");
    
    ТекстЗапросаМестаХранения =
    "//{{ЗАПРОС(МестаХранения)
    |" + СтрПериод + "
    |
    |ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
    |МПЗ = Регистр.МестаХранения.МПЗ;
    |Владелец = Регистр.МестаХранения.Владелец;
    |Качество = Регистр.МестаХранения.Качество;
    |МХ = Регистр.МестаХранения.МестоХранения;
    |Количество = Регистр.МестаХранения.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка ВидМПЗ;
    |Группировка МПЗ без групп;
    |Группировка Владелец без групп;
    |Условие (МХ = МестоХранения);
    |Условие (Качество = ТекКачество);
    |"//}}ЗАПРОС
    ;
    
    Если ЗапросМПЗ.Выполнить(ТекстЗапросаМестаХранения) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    УчетПоПартиям = 0;
    Если (глСпособСписания("Продукция", ДатаДок) < 2) или
    (глСпособСписания("Материалы", ДатаДок) < 2) или
    (глСпособСписания("Товары", ДатаДок) < 2) Тогда
    УчетПоПартиям = 1;
    КонецЕсли;
    
    Если УчетПоПартиям = 1 Тогда
    
    ТекстЗапросаПартии = "
    |" + СтрПериод + "
    |
    |ВидМПЗ = Регистр.Партии.ВидМПЗ;
    |МПЗ = Регистр.Партии.МПЗ;
    |Владелец = Регистр.Партии.Владелец;
    |Качество = Регистр.Партии.Качество;
    |МХ = Регистр.Партии.МестоХранения;
    |Партия = Регистр.Партии.Партия;
    |Количество = Регистр.Партии.Количество;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка ВидМПЗ;
    |Группировка МПЗ без групп;
    |Группировка Владелец без групп;
    |Группировка Партия;
    |Условие (Качество = ТекКачество);
    |";
    
    ЗапросПартии = СоздатьОбъект("Запрос");
    Если ЗапросПартии.Выполнить(ТекстЗапросаПартии) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    КонецЕсли;
    
    Пока ЗапросМПЗ.Группировка(1) = 1 Цикл
    
    УчетПоПартиям = 0;
    Если глСпособСписания(ЗапросМПЗ.ВидМПЗ.Идентификатор(), ДатаДок) < 2 Тогда
    УчетПоПартиям = 1;
    КонецЕсли;
    
    Пока ЗапросМПЗ.Группировка(2) = 1 Цикл
    Пока ЗапросМПЗ.Группировка(3) = 1 Цикл
    КоличествоВсего = ЗапросМПЗ.КоличествоКонОст;
    
    Если УчетПоПартиям = 0 Тогда
    НоваяСтрока();
    ВидМПЗ = ЗапросМПЗ.ВидМПЗ;
    МПЗ = ЗапросМПЗ.МПЗ;
    ЕдиницаИзмерения = МПЗ.ОсновнаяЕдиницаИзмерения;
    Коэффициент = ?(ЕдиницаИзмерения.Коэффициент = 0, 1, ЕдиницаИзмерения.Коэффициент);
    Владелец = ЗапросМПЗ.Владелец;
    Количество = КоличествоВсего/Коэффициент;
    Иначе
    ЗапросПартии.вНачалоВыборки();
    Если ЗапросПартии.Получить(ЗапросМПЗ.ВидМПЗ, ЗапросМПЗ.МПЗ, ЗапросМПЗ.Владелец, ) = 1 Тогда
    Пока ЗапросПартии.Группировка("Партия") = 1 Цикл
    
    КоличествоПартия = ЗапросПартии.КоличествоКонОст;
    Если КоличествоПартия = 0 Тогда
    Продолжить;
    КонецЕсли;
    
    НоваяСтрока();
    ВидМПЗ = ЗапросМПЗ.ВидМПЗ;
    МПЗ = ЗапросМПЗ.МПЗ;
    ЕдиницаИзмерения = МПЗ.ОсновнаяЕдиницаИзмерения;
    Коэффициент = ?(ЕдиницаИзмерения.Коэффициент = 0, 1, ЕдиницаИзмерения.Коэффициент);
    Владелец = ЗапросМПЗ.Владелец;
    
    Партия = ЗапросПартии.Партия;
    
    Если КоличествоВсего >= КоличествоПартия Тогда
    Количество = КоличествоПартия/Коэффициент;
    КоличествоВсего = Макс(КоличествоВсего - КоличествоПартия, 0);
    Иначе
    Количество = КоличествоВсего/Коэффициент;
    КоличествоВсего = 0;
    КонецЕсли;
    
    Если КоличествоВсего = 0 Тогда
    Прервать;
    КонецЕсли;
    
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    Иначе
    Предупреждение("Не выбран способ заполнения!",60);
    КонецЕсли;
    КонецПроцедуры // ЗаполнитьТабЧасть()
    //*****************************************************************************
    // ЗаполнитьШапку()
    //
    // Параметры:
    // Нет.
    //
    // Вызывается из формул элементов диалога:
    //  Нет.
    //
    // Описание:
    //
    Процедура ЗаполнитьШапку()
    
    МестоХранения = ДокументОснование.МестоХранения;
    
    ЗаполнитьТабЧасть("ПоДокументуОснованию");
    
    КонецПроцедуры // ЗаполнитьШапку()
    
    //*****************************************************************************
    // Заполнить()
    //
    // Параметры:
    // Нет.
    //
    // Вызывается из формул элементов диалога:
    //  - кнопка "Заполнить".
    //
    // Описание:
    // Заполняет табличную часть документа
    Процедура Заполнить()
    
    ЗаполнитьТабЧасть(1);
    
    КонецПроцедуры // Заполнить()
    //******************************************************************************
    // ПечатьВстроенная(ИмяФормы)
    //
    // Параметры:
    //  Нет.
    //
    // Вызывается из формул элементов диалога:
    //  ИмяФормы - имя формы для печати.
    //
    // Описание:
    // Формирование встроенных печатных формы "М-11".
    //
    Процедура ПечатьВстроенная(ИмяФормы)
    Перем Таб;
    
    
    Перем Себестоимость;
    
    Таб = СоздатьОбъект("Таблица");
    
    Если (ИмяФормы = "М-11") Тогда
    Таб.ИсходнаяТаблица("М-11");
    КоррСчет = "";
    Подразделение = МестоХранения.Наименование;
    
    ТекстПредупреждения = "Графы ""Цена"" и ""Сумма"" не заполняются.";
    Таб.ВывестиСекцию("Предупреждение");
    
    СекцияШапка = Таб.ПолучитьСекцию("Шапка");
    СекцияШапка.ПодразделениеОтправитель = МестоХранения.Наименование;
    Таб.ВывестиСекцию(СекцияШапка);
    
    СекцияСтрока = Таб.ПолучитьСекцию("Строка");
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Если МПЗ.Вид() = "Материалы" Тогда
    СекцияСтрока.Субсчет = МПЗ.Субсчет;
    ИначеЕсли МПЗ.Вид() = "Номенклатура" Тогда
    Если МПЗ.ТипНОменклатуры = Перечисление.ТипыНоменклатуры.Продукция Тогда
    СекцияСтрока.Субсчет = "43";
    ИначеЕсли МПЗ.ТипНОменклатуры = Перечисление.ТипыНоменклатуры.Полуфабрикат Тогда
    СекцияСтрока.Субсчет = "21";
    Иначе
    СекцияСтрока.Субсчет = "41.3";
    КонецЕсли;
    КонецЕсли;
    СекцияСтрока.МатЦенность = МПЗ;
    СекцияСтрока.Код = МПЗ.Код;
    СекцияСтрока.ЕдиницаИзмеренияКод = МПЗ.ЕдиницаИзмерения.Код;
    СекцияСтрока.ЕдиницаИзмерения = МПЗ.ЕдиницаИзмерения;
    СекцияСтрока.Затребовано = глФорматКол(Количество);
    СекцияСтрока.Отпущено = глФорматКол(Количество);
    СекцияСтрока.Сумма = "";
    СекцияСтрока.ЦенаБезНДС = "";
    Таб.ВывестиСекцию(СекцияСтрока);
    Состояние("Выведено строк: " + НомерСтроки);
    КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
    // вывод результирующей таблицы на экран
    Таб.ПовторятьПриПечатиСтроки(16, 16);
    глПоказатьТаблицу(Таб, "М11", "Требование-накладная (форма №М-11)");
    
    КонецЕсли;
    
    КонецПроцедуры // ПечатьВстроенная()
    //******************************************************************************
    // Печать()
    //
    // Параметры:
    // Нет
    //
    // Описание:
    //  Вызывается по кнопке "Печать" 
    // 
    Процедура Печать()
    
    Если  ПустоеЗначение(НомерТекущейФормы) = 1  Тогда
    НомерТекущейФормы = 1;
    Форма.КнопкаПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
    КонецЕсли;
    
    Если НомерТекущейФормы <= 3  Тогда
    ПечатьВстроенная(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
    Иначе
    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");
    
    ОткрытьФорму("Отчет", Параметры, глКаталогПечФорм+ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы,"Файл")); 
    КонецЕсли;
    
    КонецПроцедуры // Печать()
    //******************************************************************************
    // ВыборПечатнойФормы()
    //
    // Параметры:
    //  нет.   
    //
    // Возвращаемое значение:
    //  нет.
    //
    // Описание:
    //  - открывает список для выбора способа печати.
    //  - формирует таблицу по выбранному способу.
    //
    Процедура ВыборПечатнойФормы()
    
    ВыбНомер = глВыборПечатнойФормы("Документ." + Вид(), ТаблицаПечФорм);
    Если ВыбНомер > 0 Тогда
    НомерТекущейФормы = ВыбНомер;
    Форма.КнопкаПечать.Заголовок(ТаблицаПечФорм.ПолучитьЗначение(НомерТекущейФормы, "Кнопка"));
    Печать();
    КонецЕсли;
    КонецПроцедуры // ВыборПечатнойФормы()
    //******************************************************************************
    // ЗаполнитьНачальныеЗначения()
    //
    // Параметры:
    //  Нет.
    //
    // Вызывается из формул элементов диалога:
    //  Нет.
    //
    // Описание:
    //  Заполняет шапку документа начальными значениями из настроек конфигурации.
    //
    Процедура ЗаполнитьНачальныеЗначения()
    МестоХранения = глЗначениеПоУмолчанию("ОсновнойСклад");
    КачествоИз = глЗначениеПоУмолчанию("НачЗначКачество");
    КачествоВ = КачествоИз;
    КонецПроцедуры // ЗаполнитьНачальныеЗначения()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ВводНового(ВведенКопированием)
    
    глЗаполнитьШапку(Контекст);
    Если ВведенКопированием = 1 Тогда
    Возврат;
    КонецЕсли;
    
    ТипХозОперации = 0;
    ПараметрДвижения = 1;
    
    ЗаполнитьНачальныеЗначения();
    
    КонецПроцедуры // ВводНового()
    //*****************************************************************************
    // Предопределенная процедура
    //
    Процедура ВводНаОсновании(ДокОсн)
    
    глЗаполнитьШапкуНаОсн(Контекст, ДокОсн);
    ДокументОснование = ДокОсн;
    
    ЗаполнитьНачальныеЗначения();
    ЗаполнитьШапку();
    
    КонецПроцедуры // ВводНаОсновании()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриОткрытии()
    
    Форма.ВидМПЗ.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.МПЗ.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.Количество.ВыполнятьФормулуТолькоПриИзменении(1);
    
    Форма.ЕдиницаИзмерения.НеИзменятьВид(1);
    
    НачальнаяДатаДокумента = ДатаДок;
    ПриЗаписиПерепроводить(1);
    глПроверкаРазрешенияРедактирования(Контекст);
    Если Форма.ТолькоПросмотр() = 1 Тогда
    
    Форма.КнопкаОснование.Доступность(ДокументОснование.Выбран());
    Форма.КнопкаОчиститьОснование.Доступность(0);
    Форма.КнопкаЗаполнить.Доступность(0);
    Форма.КнопкаЗаписать.Доступность(0);
    Форма.КнопкаПровести.Доступность(0);
    Форма.КнопкаОК.Доступность(0);
    Форма.КнопкаПодбор.Доступность(0);
    Форма.КнопкаПоУмолчанию("КнопкаЗакрыть");
    КонецЕсли;
    
    // Заполним таблицу для выбора печатной формы
    НомерТекущейФормы = глУстановкаКнопкиПечать(Контекст, "Документ." + Вид(),ТаблицаПечФорм);
    
    Парам = Форма.Параметр;
    Если ТипЗначенияСтр(Парам)="СписокЗначений" Тогда
    Если ПустоеЗначение(Парам.Получить("Команда"))=1 Тогда
    Сообщить("В форму документа "+Вид()+" передан неверный параметр!","I");
    СтатусВозврата(0);Возврат;
    КонецЕсли;
    Если Парам.Получить("Команда") = "ПечатьНаЭкран" Тогда
    Печать();
    СтатусВозврата(0);Возврат;
    ИначеЕсли Парам.Получить("Команда") = "ВыборПечатнойФормы" Тогда
    ВыборПечатнойФормы();
    СтатусВозврата(0);Возврат;
    Иначе
    Сообщить("В форму документа "+Вид()+" передана неверная команда "+Парам.Получить("Команда")+"!","I");
    СтатусВозврата(0);Возврат;
    КонецЕсли;
    КонецЕсли;
    
    глУстановитьВидимостьКолонокиДокумента(Контекст, "ВыводитьДляМПЗ");
    
    УправлениеДиалогом();
    
    КонецПроцедуры // ПриОткрытии()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриНачалеРедактированияСтроки()
    
    УправлениеДоступностьюГраф();
    
    Если (Форма.ТекущаяКолонка() = "ПоказатьПартию") и (ПустоеЗначение(Партия) = 0) Тогда
    СтатусВозврата(0);
    глОткрытьДиалог(Контекст, "Партия");
    КонецЕсли;
    
    КонецПроцедуры // ПриНачалеРедактированияСтроки()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриНачалеВыбораЗначения(ИдентЭлементаДиалога, ФлагСтандартнойОбработки)
    
    Если (ИдентЭлементаДиалога = "Партия") Тогда
    
    ФлагСтандартнойОбработки = 0;
    
    Значение = 0;
    
    Меню = СоздатьОбъект("СписокЗначений");
    Если ВидМПЗ = Перечисление.ВидыМПЗ.Продукция Тогда
    Значение = "ПартияПродукции";
    Иначе
    Меню.ДобавитьЗначение("ПоступлениеТоваров", Метаданные.Документ("ПоступлениеТоваров").Представление());
    Меню.ДобавитьЗначение("ПоступлениеМПЗПрочее", Метаданные.Документ("ПоступлениеМПЗПрочее").Представление());
    Меню.ДобавитьЗначение("ПоступлениеМПЗИмпорт", Метаданные.Документ("ПоступлениеМПЗИмпорт").Представление());
    Меню.ДобавитьЗначение("ВозвратИзПроизводства", Метаданные.Документ("ВозвратИзПроизводства").Представление());
    Меню.ДобавитьЗначение("ВводОстатковМПЗ", Метаданные.Документ("ВводОстатковМПЗ").Представление());
    
    Если Меню.ВыбратьЗначение(Значение, , , , 2) = 0 Тогда
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    ОткрытьФорму("Журнал." + Значение);
    
    ИначеЕсли ИдентЭлементаДиалога = "ВидМПЗ" Тогда
    Если (КачествоИз = Перечисление.КачествоМПЗ.БУ) или (КачествоВ = Перечисление.КачествоМПЗ.БУ) Тогда
    ФлагСтандартнойОбработки = 0;
    ВидМПЗ = Перечисление.ВидыМПЗ.Материалы;
    КонецЕсли;
    
    ИначеЕсли ИдентЭлементаДиалога = "МПЗ" Тогда
    
    ФлагСтандартнойОбработки = 0;
    
    Если ВидМПЗ = Перечисление.ВидыМПЗ.Материалы Тогда
    Если (КачествоИз = Перечисление.КачествоМПЗ.БУ) или (КачествоВ = Перечисление.КачествоМПЗ.БУ) Тогда
    ОткрытьФорму("Справочник.Материалы", "ПередачаВЭксплуатацию");
    Иначе
    ОткрытьФорму("Справочник.Материалы");
    КонецЕсли;
    ИначеЕсли ВидМПЗ = Перечисление.ВидыМПЗ.Продукция Тогда
    ОткрытьФорму("Справочник.Номенклатура", Перечисление.ТипыНоменклатуры.Продукция);
    ИначеЕсли ВидМПЗ = Перечисление.ВидыМПЗ.Полуфабрикаты Тогда
    ОткрытьФорму("Справочник.Номенклатура", Перечисление.ТипыНоменклатуры.Полуфабрикат);
    ИначеЕсли ВидМПЗ = Перечисление.ВидыМПЗ.Товары Тогда
    ОткрытьФорму("Справочник.Номенклатура", Перечисление.ТипыНоменклатуры.Товар);
    КонецЕсли;
    
    КонецЕсли;
    КонецПроцедуры // ПриНачалеВыбораЗначения()
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ОбработкаПодбора(Выбор)
    Если ТипЗначенияСтр(Выбор) = "Документ" Тогда
    
    Если Выбор = ТекущийДокумент() Тогда
    
    Предупреждение("Нельзя выбирать в качестве основания текущий документ!");
    Возврат;
    
    КонецЕсли;
    
    ДокументОснование = Выбор;
    ЗаполнитьШапку();
    ИначеЕсли ТипЗначенияСтр(Выбор) = "ТаблицаЗначений" Тогда
    Выбор.ВыбратьСтроки();
    Пока Выбор.ПолучитьСтроку() = 1 Цикл
    ВидСправочника = Выбор.Номенклатура.Вид();
    НоваяСтрока();
    Если (ВидСправочника = "Материалы") Тогда
    ВидМПЗ = Перечисление.ВидыМПЗ.Материалы;
    ИначеЕсли (ВидСправочника = "Номенклатура") Тогда
    Если Выбор.Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар Тогда
    ВидМПЗ = Перечисление.ВидыМПЗ.Товары;
    ИначеЕсли Выбор.Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Продукция Тогда
    ВидМПЗ = Перечисление.ВидыМПЗ.Продукция;
    ИначеЕсли Выбор.Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Полуфабрикат Тогда
    ВидМПЗ = Перечисление.ВидыМПЗ.Полуфабрикаты;
    КонецЕсли;
    КонецЕсли;
    МПЗ = Выбор.Номенклатура;
    Количество = Выбор.Количество;
    ПриИзмененииМПЗ();
    АктивизироватьСтроку();
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры // ОбработкаПодбора()
    //*****************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриЗаписи()
    Если (глМожноЗаписатьДокумент(Контекст) = 0) Тогда
    СтатусВозврата(0);
    Возврат;
    ИначеЕсли (глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента) = 1) Тогда
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    КонецПроцедуры // ПриЗаписи()
    //******************************************************************************
    //
    СписокДействий = СоздатьОбъект("СписокЗначений");
    СписокДействий.ДобавитьЗначение("Структура подчиненности");
    СписокДействий.ДобавитьЗначение("Отчет о движениях документа");
    СписокДействий.ДобавитьЗначение("Открыть в журнале");
    // формируем таблицу печатных форм
    НомерТекущейФормы = 1;
    ТаблицаПечФорм  = СоздатьОбъект("ТаблицаЗначений");
    ТаблицаПечФорм.НоваяКолонка("Название","Строка",,,,30);
    ТаблицаПечФорм.НоваяКолонка("Файл","Строка",,,"Файл",10);
    ТаблицаПечФорм.НоваяКолонка("Кнопка","Строка",,,,10);
    ТаблицаПечФорм.НоваяКолонка("ФайлОписания","Строка");
    
    // Добавим информацию о встроенной форме М-11.
    ТаблицаПечФорм.НоваяСтрока();
    ТаблицаПечФорм.Название	 = "Требование-накладная М-11";
    ТаблицаПечФорм.Кнопка	   = "М-11";
    выводиться должно с печатной формой М-11. сама М-11 находится в общих таблицах. отчёт АКТ создал и в самом документе и в общих таблицах, не знаю куда привязать вывод отчёта. подскажите пожалуйста.
  2. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    Код:
    [color=#282828][size=2]глПоказатьТаблицу[/size][/color][color=red][size=2]([/size][/color][color=#282828][size=2]Таб[/size][/color][color=red][size=2],[/size][/color][color=#282828][size=2] [/size][/color][color=black][size=2]"М11"[/size][/color][color=red][size=2],[/size][/color][color=#282828][size=2] [/size][/color][color=black][size=2]"Требование-накладная (форма №М-11)"[/size][/color][color=red][size=2])[/size][/color][color=red][size=2];[/size][/color]
    
    //<<---сюда вставлять-->>
    [color=red][size=2]КонецЕсли[/size][/color][color=red][size=2];[/size][/color]
    
    [color=red][size=2]КонецПроцедуры[/size][/color][color=#282828][size=2] [/size][/color][color=green][size=2]// ПечатьВстроенная()[/size][/color]
    
    как-то раз, для прикола, вызов на печать дополнительного отчета поместил в подвал макета через
    Код:
    Функция ДобПечать()
    Печать2();
    Возврат "";
    КонецФункции()
  3. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    Код:
      Таб.ВывестиСекцию("Подвал");
    // вывод результирующей таблицы на экран
    Таб.ПовторятьПриПечатиСтроки(16, 16);
    глПоказатьТаблицу(Таб, "М11", "Требование-накладная (форма №М-11)");
    
    //в этом месте уже показана печ. форма М-11
    
    КонецЕсли;
    
    КонецПроцедуры // ПечатьВстроенная()
    извиняюсь в верхнем посте скопировалось оформление и стало ужас как читаемо
  4. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    охохо, спасибо. сам разобрался, в глобальнике добавил код на печать формы отчёта, в документе создал саму форму отчёта.

Поделиться этой страницей