1с изменение реквизита документа без перепроведения

Изменение реквизитов дока без перепроведения

Я
   lirt82

01.08.16 — 14:48

Можно ли изменить в некоторых видах доков реквизит с одного на другой  без перепроведения?

Напрм. в документе «Акт сверки» был указан некорректный контрагент «Эквайер», необходимо его поменять на контрагента «Сбербанк».

Также в документах «Отчет о розн. продажах», «Платежное поручение» поменять реквизит договор с «договор эквайринга» на «договор сбербанка». Доки 2014 года, поэтому документы перепроводить нельзя. Обработка поиск и замена дублирующих не поможет так как нужно чтоб в базе остались оба реквизита, но в части доков один реквизит а в другой части новый(другой) реквизит.

  

Партнерская программа EFSOL Oblako

   Heckfy

1 — 01.08.16 — 14:48

Загрузка=Истина;

   Быдло замкадное

2 — 01.08.16 — 14:53

групповая обработка справочников и документов меняет реквизиты но не перепроводит доки.

Но толку то? В движениях будут старые справочники

   lirt82

3 — 01.08.16 — 14:55

(2) буду уточнять насчет движении! иначе смысла нет в смене реквизитов:).

   Быдло замкадное

4 — 01.08.16 — 14:58

обработка УниверсальныйРедакторРеквизитов может даже регистры менять вроде

   Serg_1960

5 — 01.08.16 — 15:09

(0) Нет, нет и ещё раз нет. Нельзя изменять реквизиты, которые участвуют в движениях или оказывают влияние на их формирование.

Хотя… с другой стороны… если очень хочется… то можно :)

Можно обработкой «синхронизировано» вносить изменения и в сам документ и в его движения. Это как бы не совсем «перепроведение».

   Пузан

6 — 01.08.16 — 15:11

объектДокумент.ОбменДанными.Загрузка = Истина;

объектДокумент.Записать(РежимЗаписиДокумента.Запись);

В принципе достаточно, чтобы в большинстве типовых документов не проводилось никаких проверок при записи документа и при записи он не делал никаких движений (не изменялись существующие и не появлялись новые).

   Serg_1960

7 — 01.08.16 — 15:13

Но если, не дай бог, кто-то перепроведет документ — то изменятся движения и могут измениться остатки и обороты. Тогда прощай баланс :)

   Пузан

8 — 01.08.16 — 15:18

(7) Ну это понятно. Но может человек хочет коммент в документе поменять, или другой реквизит не влияющий на движения, но чтобы не сбить последовательность и не отправить док в обмен.

   Пузан

9 — 01.08.16 — 15:19

Аааа, гоню, он таки договор хочет поменять. Ну если он точно знает что делает, то дело его.

   lirt82

10 — 01.08.16 — 18:15

Уточнение

1) изменить нужно реквизиты в доках, это ладно можно сделать типовой групповой обработкой

2) также нужно изменить движения во всех регистрах в которых участвует этот измененный

реквизит, иначе толку…как написал в (2)..сформируют отчет или тот же Акт сверки а данные

останутся теми же.

3) перепроводить доки нельзя так как доки еще 2014 года, конфа Управление торговлей доработанная,

доки это напрм. отчеты о розничных продажах…и неизвестно что начнется при перепроведении продаж:)

База УРИБ сразу вопрос, эти изменения нужны бухам в головной базе,

неизвестно что будет при обмене в периферийных:)

Скорее всего нужно будет написать обработку которая будет изменять движения только в тех

регистрах где по условию встречается измененный реквизит, чтоб не затронуть другие движения.

Вообщем менять только те регистры где участвует наш новый измененый реквизит.

А вот что будет с остатками и оборотами незнаю:)

И еще нужно будет посмотреть сами регистры чтоб узнать что является

регистратором для этого регистра, можно обработкой напрямую к ним обращатся и изменять их?:)

   b_ru

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. Если таких «неважных» реквизитов в документе несколько, и пользователю требуется изменить их все, то на сервер «обрушится» несколько последовательных сохранений одного и того же документа.

Разрешение пользователям редактировать отдельные реквизиты документа без перепроведения или просто одни реквизиты разрешать, а другие запрещать.

Разрешение пользователям редактировать отдельные реквизиты документа без перепроведения или просто одни реквизиты разрешать, а другие запрещать.

Иногда необходимо разрешить редактирование некоторых реквизитов документа без перепроведения. Например: Комментарий, АдресКонтрагента, КонтактноеЛицо. Ещё бывает необходимым разрешить изменение отдельных реквизитов в закрытых документах. Например, поставить отметку о состоянии доставки и написать комментарий.

В модуле менеджера документа пишем функцию, которая определяет массив допустимых к редактированию реквизитов

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// Возвращает массив имён реквизитов, разрешённых для изменнения без перепроведения.

// Если получен параметр типа Массив, то имена реквизитов добавляются в него

Функция ПолучитьМассивРеквизитовИзменяемыхБезПерепроведения(МассивРеквизитовДопустимыхКИзменению = Неопределено) Экспорт

Если Не ТипЗнч(МассивРеквизитовДопустимыхКИзменению) = Тип(«Массив») Тогда

МассивРеквизитовДопустимыхКИзменению = Новый Массив;

КонецЕсли;

//Типовые реквизиты

МассивРеквизитовДопустимыхКИзменению.Добавить(«Грузополучатель»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьНомер»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьДата»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьНомер»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьВыдана»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«ДоверенностьЧерезКого»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«Комментарий»);

МассивРеквизитовДопустимыхКИзменению.Добавить(«АдресДоставки»);

//Добавленные реквизиты

Возврат МассивРеквизитовДопустимыхКИзменению;

КонецФункции

В модуле ОбщегоНазначения пишем функции общие для всех документов.

// сравниваем реквизиты документа из базы данных с записываемым объектом

// имена изменённых реквизитов запихываем в массив

Функция ПолучитьСписокИзменённыхРеквизитов(ДокОбъект) Экспорт

СписокИзменённыхРеквизитов = Новый Массив;

Ссылка = ДокОбъект.Ссылка;

мдОбъекта = ДокОбъект.Метаданные();

// сравниваем стандартные реквизиты

Для Каждого Реквизит из мдОбъекта.СтандартныеРеквизиты Цикл

Если ДокОбъект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда

СписокИзменённыхРеквизитов.Добавить(Реквизит.Имя);

КонецЕсли;

КонецЦикла;

В модуле документа ПредЗаписью разрешаем запись без пререпроведения в случае, если были изменены только реквизиты, не вызывающие перепроведение.

РедактированиеЗаднимЧислом = Ложь;

МассивРеквизитовДопустимыхКИзменению = Документы.РеализацияТоваровУслуг.ПолучитьМассивРеквизитовИзменяемыхБезПерепроведения();

СписокИзменённыхРеквизитов = ОбщегоНазначения.ПолучитьСписокИзменённыхРеквизитов(ЭтотОбъект);

СписокИзменённыхРеквизитовВызывающихПерепроведение = ОбщегоНазначения.МожноЗаписыватьБезПерепроведения(ЭтотОбъект, МассивРеквизитовДопустимыхКИзменению, СписокИзменённыхРеквизитов);

Если СписокИзменённыхРеквизитовВызывающихПерепроведение = «» И Проведен И СписокИзменённыхРеквизитов.Количество() > 0 Тогда

РежимЗаписи = РежимЗаписиДокумента.Запись;

ИначеЕсли НЕ РедактированиеЗаднимЧислом и Дата < НачалоДня(ТекущаяДата()) И Не РольДоступна(«ПравоАдминистрирования») Тогда

Сообщить(«Недостаточно прав для проведения реализации « + Номер + » « + Строка(Дата) +

» задним числом. Изменены реквизиты: « + СписокИзменённыхРеквизитовВызывающихПерепроведение);

Отказ = Истина;

КонецЕсли;

 

Оцените статью:

Загрузка…

Если Вы заметили ошибку, то выделите ее мышью и нажмите Ctrl+Enter

Если меняю значение реквизита в документе из внешней обработки например дату, то изменения отлично сохраняются и записываются в документ без проведения

1C
1
2
3
4
5
6
7
8
9
10
Объект = Ссылка.ПолучитьОбъект();
                    
                Объект.ДатаИсполнения = НоваяДатаИсполнения;
                
                Попытка
                    Объект.Записать();
                Исключение
                    ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
                КонецПопытки;
    ОтправитьПисьмо(Ссылка);

Но потребовалось по другой доработке внести изменения в этом же документе из самой формы документа и вот тут начались проблемы, даже если пишу в коде (пробовал по разному записывать по методу тыка

1C
1
2
3
4
5
//ОбъектДок = ЭтотОбъект.Ссылка.ПолучитьОбъект();
    //ОбъектДок.ОбменДанными.Загрузка = Истина; 
    //ОбъектДок.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
    ////ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
    ////Ссылка.Записать(РежимЗаписиДокумента.Запись);

и все бесполезно, мои данные в документ записываются, но затем начинают срабатывать системные события при записи — ПриЗаписи(), ПередЗаписью(), ПослеЗаписи(), поттоом еще система переспрашивает надо записать или нет и записывает в конце концов с проведением (хотя я изначально выбирал запись без проведения) вопросов два:
1. Почему из обработки данные в документе изменяются и записываются и не проводятся?
2. В каких случаях срабатывают все эти системные функции (ПриЗаписи(), ПередЗаписью(), ПослеЗаписи() и тд.), и в каких случаях они не срабатывают.

Добавлено через 11 минут
о боги, сработало

1C
1
2
ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
    Закрыть();

бывают же чудеса на свете, вчера бился весь день, а сегодня с первого раза получилось. (с пол оборота завелось)

Добавлено через 15 секунд
о боги, сработало

1C
1
2
ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
    Закрыть();

бывают же чудеса на свете, вчера бился весь день, а сегодня с первого раза получилось. (с пол оборота завелось)

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) Сенкс. В принципе можно было и самому проверить. Но тематических веток практически нет. Хоть так форум поддержать

  • да и про сиськи не особо много

  • Понравилась статья? Поделить с друзьями:
  • Автобус за 60 мин проехал 100 км а затем еще 260 км
  • 1с использовать всегда у реквизита формы программно
  • Автозапчасти в михнево ступинский район часы работы
  • 1с как добавить дополнительные реквизиты программно
  • Автозапчасти каменск уральский магазины часы работы