Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 10:21

Нужна помощь с запросом

Автор DmitriyF, 13 ноя 2013, 22:56

0 Пользователей и 1 гость просматривают эту тему.

DmitriyF

Здравствуйте.
Есть Функция которая получает данные для печати М4

   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ТекущийДокумент",ЭтотОбъект.СсылкаНаОбъект);
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ПоступлениеТоваровУслуг.Номер КАК Номер,
   |   ПоступлениеТоваровУслуг.Дата КАК ДатаСоставления,
   |   ПоступлениеТоваровУслуг.НомерВходящегоДокумента КАК НомерСопроводительногоДокумента,
   |   ПоступлениеТоваровУслуг.Организация,
   |   ПоступлениеТоваровУслуг.Организация КАК ЮрФизЛицо,
   |   ПоступлениеТоваровУслуг.Склад КАК МестоПриемки,
   |   ПоступлениеТоваровУслуг.Склад.Представление КАК СкладНаименование,
   |   ПоступлениеТоваровУслуг.Контрагент.Код КАК ПоставщикКод,
   |   ПоступлениеТоваровУслуг.Контрагент КАК Поставщик,
   |   ЕСТЬNULL(ПоступлениеТоваровУслуг.ДоговорКонтрагента.РасчетыВУсловныхЕдиницах, ЛОЖЬ) КАК РасчетыВУсловныхЕдиницах,
   |   ПоступлениеТоваровУслуг.ВалютаДокумента,
   |   ПоступлениеТоваровУслуг.КурсВзаиморасчетов КАК Курс,
   |   ПоступлениеТоваровУслуг.КратностьВзаиморасчетов КАК Кратность,
   |   ПоступлениеТоваровУслуг.УчитыватьНДС,
   |   ПоступлениеТоваровУслуг.СуммаВключаетНДС,
   |   ПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом КАК СубСчет
   |ИЗ
   |   Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
   |ГДЕ
   |   ПоступлениеТоваровУслуг.Ссылка = &ТекущийДокумент";
   
   Шапка = Запрос.Выполнить().Выбрать();
   Шапка.Следующий();
   
   ТабДокумент = Новый ТабличныйДокумент;
   
   ЗапросПоТоварам = Новый Запрос();
   ЗапросПоТоварам.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.СсылкаНаОбъект);
   ЗапросПоТоварам.УстановитьПараметр("Курс",            ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета));
   ЗапросПоТоварам.УстановитьПараметр("Кратность",       ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета));
   ЗапросПоТоварам.Текст = "ВЫБРАТЬ
                           |   ПоступлениеТоваровУслуг.Номенклатура КАК Номенклатура,
                           |   ПоступлениеТоваровУслуг.Номенклатура.Код КАК ТоварКод,
                           |   ПоступлениеТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмеренияНаименование,
                           |   ПоступлениеТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод,
                           |   ПоступлениеТоваровУслуг.СтавкаНДС КАК СтавкаНДС,
                           |   СУММА(ПоступлениеТоваровУслуг.Количество) КАК КоличествоПринято,
                           |   СУММА(ПоступлениеТоваровУслуг.Сумма * &Курс / &Кратность) КАК Стоимость,
                           |   СУММА(ПоступлениеТоваровУслуг.СуммаНДС * &Курс / &Кратность) КАК СуммаНДС,
                           |   СУММА(ПоступлениеТоваровУслуг.НомерСтроки) КАК НомерСтроки,
                           |   ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Содержание КАК СТРОКА(1000)) КАК ТоварНаименование
                           |ИЗ
                           |   Документ.ПоступлениеТоваровУслуг.Услуги КАК ПоступлениеТоваровУслуг
                           |ГДЕ
                           |   ПоступлениеТоваровУслуг.Ссылка = &ТекущийДокумент
                           |
                           |СГРУППИРОВАТЬ ПО
                           |   ПоступлениеТоваровУслуг.СтавкаНДС,
                           |   ПоступлениеТоваровУслуг.Номенклатура,
                           |   ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Содержание КАК СТРОКА(1000)),
                           |   ПоступлениеТоваровУслуг.Номенклатура.Код,
                           |   ПоступлениеТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
                           |   ПоступлениеТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения.Код
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |   НомерСтроки";
   
   
   Если Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить() = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
      ЗапросПоТоварам.Текст = СтрЗаменить(ЗапросПоТоварам.Текст, "Номенклатура.Код","Номенклатура.Артикул");
   КонецЕсли;
   
   ЗапросТовары = ЗапросПоТоварам.Выполнить().Выгрузить();
   //admL   
   //ЗапросМестоХранения = ЗапросПоТоварам.Выполнить().Выгрузить();
   //ЗапросМестоХранения.Свернуть("МестоХранения");
   //end
   Если СсылкаНаОбъект.Проведен И (Шапка.РасчетыВУсловныхЕдиницах
      ИЛИ (Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета И ТекущаяДата() >= '20090101000000')) Тогда
      
      Запрос = Новый Запрос;
      Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.СсылкаНаОбъект);
      Запрос.УстановитьПараметр("СчетУчетаРасчетовСКонтрагентом", ЭтотОбъект.СсылкаНаОбъект.СчетУчетаРасчетовСКонтрагентом);
      Текст =
      "ВЫБРАТЬ
      |   СУММА(Хозрасчетный.Сумма) КАК Сумма
      |ИЗ
      |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
      |ГДЕ
      |   Хозрасчетный.Регистратор = &Ссылка
      |   И Хозрасчетный.СчетКт = &СчетУчетаРасчетовСКонтрагентом
      |   И Хозрасчетный.СчетДт В
      |         (ВЫБРАТЬ РАЗЛИЧНЫЕ
      |            ПоступлениеТоваровУслуг.СчетУчета
      |         ИЗ
      |            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
      |         ГДЕ
      |            ПоступлениеТоваровУслуг.Ссылка = &Ссылка
      |
      |           ОБЪЕДИНИТЬ
      |
      |         ВЫБРАТЬ РАЗЛИЧНЫЕ
      |            ПоступлениеТоваровУслуг.СчетУчетаНДС
      |         ИЗ
      |            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
      |         ГДЕ
      |            ПоступлениеТоваровУслуг.Ссылка = &Ссылка)";
      
      Запрос.Текст = Текст;
      СуммаВзаиморасчетов = Запрос.Выполнить().Выгрузить()[0].Сумма;
      
      РасчетСуммыНДСПоСтавке =  УчетНДС.РасчетНДСвРубляхПоСтавкеДокумента(Шапка.ДатаСоставления);
      
      Если НЕ СуммаВзаиморасчетов = NULL Тогда
         
         ЗапросТовары.Колонки.Добавить("СуммаБезНДС");
         
         МассивРаспределения = Новый Массив;
         
         Для Каждого СтрокаТовар Из ЗапросТовары Цикл
            
            СуммаСНДС = СтрокаТовар.Стоимость + ?(Шапка.СуммаВключаетНДС, 0, СтрокаТовар.СуммаНДС);
            СуммаБезНДС = СуммаСНДС - СтрокаТовар.СуммаНДС;
            
            МассивРаспределения.Добавить(СуммаСНДС);
            СтрокаТовар.СуммаБезНДС = СуммаБезНДС;
            
         КонецЦикла;
         
         ЗапросТовары.Колонки.Добавить("СуммаРублевая");
         УчетНДС.РаспределитьСуммуПоСтолбцу(МассивРаспределения, СуммаВзаиморасчетов, ЗапросТовары, "СуммаРублевая");
         
         Для Каждого СтрокаТовар Из ЗапросТовары Цикл
            
            Если РасчетСуммыНДСПоСтавке Тогда
               //Выделение суммы НДС, Расчет суммы без НДС
               ЗначениеСтавкиНДС = УчетНДС.ПолучитьСтавкуНДС(СтрокаТовар.СтавкаНДС);
               
               СтрокаТовар.СуммаНДС = ?(ЗначениеСтавкиНДС = 0, 0, Окр(СтрокаТовар.СуммаРублевая * ЗначениеСтавкиНДС/(100+ЗначениеСтавкиНДС),2));
               СтрокаТовар.Стоимость = СтрокаТовар.СуммаРублевая - СтрокаТовар.СуммаНДС;
               
            Иначе
               МассивРаспределения.Очистить();
               МассивРаспределения.Добавить(СтрокаТовар.СуммаБезНДС);
               МассивРаспределения.Добавить(СтрокаТовар.СуммаНДС);
               МассивРаспределенныхСумм = ОбщегоНазначения.РаспределитьПропорционально(СтрокаТовар.СуммаРублевая, МассивРаспределения);
               Если МассивРаспределенныхСумм <> Неопределено Тогда
                  СтрокаТовар.Стоимость = МассивРаспределенныхСумм[0];
                  СтрокаТовар.СуммаНДС = МассивРаспределенныхСумм[1];
               КонецЕсли;
            КонецЕсли;
            
            Если Шапка.СуммаВключаетНДС Тогда
               СтрокаТовар.Стоимость = СтрокаТовар.Стоимость+СтрокаТовар.СуммаНДС;
            КонецЕсли;
            
         КонецЦикла;
         
      КонецЕсли;
      
   КонецЕсли;
   
   ТабДокумент = Новый ТабличныйДокумент;
   
   // Зададим параметры макета
   ТабДокумент.ПолеСверху         = 0;
   ТабДокумент.ПолеСлева          = 0;
   ТабДокумент.ПолеСнизу          = 0;
   ТабДокумент.ПолеСправа         = 0;
   ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
   
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПоступлениеТоваровУслуг_М4";
   
   //admL
   //Макет = ПолучитьОбщийМакет("М4");
   Макет = ПолучитьМакет("М4");
   //end   
   
   ОбластьМакетаШапка              = Макет.ПолучитьОбласть("Шапка");
   ОбластьМакетаЗаголовокДокумента = Макет.ПолучитьОбласть("ЗаголовокДокумента");
   ОбластьМакетаЗаголовокТаблицы   = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
   ОбластьМакетаСтрока             = Макет.ПолучитьОбласть("Строка");
   ОбластьМакетаПодвалСтрок        = Макет.ПолучитьОбласть("ПодвалСтрок");
   ОбластьМакетаИтого              = Макет.ПолучитьОбласть("Итого");
   ОбластьМакетаПодвал             = Макет.ПолучитьОбласть("Подвал");

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

   ТабДокумент.Вывести(ОбластьМакетаЗаголовокДокумента);
   
   // Выводим заголовок таблицы
   ТабДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);
   
   // Инициализация итогов в документе
   ИтогоКоличествоПринято = 0;
   ИтогоСуммаБезНДС       = 0;
   ИтогоСуммаНДС          = 0;
   ИтогоВсегоСНДС         = 0;
   Ном                    = 0;
   
   // Инициализация счетчиков страниц и строк
   НомерСтраницы   = 1;
   НомерСтроки     = 0;
   КоличествоСтрок = ЗапросТовары.Количество();

   Для Каждого ВыборкаСтрок Из ЗапросТовары Цикл

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


