0
- 05.02.2013 - 08:42
|
УНФ создал новую печатную внешнюю форму для поступления денег в кассу, Как говорится всё по учебнику: Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); МассивНазначений.Добавить("Документ.ПоступлениеВКа ссу"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "Квитанция"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Квитанция' к поступлению денег в кассу"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "Квитанция", "Квитанция", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина; Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПеча тныхФорм, "Квитанция") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекц ию(КоллекцияПечатныхФорм,"Квитанция", "Квитанция", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати,"Квитанция")); КонецЕсли; КонецПроцедуры // Печать() Функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, ИмяМакета) Экспорт Макет = ПолучитьМакет("ПФ_MXL_Квитанция"); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Квитанция"; Для каждого Квит Из МассивОбъектов Цикл сообщить(Квит.Ссылка); Запрос = Новый Запрос(); Запрос.УстановитьПараметр("ТекДок", Квит.Ссылка); Запрос.Текст = "ВЫБРАТЬ | ПоступлениеВКассу.ПринятоОт КАК ОТ, | ПоступлениеВКассу.Основание КАК ЗА, | ПоступлениеВКассу.Ссылка, | ПоступлениеВКассу.Дата КАК ДатаДок, | ПоступлениеВКассу.СуммаДокумента КАК СуммаДок |ИЗ | Документ.ПоступлениеВКассу КАК ПоступлениеВКассу |ГДЕ | ПоступлениеВКассу.Ссылка =&ТекДок"; Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); ПервыйДокумент = Истина; Если Не ПервыйДокумент Тогда ТабДокумент.ВывестиГоризонтальныйРазделительСтрани ц(); КонецЕсли; ПервыйДокумент = Ложь; НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1; ОбластьМакета.Параметры.ОТ = Шапка.ОТ; ОбластьМакета.Параметры.ЗА = Шапка.ЗА; ТабДокумент.Вывести(ОбластьМакета); ТабДокумент.ВывестиГоризонтальныйРазделительСтрани ц(); КонецЦикла; Возврат ТабДокумент; КонецФункции Цепляется, но при попытке печати выдает ошибку: {ОбщийМодуль.ОбщегоНазначения.Модуль(256)**: Ошибка при вызове метода контекста (Выполнить) Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка"); по причине: **(6, 2)**: Неоднозначное поле "Документ.Ссылка" <<?>>Документ.Ссылка В(&МассивДокументов) Ругается на функцию: Функция ПроверитьПроведенностьДокументов(знач Документы) Экспорт Результат = Новый Массив; ШаблонЗапроса = "ВЫБРАТЬ | Документ.Ссылка КАК Ссылка |ИЗ | &ИмяДокумента КАК Документ |ГДЕ | Документ.Ссылка В(&МассивДокументов) | И (НЕ Документ.Проведен)"; ТекстОбъединитьВсе = " | |ОБЪЕДИНИТЬ ВСЕ | |"; ИменаДокументов = Новый Массив; Для Каждого Документ Из Документы Цикл ИмяДокумента = Документ.Метаданные().ПолноеИмя(); Если ИменаДокументов.Найти(ИмяДокумента) = Неопределено и Метаданные.Документы.Содержит(Метаданные.НайтиПоПо лномуИмени(ИмяДокумента)) Тогда ИменаДокументов.Добавить(ИмяДокумента); КонецЕсли; КонецЦикла; ТекстЗапроса = ""; Для Каждого ИмяДокумента Из ИменаДокументов Цикл Если Не ПустаяСтрока(ТекстЗапроса) Тогда ТекстЗапроса = ТекстЗапроса + ТекстОбъединитьВсе; КонецЕсли; ТекстПодзапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяДокумента", ИмяДокумента); ТекстЗапроса = ТекстЗапроса + ТекстПодзапроса; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("МассивДокументов", Документы); Если Не ПустаяСтрока(ТекстЗапроса) Тогда Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка"); КонецЕсли; Возврат Результат; КонецФункции Бился бился, внаглую переписал хвост функции вместо: Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка"); написал: Попытка Если Не ПустаяСтрока(ТекстЗапроса) Тогда Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка"); КонецЕсли; Исключение Результат = Новый Массив; КонецПопытки; Заработало и стало все печататься, но это же неправильно. Где в моей форме ошибка, из-за которой эта функция вылетает ? | | ||
1
- 05.02.2013 - 10:12
|
во-первых, в твоем коде (по крайней мере, выложенном здесь) НЕ вызывается функция ПроверитьДокументыПроведены() поэтому ошибки в принципе не может быть. во-вторых, кто тебя научил в цикле обходить МассивДокументов и формировать запрос для каждого??? в-третьих, нет ли у тебя реквизита "Ссылка" в этом документе? | | ||
2
- 05.02.2013 - 12:26
| Цитата:
Пример, как создавать внешнюю печатную управляемую форму я взял с http://www.1c-pro.ru/topic26882.html плюс пример http://forum.aeroion.ru/topic473.html форма чека оттуда работает прекрасно. реквизита нет, я так понял для Управляемого приложения это необязательно. | | ||
3
- 05.02.2013 - 14:51
| откуда вызывается то? Там нет такого безобразия как в (0) ТекстЗапроса А реквизит "Документ" у этого документа есть? | | ||
4
- 06.02.2013 - 12:45
| Ну если это принипиально то вот: // Выполняет интерактивное проведение документов перед печатью. // Если есть непроведенные документы, предлагает выполнить проведение. Спрашивает // пользователя о продолжении, если какие-то из документов не провелись и имеются проведенные. // // Параметры // ДокументыМассив - Массив - ссылки на документы, которые требуется провести перед печатью. // После выполнения функции из массива исключаются непроведенные документы. // ФормаИсточник - УправляемаяФорма - форма, из которой было вызвана команда. // // Возвращаемое значение: // Булево - есть документы для печати в параметре ДокументыМассив. // Функция ПроверитьДокументыПроведены(ДокументыМассив, ФормаИсточник = Неопределено) Экспорт ОчиститьСообщения(); ДокументыТребующиеПроведение = ОбщегоНазначенияВызовСервера.ПроверитьПроведенност ьДокументов(ДокументыМассив); КоличествоНепроведенныхДокументов = ДокументыТребующиеПроведение.Количество(); ................................... Неправда ваша дяденька, если сравните, то увидите , что точная копия, единственно , я конечно подправил, потому как этот пример для УТ 11, а не для УНФ Никаких реквизитов у этой печатной формы нет, и никаких форм у этой ВПФ тоже нет (это сделано по аналогии с http://forum.aeroion.ru/topic473.html, естественно с поправкой на 8.2) | | ||
5
- 06.02.2013 - 14:45
| Цитата:
Цитата:
про функцию ПроверитьДокументыПроведены() я еще в (1) написал я разве спрашивал про реквизиты формы? | | ||
6
- 07.02.2013 - 06:19
| Реквизит запроса ? | | ||
7
- 07.02.2013 - 06:25
| Я не понял а с чем спор то ? функция вызывается, зачем она вызывается вопрос не ко мне а к фирме 1С, то что ее не вызываю я, не означает что она не вызывается вообще при печати. Какого конкретно безобразия там нет ? пример тупо скопирован и исправлен под мою печатную форму, чего там такого, чего нет в примере ? | | ||
8
- 07.02.2013 - 09:36
| реквизит документа вот этого: | | ||
9
- 11.02.2013 - 12:23
| а как надо ? | | ||
10
- 11.02.2013 - 14:20
| одним запросом | |
| Интернет-форум Краснодарского края и Краснодара |