8.х Как вытащить МОЛ из СправочникиСклады

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Zag12, 30 апр 2012.

  1. TopicStarter Overlay
    Zag12
    Offline

    Zag12

    Регистрация:
    30 апр 2012
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    1С 8.2 Бух.2.0
    Добрый день! Есть документ ТребованиеНакладная в нем есть Макет АктСписаниеМатериалов .В макете должно отражаться ФИО и Должность Материально-ответственного лица. В первом варианте создал реквизит МОЛ в форме документа добавил строку и все нормально, но попросили реализовать другой вариант так чтобы МОЛ брался автоматически со склада (в документе ТребованиеНакладная есть реквизит Склад). В справочниках "Склады" есть поле Склад (где выбираем нужный склад) и поле МОЛ (где мы выбираем материально-ответственное лицо). Подскажите, что я должен написать в модуле документа в своей функции так что бы назначенное МОЛ бралось из СправочникиСклады ?

    Вот Функция

    Функция ПечатьАктСписаниеМатериалов()


    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст ="
    |ВЫБРАТЬ
    | Номер,
    | Организация,
    | Склад,
    | Дата
    | ИЗ
    | Документ.ТребованиеНакладная КАК ТребованиеНакладная
    |
    |ГДЕ
    | ТребованиеНакладная.Ссылка = &ТекущийДокумент";


    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТребованиеНакладная.Номенклатура.НаименованиеПолное КАК Имя,
    | ТребованиеНакладная.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдИзм,
    | ТребованиеНакладная.Количество КАК Количество
    |
    |ИЗ
    | Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладная
    |ГДЕ
    | ТребованиеНакладная.Ссылка = &ТекущийДокумент";

    ЗапросПоНоменклатуре = Запрос.Выполнить();

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТребованиеНакладная_Акт_Списание_Материалов";

    //Руководитель организации
    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Организация,КонецДня(Дата),);
    ГенеральныйДиректор = Руководители.Руководитель;


    //ДанныеОФизЛице
    ДанныеОФизЛице = ОбщегоНазначения.ДанныеФизЛица(Организация,ПредседательКомиссии, Дата);
    ФИОПредседателя = СокрЛП(ДанныеОФизЛице.Фамилия) + " " + Лев(ДанныеОФизЛице.Имя,1) + "." + Лев(ДанныеОФизЛице.Отчество,1)+ ".";
    ДолжностьПредседателяКомиссии = СокрЛП(ДанныеОФизЛице.Должность);

    ДанныеОФизЛице = ОбщегоНазначения.ДанныеФизЛица(Организация, ЧленКомиссии1, Дата);
    ФИОЧлена1 = СокрЛП(ДанныеОФизЛице.Фамилия) + " " + Лев(ДанныеОФизЛице.Имя,1) + "." + Лев(ДанныеОФизЛице.Отчество,1)+ ".";
    ДолжностьЧленаКомиссии1 = СокрЛП(ДанныеОФизЛице.Должность);

    ДанныеОФизЛице = ОбщегоНазначения.ДанныеФизЛица(Организация, ЧленКомиссии2, Дата);
    ФИОЧлена2 = СокрЛП(ДанныеОФизЛице.Фамилия) + " " + Лев(ДанныеОФизЛице.Имя,1) + "." + Лев(ДанныеОФизЛице.Отчество,1)+ ".";
    ДолжностьЧленаКомиссии2 = СокрЛП(ДанныеОФизЛице.Должность);


    // Вывод заголовка
    Макет =ПолучитьМакет("АктСписаниеМатериалов");
    Область = Макет.ПолучитьОбласть("Заголовок");

    Область.Параметры.НомерАкта = Номер;
    Область.Параметры.ДатаДокумента = Формат (Дата, "ДЛФ=ДД");
    Область.Параметры.ФИОРуководителя = ГенеральныйДиректор;
    Область.Параметры.Организация = Организация;
    Область.Параметры.Склад = Склад;
    Область.Параметры.ФИОПредседателяКомиссии = ФИОПредседателя;
    Область.Параметры.ЧленКомиссии1 = ФИОЧлена1;
    Область.Параметры.ЧленКомиссии2 = ФИОЧлена2;
    Область.Параметры.ПредседательКомиссии = ДолжностьПредседателяКомиссии;
    Область.Параметры.ДолжностьЧленаКомиссии1 = ДолжностьЧленаКомиссии1;
    Область.Параметры.ДолжностьЧленаКомиссии2 = ДолжностьЧленаКомиссии2;

    Область.Параметры.Заполнить(Шапка);

    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата);
    ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
    Область.Параметры.Организация = ПредставлениеОрганизации;

    ТабДокумент.Вывести(Область);


    // Строка
    СтруктураПолей = Новый Структура;
    СтруктураПолей.Вставить("Счет", "Счет");
    СтруктураПолей.Вставить("Материал", "Номенклатура");
    СтруктураПолей.Вставить("МатериалНаименование", "Номенклатура.НаименованиеПолное");

    Если Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить() = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
    СтруктураПолей.Вставить("НоменклатурныйНомер", "Номенклатура.Артикул");
    Иначе
    СтруктураПолей.Вставить("НоменклатурныйНомер", "Номенклатура.Код");
    КонецЕсли;

    СтруктураПолей.Вставить("ЕдиницаИзмеренияНаименование", "Номенклатура.БазоваяЕдиницаИзмерения");
    СтруктураПолей.Вставить("ЕдиницаИзмеренияКод", "Номенклатура.БазоваяЕдиницаИзмерения.Код");
    СтруктураПолей.Вставить("Количество", "Количество");

    Область = Макет.ПолучитьОбласть("Строка");
    ВыборкаПоСтрокам = ЗапросПоНоменклатуре.Выгрузить();
    ВыборкаПоСтрокам.Свернуть("ЕдИзм");

    Для Каждого СтрокаТЧ Из ВыборкаПоСтрокам Цикл

    Область = Макет.ПолучитьОбласть("Строка");
    Область.Параметры.Заполнить(СтрокаТЧ);

    КонецЦикла;

    ТаблицаМатериалов = ОбщегоНазначения.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "Материалы", СтруктураПолей).Выгрузить();
    ТаблицаМатериалов.Свернуть("Материал, МатериалНаименование, Счет, НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование", "Количество");

    // Поиск сумм списания активов для заполнения Цены, Суммы и Итого
    ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(ЭтотОБъект);
    НомерТекущий = 1;
    Итог = 0;
    Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
    Область.Параметры.НомерТекущий = НомерТекущий;
    Область.Параметры.СчетЗатрат = СчетЗатрат.Код;
    Область.Параметры.Заполнить(СтрокаТЧ);
    СтрокаСуммСписания = ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
    Если СтрокаСуммСписания = Неопределено Тогда
    Область.Параметры.Цена = 0;
    Область.Параметры.Сумма = 0;
    Иначе
    Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
    Область.Параметры.Цена = Цена;
    Область.Параметры.Сумма = Цена * СтрокаТЧ.Количество;
    Итог= Итог + Цена * СтрокаТЧ.Количество;
    КонецЕсли;
    ТабДокумент.Вывести(Область);
    НомерТекущий = НомерТекущий + 1;
    КонецЦикла;

    ТаблицаМатериалов = ОбщегоНазначения.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "МатериалыЗаказчика", СтруктураПолей).Выгрузить();

    Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл

    Область.Параметры.Заполнить(СтрокаТЧ);
    СтрокаСуммСписания = ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
    Если СтрокаСуммСписания = Неопределено Тогда
    Область.Параметры.Цена = 0;
    Область.Параметры.Сумма = 0;
    Иначе
    Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
    Область.Параметры.Цена = Цена;
    Область.Параметры.Сумма = Цена * СтрокаТЧ.Количество;

    КонецЕсли;
    ТабДокумент.Вывести(Область);
    КонецЦикла;


    // Вывод подвала

    Область = Макет.ПолучитьОбласть("Подписи");

    Область.Параметры.ФИОПредседателяКомиссии = ФИОПредседателя;
    Область.Параметры.ЧленКомиссии1 = ФИОЧлена1;
    Область.Параметры.ЧленКомиссии2 = ФИОЧлена2;
    //Область.Параметры.ФИООтветственного = ФИООтветственного;
    Область.Параметры.ПредседательКомиссии = ДолжностьПредседателяКомиссии;
    Область.Параметры.ДолжностьЧленаКомиссии1 = ДолжностьЧленаКомиссии1;
    Область.Параметры.ДолжностьЧленаКомиссии2 = ДолжностьЧленаКомиссии2;
    //Область.Параметры.Ответственный = ДолжностьОтветственного;
    Область.Параметры.Итого = Итог;

    ТабДокумент.Вывести(Область);


    Возврат ТабДокумент;


    КонецФункции // Печать АктСписаниеМатериалов


    Заранее спасибо.

    Прошу прощения за абру- кадабру
    Отсюда так
    // Поиск сумм списания активов для заполнения Цены, Суммы и Итого

    ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(ЭтотОБъект);
    НомерТекущий = 1;
    Итог = 0;
    Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
    Область.Параметры.НомерТекущий = НомерТекущий;
    Область.Параметры.СчетЗатрат = СчетЗатрат.Код;
    Область.Параметры.Заполнить(СтрокаТЧ);
    СтрокаСуммСписания = ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
    Если СтрокаСуммСписания = Неопределено Тогда
    Область.Параметры.Цена = 0;
    Область.Параметры.Сумма = 0;
    Иначе
    Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
    Область.Параметры.Цена = Цена;
    Область.Параметры.Сумма = Цена * СтрокаТЧ.Количество;
    Итог= Итог + Цена * СтрокаТЧ.Количество;
    КонецЕсли;
    ТабДокумент.Вывести(Область);
    НомерТекущий = НомерТекущий + 1;
    КонецЦикла;

    ТаблицаМатериалов = ОбщегоНазначения.СформироватьЗапросПоТабличнойЧасти(ЭтотОбъект, "МатериалыЗаказчика", СтруктураПолей).Выгрузить();

    Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл

    Область.Параметры.Заполнить(СтрокаТЧ);
    СтрокаСуммСписания = ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
    Если СтрокаСуммСписания = Неопределено Тогда
    Область.Параметры.Цена = 0;
    Область.Параметры.Сумма = 0;
    Иначе
    Цена = ?(СтрокаСуммСписания.Количество = 0, 0, СтрокаСуммСписания.Сумма / СтрокаСуммСписания.Количество);
    Область.Параметры.Цена = Цена;
    Область.Параметры.Сумма = Цена * СтрокаТЧ.Количество;

    КонецЕсли;
    ТабДокумент.Вывести(Область);
    КонецЦикла;


    // Вывод подвала

    Область = Макет.ПолучитьОбласть("Подписи");

    Область.Параметры.ФИОПредседателяКомиссии = ФИОПредседателя;
    Область.Параметры.ЧленКомиссии1 = ФИОЧлена1;
    Область.Параметры.ЧленКомиссии2 = ФИОЧлена2;
    Область.Параметры.ФИООтветственного = СрезПоследних;
    Область.Параметры.ПредседательКомиссии = ДолжностьПредседателяКомиссии;
    Область.Параметры.ДолжностьЧленаКомиссии1 = ДолжностьЧленаКомиссии1;
    Область.Параметры.ДолжностьЧленаКомиссии2 = ДолжностьЧленаКомиссии2;
    //Область.Параметры.Ответственный = ДолжностьОтветственного;
    Область.Параметры.Итого = Итог;

    ТабДокумент.Вывести(Область);


    Возврат ТабДокумент;


    КонецФункции // Печать АктСписаниеМатериалов

    Вложения:

    • Макет.jpg
      Макет.jpg
      Размер файла:
      126,1 КБ
      Просмотров:
      21
    • 2.jpg
      2.jpg
      Размер файла:
      108,8 КБ
      Просмотров:
      24
  2. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    684
    Симпатии:
    7
    Баллы:
    29
    Зачем вы всю функцию сюда зафигачили? До конца все равно никто не дочитает. Ответственное лицо для склада можно взять из регистра сведений "Ответственные лица". В первом вашем запросе к нему нужно сделать левое соединение. А еще есть регистр сведений "ФИОФизЛиц"
  3. Azamat
    Offline

    Azamat Опытный в 1С

    Регистрация:
    29 июл 2011
    Сообщения:
    271
    Симпатии:
    0
    Баллы:
    26
    :roflmao: ах -хах, а ведь действительно так)))
Похожие темы
  1. zyzo
    Ответов:
    6
    Просмотров:
    706
Загрузка...

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