| 
    
        
     
     | 
    
  | 
Внешняя печатная форма спецификации | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        TAN1990    
     26.11.13 
            ✎
    08:12 
 | 
         
        Добрый день!
 
        Работаю в упп82 Сделала внешнюю печатную форму печати спецификации. Вызывается из справочника «Спецификации». Работает. А надо, чтобы эта печатная форма вызывалась из «требовании- накладной» при условии, что эта требование-накладная сформирована на основании заказа на производство. Т.е. в ТН на закладке «дополнительно» заполнено поле «основание». Поля с ссылкой на спецификацию в ТН нет. Оно есть только в табличной части «заказа на производство». Подскажите, пожалуйста, с чего начать? Можно ли просто переделать уже работающую внешнюю форму, вызываемую из справочника «спецификации»?  | 
|||
| 
    1
    
        shuhard    
     26.11.13 
            ✎
    08:13 
 | 
         
        (0)[Можно ли просто переделать]
 
        разрешаю  | 
|||
| 
    2
    
        butterbean    
     26.11.13 
            ✎
    08:14 
 | 
         
        эээ, а если там несколько спецификаций?     
         | 
|||
| 
    3
    
        TAN1990    
     26.11.13 
            ✎
    08:14 
 | 
         
        (2) у нас так не бывает     
         | 
|||
| 
    4
    
        TAN1990    
     26.11.13 
            ✎
    08:16 
 | 
         
        (1) как? подскажите, пожалуйста     
         | 
|||
| 
    5
    
        Diamond905    
     26.11.13 
            ✎
    08:17 
 | 
         
        (4) Так же как для справочника     
         | 
|||
| 
    6
    
        Любопытная    
     26.11.13 
            ✎
    08:19 
 | 
         
        док основание получаешь и для каждой строки ТЧ выводишь печатную форму как для справочника. Вроде все просто     
         | 
|||
| 
    7
    
        TAN1990    
     26.11.13 
            ✎
    08:21 
 | 
         
        (6) к одному заказу на производство может быть несколько ТН. Надо, чтобы выводилось не содержимое ТН, а именно спецификация на которую ссылается "заказ на производство"     
         | 
|||
| 
    8
    
        butterbean    
     26.11.13 
            ✎
    08:22 
 | 
         
        (7) твоя задача просто найти спецификацию, из первой строки заказа например     
         | 
|||
| 
    9
    
        butterbean    
     26.11.13 
            ✎
    08:23 
 | 
         
        (8)+ типа Основание.ТвояТабЧасть[0].Спецификация     
         | 
|||
| 
    10
    
        butterbean    
     26.11.13 
            ✎
    08:24 
 | 
         
        (8)+ сначала конечно проверить, что основание заполнено и это именно заказ на пр-во     
         | 
