8.х Определить записан ли объект во внешней печатной форме

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Alive, 27 май 2010.

  1. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Помогите решить проблему. Во внешней печатной форме хочу определить записан объект или нет. Пишу так СсылкаНаОбъект.ЭтоНовый() . В итоге при отладке мне выдается сообщение, что метод не найден. Может конечно как-то не правильно использую метод, а может вообще по другому надо.помогите разобраться!!
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не понял.. А как он может быть не записан? Что за объект?
    Поподробнее расскажите, что вы хотите сделать.
  3. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Счет-фактура, только созданная и не записанная. нажимаю печать , выбираю внешнюю печатную форму.если обращали внимания в типовой счет-фактуре не выводится сообщение, просящее записать документ перед печатью. поэтому мне надо определить новая счет-фактура или нет во внешней печатной форме.
  4. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Конфигурация типовая? В типовых еще до вызова ВПФ проверяется:
    Код:
    Если ЭтоНовый() Тогда
    Предупреждение("Документ можно распечатать только после его записи");
    Возврат;
    КонецЕсли;
    
    Если Не РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) Тогда
    Возврат;
    КонецЕсли;
    
  5. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    В счет-фактуре он проверяет новый документ или нет только когда заходит в процедуру Печать(). а у меня печатная форма внешняя.а значит он заходит сразу в свою функцию печать.вот мне и надо там тоже проверить Новый СсылкаНаОбъект или нет
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Почему вы так решили? Stack_G вам написал уже как в типовых осуществляется проверка, и счет-фактура не исключение.
  7. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    В других документах происходит как мне и написал Stack_G, но в счет фактуре видимо иначе.
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Пожалуйста код печати СФ из типовой:
    Код:
    Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
    
    Если ЭтоНовый() Тогда
    Предупреждение("Документ можно распечатать только после его записи");
    Возврат;
    ИначеЕсли Не УправлениеДопПравамиПользователей.РазрешитьПечатьНепроведенныхДокументов(Проведен) Тогда
    Предупреждение("Недостаточно полномочий для печати непроведенного документа!");
    Возврат;
    КонецЕсли;
    
    Если Не РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) Тогда
    Возврат;
    КонецЕсли;
    
    Если Найти(ИмяМакета, "СчетФактура") <> 0 Тогда
    
    бла бла бла...
    ТабДокумент = ПечатьСчетаФактуры(ДанныеДляПечати);
    
    ИначеЕсли ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда
    
    ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);
    
    Если ТабДокумент = Неопределено Тогда
    Возврат
    КонецЕсли; 
    
    КонецЕсли;
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, ЭтотОбъект.Метаданные().Представление()), Ссылка);
    
    КонецПроцедуры // Печать
    
    
  9. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Это код печати.....т.е. когда печатается встроенная!!а когда печатается внешняя, то он сюда не заходит!!
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Если документ не записан, то заходит.
  11. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    ты прям сейчас в отладке посмотрел именно для внешней печатной формы?потому что у меня не заходит!и вообще вопрос состоял не в этом, а в том как узнать записан объект или нет уже в функции.
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Да специально прямо сейчас глянул. Пока счет-фактура не записана - вызывается данная процедура модуля объекта.

    В любом случае - ЭтоНовый() функция не ДокументСсылка, а ДокументОбъект.

    Т.е.
    Код:
    ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
    Если ДокОбъект.ЭтоНовый() Тогда
    
    
    
  13. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Почему у меня тогда не заходит? если использовать СсылкаНаОбъект.ПолучитьОбъект, то выходит ошибка "Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!"
  14. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Боюсь, что так не прокатит, мы же получим новый экземпляр объекта...

    Автору - покажите Ваш код процедуры Печать того документа, куда подключаете ВПФ.
  15. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    все таки я не пойму как у тебя заходит в эту процедуру.вот смотри при нажатии на кнопку Печать заходит в процедуру

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

    УниверсальныеМеханизмы.ОткрытьФормуВыбораПечатныхФормОбъекта(ЭтотОбъект, ЭтаФорма);

    КонецПроцедуры // ОсновныеДействияФормыПечать()

    в Процедуре УниверсальныеМеханизмы.ОткрытьФормуВыбораПечатныхФормОбъекта

    Форма = ПолучитьОбщуюФорму("ФормаВыбораПечатныхФорм", ФормаВладелец, Объект);

    Если Форма.ОткрытьМодально() <> Истина Тогда
    Возврат;
    КонецЕсли;

    // Печать макета объекта
    Для каждого СтрокаКнопки Из Форма.ЭлементыФормы.ДеревоМакетовПечати.ВыделенныеСтроки Цикл

    Расшифровка = СтрокаКнопки.Расшифровка;

    Если ТипЗнч(Расшифровка) = Тип("Структура") и Расшифровка.ВидПечатнойФормы = Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма Тогда
    ТабДокумент = НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка); -вот здесь он уходит на мою функцию печать, и в типовую уже не заходит.

    ЭтоДокумент = Метаданные.Документы.Содержит(Объект.Метаданные());
    НапечататьДокумент(ТабДокумент, 0, Форма.НаПринтер, ?(ЭтоДокумент, ОбщегоНазначения.СформироватьЗаголовокДокумента(Объект), Строка(Объект)), Объект.Ссылка, Расшифровка);
    Иначе
    Объект.Печать(Расшифровка, 0, Форма.НаПринтер);
    КонецЕсли;

    КонецЦикла;
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    В ФормеВыбораПечатныхФорм посмотрите процедуру "ПередОткрытием()". В ней есть такой кусок:
    Код:
    	// Установить заголовок
    Заголовок = "Печать: " + Объект;
    Если Не ВладелецФормы = Неопределено Тогда
    Если Не РаботаСДиалогами.ПроверитьМодифицированностьВФорме(Объект, ВладелецФормы) Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    
    далее в процедуре ПроверитьМодифицированностьВФорме идет следущий код:
    Код:
    	Результат = Ложь;
    
    Если Форма.Модифицированность Тогда
    
    Проведен    = Метаданные.Документы.Содержит(Объект.Метаданные()) И Объект.Проведен;
    СтрПроведен = ?(Проведен, " и провести","");
    
    Ответ = ЗадатьВопрос("Документ изменен. Для печати его необходимо записать "+ СтрПроведен +".
    |Записать" + СтрПроведен + "?",
    РежимДиалогаВопрос.ОКОтмена, 
    КодВозвратаДиалога.Отмена,
    "Документ изменен");
    
    
  17. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Эту процедуру я тоже смотрела.В счет-фактуре Форма.модицизированности = Ложь при печати даже типовой печатной формы, т.е. сюда вот он тоже не заходит
    Если Форма.Модифицированность Тогда
    ...
  18. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Так вы тестировали? что происходит если пытаетесь печатать измененный документ?
  19. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Если измененный то да, но когда с-ф создана на основании реализации и не изменена, а сразу собирается печататься, то туда уже не заходит.
  20. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ой, вы девушка.. Тогда вам скидка на эмоциональность.. :)

    При вводе счет-фактуры на основании реализации Модифицированность - истина.
    (Проверил в отладчике только что.. :) )

Поделиться этой страницей