Имя: Пароль:
1C
1С v8
Отчет производства за смену, Печатная форма
0 NovichokAlena
 
05.06.15
06:14
Утро доброе, помогите пожалуйста. делаю печатную форму для документа "отчет произ-ва за смену". Нужно следующее: если табличная часть "продукция" не пустая, то выводим ее и табличную часть "распределение материалов", если "продукция" пустая, то выводим табличную часть "возвратные отходы" вместе с табличной частью "распределение возвратных отходов". вот код. когда нажимаю на печать, если есть продукция, то форма открывается, если нет, то выходит ошибка: Не удалось сформировать внешнюю печатную форму!
Поле объекта не обнаружено (ВозвратныеОтходы)

1С:Предприятие 8.3 (8.3.6.1977), Управление производственным предприятием, редакция 1.3 (1.3.24.2)


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

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

        
        МассивСтрок = СсылкаНаОбъект.РаспределениеВозвратныхОтходов.НайтиСтроки(СтруктураПоиска);
        Если МассивСтрок.Количество() > 0 Тогда
            ТабДокумент.Вывести(ОбластьГруппаВозвратныеОтходы);
            Для Каждого Элемент Из МассивСтрок Цикл
                ОбластьСтрокаОтходы.Параметры.Заполнить(Элемент);
                ОбластьСтрокаОтходы.Параметры.Заказ    = ОбщегоНазначения.ПолучитьНомерНаПечать(Элемент.ЗаказНЗП);
                
                Цена = 0;

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

        
        МассивСтрок = СсылкаНаОбъект.РаспределениеВозвратныхОтходов.НайтиСтроки(СтруктураПоиска);
        Если МассивСтрок.Количество() > 0 Тогда
            ТабДокумент.Вывести(ОбластьГруппаВозвратныеОтходы);
            Для Каждого Элемент Из МассивСтрок Цикл
                ОбластьСтрокаОтходы.Параметры.Заполнить(Элемент);
                ОбластьСтрокаОтходы.Параметры.Заказ    = ОбщегоНазначения.ПолучитьНомерНаПечать(Элемент.ЗаказНЗП);
                
                Цена = 0;

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

    
    //ОбластьИтогиЗатраты
    //ОбластьИтогиЗатраты.Параметры.Количество = КоличествоИТОГО;
    ОбластьИтогиЗатраты.Параметры.Стоимость = СтоимостьИТОГО;
        
    ТабДокумент.Вывести(ОбластьИтогиЗатраты);
    
    //ОбластьПодвалВыпуск
    ОбластьПодвалВыпуск.Параметры.Ответственный = ОбщегоНазначения.ФамилияИнициалыФизЛица(СсылкаНаОбъект.Ответственный.Наименование);
    ТабДокумент.Вывести(ОбластьПодвалВыпуск);
    
    
    ТабДокумент.АвтоМасштаб = Истина;
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект.ПолучитьОбъект()), СсылкаНаОбъект);
    Возврат Неопределено;
    
    
    
КонецФункции
1 lxndr
 
05.06.15
06:28
СтруктураПоиска = Новый Структура("Продукция,Заказ");
  ....
....
....
        СтруктураПоиска.ВозвратныеОтходы = (Стр.Номенклатура);
        СтруктураПоиска.Заказ      = (Стр.Заказ);
2 NovichokAlena
 
05.06.15
06:35
(1) я правильно поняла, нужно так :

СтруктураПоиска = Новый Структура("ВозвратныеОтходы",Заказ");
3 lxndr
 
05.06.15
06:38
(2) ага, только не вместо, а вместе
4 NovichokAlena
 
05.06.15
06:40
(3) теперь такая ошибка: Не удалось сформировать внешнюю печатную форму!
Ошибка при вызове метода контекста (НайтиСтроки): Неверное имя колонки
5 yavasya
 
05.06.15
06:43
так ты проверяй ТаблицаПродукция=Продукция.выгрузить();
если ТаблицаПродукция.количество()=0 тогда  ...
6 NovichokAlena
 
05.06.15
06:49
(5) в коде есть проверка
7 NovichokAlena
 
05.06.15
07:03
Помогите!!очень нужно. я только учусь и сама не разберусь!
8 Шестая колонна
 
05.06.15
07:30
Осмелюсь предположить, что все же указано неверное имя колонки... В ТЧ РаспределениеВозвратныхОтходов точно есть колонки "ВозвратныеОтходы" И "Заказ"?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн