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

Помогите!!! Пожалуйста!!! Знаний нет, а сделать надо(

Автор sadrain, 12 апр 2016, 13:10

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

sadrain

Есть внешняя обработка, которая создает документ "Отчет производства за смену" для определенного вида услуг. Появилось требование чтобы в этом отчете выводился также Заказ покупателя (он к примеру есть в Акте Об Оказании производственных Услуг).
Вот что есть:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Запрос = Новый Запрос;
   Запрос.Текст =  "ВЫБРАТЬ
      |   ЗатратыНаВыпускПродукцииОбороты.Регистратор КАК Ссылка,
      |   ЗатратыНаВыпускПродукцииОбороты.Период
      |ИЗ
      |   РегистрНакопления.ЗатратыНаВыпускПродукции.Обороты(, , Регистратор, ) КАК ЗатратыНаВыпускПродукцииОбороты
      |ГДЕ
      |   ЗатратыНаВыпускПродукцииОбороты.Затрата В ИЕРАРХИИ(&Затрата)
      |   И ЗатратыНаВыпускПродукцииОбороты.Период МЕЖДУ &НачДата И &КонДата
      |СГРУППИРОВАТЬ ПО
      |   ЗатратыНаВыпускПродукцииОбороты.Регистратор,
      |   ЗатратыНаВыпускПродукцииОбороты.Период
      |УПОРЯДОЧИТЬ ПО
      |   ЗатратыНаВыпускПродукцииОбороты.Период";
   Запрос.УстановитьПараметр("НачДата", НачалоМесяца(Период));
   Запрос.УстановитьПараметр("КонДата", КонецМесяца(Период));
   Запрос.УстановитьПараметр("Затрата", Справочники.Номенклатура.НайтиПоНаименованию("Гальванопокрытия",Истина));
   РезультатЗапроса = Запрос.Выполнить();
   ВыборкаДетальныеОтчетыЗаписи = РезультатЗапроса.Выбрать();
   Отчет = Неопределено;
   Пока ВыборкаДетальныеОтчетыЗаписи.Следующий() Цикл
      Документ = ВыборкаДетальныеОтчетыЗаписи.Ссылка.ПолучитьОбъект();
      ГруппаПолуфабрикаты = Справочники.Номенклатура.НайтиПоНаименованию("Гальванопокрытия");
      
      //Построителем 
      ПостроительГал = Новый ПостроительЗапроса;
      ПостроительГал.ИсточникДанных = Новый ОписаниеИсточникаДанных(Документ.РаспределениеМатериалов);
      ПостроительГал.Отбор.Добавить("Номенклатура");
      ПостроительГал.Отбор.Номенклатура.Использование = Истина;
      ПостроительГал.Отбор.Номенклатура.ВидСравнения = ВидСравнения.ВСпискеПоИерархии;
      ПостроительГал.Отбор.Номенклатура.Значение.Добавить(ГруппаПолуфабрикаты);
      
      Таблица = ПостроительГал.Результат.Выгрузить();
      
      Запрос = Новый Запрос;   
      Запрос.Текст =  "ВЫБРАТЬ ПЕРВЫЕ 1
                      |   ОтчетПроизводстваЗаСмену.Ссылка КАК Отчет
                      |ИЗ
                      |   Документ.ОтчетПроизводстваЗаСмену КАК ОтчетПроизводстваЗаСмену
                      |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
                      |      ПО ОтчетПроизводстваЗаСмену.Ссылка = КатегорииОбъектов.Объект
                      |ГДЕ
                      |   НЕ КатегорииОбъектов.Объект ЕСТЬ NULL
                      |   И КатегорииОбъектов.Категория = &КатегорияАвто
                      |   И ОтчетПроизводстваЗаСмену.Подразделение = &Подразделение
                      |   И ОтчетПроизводстваЗаСмену.ПометкаУдаления <> ИСТИНА
                      |   И ОтчетПроизводстваЗаСмену.ЗаданиеНаПроизводство = &Пустая
                      |   И ОтчетПроизводстваЗаСмену.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)";
      Запрос.УстановитьПараметр("КатегорияАвто", Справочники.КатегорииОбъектов.НайтиПоНаименованию("Загружается автоматом",истина));
      Запрос.УстановитьПараметр("Пустая", Документы.ЗаданиеНаПроизводство.ПустаяСсылка());
      Запрос.УстановитьПараметр("Подразделение", Справочники.Подразделения.НайтиПоНаименованию ("У"));
      Запрос.УстановитьПараметр("Дата",Документ.Дата);
      РезультатЗапроса = Запрос.Выполнить();
      Если Не РезультатЗапроса.Пустой() Тогда
         ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
         Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ОтчетСсылка = ВыборкаДетальныеЗаписи.Отчет;
            ОтчетОбъект = ОтчетСсылка.ПолучитьОбъект();
            Если не Отчет = ОтчетСсылка Тогда
               Отчет = ОтчетСсылка;
               ОтчетОбъект.Продукция.Очистить();
            КонецЕсли;
         КонецЦикла;
      Иначе
         ПараметрОбъектКопирования = Неопределено;
         ОтчетОбъект = Документы.ОтчетПроизводстваЗаСмену.СоздатьДокумент();
         ОтчетОбъект.ОтражатьВУправленческомУчете = Истина;
         ОтчетОбъект.ИспользоватьЗаказыНаОбслуживаниеОС = Истина;
         ОтчетОбъект.Дата = НачалоДня(Документ.Дата);
         ОтчетОбъект.УстановитьНовыйНомер();
         ОтчетОбъект.Склад =  Справочники.Склады.НайтиПоНаименованию("Склад Цеха У");
         ОтчетОбъект.Подразделение = Справочники.Подразделения.НайтиПоНаименованию ("У");
         ОтчетОбъект.ИспользоватьНаправленияВыпуска = Истина;
         ОтчетОбъект.ИспользоватьЗаказы = Истина;
         Документ.ВводитьСтатьиЗатратПоСтрокам  = Истина;
         ОтчетОбъект.Ответственный = Справочники.Пользователи.НайтиПоКоду("Иванов");
         ОтчетОбъект.Организация = Справочники.Организации.НайтиПоКоду("000000001");
         ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ОтчетОбъект,,ПараметрОбъектКопирования);
         ОтчетОбъект.ОтражатьВУправленческомУчете = Истина;
         ОтчетОбъект.Записать();
         Регистр = РегистрыСведений.КатегорииОбъектов.СоздатьНаборЗаписей();
         НовыйРегистр=Регистр.Добавить();
         НовыйРегистр.Объект= ОтчетОбъект.Ссылка;
         НовыйРегистр.категория=Справочники.КатегорииОбъектов.НайтиПоНаименованию("Загружается автоматом",истина);
         НовыйРегистр.Период = ОтчетОбъект.Дата;
         Регистр.Записать(Ложь);   
      КонецЕсли;
      Для Каждого Стр ИЗ Таблица Цикл
         СтрПродукция = ОтчетОбъект.Продукция.Добавить();
         СтрПродукция.Номенклатура = Стр.Номенклатура;
         СтрПродукция.ХарактеристикаНоменклатуры = Стр.ХарактеристикаНоменклатуры;
         СтрПродукция.Количество = Стр.Количество;
         СтрПродукция.Качество = Справочники.Качество.Новый;
         СтрПродукция.ВидВыпуска  =  Перечисления.ВидыВыпуска.Выпуск;
         СтрПродукция.НаправлениеВыпуска = Перечисления.НаправленияВыпуска.НаЗатраты;
         СтрПродукция.ПодразделениеПолучатель =  Документ.Подразделение;
         СтрПродукция.ПодразделениеОрганизацииПолучатель = Документ.ПодразделениеОрганизации;
               
