К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Что не так в печатной форме

med
0 - 05.02.2013 - 08:42
УНФ
создал новую печатную внешнюю форму для поступления денег в кассу, Как говорится всё по учебнику:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
МассивНазначений.Добавить("Документ.ПоступлениеВКа ссу");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Квитанция");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Квитанция' к поступлению денег в кассу");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Квитанция", "Квитанция", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПеча тныхФорм, "Квитанция") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекц ию(КоллекцияПечатныхФорм,"Квитанция", "Квитанция", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати,"Квитанция"));
КонецЕсли;
КонецПроцедуры // Печать()

Функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, ИмяМакета) Экспорт
Макет = ПолучитьМакет("ПФ_MXL_Квитанция");
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Квитанция";
Для каждого Квит Из МассивОбъектов Цикл
сообщить(Квит.Ссылка);
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ТекДок", Квит.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеВКассу.ПринятоОт КАК ОТ,
| ПоступлениеВКассу.Основание КАК ЗА,
| ПоступлениеВКассу.Ссылка,
| ПоступлениеВКассу.Дата КАК ДатаДок,
| ПоступлениеВКассу.СуммаДокумента КАК СуммаДок
|ИЗ
| Документ.ПоступлениеВКассу КАК ПоступлениеВКассу
|ГДЕ
| ПоступлениеВКассу.Ссылка =&ТекДок";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ПервыйДокумент = Истина;
Если Не ПервыйДокумент Тогда
ТабДокумент.ВывестиГоризонтальныйРазделительСтрани ц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
ОбластьМакета.Параметры.ОТ = Шапка.ОТ;
ОбластьМакета.Параметры.ЗА = Шапка.ЗА;
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.ВывестиГоризонтальныйРазделительСтрани ц();
КонецЦикла;
Возврат ТабДокумент;
КонецФункции
Цепляется, но при попытке печати выдает ошибку:

{ОбщийМодуль.ОбщегоНазначения.Модуль(256)**: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка");
по причине:
**(6, 2)**: Неоднозначное поле "Документ.Ссылка"
<<?>>Документ.Ссылка В(&МассивДокументов)

Ругается на функцию:

Функция ПроверитьПроведенностьДокументов(знач Документы) Экспорт

Результат = Новый Массив;

ШаблонЗапроса =
"ВЫБРАТЬ
| Документ.Ссылка КАК Ссылка
|ИЗ
| &ИмяДокумента КАК Документ
|ГДЕ
| Документ.Ссылка В(&МассивДокументов)
| И (НЕ Документ.Проведен)";

ТекстОбъединитьВсе =
"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|";

ИменаДокументов = Новый Массив;
Для Каждого Документ Из Документы Цикл
ИмяДокумента = Документ.Метаданные().ПолноеИмя();
Если ИменаДокументов.Найти(ИмяДокумента) = Неопределено
и Метаданные.Документы.Содержит(Метаданные.НайтиПоПо лномуИмени(ИмяДокумента)) Тогда
ИменаДокументов.Добавить(ИмяДокумента);
КонецЕсли;
КонецЦикла;

ТекстЗапроса = "";
Для Каждого ИмяДокумента Из ИменаДокументов Цикл
Если Не ПустаяСтрока(ТекстЗапроса) Тогда
ТекстЗапроса = ТекстЗапроса + ТекстОбъединитьВсе;
КонецЕсли;
ТекстПодзапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяДокумента", ИмяДокумента);
ТекстЗапроса = ТекстЗапроса + ТекстПодзапроса;
КонецЦикла;

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("МассивДокументов", Документы);

Если Не ПустаяСтрока(ТекстЗапроса) Тогда
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка");
КонецЕсли;
Возврат Результат;

КонецФункции
Бился бился, внаглую переписал хвост функции

вместо:
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка");
написал:
Попытка
Если Не ПустаяСтрока(ТекстЗапроса) Тогда
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("С сылка");
КонецЕсли;
Исключение
Результат = Новый Массив;
КонецПопытки;

Заработало и стало все печататься, но это же неправильно. Где в моей форме ошибка, из-за которой эта функция вылетает ?



Uho
1 - 05.02.2013 - 10:12
во-первых, в твоем коде (по крайней мере, выложенном здесь) НЕ вызывается функция ПроверитьДокументыПроведены() поэтому ошибки в принципе не может быть.

во-вторых, кто тебя научил в цикле обходить МассивДокументов и формировать запрос для каждого???

в-третьих, нет ли у тебя реквизита "Ссылка" в этом документе?
med
2 - 05.02.2013 - 12:26
Цитата:
Сообщение от Uho Посмотреть сообщение
во-первых, в твоем коде (по крайней мере, выложенном здесь) НЕ вызывается функция ПроверитьДокументыПроведены() поэтому ошибки в принципе не может быть.
Но тем не менее программа вылетает, я так понял это для любой печати вызывается, по крайней мере для другой печатной формы так же эта процедура вызывается, но там все проходит...
Пример, как создавать внешнюю печатную управляемую форму я взял с
http://www.1c-pro.ru/topic26882.html
плюс пример http://forum.aeroion.ru/topic473.html
форма чека оттуда работает прекрасно.
Цитата:
Сообщение от Uho Посмотреть сообщение
в-третьих, нет ли у тебя реквизита "Ссылка" в этом документе?
реквизита нет, я так понял для Управляемого приложения это необязательно.
Uho
3 - 05.02.2013 - 14:51
Цитата:
Сообщение от med Посмотреть сообщение
я так понял это для любой печати вызывается
откуда вызывается то?

Цитата:
Сообщение от med Посмотреть сообщение
Пример, как создавать внешнюю печатную управляемую форму я взял с
Там нет такого безобразия как в (0)

ТекстЗапроса
Цитата:
Сообщение от med Посмотреть сообщение
реквизита нет, я так понял для Управляемого приложения это необязательно.
А реквизит "Документ" у этого документа есть?
med
4 - 06.02.2013 - 12:45
Цитата:
Сообщение от Uho Посмотреть сообщение
откуда вызывается то?
Ну если это принипиально то вот:
// Выполняет интерактивное проведение документов перед печатью.
// Если есть непроведенные документы, предлагает выполнить проведение. Спрашивает
// пользователя о продолжении, если какие-то из документов не провелись и имеются проведенные.
//
// Параметры
// ДокументыМассив - Массив - ссылки на документы, которые требуется провести перед печатью.
// После выполнения функции из массива исключаются непроведенные документы.
// ФормаИсточник - УправляемаяФорма - форма, из которой было вызвана команда.
//
// Возвращаемое значение:
// Булево - есть документы для печати в параметре ДокументыМассив.
//
Функция ПроверитьДокументыПроведены(ДокументыМассив, ФормаИсточник = Неопределено) Экспорт

ОчиститьСообщения();
ДокументыТребующиеПроведение = ОбщегоНазначенияВызовСервера.ПроверитьПроведенност ьДокументов(ДокументыМассив);
КоличествоНепроведенныхДокументов = ДокументыТребующиеПроведение.Количество();
...................................
Цитата:
Сообщение от Uho Посмотреть сообщение
Там нет такого безобразия как в (0)
Неправда ваша дяденька, если сравните, то увидите , что точная копия, единственно , я конечно подправил, потому как этот пример для УТ 11, а не для УНФ
Цитата:
Сообщение от Uho Посмотреть сообщение
А реквизит "Документ" у этого документа есть?
Никаких реквизитов у этой печатной формы нет, и никаких форм у этой ВПФ тоже нет (это сделано по аналогии с http://forum.aeroion.ru/topic473.html, естественно с поправкой на 8.2)
Uho
5 - 06.02.2013 - 14:45
Цитата:
Сообщение от med Посмотреть сообщение
Неправда ваша дяденька, если сравните, то увидите , что точная копия, единственно , я конечно подправил, потому как этот пример для УТ 11, а не для УНФ
я про первую ссылку

Цитата:
Сообщение от med Посмотреть сообщение
Пример, как создавать внешнюю печатную управляемую форму я взял с http://www.1c-pro.ru/topic26882.html
там такого безобразия нет

про функцию ПроверитьДокументыПроведены() я еще в (1) написал

Цитата:
Сообщение от med Посмотреть сообщение
Никаких реквизитов у этой печатной формы нет, и никаких форм у этой ВПФ тоже нет
я разве спрашивал про реквизиты формы?
med
6 - 07.02.2013 - 06:19
Цитата:
Сообщение от Uho Посмотреть сообщение
я разве спрашивал про реквизиты формы?
Реквизит запроса ?
med
7 - 07.02.2013 - 06:25
Цитата:
Сообщение от Uho Посмотреть сообщение
про функцию ПроверитьДокументыПроведены() я еще в (1) написал
Я не понял а с чем спор то ? функция вызывается, зачем она вызывается вопрос не ко мне а к фирме 1С, то что ее не вызываю я, не означает что она не вызывается вообще при печати.
Цитата:
Сообщение от Uho Посмотреть сообщение
там такого безобразия нет
Какого конкретно безобразия там нет ? пример тупо скопирован и исправлен под мою печатную форму, чего там такого, чего нет в примере ?
Uho
8 - 07.02.2013 - 09:36
Цитата:
Сообщение от med Посмотреть сообщение
Реквизит запроса ?
реквизит документа
Цитата:
Сообщение от Uho Посмотреть сообщение
А реквизит "Документ" у этого документа есть?
Цитата:
Сообщение от med Посмотреть сообщение
Какого конкретно безобразия там нет ?
вот этого:
Цитата:
Сообщение от Uho Посмотреть сообщение
в цикле обходить МассивДокументов и формировать запрос для каждого???
med
9 - 11.02.2013 - 12:23
а как надо ?
Uho
10 - 11.02.2013 - 14:20
одним запросом


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены