Что не так в печатной форме УНФ создал новую печатную внешнюю форму для поступления денег в кассу, Как говорится всё по учебнику: Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); МассивНазначений.Добавить("Документ.ПоступлениеВКассу"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "Квитанция"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Квитанция' к поступлению денег в кассу"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "Квитанция", "Квитанция", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина; Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Квитанция") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"Квитанция", "Квитанция", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати,"Квитанция")); КонецЕсли; КонецПроцедуры // Печать() Функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, ИмяМакета) Экспорт Макет = ПолучитьМакет("ПФ_MXL_Квитанция"); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Квитанция"; Для каждого Квит Из МассивОбъектов Цикл сообщить(Квит.Ссылка); Запрос = Новый Запрос(); Запрос.УстановитьПараметр("ТекДок", Квит.Ссылка); Запрос.Текст = "ВЫБРАТЬ | ПоступлениеВКассу.ПринятоОт КАК ОТ, | ПоступлениеВКассу.Основание КАК ЗА, | ПоступлениеВКассу.Ссылка, | ПоступлениеВКассу.Дата КАК ДатаДок, | ПоступлениеВКассу.СуммаДокумента КАК СуммаДок |ИЗ | Документ.ПоступлениеВКассу КАК ПоступлениеВКассу |ГДЕ | ПоступлениеВКассу.Ссылка =&ТекДок"; Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); ПервыйДокумент = Истина; Если Не ПервыйДокумент Тогда ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1; ОбластьМакета.Параметры.ОТ = Шапка.ОТ; ОбластьМакета.Параметры.ЗА = Шапка.ЗА; ТабДокумент.Вывести(ОбластьМакета); ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЦикла; Возврат ТабДокумент; КонецФункции Цепляется, но при попытке печати выдает ошибку: {ОбщийМодуль.ОбщегоНазначения.Модуль(256)**: Ошибка при вызове метода контекста (Выполнить) Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); по причине: **(6, 2)**: Неоднозначное поле "Документ.Ссылка" <<?>>Документ.Ссылка В(&МассивДокументов) Ругается на функцию: Функция ПроверитьПроведенностьДокументов(знач Документы) Экспорт Результат = Новый Массив; ШаблонЗапроса = "ВЫБРАТЬ | Документ.Ссылка КАК Ссылка |ИЗ | &ИмяДокумента КАК Документ |ГДЕ | Документ.Ссылка В(&МассивДокументов) | И (НЕ Документ.Проведен)"; ТекстОбъединитьВсе = " | |ОБЪЕДИНИТЬ ВСЕ | |"; ИменаДокументов = Новый Массив; Для Каждого Документ Из Документы Цикл ИмяДокумента = Документ.Метаданные().ПолноеИмя(); Если ИменаДокументов.Найти(ИмяДокумента) = Неопределено и Метаданные.Документы.Содержит(Метаданные.НайтиПоПолномуИмени(ИмяДокумента)) Тогда ИменаДокументов.Добавить(ИмяДокумента); КонецЕсли; КонецЦикла; ТекстЗапроса = ""; Для Каждого ИмяДокумента Из ИменаДокументов Цикл Если Не ПустаяСтрока(ТекстЗапроса) Тогда ТекстЗапроса = ТекстЗапроса + ТекстОбъединитьВсе; КонецЕсли; ТекстПодзапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяДокумента", ИмяДокумента); ТекстЗапроса = ТекстЗапроса + ТекстПодзапроса; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("МассивДокументов", Документы); Если Не ПустаяСтрока(ТекстЗапроса) Тогда Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецЕсли; Возврат Результат; КонецФункции Бился бился, внаглую переписал хвост функции вместо: Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); написал: Попытка Если Не ПустаяСтрока(ТекстЗапроса) Тогда Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецЕсли; Исключение Результат = Новый Массив; КонецПопытки; Заработало и стало все печататься, но это же неправильно. Где в моей форме ошибка, из-за которой эта функция вылетает ? |
во-первых, в твоем коде (по крайней мере, выложенном здесь) НЕ вызывается функция ПроверитьДокументыПроведены() поэтому ошибки в принципе не может быть. во-вторых, кто тебя научил в цикле обходить МассивДокументов и формировать запрос для каждого??? в-третьих, нет ли у тебя реквизита "Ссылка" в этом документе? |
[quote=Uho;28900462]во-первых, в твоем коде (по крайней мере, выложенном здесь) НЕ вызывается функция ПроверитьДокументыПроведены() поэтому ошибки в принципе не может быть.[/quote] Но тем не менее программа вылетает, я так понял это для любой печати вызывается, по крайней мере для другой печатной формы так же эта процедура вызывается, но там все проходит... Пример, как создавать внешнюю печатную управляемую форму я взял с [url]http://www.1c-pro.ru/topic26882.html[/url] плюс пример [url]http://forum.aeroion.ru/topic473.html[/url] форма чека оттуда работает прекрасно. [quote=Uho;28900462]в-третьих, нет ли у тебя реквизита "Ссылка" в этом документе? [/quote] реквизита нет, я так понял для Управляемого приложения это необязательно. |
[quote=med;28903572]я так понял это для любой печати вызывается[/quote] откуда вызывается то? [quote=med;28903572]Пример, как создавать внешнюю печатную управляемую форму я взял с [/quote] Там нет такого безобразия как в (0) ТекстЗапроса [quote=med;28903572]реквизита нет, я так понял для Управляемого приложения это необязательно. [/quote] А реквизит "Документ" у этого документа есть? |
[quote=Uho;28907190]откуда вызывается то?[/quote] Ну если это принипиально то вот: // Выполняет интерактивное проведение документов перед печатью. // Если есть непроведенные документы, предлагает выполнить проведение. Спрашивает // пользователя о продолжении, если какие-то из документов не провелись и имеются проведенные. // // Параметры // ДокументыМассив - Массив - ссылки на документы, которые требуется провести перед печатью. // После выполнения функции из массива исключаются непроведенные документы. // ФормаИсточник - УправляемаяФорма - форма, из которой было вызвана команда. // // Возвращаемое значение: // Булево - есть документы для печати в параметре ДокументыМассив. // Функция ПроверитьДокументыПроведены(ДокументыМассив, ФормаИсточник = Неопределено) Экспорт ОчиститьСообщения(); ДокументыТребующиеПроведение = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(ДокументыМассив); КоличествоНепроведенныхДокументов = ДокументыТребующиеПроведение.Количество(); ................................... [quote=Uho;28907190]Там нет такого безобразия как в (0)[/quote] Неправда ваша дяденька, если сравните, то увидите , что точная копия, единственно , я конечно подправил, потому как этот пример для УТ 11, а не для УНФ [quote=Uho;28907190]А реквизит "Документ" у этого документа есть? [/quote] Никаких реквизитов у этой печатной формы нет, и никаких форм у этой ВПФ тоже нет (это сделано по аналогии с [url]http://forum.aeroion.ru/topic473.html[/url], естественно с поправкой на 8.2) |
[quote=med;28924560]Неправда ваша дяденька, если сравните, то увидите , что точная копия, единственно , я конечно подправил, потому как этот пример для УТ 11, а не для УНФ[/quote]я про первую ссылку [quote=med;28903572]Пример, как создавать внешнюю печатную управляемую форму я взял с [url]http://www.1c-pro.ru/topic26882.html[/url][/quote] там такого безобразия нет про функцию ПроверитьДокументыПроведены() я еще в (1) написал [quote=med;28924560]Никаких реквизитов у этой печатной формы нет, и никаких форм у этой ВПФ тоже нет[/quote] я разве спрашивал про реквизиты формы? |
[quote=Uho;28927632]я разве спрашивал про реквизиты формы? [/quote] Реквизит запроса ? |
[quote=Uho;28927632]про функцию ПроверитьДокументыПроведены() я еще в (1) написал[/quote] Я не понял а с чем спор то ? функция вызывается, зачем она вызывается вопрос не ко мне а к фирме 1С, то что ее не вызываю я, не означает что она не вызывается вообще при печати. [quote=Uho;28927632]там такого безобразия нет[/quote] Какого конкретно безобразия там нет ? пример тупо скопирован и исправлен под мою печатную форму, чего там такого, чего нет в примере ? |
[quote=med;28938210]Реквизит запроса ? [/quote] реквизит [b]документа[/b] [quote=Uho;28907190]А реквизит "Документ" у этого [b]документа[/b] есть? [/quote] [quote=med;28938224]Какого конкретно безобразия там нет ? [/quote] вот этого: [quote=Uho;28900462]в цикле обходить МассивДокументов и формировать запрос для каждого???[/quote] |
а как надо ? |
одним запросом |
Текущее время: 06:44. Часовой пояс GMT +3. |