СтрПродукция.Заказ = :dfbsdfbsdf: ПОДСКАЖИТЕ ЧТО СЮДА НАДО ДОПИСАТЬ
                   
                      Если ТипЗнч(Документ.Ссылка) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену") Тогда   
            СтрПродукция.ЗаказПолучатель = Стр.Заказ;
            ИначеЕсли ТипЗнч(Документ.Ссылка) = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда   
            СтрПродукция.ЗаказПолучатель = Стр.ЗаказВыпуска;
           КонецЕсли;
         СтрПродукция.Качество = Справочники.Качество.Новый;
         СтрПродукция.СтатьяЗатратПолучатель = СтрПродукция.Номенклатура.СтатьяЗатрат;
         СтрПродукция.Коэффициент = Стр.Коэффициент;
         СтрПродукция.ЕдиницаИзмерения=  Стр.ЕдиницаИзмерения;
         СтрПродукция.СтатусПартии = Перечисления.СтатусыПартийТоваров.Продукция;
         СтрПродукция.КонечнаяПродукция   =   Стр.Продукция;
         КлючСвязи = УчетСерийныхНомеров.ПолучитьНовыйКлючСвязи(ОтчетОбъект.мПараметрыСвязиСтрокТЧ, ОтчетОбъект, "Продукция", Истина);
         СтрПродукция.КлючСвязи = КлючСвязи;
         НоваяСтрока = ОтчетОбъект.ПараметрыВыпускаПродукции.Добавить();
         НоваяСтрока.КлючСвязи = КлючСвязи;
         НоваяСтрока.ВидПараметра  = Справочники.ВидыПараметровВыпускаПродукции.НайтиПоНаименованию("отчет");
         НоваяСтрока.Значение = Прав( Документ.Номер, 7);
      КонецЦикла;   
      
               Попытка
                  ОтчетОбъект.ЗаполнитьСчетаУчетаВТабЧасти(ОтчетОбъект.Продукция, "Продукция", ОтчетОбъект.ОтражатьВБухгалтерскомУчете, ОтчетОбъект.ОтражатьВНалоговомУчете);

               ОтчетОбъект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);            
            Исключение
               ОтчетОбъект.Записать(РежимЗаписиДокумента.Запись,РежимПроведенияДокумента.Неоперативный);
               Сообщить("Внимание, не провиден документ" +Документ);
            КонецПопытки;
            
   КонецЦикла;
   
КонецПроцедуры

espero2000


Теги:

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

Рейтинг@Mail.ru

Поиск