Вопрос: подскажите в каком месте функция получает данные по ТЧ Товары второй час сижу не могу понять? Мне это нужно чтобы вывести на форму счета учета из ТЧ Товары и  счета затрат из ТЧ Услуги

GRADUS

   ЗапросТовары = ЗапросПоТоварам.Выполнить().Выгрузить();

DmitriyF

Цитата: GRADUS от 13 ноя 2013, 23:23ЗапросТовары = ЗапросПоТоварам.Выполнить().Выгрузить();

А каким образом? Ведь в том запросе получают данные из ТЧ Услуги.

sdilshod

     "ВЫБРАТЬ
      |   СУММА(Хозрасчетный.Сумма) КАК Сумма
      |ИЗ
      |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
      |ГДЕ
      |   Хозрасчетный.Регистратор = &Ссылка
      |   И Хозрасчетный.СчетКт = &СчетУчетаРасчетовСКонтрагентом
      |   И Хозрасчетный.СчетДт В
      |         (ВЫБРАТЬ РАЗЛИЧНЫЕ
      |            ПоступлениеТоваровУслуг.СчетУчета
      |         ИЗ
      |            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
      |         ГДЕ
      |            ПоступлениеТоваровУслуг.Ссылка = &Ссылка
      |
      |           ОБЪЕДИНИТЬ
      |
      |         ВЫБРАТЬ РАЗЛИЧНЫЕ
      |            ПоступлениеТоваровУслуг.СчетУчетаНДС
      |         ИЗ
      |            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслуг
      |         ГДЕ
      |            ПоступлениеТоваровУслуг.Ссылка = &Ссылка)";
     
      Запрос.Текст = Текст;
      СуммаВзаиморасчетов = Запрос.Выполнить().Выгрузить()[0].Сумма;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск