1с записать документ перед печатью
Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.
Причем данное поведение не у всех пользователей. Собственно вопрос - какая настройка/право отвечает за данное поведение?
КОнфигурация Альфа-авто:Автосервис + Автозапчасти, релиз 4.1.01.23
Никакими правами данное поведение программы не регулируется.
Тогда непонятно почему поведение отличается у разных пользователей?
Ключевой момент - документ не модифицирован
конкретно проблема в документе "Заказ-наряд"
Проблема еще заключается в том, что процедуры вызова печатных форм закрыты - соответственно поглядеть в каком случае срабатывает не получается
там не вызов печати, а обработку проведения проверять надо, у меня такое было с ЗН, после какого-то обновления конфигурации ПРОФ 5
Как-то так, при этом документ без открывания печатался, а после открытия из формы документа требовал перепровести. После повторной записи документа - печатался из формы.
Он вами не меняется. Меняется сам при открытии. Код при открытии документа написан таким образом что вызывает изменение документа.
Да нет. Скорее всего случайно. При открытии происходит много разных действий. Например подсвечивается сумма договора или еще какое информационной поле на форме. Но т.к. при установки этих информационных полей система думает что поменялся весь документ приходиться в конце процедуры при открытии снимать признак изменения. Этот момент и "маскирует" изменение реквизита документа.
"Печать непроведенных документов" и "Печать документа без сохранения" - если оба разрешить, то можно печатать.
Пришлось потыкаться и вписать что-то такое:
Для того, что бы табель разрешить печатать без перепроведения, но на остальные документы оставить запрет.
Оставлю тут, т.к. яндекс первой строкой на эту ветку посылает по запросу "Документ перед печатью должен быть перепроведен"
"Документ изменен! для печати необходимо его записать и провести. Записать и провести?" Выдает при печати счет-фактуры выданной в бп.
Делаю с помощью групповой обработки пере проводкой (реквизит провести устанавливаю провести) и запускаю, после обработки та же песня.
Так же про бывал через операции\Проведение документов.
так же беда, но когда руками пере провожу конкретную счет фактуру все в норме.
Как быть может у кого какая-нибудь обработка есть? или написать обработку которая бы записала и пере провела их всех? поможет?
(1) Дела не в проведенности документа, а в модифицированности при открытии. У вас не дописывалась БП? Модуль СФ ПриОткрытии или ПередОткрытием?
(2) elvis1917, да тоже думал при открытии что-нибудь стоит, но, если открыть и провести руками документ, а потом открыть он уже не спросит, что документ изменился!
(3) Значит какой-то реквизит меняет типовое открытие. Можно посмотреть процедуру ОпределениеПараметровСчетаФактуры();
или
отладчиком ловить когда появляется Модифицированность() = Истина
В том и дело. При первом открытии что-то модифицируется, ты его записываешь.
А при повторном открытии все реквизиты совпадают и нет признака модифицированности..
Смотри отладчиком процедуры ПередОткрытием, ПриОткрытии именно формы СФ
(4),(3), да Вы правы, глянул в отладчике
, теперь такой вопрос если я программно открою, запишу и закрою форму должно все получиться?
код примерно такой наверное будет
(7) ну и соответственно еще этот код выполняется..
Счет фактура выгружается в базу .
(8) Может быть доработать выгрузку заполнением необходимых реквизитов, чтобы не запускать каждый раз эту обработку по открытию-закрытию формы?
Но когда он закрывает, задает вопрос сохранять или нет как можно его обойти, передать какой-нибудь параметр при закрытии, чтобы он автоматически закрывал ?
Я на такое натыкался когда счета фактуры делаются кодом, если в них не заполнены
КодВидаСчетаФактуры,
код вида операции то тогда при открытии у нег осрабатывает модифицированность
А не проще вместо перезаписи в том месте, где появляется модифицированность добавить:
Модифицированность = ЭтаФорма.Модифицированность$
Если ДокументыОснования.Количество() = 0 Тогда
ДокументыОснования.Добавить();
КонецЕсли;
ЭтаФорма.Модифицированность = Модифицированность;
//или ЭтаФорма.Модифицированность = Ложь;
или в конце "ПриОткрытии" формы проверять
Если НЕ ЭтотОбъект.Новый() Тогда
Об.ОбменДанными.Загрузка = Истина;
Об.Записать(РежимЗаписиДокумента.Запись);
при этом идет прямая перезапись без изменения движений - не важно проведен ли документ.
Хотя если вдуматься - зачем-то эта модификация делалась? А если она такая ненужная то о чем думали разработчики. А может оформить подписку "ПередЗаписьюДокумента" и в ней реализовать (в своем отдельном модуле) это заполнение:
Если ДокументыОснования.Количество() = 0 Тогда
ДокументыОснования.Добавить();
КонецЕсли;
тогда исходная форма документа не будет тронута - нет проблем с обновлениями, все записанные документы всегда корректно заполнены - также нет проблем при втором открытии :)
Здравствуйте! Подскажите пожалуйста как в БСП правильно выполнить проверку по условию перед печатью табличного документа. Например: В одном из справочников не заполнен какой-то реквизит, значит нужно оповестить пользователя и отменить печать, к сожалению смог найти только как передавать параметры в процедуру печати, но для меня это понятно, а вот ситуация описанная выше загнала меня в тупик, надеюсь на вашу помощь.
(1) При описании команды печати в ДобавитьКомандыПечати заполните добавляемой команде свойство "Обработчик" — ваш переопределяемый клиентский обработчик для этой команды. В него пробросятся ПараметрыПечати.
В нем делаете любые действия, в вашем случае проверка на заполнение реквизита (через вызов сервера).
Если условие выполнено — вызываете УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(), если нет — исключение.
(1)Есть в модуле объекта событие ОбработкаПроверкиЗаполнения, как в документах так и в справочниках. Используйте ее. Все равно перед печатью, вы проводите запись. Вызывать можно методом ПроверитьЗаполнение() В справочнике.
(1) При описании команды печати в ДобавитьКомандыПечати заполните добавляемой команде свойство "Обработчик" — ваш переопределяемый клиентский обработчик для этой команды. В него пробросятся ПараметрыПечати.
В нем делаете любые действия, в вашем случае проверка на заполнение реквизита (через вызов сервера).
Если условие выполнено — вызываете УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(), если нет — исключение.
(12) Благодарю! Вопрос решен, все получилось, хоть и читал в документации БСП про этот обработчик, но не обратил на него внимание. Всем спасибо!
Добрый день.
Не подскажите, пытаюсь сделать этим методом вызов печати с условием. И все вроде хорошо до того момента пока не вызываю УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(). Там есть параметр ВладелецФормы, я в него передаю форму из параметра печати (Тип Форма клиентского приложения) на что получаю ошибку: Ошибка отображения типов: Отсутствует отображение для типа 'ФормаКлиентскогоПриложения'. Такая ошибка обычно появляется, когда пытаешься что-то не то с клиента на сервер передать, но я в данном случае вроде ничего не передаю. Общий модуль клиенсткий. В отладчике форму спокойно читает, посмотрел в типовых модулях, там все тоже самое делается. Уже всю голову сломал, не подскажите куда стоит копать?
А зачем именно внутри процедуры печати? К примеру, есть у вас документ, в нем процедура "Печать" в модуле менеджера. В самом начале этой процедуры нельзя написать что-нибудь типа
Добавьте в процедуру ДобавитьКомандыПечати проверку на проведение документа. В проведенном документе все необходимые реквизиты уже должны быть заполнены.
(4) Но я печатаю из справочника. И реквизит, на который проверка находиться в другом справочнике. Суть не в этом, а как бы сделать условие, которым можно отменить печать табличного документа.
(5) А если добавить условие видимости команды печати?
(6) Но мне нужно, чтобы команда печати была доступна не зависимо от чего либо, просто данные для заполнения печатной формы находятся в разных местах и может возникнуть ситуация, что пользователь просто не заполнит эти данные, вот я и хочу сделать обработку такого варианта развития событий.
Думаю наверное проводить проверку в подключаемых командах по имени команды сделать условие
Столкнулся с таким траблом. Имеем некую форму документа прихода, на форме кнопка печать. Изменяем количество, нажимаем кнопку печать - документ сам волюнтариски перезаписывается. Как бы это счастье отключить? (Версия 8.2.14.519)
(0) Это шастя нужно рубить на корню. Печатать можно только проведенный и не модифицированный документ. Иначе в сад.
(7) Ну в типовых допустим если спрашивает записать, а ты отказываешься что происходит?
Наверняка она не печатает. А надо как-раз наоборот. Чтоб печатало и не записывало. Желаю сделать все не по правилам. Свободы хочется.
(8) переписывать надо всё, при печати обычно запросы юзают, а если не запишеш - он вернёт старые значения. В чем проблема? если самописка дак мы щас в небо пальцем тыкаем, я хз как там написана печать
В обработчик печати добавь условие на Модифицированность и Проведен. Если Модифицированность - Истина или проведен = Ложь выдавай предупреждение.
ИМХО, автозапись документа - зло.
Чтоб печатало и не записывало - первый косяк и тебе скажут "твоя sranaja 1C даёт неправильные остатки".
(11) "твоя sranaja 1C даёт неправильные остатки". - не в этом дело. Просто не люблю когда меня обкладывают красными флажками. Ну, раз нельзя ентот менизЬм победить, придется его возглавить.
(8) Для своей свободы проанализируй обработчик кнопки печать. Наверняка в нём есть и запись документа.
(12) В самой конфе, все просто, никаких принудительных записей документа при печати нет. Сама платформа сделана так, чтобы при печати документ записывался. Я так думаю.
+(20) Посмотри процедуру "ФормированиеПечатнойФормы".
В неё-то и должен находиться оператор Записать.
Или вызывать еще какую-то процедуру для записи.
(22) Сранно.
А та первая функция ФормированиеТабличногоДокумента(ПараметрКоманды) откель вызывается? Ну не могёт быть такого, если не сделали подписку на нажатие кнопки ;)
Для понимания особенностей записи и проведения документа в форме следует, прежде всего, разделять особенности записи самого объекта (ДокументОбъект) и особенности работы расширения формы. Расширение формы документа действует, если основной реквизит формы имеет тип ДокументОбъект. Оно обеспечивает специфическую функциональность формы при редактировании и записи документа. Задача расширения заключается в реализации удобного для пользователя поведения формы. Но собственно запись и проведение документа выполняет, разумеется, объект, являющийся реквизитом формы. Расширение документа обрабатывает различные команды пользователя, выполняет предварительные проверки и другие сервисные действия, а затем вызывает запись объекта. Запись объекта выполняется так же, как и если бы она вызывалась средствами встроенного языка. То есть с точки зрения объекта запись в форме и запись средствами языка ничем не различаются. Таким образом, расширение обеспечивает некоторую сервисную функциональность, обращаясь в конечном итоге к функциональности объекта. Следует учитывать, что расширение формы действует, только если используются механизмы формы и не действует, если выполняется обращение непосредственно к объекту. Например, если вызвать метод Записать() у объекта ДокументОбъект, то никакие действия расширения формы не будут выполняться. Чтобы они выполнялись нужно вызывать метод ЗаписатьВФорме().
Далее мы рассмотрим те сервисные действия, которые обеспечивает расширение формы документа. В данном разделе, мы опишем только те действия, которые специфичны именно для расширения формы документа и не будем касаться общих действий, которые поддерживаются расширениями всех объектов.
Установка даты документа
При открытии формы нового документа, если дата документа не установлена (равна значению типа Дата по умолчанию), то документу устанавливается рабочая дата. Следует заметить, что используется именно рабочая дата, а не текущая (если не установлено использование текущей даты в качестве рабочей). Это дает возможность пользователю настроить рабочую дату так, чтобы новые документы вводились определенной датой. При этом в качестве даты устанавливается начало дня (дата без времени), даже если в качестве рабочей даты выступает текущая дата. Но если свойство АвтоВремя имеет значение НеИспользовать, и рабочая дата равна текущей, то устанавливается текущая дата, вместе со временем. Таким образом, для варианта АвтоВремя = НеИспользовать при открытии берется рабочая дата (если она отличается от текущей) или текущая дата вместе со временем, а для остальных вариантов установка времени откладывается на момент записи документа.
При записи нового документа в форме если свойство АвтоВремя имеет значение отличное от НеИспользовать, и не используется оперативное проведение, и время документа пустое (0:00:00), то выполняется автоматическая установка времени на основании значения свойства АвтоВремя. Действие расширения формы в этом случае аналогично вызову метода УстановитьВремя() с вариантом выбранном в свойстве АвтоВремя и с использованием журналов документа.
Расширение формы так же предоставляет команды для установки времени документа в начало дня, конец дня, перед предыдущим и за последующим документом.
Установка режима записи
При нажатии кнопки "ОК", если для документа в метаданных разрешено проведение, документ записывается в режиме проведения.
Кроме того, расширение формы предоставляет две отдельные команды для записи с проведением и записи с отменой проведения.
При любой записи документа в форме, если установлено свойство расширения формы ПриЗаписиПерепроводить и документ проведен, то выполняется запись в режиме проведения. Это позволяет исключить ситуацию, когда пользователь изменит документ, а движения документа не будут обновлены.
Установка режима оперативного проведения
При записи документа в форме, расширение формы выполняет установку режима проведения (оперативное или неоперативное проведение). Установка выполняется по следующему алгоритму.
Вначале если свойство ИспользоватьРежимПроведения имеет значение Авто выполняется первичный подбор режима проведения из вариантов Оперативный, Неоперативный и Запрашивать.
Если у пользователя нет права на неоперативное проведение – используется оперативное проведение.
Если документ не проведен – используется оперативное проведение.
Если дата документа равна текущей, а время меньше или равно текущему, то используется режим Запрашивать. Здесь и далее в этой статье сравнение даты имеется в виду без учета времени, а сравнение времени описывается отдельно.
Если дата документа меньше текущей, то используется неоперативное проведение.
Если дата документа равна текущей и время больше текущего – используется оперативное проведение.
Дальнейшие действия системы определяются уже исходя из трех вариантов (Оперативный, Неоперативный и Запрашивать) установленных непосредственно в свойстве ИспользоватьРежимПроведения или на основании описанного алгоритма для варианта Авто.
Если дата документа меньше текущей, используется оперативный режим и у пользователя есть права на неоперативное проведение, то пользователю предлагается использовать неоперативный режим. Если пользователь отказывается, то запись документа отменяется.
Если дата документа меньше текущей, используется оперативный режим и у пользователя нет права на неоперативное проведение, то запись документа отменяется.
Если дата документа меньше текущей и используется режим Запрашивать, то в зависимости от наличия прав на неоперативное проведение или выбирается неоперативный режим (без запроса пользователя), или запись документа отменяется.
Если дата документа больше текущей и используется оперативный режим, то запись документа отменяется. Штатное поведение расширения формы не разрешает проведение документа завтрашней датой, даже если у пользователя есть права на неоперативное проведение. Это объясняется тем, что после появления документов проведенных завтрашней датой текущие остатки регистров используемых проводимыми оперативно документами перестают соответствовать реальным остаткам и механизм оперативного проведения для всех пользователей перестает работать адекватно.
Далее если используется режим Запрашивать, то пользователю выдается диалог с выбором режима проведения.
Полученный таким образом режим проведения (Оперативный или Неоперативный) используется при выполнении записи документа.
Проверка прав
При открытии формы документа, если документ проведен, а у пользователя нет права "Интерактивное изменение проведенных", то расширение переводит форму в режим ТолькоПросмотр.
При записи документа в форме выполняется проверка прав на интерактивное проведение и интерактивную отмену проведения в соответствии с текущим режимом записи.
Считывание движений
При открытии формы документа, если есть табличные поля, связанные с движениями (наборами записей) объекта редактируемого в форме, то эти движения считываются из базы данных и соответственно отображаются в табличных полях.
Читайте также: