|
Внешняя печатная форма спецификации | ☑ | ||
---|---|---|---|---|
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 = 'Требование-накладная сформирована НЕ по ЗАКАЗУ НА ПРОИЗВОДСТВО'")); КонецЕсли; КонецФункции // ПечатьСпецификации() // А вот это работает! Ура! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |