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.410
    Симпатии:
    316
    Баллы:
    104
    Правильно я понимаю, что такого рода проблема только с документом счет-фактура, и только тогда когда он вводится на основании Реализации товаров? Предлагаю посмотреть почему при создании новой формы Модифицированность у нее Ложь. Если с этим разберетесь, я так понимаю будет уже выводиться соответствующий диалог, и проблема будет снята?
  3. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

    Регистрация:
    15 янв 2010
    Сообщения:
    141
    Симпатии:
    0
    Баллы:
    26
    Правильно)а вы подскажите мне пожалуйста в какой момент форме присваивается Модифицированность - Истина.
  4. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Насколько я понимаю, сразу при создании и есть истина.
    Смотри, у тебя конечно не типовая, на сколько изменено не знаешь. Находишь в документе Реализация участок кода, в котором создается счет-фактура.
    У меня к примеру это выглядит так:
    Код:
    Процедура ВвестиСчетФактуру(ДокументОбъект, ФормаДокумента, ВидСчетаФактуры = "СчетФактураВыданный", Отбор = Неопределено) Экспорт
    
    Если (Не ДокументОбъект.Проведен) и (Не ДокументОбъект.ПометкаУдаления) Тогда
    Ответ = Вопрос("Счет-фактуру нельзя вводить на основании не проведенного документа! Провести документ?", РежимДиалогаВопрос.ДаНет);
    
    Если Ответ = КодВозвратаДиалога.Да Тогда
    
    Попытка
    
    // выполняем проведение документа
    Если НЕ ФормаДокумента.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение) Тогда
    Возврат;
    КонецЕсли;
    
    Исключение
    Возврат;
    КонецПопытки;
    
    Иначе
    Возврат;
    КонецЕсли;
    
    КонецЕсли;
    
    //Попытаемся найти счет фактуру
    СчетФактура = УчетНДС.НайтиПодчиненныйСчетФактуру(ДокументОбъект.Ссылка, ВидСчетаФактуры, Отбор);
    
    ОбъектСчетаФактуры = Неопределено;
    
    //Если потерпели неудачу, то необходимо ввести новый документ 
    Если (Не ЗначениеЗаполнено(СчетФактура))
    И (Не ДокументОбъект.ПометкаУдаления) Тогда
    //Вводим новый документ на основании нашего
    Если ДокументОбъект.Модифицированность() Тогда
    Предупреждение("Документ был изменен! Сначала следует записать документ!");
    Возврат;
    КонецЕсли;
    
    ОбъектСчетаФактуры = Документы[ВидСчетаФактуры].ПолучитьФормуНовогоДокумента( , ФормаДокумента, Строка(ДокументОбъект));
    ОбъектСчетаФактуры.ДокументыОснования.Очистить();
    // Если установлен отбор по виду счета-фактуры (на реализацию/на аванс...) - устанавливаем его в новом документе
    Если ТипЗнч(Отбор) = Тип("Структура") И Отбор.Свойство("ВидСчетаФактуры") Тогда
    ОбъектСчетаФактуры.ВидСчетаФактуры = Отбор.ВидСчетаФактуры;
    КонецЕсли;
    ОбъектСчетаФактуры.Заполнить(ДокументОбъект.Ссылка); 
    // Откроем форму для редактирования счета фактуры
    ОбъектСчетаФактуры.Открыть();
    
    ИначеЕсли ЗначениеЗаполнено(СчетФактура) Тогда
    // Откроем форму для редактирования счета фактуры
    СчетФактура.ПолучитьФорму( , ФормаДокумента, Строка(ДокументОбъект)).Открыть();
    
    Иначе
    Предупреждение("На основании документов, помеченных на удаление, ввод счетов-фактур не предусмотрен.");
    
    КонецЕсли;
    
    КонецПроцедуры // ВвестиСчетФактуру()
    
    
    Т.е. видишь в коде строку
    Код:
    ОбъектСчетаФактуры = Документы[ВидСчетаФактуры].ПолучитьФормуНовогоДокумента( , ФормаДокумента, Строка(ДокументОбъект));
    
    
    
    после нее ОбъектСчетаФактуры.Модифицированность уже истина, т.е. при создании. Посмотри как у тебя создается счет-фактура.


    P.S. ну на ты, так на ты.. :) че уж там...
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Вот вам еще один вариант попробовать:
  6. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Нет, а в отладчике посмотри, после вот этой строки:
    Код:
    ОбъектСчетаФактуры = Документы[ВидСчетаФактуры].ПолучитьФормуНовогоДокумента( , ФормаДокумента, Строка(ДокументОбъект));
    
    
    
    у тебя ОбъектСчетаФактуры.Модифицированность чему равно? Ну и пройдись отладчиком до конца этой процедуры, посмотри, не меняется ли это свойство.


    ну и как костыль, попробуй то что я написал выше, про Пустая:
    Код:
    Если СсылкаНаОбъект.Пустая() Тогда
    Возврат;
    КонецЕсли;
    
    
  8. TopicStarter Overlay
    Alive
    Offline

    Alive Опытный в 1С

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

    chizik05

    Регистрация:
    1 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Хоть и прошло уже больше полугода, но вопрос остался

    Здесь, как я понял, рассказано о том, как проверить во внешней форме: Новый документ или нет.

    Но! Заголовок звучал: Определить записан ли объект во внешней печатной форме.
    Перефразирую: имеется записанный уже документ, открыта форма, если пользоваться штатной обработкой печати - то она проверит модифицированность документа.объект, а если вывести кнопочку "Печать по умолчанию" именно на внешнюю печатную форму, то возникает следующая ситуация: в форму передается ссылка на текущий документ, мы получаем его объект (но объект уже сохранненный, записанный, который не похож на объект в видимой форме)

    поэтому проверить на модифицированность пока не знаю как. Есть светлые головы?

    Пример: в системе уже сделан документ (например заказ), проведен, вы решили поменять количество по позиции с 1, например, на 2. и не записали
    при нажатии на печать_моей_внешней_формы во внешней форме произойдет проверка "работасдиалогами.роверитьМодифицированность(СсылкаНаОбъект.ПолучитьОбъект())" которая покажет ЛОЖЬ, тк создается новый Объект по сохраненному до изменения.

    Ну и спокойненько выведет на печать 1 вместо 2.
  10. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Почему во внешней форме? Проверка модифицированности произойдет до вызова ВПФ.

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

    Возможно у вас старый релиз конфигурации, где этого еще не было?
  11. chizik05
    Offline

    chizik05

    Регистрация:
    1 апр 2011
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Спасибо, shurikvz!

    И вправду, в том релизе, где я это делаю - этого еще не было сделано.
    Посмотрел в обновленной конфигурации - все работает четко.

    Помогли!

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