|||
| 
    11
    
        TAN1990    
     26.11.13 
            ✎
    08:29 
 | 
         
        Это код ВПФ, который работает из справочника "спецификации". Где начать 8, 9, 10?:
 
        Процедура ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка) Если ВыборкаСтрок.Количество() = 0 Тогда Возврат; КонецЕсли; ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить(); Колонка = ""; Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда ВыводитьКоды = Истина; Колонка = "Артикул"; ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда ВыводитьКоды = Истина; Колонка = "Код"; Иначе ВыводитьКоды = Ложь; КонецЕсли; ОбластьМакета = Макет.ПолучитьОбласть("ШапкаЗаголовок"); ОбластьМакета.Параметры.ТекстЗаголовка = ТекстЗаголовка; ТабДокумент.Вывести(ОбластьМакета); Область = Макет.ПолучитьОбласть(?(ВыводитьКоды, "ШапкаСКодом", "Шапка")); Если ВыводитьКоды Тогда //Область.Параметры.ИмяКолонкиКодов = Колонка; КонецЕсли; ТабДокумент.Вывести(Область); Область = Макет.ПолучитьОбласть(?(ВыводитьКоды, "СтрокаСКодом", "Строка")); Ном = 0; // Выборка выходных изделий. Пока ВыборкаСтрок.Следующий() Цикл Если НЕ ЗначениеЗаполнено(ВыборкаСтрок.Номенклатура) Тогда ОбщегоНазначения.Сообщение("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное); Продолжить; КонецЕсли; Ном = Ном + 1; Область.Параметры.Заполнить(ВыборкаСтрок); Область.Параметры.НомерСтроки = Ном; Если Колонка = "Артикул" Тогда //Область.Параметры.Артикул = ВыборкаСтрок.Артикул; ИначеЕсли Колонка = "Код" Тогда //Область.Параметры.Артикул = ВыборкаСтрок.Код; КонецЕсли; Область.Параметры.Номенклатура = СокрЛП(ВыборкаСтрок.Наименование) + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрок); Область.Параметры.НоменклатураРасшифровка = ВыборкаСтрок.Номенклатура; ТабДокумент.Вывести(Область); КонецЦикла; // Вывести подвал Область = Макет.ПолучитьОбласть("Подвал"); ТабДокумент.Вывести(Область); КонецПроцедуры // ВывестиРазделСпецификации() // Функция формирует табличный документ с печатной формой спецификации // по ГОСТ 2.106-96. // // Возвращаемое значение: // Табличный документ - печатная форма спецификации // //Функция ПечатьСпецификации() Функция Печать() Экспорт ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Спецификация"; Макет = ПолучитьМакет("Спецификация"); Запрос = Новый Запрос; //Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка); Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект); Запрос.Текст = " |ВЫБРАТЬ | СпецификацииНоменклатуры.Код КАК Код, | СпецификацииНоменклатуры.Наименование КАК Наименование, | СпецификацииНоменклатуры.Ответственный.Наименование КАК ОтветственныйНаименование |ИЗ | Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры |ГДЕ | СпецификацииНоменклатуры.Ссылка = &ТекущийЭлемент |"; Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.ТекстЗаголовка = "Спецификация номенклатуры: " + Шапка.Наименование; ТабДокумент.Вывести(ОбластьМакета); Запрос = Новый Запрос; //Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка); Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект); Запрос.Текст = " |ВЫБРАТЬ | СпецификацииНоменклатуры.Номенклатура.Код КАК Код, | СпецификацииНоменклатуры.Номенклатура.Артикул КАК Артикул, | СпецификацииНоменклатуры.Номенклатура КАК Номенклатура, | ВЫРАЗИТЬ(СпецификацииНоменклатуры.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Наименование, | СпецификацииНоменклатуры.ХарактеристикаНоменклатуры КАК Характеристика, | NULL КАК Серия, | СпецификацииНоменклатуры.Количество КАК Количество, | СпецификацииНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатуры |ГДЕ | СпецификацииНоменклатуры.Ссылка = &ТекущийЭлемент |"; ВыборкаСтрок = Запрос.Выполнить().Выбрать(); ТекстЗаголовка = "Выходные изделия"; ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка); //СсылкаНаОбъект.ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка); Запрос = Новый Запрос; //Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка); Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект); Запрос.Текст = " |ВЫБРАТЬ | СпецификацииНоменклатуры.Номенклатура.Код КАК Код, | СпецификацииНоменклатуры.Номенклатура.Артикул КАК Артикул, | СпецификацииНоменклатуры.Номенклатура КАК Номенклатура, | ВЫБОР КОГДА СпецификацииНоменклатуры.Номенклатура.НаименованиеПолное ЕСТЬ NULL ТОГДА | СпецификацииНоменклатуры.Номенклатура | ИНАЧЕ | ВЫРАЗИТЬ(СпецификацииНоменклатуры.Номенклатура.НаименованиеПолное КАК Строка(1000)) | КОНЕЦ КАК Наименование, | СпецификацииНоменклатуры.ХарактеристикаНоменклатуры КАК Характеристика, | NULL КАК Серия, | СпецификацииНоменклатуры.Количество КАК Количество, | СпецификацииНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатуры |ГДЕ | СпецификацииНоменклатуры.Ссылка = &ТекущийЭлемент |"; ВыборкаСтрок = Запрос.Выполнить().Выбрать(); ТекстЗаголовка = "Исходные комплектующие"; ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка); //СсылкаНаОбъект.ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка); Запрос = Новый Запрос; //Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка); Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект); Запрос.Текст = " |ВЫБРАТЬ | СпецификацииНоменклатуры.Номенклатура.Код КАК Код, | СпецификацииНоменклатуры.Номенклатура.Артикул КАК Артикул, | СпецификацииНоменклатуры.Номенклатура КАК Номенклатура, | ВЫБОР КОГДА СпецификацииНоменклатуры.Номенклатура.НаименованиеПолное ЕСТЬ NULL ТОГДА | СпецификацииНоменклатуры.Номенклатура | ИНАЧЕ | ВЫРАЗИТЬ(СпецификацииНоменклатуры.Номенклатура.НаименованиеПолное КАК Строка(1000)) | КОНЕЦ КАК Наименование, | СпецификацииНоменклатуры.ХарактеристикаНоменклатуры КАК Характеристика, | NULL КАК Серия, | СпецификацииНоменклатуры.Количество КАК Количество, | СпецификацииНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | Справочник.СпецификацииНоменклатуры.ВозвратныеОтходы КАК СпецификацииНоменклатуры |ГДЕ | СпецификацииНоменклатуры.Ссылка = &ТекущийЭлемент |"; ВыборкаСтрок = Запрос.Выполнить().Выбрать(); ТекстЗаголовка = "Возвратные отходы"; ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка); //СсылкаНаОбъект.ВывестиРазделСпецификации(ТабДокумент, Макет, ВыборкаСтрок, ТекстЗаголовка); // Вывести подписи ОбластьМакета = Макет.ПолучитьОбласть("Подписи"); ОбластьМакета.Параметры.Заполнить(Шапка); ТабДокумент.Вывести(ОбластьМакета); // Зададим параметры макета. ТабДокумент.ОбластьПечати = ТабДокумент.Область(2,2,ТабДокумент.ВысотаТаблицы, ТабДокумент.ШиринаТаблицы); ТабДокумент.ПолеСверху = 5; ТабДокумент.ПолеСлева = 15; ТабДокумент.ПолеСнизу = 0; ТабДокумент.ПолеСправа = 0; ТабДокумент.РазмерКолонтитулаСверху = 0; ТабДокумент.РазмерКолонтитулаСнизу = 0; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; Возврат ТабДокумент; КонецФункции // ПечатьСпецификации()  | 
|||
| 
    12
    
        TAN1990    
     26.11.13 
            ✎
    08:52 
 | 
         
        справочник "спецификация" уже не будет являться текущим документом
 
        переделать код быстро, наверное не получится  | 
|||
| 
    13
    
        Thorn-deep    
     26.11.13 
            ✎
    09:05 
 | 
         
        (1) Забыл написать "Первый нах" ....     
         | 
|||
| 
    14
    
        TAN1990    
     26.11.13 
            ✎
    09:14 
 | 
         
        (13) что первый?     
         | 
|||
| 
    15
    
        Krendel    
     26.11.13 
            ✎
    09:17 
 | 
         
        (9) Раскрою секрет, ТН не содержит спецификации ;-)     
         | 
|||
| 
    16
    
        butterbean    
     26.11.13 
            ✎
    09:18 
 | 
         
        (15) именно поэтому там написано Основание....     
         | 
|||
| 
    17
    
        TAN1990    
     26.11.13 
            ✎
    09:21 
 | 
         
        Запрос = Новый Запрос;
 
        Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект); Запрос.Текст = " |ВЫБРАТЬ | | ТребованиеНакладная.ДокументОснование КАК ДокументОснование |ИЗ | Документ.ТребованиеНакладная КАК ТребованиеНакладная |ГДЕ | ТребованиеНакладная.Ссылка = &ТекущийЭлемент |"; // что дальше с этим делать?  | 
|||
| 
    18
    
        butterbean    
     26.11.13 
            ✎
    09:22 
 | 
         
        (17) зачем это??     
         | 
|||
| 
    19
    
        TAN1990    
     26.11.13 
            ✎
    09:28 
 | 
         
        (18) А как по другому добраться до заказа на производство?     
         | 
|||
| 
    20
    
        PaulBC    
     26.11.13 
            ✎
    09:29 
 | 
         
        (17) Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект.ДокументОснование.Продукция[0].Спецификация);
 
        Перед этим куча разных условий.  | 
|||
| 
    21
    
        butterbean    
     26.11.13 
            ✎
    09:30 
 | 
         
        (19) СсылкаНаОбъект.ДокументОснование     
         | 
|||
| 
    22
    
        TAN1990    
     26.11.13 
            ✎
    09:39 
 | 
         
        (20) но в ТН нет ни продукции, ни спецификации     
         | 
|||
| 
    23
    
        TAN1990    
     26.11.13 
            ✎
    09:40 
 | 
         
        +(22) а! Дошло!     
         | 
|||
| 
    24
    
        Любопытная    
     26.11.13 
            ✎
    09:40 
 | 
         
        (22) зато есть ДокументОснование. Или просто Основание. Или какой-то другой реквизит, который хранит в себе ссылку на документ Заказ в производство.     
         | 
|||
| 
    25
    
        TAN1990    
     26.11.13 
            ✎
    09:48 
 | 
         
        (21)
 
        ЗаказНаПроизводство=СсылкаНаОбъект.ДокументОснование; Заказ на производства вытащили. Как теперь через него добраться до спецификации?  | 
|||
| 
    26
    
        Artful Den    
     26.11.13 
            ✎
    09:51 
 | 
         
        (25) сделать запрос по ТЧ Продукция документа заказ на производство.     
         | 
|||
| 
    27
    
        TAN1990    
     26.11.13 
            ✎
    10:15 
 | 
         
        Запрос = Новый Запрос;
 
        Запрос.УстановитьПараметр("ТекущийЭлемент", ЗаказНаПроизводство.Продукция[0].Спецификация); Запрос.Текст = "ВЫБРАТЬ | ЗаказНаПроизводство.Продукция.( | Спецификация | ) КАК Спецификация |ИЗ | Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство"; Так работает. А если вместо ЗаказНаПроизводство подставляем ЗаказНаПроизводство ругается  | 
|||
| 
    28
    
        TAN1990    
     26.11.13 
            ✎
    10:20 
 | 
         
        (27) там все не правильно написала
 
        Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийЭлемент", СсылкаНаОбъект.ДокументОснование.Продукция[0].Спецификация); Запрос.Текст = "ВЫБРАТЬ | ЗаказНаПроизводство.Продукция.( | Спецификация | ) КАК Спецификация |ИЗ | Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство"; Так работает. А если вместо ЗаказНаПроизводство подставляем СсылкаНаОбъект.ДокументОснование ругается  | 
|||
| 
    29
    
        TAN1990    
     26.11.13 
            ✎
    10:33 
 | 
         
        +(28) вернее не работает, а хоть ошибок не выдает при сохранении обработки.     
         | 
|||
| 
    30
    
        butterbean    
     26.11.13 
            ✎
    10:43 
 | 
         
        (29) вроде бы в (23) написала, что дошло :-)
 
        тебе нужно анализировать тип значения СсылкаНаОбъект, ну т.е. ТипЗнч(СсылкаНаОбъект) и если он равен Тип("СправочникСсылка.Спецификации"), то будет твой код из (11), а если Тип("ДокументСсылка.ТребованиеНакладная"), то будет такой же код, просто в запросах будет параметр не СсылкаНаОбъект, а СсылкаНаОбъект.ДокументОснование.Продукция[0].Спецификация... тебе об этом в (20) и написали  | 
|||
| 
    31
    
        TAN1990    
     26.11.13 
            ✎
    11:08 
 | 
         
        (30)
 
        Выдает ошибку: Не удалось сформировать внешнюю печатную форму! Поле объекта не обнаружено (ДокументОснование) хотя в ТН поле "основание" заполнено  | 
|||
| 
    32
    
        butterbean    
     26.11.13 
            ✎
    11:09 
 | 
         
        (31) явно забыла тип значения реквизита СсылкаНаОбъект сделать составным :-)     
         | 
|||
| 
    33
    
        Serg_1960    
     26.11.13 
            ✎
    11:09 
 | 
         
        (имхо) Не вижу практического смысла в (0). Имеет смысл только для очень специфичного случая заполнения документов.
 
        Если в заказе на производство только одна строка продукции; если ТЧ с материалами заполнена по спецификации; если не используются аналоги материалов; если соблюдается соответствие "один заказ - одно требование"; если... Короче: не вижу смысла печатать спецификацию "из-под" требования-накладной.  | 
|||
| 
    34
    
        TAN1990    
     26.11.13 
            ✎
    11:19 
 | 
         
        (30, 32) А я вообще не стала проверять ТипЗнч(СсылкаНаОбъект) 
 
        Зачем? У меня во внешней печатной форме есть реквизит "СсылкаНаОбъект" и его тип уже "ДокументСсылка.ТребованиеНакладная" Просто до (31) тип у меня был равен "СправочникСсылка.СпецификацииНоменклатуры" Сейчас изменила на "ДокументСсылка.ТребованиеНакладная" и ВСЕ ЗАРАБОТАЛО! СПАСИБО ВАМ БОЛЬШОЕ!!!!  | 
|||
| 
    35
    
        TAN1990    
     26.11.13 
            ✎
    11:26 
 | 
         
        (33) 
 
        "если ТЧ с материалами заполнена по спецификации; если не используются аналоги материалов; если соблюдается соответствие " с этим согласна - это у нас все соблюдается. "один заказ - одно требование" - а с этим не согласна. Какая разница, сколько ТН. Хоть 150 шт. Заказ то все равно один. И печать спецификаций по нему.  | 
|||
| 
    36
    
        butterbean    
     26.11.13 
            ✎
    11:44 
 | 
         
        (34) просто теперь все это не будет работать из справочника Спецификации     
         | 
|||
| 
    37
    
        Serg_1960    
     26.11.13 
            ✎
    12:03 
 | 
         
        "...А надо, чтобы эта печатная форма вызывалась из «требовании- накладной»"(0)     
         | 
|||
| 
    38
    
        TAN1990    
     26.11.13 
            ✎
    12:30 
 | 
         
        (36) прицепила разные печатные формы с соответствующим типом реквизита СсылкаНаОбъект и к ТН, и к спецификации. Так что и там, и там работает     
         | 
|||
| 
    39
    
        TAN1990    
     26.11.13 
            ✎
    12:34 
 | 
         
        Да. Еще. Если поле основание пустое или не равно "Заказ на производство" ошибку выдает.
 
        "Не удалось сформировать внешнюю печатную форму! Поле объекта не обнаружено (Продукция)" Проверку же надо вставить  | 
|||
| 
    40
    
        TAN1990    
     26.11.13 
            ✎
    13:04 
 | 
         
        Функция Печать() Экспорт
 
        Если Тип(СсылкаНаОбъект.ДокументОснование)=Тип("ДокументСсылка.ЗаказНаПроизводство") Тогда ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Спецификация"; ......... Возврат ТабДокумент; Иначе ОбщегоНазначения.Сообщение("НЕТ!!!", СтатусСообщения.Важное); КонецЕсли; КонецФункции // ПечатьСпецификации() Что то у меня это не работает  | 
|||
| 
    41
    
        TAN1990    
     26.11.13 
            ✎
    14:01 
 | 
         
        Функция Печать() Экспорт
 
        Если ТипЗнч(СсылкаНаОбъект.ДокументОснование) = Тип("ДокументСсылка.ЗаказНаПроизводство") Тогда ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Спецификация"; Макет = ПолучитьМакет("Спецификация"); ... ... ... Возврат ТабДокумент; Иначе Предупреждение(НСтр("ru = 'Требование-накладная сформирована НЕ по ЗАКАЗУ НА ПРОИЗВОДСТВО'")); КонецЕсли; КонецФункции // ПечатьСпецификации() // А вот это работает! Ура!  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |