|
Печатная форма | ☑ | ||
---|---|---|---|---|
0
Gomodrila
04.04.13
✎
10:12
|
Создайте внешнюю печатную форму документа "Заказ клиента" на основе
существующей. В новой форме необходимо выделять курсивом те товары, которых нет в свободном остатке в нужном количестве на момент времени счета. Для получения данных о свободном остатке используйте регистр "СвободныеОстатки". |
|||
1
salvator
04.04.13
✎
10:12
|
(0) Понятно.
|
|||
2
butterbean
04.04.13
✎
10:13
|
создал, какие дальше будут указания??
|
|||
3
Gomodrila
04.04.13
✎
10:15
|
вобщем сделал вн.обработку, которая выводит стандартный макет.
я так понял надо отдельной процедурой сделать запрос на кол-во свободных остатноков, и при формировании формы сравнивать с запросом из заказа клиента. Проблема в том, что не могу найти где взять данные из запроса и как их интегрировать в существующий код, поставив условие. // Процедура заполняет табличный документ счета, заказа. // Процедура ЗаполнитьТабличныйДокументСчетЗаказ(ТабличныйДокумент, Запрос, ОбъектыПечати, Тип) Экспорт ДанныеПечати = Запрос.Выполнить().Выбрать(); ИспользоватьРучныеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах"); ИспользоватьАвтоматическиеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах"); ПервыйДокумент = Истина; КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки(); Пока ДанныеПечати.Следующий() Цикл Макет = ПолучитьМакет("ПФ_MXL_СчетЗаказ"); Если Не ПервыйДокумент Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказКлиента_СчетЗаказ"; ТаблицаЭтапыОплаты = ДанныеПечати.ЭтапыГрафикаОплаты.Выгрузить(); ТаблицаЭтапыОплаты.Сортировать("НомерСтроки"); ТаблицаТовары = ДанныеПечати.Товары.Выгрузить(); ТаблицаТовары.Сортировать("НомерСтроки"); ЕстьСкидки = ФормированиеПечатныхФорм.НужноВыводитьСкидки(ТаблицаТовары, ИспользоватьРучныеСкидки Или ИспользоватьАвтоматическиеСкидки); ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов); Если ЕстьСкидки И ДанныеПечати.УчитыватьНДС Тогда ОбластьКолонкаТовар = Макет.Область("ТоварСНДССоСкидкой"); ИначеЕсли ЕстьСкидки Или ДанныеПечати.УчитыватьНДС Тогда ОбластьКолонкаТовар = Макет.Область("ТоварСНДСИлиСоСкидкой"); Иначе ОбластьКолонкаТовар = Макет.Область("Товар"); КонецЕсли; Если Не ВыводитьКоды Тогда Если ЕстьСкидки И ДанныеПечати.УчитыватьНДС Тогда ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 1.35; ИначеЕсли ЕстьСкидки Или ДанныеПечати.УчитыватьНДС Тогда ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 1.2; Иначе ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки * 1.14; КонецЕсли; КонецЕсли; Если ЕстьСкидки И ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицыСНДССоСкидкой|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицыСНДССоСкидкой|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицыСНДССоСкидкой|ТоварСНДССоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицыСНДССоСкидкой|ДанныеСНДССоСкидкой"); ИначеЕсли ЕстьСкидки Тогда ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицыСоСкидкой|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицыСоСкидкой|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицыСоСкидкой|ТоварСНДСИлиСоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицыСоСкидкой|ДанныеСНДСИлиСоСкидкой"); ИначеЕсли ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицыСНДС|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицыСНДС|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицыСНДС|ТоварСНДСИлиСоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицыСНДС|ДанныеСНДСИлиСоСкидкой"); Иначе ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар"); ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные"); КонецЕсли; ЗаполнитьРеквизитыШапкиСчетЗаказ(ДанныеПечати, Макет, ТабличныйДокумент, Тип, ТаблицаЭтапыОплаты); ТабличныйДокумент.Вывести(ОбластьНомера); Если ВыводитьКоды Тогда ОбластьКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов; ТабличныйДокумент.Присоединить(ОбластьКодов); КонецЕсли; ОбластьТовар.Параметры.Товар = НСтр("ru='Товары (работы, услуги)'"); ТабличныйДокумент.Присоединить(ОбластьТовар); ТабличныйДокумент.Присоединить(ОбластьДанных); Если ЕстьСкидки И ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("СтрокаТаблицыСНДССоСкидкой|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("СтрокаТаблицыСНДССоСкидкой|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("СтрокаТаблицыСНДССоСкидкой|ТоварСНДССоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицыСНДССоСкидкой|ДанныеСНДССоСкидкой"); ИначеЕсли ЕстьСкидки Тогда ОбластьНомера = Макет.ПолучитьОбласть("СтрокаТаблицыСоСкидкой|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("СтрокаТаблицыСоСкидкой|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("СтрокаТаблицыСоСкидкой|ТоварСНДСИлиСоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицыСоСкидкой|ДанныеСНДСИлиСоСкидкой"); ИначеЕсли ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("СтрокаТаблицыСНДС|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("СтрокаТаблицыСНДС|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("СтрокаТаблицыСНДС|ТоварСНДСИлиСоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицыСНДС|ДанныеСНДСИлиСоСкидкой"); Иначе ОбластьНомера = Макет.ПолучитьОбласть("СтрокаТаблицы|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("СтрокаТаблицы|Товар"); ОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицы|Данные"); КонецЕсли; Сумма = 0; СуммаНДС = 0; ВсегоСкидок = 0; ВсегоБезСкидок = 0; НомерСтроки = 0; Для Каждого СтрокаТовары Из ТаблицаТовары Цикл Если СтрокаТовары.Отменено Тогда Продолжить; КонецЕсли; НомерСтроки = НомерСтроки + 1; ОбластьНомера.Параметры.НомерСтроки = НомерСтроки; ТабличныйДокумент.Вывести(ОбластьНомера); Если ВыводитьКоды Тогда ОбластьКодов.Параметры.Артикул = СтрокаТовары[КолонкаКодов]; ТабличныйДокумент.Присоединить(ОбластьКодов); КонецЕсли; ОбластьТовар.Параметры.Товар = ФормированиеПечатныхФорм.ПолучитьПредставлениеНоменклатурыДляПечати(СтрокаТовары.НаименованиеПолное, СтрокаТовары.Характеристика); ТабличныйДокумент.Присоединить(ОбластьТовар); ОбластьДанных.Параметры.Заполнить(СтрокаТовары); ТабличныйДокумент.Присоединить(ОбластьДанных); Сумма = Сумма + СтрокаТовары.Сумма; СуммаНДС = СуммаНДС + СтрокаТовары.СуммаНДС; Если ЕстьСкидки Тогда ВсегоСкидок = ВсегоСкидок + СтрокаТовары.СуммаСкидки; ВсегоБезСкидок = ВсегоБезСкидок + СтрокаТовары.СуммаБезСкидки; КонецЕсли; КонецЦикла; Если ЕстьСкидки И ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицыСНДССоСкидкой|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицыСНДССоСкидкой|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицыСНДССоСкидкой|ТоварСНДССоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицыСНДССоСкидкой|ДанныеСНДССоСкидкой"); ИначеЕсли ЕстьСкидки Тогда ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицыСоСкидкой|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицыСоСкидкой|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицыСоСкидкой|ТоварСНДСИлиСоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицыСоСкидкой|ДанныеСНДСИлиСоСкидкой"); ИначеЕсли ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицыСНДС|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицыСНДС|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицыСНДС|ТоварСНДСИлиСоСкидкой"); ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицыСНДС|ДанныеСНДСИлиСоСкидкой"); Иначе ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицы|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицы|Товар"); ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицы|Данные"); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьНомера); Если ВыводитьКоды Тогда ТабличныйДокумент.Присоединить(ОбластьКодов); КонецЕсли; ТабличныйДокумент.Присоединить(ОбластьТовар); Если ЕстьСкидки Тогда ОбластьДанных.Параметры.ВсегоСкидок = ВсегоСкидок; ОбластьДанных.Параметры.ВсегоБезСкидок = ВсегоБезСкидок; Если ДанныеПечати.УчитыватьНДС Тогда ОбластьДанных.Параметры.ВсегоСуммаНДС = СуммаНДС; КонецЕсли; КонецЕсли; ОбластьДанных.Параметры.Всего = ФормированиеПечатныхФорм.ФорматСумм(Сумма); ТабличныйДокумент.Присоединить(ОбластьДанных); // Вывести ИтогоНДС СоответствиеСтавокНДС = ПолучитьСоответствиеСтавокНДС(); Если ДанныеПечати.УчитыватьНДС Тогда ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицыНДС|НомерСтроки"); ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицыНДС|КолонкаКодов"); ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицыНДС|Товар"); ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицыНДС|Данные"); Для Каждого ТекСтавкаНДС Из СоответствиеСтавокНДС Цикл ПараметрыОтбора = Новый Структура(); ПараметрыОтбора.Вставить("СтавкаНДС", ТекСтавкаНДС.Ключ); ПараметрыОтбора.Вставить("Отменено", Ложь); НайденныеСтроки = ТаблицаТовары.НайтиСтроки(ПараметрыОтбора); Если НайденныеСтроки.Количество() > 0 Тогда ТаблицаТоварыНДС = ТаблицаТовары.Скопировать(НайденныеСтроки, "СуммаНДС"); ТаблицаТоварыНДС.Свернуть(,"СуммаНДС"); СоответствиеСтавокНДС.Вставить(ТекСтавкаНДС.Ключ, ТаблицаТоварыНДС[0].СуммаНДС); ТабличныйДокумент.Вывести(ОбластьНомера); Если ВыводитьКоды Тогда ТабличныйДокумент.Присоединить(ОбластьКодов); КонецЕсли; ТабличныйДокумент.Присоединить(ОбластьТовар); ОбластьДанных.Параметры.НДС = ТекстНДСПоСтавке(ТекСтавкаНДС.Ключ, ДанныеПечати.ЦенаВключаетНДС); ОбластьДанных.Параметры.ВсегоНДС = ФормированиеПечатныхФорм.ФорматСумм(ТаблицаТоварыНДС[0].СуммаНДС); ТабличныйДокумент.Присоединить(ОбластьДанных); КонецЕсли; КонецЦикла; КонецЕсли; // Вывести Сумму прописью ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью"); СуммаКПрописи = Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС); ИтоговаяСтрока = НСтр("ru='Всего наименований %Количество%, на сумму %Сумма%'"); ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Количество%", НомерСтроки); ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Сумма%", ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, ДанныеПечати.Валюта)); ОбластьМакета.Параметры.ИтоговаяСтрока = ИтоговаяСтрока; ОбластьМакета.Параметры.СуммаПрописью = ФормированиеПечатныхФорм.СформироватьСуммуПрописью(СуммаКПрописи, ДанныеПечати.Валюта); ТабличныйДокумент.Вывести(ОбластьМакета); ЗаполнитьРеквизитыПодвалаСчетЗаказ(ДанныеПечати, Макет, ТабличныйДокумент, Тип, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС); УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка); КонецЦикла; ТабличныйДокумент.АвтоМасштаб = Истина; КонецПроцедуры // ЗаполнитьТабличныйДокументСчетЗаказ() |
|||
4
Фокусник
04.04.13
✎
10:22
|
(3) Смотри снизу вверх: в ТаблицаТовары находятся данные для вывода строк в счет, а ТаблицаТовары берется из ДанныеПечати.Товары. ДанныеПечати формируются в запросе, которого нет в этой процедуре.
Чтобы не менять типовой запрос можно сделать так: Перед циклом Для Каждого ... из ТаблицаТовары получи всю номенклатуру, которая есть в ТаблицаТовары + количество. Сделай новый запрос, в котором сравни данные из ТаблицаТовары и свободные остатки. Можно сделать это в отдельной процедуре, в которую на входе передать ТаблицаТовары, в процедуре добавить и заполнить колонку "СвободныйОстаток". При выводе на печать будешь сравнивать Количество и СвободныйОстаток, если хватает, то "курсив". |
|||
5
Gomodrila
04.04.13
✎
10:48
|
так всё легко, на словах))
у меня стаж 2 недели) Говоришь сделать запрос о СвобОстатках , я так понял с условием по номенклатуре, что она должна быть равна данным из ТаблицаТовары.Номенклатура, но это же массив, а же не могу передать Массив как параметр запроса. Процедура СвободныеОстатки(ТаблицаТовары) Остатки = Новый Запрос; Остатки.Текст = "ВЫБРАТЬ | СвободныеОстаткиОстатки.Номенклатура, | СвободныеОстаткиОстатки.ВНаличииОстаток КАК Остаток |ИЗ | РегистрНакопления.СвободныеОстатки.Остатки(, Номенклатура = &Номенклатура) КАК СвободныеОстаткиОстатки"; Остатки.УстановитьПараметр("Номенклатура", ТаблицаТовары.Номенклатура); Результат = Остатки.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл КонецЦикла; КонецПроцедуры |
|||
6
Фокусник
04.04.13
✎
11:38
|
(5) >это же массив, а же не могу передать Массив как параметр запроса.
Можешь. Остатки.УстановитьПараметр("мНоменклатура", ТаблицаТовары.Выгрузить("Номенклатура")); в запросе: "Номенклатура в (&мНоменклатура)" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |