Изменение реквизитов дока без перепроведения |
Я |
01.08.16 — 14:48
Можно ли изменить в некоторых видах доков реквизит с одного на другой без перепроведения?
Напрм. в документе «Акт сверки» был указан некорректный контрагент «Эквайер», необходимо его поменять на контрагента «Сбербанк».
Также в документах «Отчет о розн. продажах», «Платежное поручение» поменять реквизит договор с «договор эквайринга» на «договор сбербанка». Доки 2014 года, поэтому документы перепроводить нельзя. Обработка поиск и замена дублирующих не поможет так как нужно чтоб в базе остались оба реквизита, но в части доков один реквизит а в другой части новый(другой) реквизит.
1 — 01.08.16 — 14:48
Загрузка=Истина;
2 — 01.08.16 — 14:53
групповая обработка справочников и документов меняет реквизиты но не перепроводит доки.
Но толку то? В движениях будут старые справочники
3 — 01.08.16 — 14:55
(2) буду уточнять насчет движении! иначе смысла нет в смене реквизитов:).
4 — 01.08.16 — 14:58
обработка УниверсальныйРедакторРеквизитов может даже регистры менять вроде
5 — 01.08.16 — 15:09
(0) Нет, нет и ещё раз нет. Нельзя изменять реквизиты, которые участвуют в движениях или оказывают влияние на их формирование.
Хотя… с другой стороны… если очень хочется… то можно
Можно обработкой «синхронизировано» вносить изменения и в сам документ и в его движения. Это как бы не совсем «перепроведение».
6 — 01.08.16 — 15:11
объектДокумент.ОбменДанными.Загрузка = Истина;
объектДокумент.Записать(РежимЗаписиДокумента.Запись);
В принципе достаточно, чтобы в большинстве типовых документов не проводилось никаких проверок при записи документа и при записи он не делал никаких движений (не изменялись существующие и не появлялись новые).
7 — 01.08.16 — 15:13
Но если, не дай бог, кто-то перепроведет документ — то изменятся движения и могут измениться остатки и обороты. Тогда прощай баланс
8 — 01.08.16 — 15:18
(7) Ну это понятно. Но может человек хочет коммент в документе поменять, или другой реквизит не влияющий на движения, но чтобы не сбить последовательность и не отправить док в обмен.
9 — 01.08.16 — 15:19
Аааа, гоню, он таки договор хочет поменять. Ну если он точно знает что делает, то дело его.
10 — 01.08.16 — 18:15
Уточнение
1) изменить нужно реквизиты в доках, это ладно можно сделать типовой групповой обработкой
2) также нужно изменить движения во всех регистрах в которых участвует этот измененный
реквизит, иначе толку…как написал в (2)..сформируют отчет или тот же Акт сверки а данные
останутся теми же.
3) перепроводить доки нельзя так как доки еще 2014 года, конфа Управление торговлей доработанная,
доки это напрм. отчеты о розничных продажах…и неизвестно что начнется при перепроведении продаж:)
База УРИБ сразу вопрос, эти изменения нужны бухам в головной базе,
неизвестно что будет при обмене в периферийных:)
Скорее всего нужно будет написать обработку которая будет изменять движения только в тех
регистрах где по условию встречается измененный реквизит, чтоб не затронуть другие движения.
Вообщем менять только те регистры где участвует наш новый измененый реквизит.
А вот что будет с остатками и оборотами незнаю:)
И еще нужно будет посмотреть сами регистры чтоб узнать что является
регистратором для этого регистра, можно обработкой напрямую к ним обращатся и изменять их?:)
11 — 01.08.16 — 19:14
>>Скорее всего нужно будет написать обработку
b_ru
12 — 01.08.16 — 19:14
можно просто скачать «Инструменты разработчика»
Иногда возникает необходимость внести незначительные изменения в уже проведенный документ.
«Незначительные» в данном контексте означает такие изменения, которые не влияют на движения
регистров (и вообще на любые процедуры, выполняемые в процессе проведения документа). Самым простым примером может служить изменение поля «Комментарий».
Однако движку V7 абсолютно безразлично, влияют ли внесённые в документ изменения на состояние регистров,
или нет. Если документ был изменен его надо перепровести. Ну а где проведение задним числом, там и восстановление границы последовательности, и прочие маленькие радости администраторов баз данных V7.
В статье описан технический прием, позволяющий обойти обозначенную проблему.
Для решения, очевидно, нужно использовать методы ПриЗаписиПерепроводить() и Записать(). Пробуем сделать по-простому: на элемент формы «Комментарий» вешаем функцию ПриВводеКомментария(), в которой написано следующее:
Процедура ПриВводеКомментария()
ПриЗаписиПерепроводить(0);
Записать();
ПриЗаписиПерепроводить(1);
КонецПроцедуры
Так же нужно не забыть проверить состояние документа перед изменением нашего поля. Если документ уже был изменен очевидно, записывать его без перепроведения было бы некорректно. Это тоже просто:
Процедура ПриВводеКомментария()
НужноПерепроводить=?(Модифицированность()=0,0,1);
Если НужноПерепроводить=0 Тогда
ПриЗаписиПерепроводить(0);
Записать();
ПриЗаписиПерепроводить(1);
КонецЕсли;
КонецПроцедуры
К сожалению, «просто» не всегда означает «правильно». Такая схема не работает, поскольку при изменении любого реквизита движок V7 сразу же ставит флажок модифицированности. То есть в нашей процедуре метод Модифицированность() вернет единицу в любом случае.
Но и этого можно избежать, правда, принеся в жертву наглядность. Поле для редактирования реквизита заменяем на текстовое поле, которое изображает текущее состояние реквизита (в поле «формула» нужно занести идентификатор реквизита, в нашем случае «Комментарий»). И рядом добавляем кнопку, на которую вешаем нашу процедуру.
Но нам еще нужно будет организовать изменение реквизита. Окончательный результат:
Процедура ВыборКомментария()
НужноПерепроводить=?(Модифицированность()=0,0,1);
НовыйКомментарий=СокрЛП(Комментарий);
ВвестиСтроку(НовыйКомментарий,»Введите комментарий»,400,1);
Если СокрЛП(Комментарий)=СокрЛП(НовыйКомментарий) Тогда
Возврат;
КонецЕсли;
Комментарий=СокрЛП(НовыйКомментарий);
Если НужноПерепроводить=0 Тогда
ПриЗаписиПерепроводить(0);
Записать();
ПриЗаписиПерепроводить(1);
КонецЕсли;
КонецПроцедуры
Таким же образом можно разделаться с реквизитами любого типа: процедура будет такой же, только блок выбора значения для реквизита будет немного различаться (а если подойти
творчески, то можно написать универсальную процедуру, которая сама определяет тип и
выдаёт нужный диалог).
Кроме достоинства (оно действительно работает), у описанной техники есть и недостатки. Их два:
- Уже упоминавшаяся потеря привычной наглядности. Частично ее можно избежать, заменив текст на поле реквизита, недоступное для редактирования. Особенно хорошо это работает для флажков, чисел и агрегатных типов данных.
- Если таких «неважных» реквизитов в документе несколько, и пользователю требуется изменить их все, то на сервер «обрушится» несколько последовательных сохранений одного и того же документа.
Разрешение пользователям редактировать отдельные реквизиты документа без перепроведения или просто одни реквизиты разрешать, а другие запрещать.
Разрешение пользователям редактировать отдельные реквизиты документа без перепроведения или просто одни реквизиты разрешать, а другие запрещать.
Иногда необходимо разрешить редактирование некоторых реквизитов документа без перепроведения. Например: Комментарий, АдресКонтрагента, КонтактноеЛицо. Ещё бывает необходимым разрешить изменение отдельных реквизитов в закрытых документах. Например, поставить отметку о состоянии доставки и написать комментарий.
В модуле менеджера документа пишем функцию, которая определяет массив допустимых к редактированию реквизитов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Возвращает массив имён реквизитов, разрешённых для изменнения без перепроведения. // Если получен параметр типа Массив, то имена реквизитов добавляются в него Функция ПолучитьМассивРеквизитовИзменяемыхБезПерепроведения(МассивРеквизитовДопустимыхКИзменению = Неопределено) Экспорт Если Не ТипЗнч(МассивРеквизитовДопустимыхКИзменению) = Тип(«Массив») Тогда МассивРеквизитовДопустимыхКИзменению = Новый Массив; КонецЕсли; //Типовые реквизиты МассивРеквизитовДопустимыхКИзменению.Добавить(«Грузополучатель»); МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьНомер»); МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьДата»); МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьНомер»); МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьВыдана»); МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьЧерезКого»); МассивРеквизитовДопустимыхКИзменению.Добавить(«Комментарий»); МассивРеквизитовДопустимыхКИзменению.Добавить(«АдресДоставки»); //Добавленные реквизиты Возврат МассивРеквизитовДопустимыхКИзменению; КонецФункции |
В модуле ОбщегоНазначения пишем функции общие для всех документов.
// сравниваем реквизиты документа из базы данных с записываемым объектом // имена изменённых реквизитов запихываем в массив Функция ПолучитьСписокИзменённыхРеквизитов(ДокОбъект) Экспорт СписокИзменённыхРеквизитов = Новый Массив; Ссылка = ДокОбъект.Ссылка; мдОбъекта = ДокОбъект.Метаданные(); // сравниваем стандартные реквизиты Для Каждого Реквизит из мдОбъекта.СтандартныеРеквизиты Цикл Если ДокОбъект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда СписокИзменённыхРеквизитов.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; |
В модуле документа ПредЗаписью разрешаем запись без пререпроведения в случае, если были изменены только реквизиты, не вызывающие перепроведение.
РедактированиеЗаднимЧислом = Ложь; МассивРеквизитовДопустимыхКИзменению = Документы.РеализацияТоваровУслуг.ПолучитьМассивРеквизитовИзменяемыхБезПерепроведения(); СписокИзменённыхРеквизитов = ОбщегоНазначения.ПолучитьСписокИзменённыхРеквизитов(ЭтотОбъект); СписокИзменённыхРеквизитовВызывающихПерепроведение = ОбщегоНазначения.МожноЗаписыватьБезПерепроведения(ЭтотОбъект, МассивРеквизитовДопустимыхКИзменению, СписокИзменённыхРеквизитов); Если СписокИзменённыхРеквизитовВызывающихПерепроведение = «» И Проведен И СписокИзменённыхРеквизитов.Количество() > 0 Тогда РежимЗаписи = РежимЗаписиДокумента.Запись; ИначеЕсли НЕ РедактированиеЗаднимЧислом и Дата < НачалоДня(ТекущаяДата()) И Не РольДоступна(«ПравоАдминистрирования») Тогда Сообщить(«Недостаточно прав для проведения реализации « + Номер + » « + Строка(Дата) + » задним числом. Изменены реквизиты: « + СписокИзменённыхРеквизитовВызывающихПерепроведение); Отказ = Истина; КонецЕсли; |
Оцените статью:
Загрузка…
Если Вы заметили ошибку, то выделите ее мышью и нажмите Ctrl+Enter
Если меняю значение реквизита в документе из внешней обработки например дату, то изменения отлично сохраняются и записываются в документ без проведения
1C | ||
|
Но потребовалось по другой доработке внести изменения в этом же документе из самой формы документа и вот тут начались проблемы, даже если пишу в коде (пробовал по разному записывать по методу тыка
1C | ||
|
и все бесполезно, мои данные в документ записываются, но затем начинают срабатывать системные события при записи — ПриЗаписи(), ПередЗаписью(), ПослеЗаписи(), поттоом еще система переспрашивает надо записать или нет и записывает в конце концов с проведением (хотя я изначально выбирал запись без проведения) вопросов два:
1. Почему из обработки данные в документе изменяются и записываются и не проводятся?
2. В каких случаях срабатывают все эти системные функции (ПриЗаписи(), ПередЗаписью(), ПослеЗаписи() и тд.), и в каких случаях они не срабатывают.
Добавлено через 11 минут
о боги, сработало
1C | ||
|
бывают же чудеса на свете, вчера бился весь день, а сегодня с первого раза получилось. (с пол оборота завелось)
Добавлено через 15 секунд
о боги, сработало
1C | ||
|
бывают же чудеса на свете, вчера бился весь день, а сегодня с первого раза получилось. (с пол оборота завелось)
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 47
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей.
Google maps : вывод точек на карту и режим панорамы 8
В отличие от яндекс карт в GMaps можно использовать панорамы — за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
Google maps, поиск оптимального маршрута 5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута:
* Географические координаты объектов, которые хранятся в базе;
* Координаты начальной и коне
Посмотреть все результаты поиска похожих
7 г. назад
Есть проведенные документы. ВводНачальныхОстатков.
После переноса нужно изменить префикс номера. Есть ли какой-то метод изменения, чтобы документ не перепроводился при записи?
(1) Если док проведенный, будет перепроведен
(2) СП почитать не предлагать?
(3) скажешь тоже… Его ещё купить надо
(3) Блин, хотел без этого обойтись. но придется
Прочитал. Ничего не нашел по сабжу.
Записать(<РежимЗаписи>, <РежимПроведения>)
Параметры:
<РежимЗаписи> (необязательный)
Тип: РежимЗаписиДокумента.
Позволяет выбрать один из возможных режимов записи.
Значение по умолчанию: Запись.
<РежимПроведения> (необязательный)
Тип: РежимПроведенияДокумента.
Позволяет выбрать один из возможных режимов проведения.
Значение по умолчанию: Неоперативный.
Описание:
Записывает документ в базу данных.
(6) если режим запись — то перепроведения не будет
tsr Записать(<РежимЗаписи>
ну, вот же
Док.ОбменДанными.Загрузка = Истина; Док.Записать();
(9) если в модуле есть проверка =)
(10) ну, в типовых есть, вроде
(9) Сенкс. В принципе можно было и самому проверить. Но тематических веток практически нет. Хоть так форум поддержать
да и про сиськи не особо много