Перечитывание измененного объекта
В ситуациях, когда несколько пользователей открыли один объект для редактирования, начать его редактировать сможет только один пользователь, а остальные получат сообщение о том, что запись в базе данных была изменена или удалена. Это означает, что запись изменена или удалена в результате действий другого пользователя.
В этой ситуации есть возможность перечитать данные, отображаемые в форме, из информационной базы еще раз. Сделать это можно с помощью кнопки «Перечитать», размещенной обычно в верхней командной панели формы.
Рассмотрим ее действие на примере. Пусть с информационной базой работают два пользователя, Пользователь1 (слева) и Пользователь2 (справа). Оба они открыли форму редактирования валюты EUR:
Пользователь2 изменил количество разрядов при выводе дробной части в виде числа и записал изменения (кнопка «Записать»):
Пользователь1 попытался также отредактировать полное наименование валюты, однако сделать этого не смог:
Пользователь2 закрыл форму редактирования валюты EUR. Пользователь1 опять пытается пытается изменить полное наименование валюты EUR, однако снова не может этого сделать.
Для того, чтобы Пользователь1 смог сделать свои изменения, он должен сначала перечитать данные. Сделать это можно с помощью кнопки («Перечитать данные объекта»):
После того, как Пользователь1 перечитает данные объекта, он увидит изменения, сделанные Пользователем2 и ему станет доступно редактирование полного наименования валюты:
Описание ошибки:
Ошибка » Данные были изменены или удалены другим пользователем» может возинкать при сохранении элемента справочника или при сохранении/проведении какого либо документа.

В управляемом интерфейсе после нажатия кнопки «ОК» откроется еще окно с описанием текста ошибки: «Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!»

В базе с обычным интерфейсом ошибка может возникнут при попытке пользователя просто внести какие-то изменения в форме.

Демонстрация возникновения ошибки на практическом примере:
Если в базе 1С 8 работает несколько (два-три) пользователя, то вероятность встретить данную ошибку стремится к нулю. Если в базе работает несколько десятков пользователей, то шансы возникновения данной ошибки при работе со справочниками и документами повышаются существенно. Но не стоит паниковать при появлении данной ошибки. Она лишь говорит о том, что документ или элемент справочника уже успел изменить и сохранить другой пользователь. Пользователю, который получил такую ошибку ничего не остается, как просто закрыть форму документа или элемента справочника без сохранения внесенных изменений. Открыть форму и снова нести изменения, которые не удалось сохранить.
Рассмотрим более подробно, как развиваются события в базе, приводящие к возникновению ошибки «Данные были изменены или удалены другим пользователем». Условно пусть будет «Пользователь 1» базы и «Пользователь 2». Пользователь 1 открывает форму документа и вносит изменения. При этому Пользователь 2 так же открывает форму этого же документа и тоже вносит изменения и успевает раньше Пользователя 2 нажать кнопку сохранения или проведения документа. Все, в документе сохранились изменения, Пользователь 2 оказался быстрее. 1С не поддерживает совместную одновременную работу в одном объекте базы (в данном примере это документ). Поэтому Пользователь 1 получит ошибку, т.к. пытался сохранить изменения уже после того, как это сделал Пользователь 2. Даже не смотря на то, что Пользователь 1 раньше открыл форму документа для редактирования.
В некоторых конфигурациях, работающих в режиме управляемого приложения разработчики постарались предусмотреть параллельный режим редактирования объектов базы пользователями.
Ошибка «Данные были изменены или удалены другим пользователем» при проведении
Доброго времени суток, уважаемые эксперты. Стоит задача: обеспечить возможность ручной корректировки проводок созданного документа ПриходТовара(имеющего соответствующий реквизит РучнаяКорректировка).
Для этого на кнопку ДтКт на форме документа подцеплена стандартная обработка КорректировкаДвижений.
Содержание модуля объекта следующее:
Не выдавать ошибку на кнопку «сохранить», если записи не были изменены
Привет всем! Проблема №1: есть Dbgrid, есть кнопка "сохранить запись". Если я в Dbgrid’e ничего.
Ошибка при загрузке решения: «Один или несколько проектов в решении были неправильно загружены»
Здравствуйте. Visual Studio 2017, сегодня открывал решение проекта, который мне переслали на почту.
После «обновления флешплеера» некоторые файлы были удалены из-за заражения вирусом
Вчера решил посмотреть фильм он-лайн, зашёл на сайт поставил фильм на загрузку, вылезло всплывающее.
Ошибка при проведении документа «Реализация товаров и услуг»
Добрый день. У меня вопрос скорее не к программистам, а к тем кто разбирается в конфиграции.
Сообщение от lighthead9288
Сообщение было отмечено ildwine как решение
Решение
Сообщение от duk337
Обновляет контекст (буфер) из объекта, уничтожая изменения? ЭтаФорма.Модифифицированность, интересно, Ложь после этого?
А чего его в синт.поме нету?
Форма (обычное приложение).Методы:
Активизировать (Activate)
ВводДоступен (IsInputAvailable)
ВыбратьИзМеню (ChooseFromMenu)
ВыбратьИзСписка (ChooseFromList)
Закрыть (Close)
Обновить (Refresh)
ОповеститьОбАктивизацииОбъекта (NotifyActivateObject)
ОповеститьОВыборе (NotifyChoice)
ОповеститьОЗаписиНовогоОбъекта (NotifyWriteNewObject)
ОтключитьОбработчикИзмененияДанных (DetachDataChangeHandler)
ОтключитьОбработчикОжидания (DetachIdleHandler)
Открыта (IsOpen)
Открыть (Open)
ОткрытьМодально (DoModal)
ОткрытьСправкуФормы (OpenFormHelp)
ПодключитьОбработчикИзмененияДанных (AttachDataChangeHandler)
ПодключитьОбработчикОжидания (AttachIdleHandler)
ПолучитьДействие (GetAction)
ПроверитьЗаполнение (CheckFilling)
УстановитьДействие (SetAction)
Добавлено через 1 минуту
(8.2.19.76)
Добавлено через 2 минуты
«из объекта» — не точно, поскольку «ЭтотОбъект» обращается опять же к контексту. А вот «Ссылка» даёт то, что в базе.
Если при попытке записать элемент справочника или документ появляется ошибка «Данные были изменены или удалены другим пользователем», то это значит, что данные, которые отображаются на форме и данные, которые записаны в базе отличаются.

Возможно, их изменил другой пользователь или мы программно их изменили, но форму не обновили. Решить эту проблему можно, используя метод управляемой формы Прочитать(). Этот метод обновляет объект управляемой формы.
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если
ИмяСобытия = «УправлениеКартамиYandex_ВыбраныКоординаты» Тогда
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат;
КонецЕсли;
ЭтаФорма.Прочитать();
ЗаполнитьКоординаты(Параметр);
ЭтаФорма.Прочитать();
КонецЕсли;
КонецПроцедуры
Процедура
ЗаполнитьКоординаты(Параметр)МассивСтрок = РаботаСоСтроками.РазложитьСтрокуВМассив(Параметр, «;»);
Если МассивСтрок.Количество()>0 Тогда
текОбъект = Объект.Ссылка.ПолучитьОбъект();
текОбъект.Долгота = СокрЛП(МассивСтрок[0]);
текОбъект.Широта = СокрЛП(МассивСтрок[1]);
текОбъект.Записать();
КонецЕсли;
КонецПроцедуры
В примере, через обработку оповещения передаем параметр в процедуру, в которой присваиваем полученные координаты долготы и широты и записываем объект. Потом, используя метод Прочитать(), обновляем объект формы. В данном случае метод вызван 2 раза в связи с тем, что до заполнения координат, он изменяется, а второй раз — чтобы прочитать изменения, которые сделали мы.
Что конкретно удалил либо поменял пользователь в конкретном документе в 1С? Для решения этого вопроса разработчики внедрили специальный механизм хранения версий объектов — так называемое версионирование, с помощью которого вы как раз можете увидеть всю конкретику измененных документов.
В этой статье мы расскажем обо всех плюсах и минусах версионирования, а также покажем на конкретном примере в 1С: Зарплата и управление персоналом ред. 3.1, как работает механизм.
Начиная с платформы 8.3.11, механизм версионирования встроен в систему и называется «История данных». Он имеется во всех конфигурациях, работающих на основе библиотеки стандартных подсистем (БСП). Например, в 1С: Бухгалтерия предприятия он реализован, начиная с версии 3.0.35.
Использование этого механизма актуально как на этапах начала работы с программой, так и при дальнейшем ее использовании, когда имеются пользователи «новички», которые могут что-то «подпортить» в учете.
Версионирование — это механизм хранения истории изменения объектов в 1С, который позволяет:
- просматривать, какие изменения внес пользователь в объект (справочник, документ);
- анализировать версии объектов;
- сравнивать эти версии между собой;
- восстанавливать любую из версий объекта.
Механизм версионирования позволяет пользователю выполнять гибкую настройку хранения данных, выборочно применять к объектам или табличным частям, сохранять данные лишь в определенный пользователем момент, например — при проведении документов.
Плюсов у этого функционала, конечно много.
Но есть и минусы, их тоже нужно учитывать. Важно грамотно подходить к настройке версионирования, т.к. использование данного функционала однозначно приводит к замедлению работы 1С. Это связано с тем, что история данных занимает какое-то место и при неправильной, беспорядочной настройке она может занимать больше места, нежели чем сам объект.
Центр обучения «Клерка» приглашает разобрать не менее важный аспект бухгалтерского учета — ведение учета запасов по новому ФСБУ 5/2019. Бесплатный вебинар уже совсем скоро — 20 августа.
Как включить версионирование в 1С?
Этот механизм может включить как разработчик в конфигураторе, так и сам пользователь в пользовательском режиме.
Для включения версионирования объектов выполните следующие пункты.
Шаг 1. Перейдите в раздел «Администрирование» — «Общие настройки».
Пример раздела в 1С: Зарплата и управление персоналом, ред. 3.1:

Пример раздела в 1С: Бухгалтерия предприятия ред. 3.0.

Шаг 2. Разверните подраздел «История изменений» и установите галочку «Хранить историю изменений». Для перехода к настройкам нажмите гиперссылку «Настроить».

Как видите, в 1С: ЗУП и 1С: Бухгалтерии предприятия эти пункты выглядят совершенно одинаково.
Соответственно, и настройка версионирования во всех конфигурациях 1С выполняется аналогично, т.к. это одна подсистема.

Настройки истории хранения изменений
Рассмотрим основные настройки подсистемы «Версионирование» и механизма «Хранение данных» на примере программы 1С: Зарплата и управление персоналом ред. 3.1.
В составе объектов настройки два пункта: справочники и документы.
Настройку можно выполнить для каждого справочника отдельно, задав срок хранения и указав, когда сохранять версии.

В разделе «Документы» перечислены все имеющиеся в конфигурации документы, для которых также отдельно выполняется настройка хранения данных.

Параметр «Когда сохранять версии»
Для изменения параметра выделите ячейку и нажмите стрелочку. В выпадающем списке выберите нужное значение.
Значение параметра «Когда сохранять версии» может принимать значение:
- «При записи» — версия сохраняется при создании или изменении справочника либо документа;
- «При проведении» — применима для документов, для которых предусмотрено проведение. Запись производится при их проведении;
- «Никогда» — запись истории изменения объекта не ведется.

Применить настройки можно и к группе объектов.
Выберите несколько объектов с помощью кнопки Shift (в указанном диапазоне «с какого по какой») или Ctrl (выборочное выделение) и, нажав кнопку «Установить когда сохранять версии», выберите нужное значение для указанных объектов.
В этом пункте, кроме описанных выше вариантов, доступна настройка «По умолчанию». В данном случае устанавливаются рекомендуемые настройки. Для справочников это — «Никогда», для документов — «При проведении».

Для справочников варианты значений параметров отличаются от значений параметров для документов.

Параметр «Срок хранения версий»
Аналогично задается параметр «Срок хранения версий».
Выделите ячейку и выберите вариант срока хранения заданного элемента.
Он может принимать значение:
- «За последнюю неделю»;
- «За последний месяц»;
- За последние три месяца«;
- «За последний год»;
- «Бессрочно».

Для выбранной группы объектов изменить этот параметр также можно с помощью кнопки «Установить срок хранения версий».
Выделите объекты, нажмите вышеуказанную кнопку и выберите нужное значение.

Рассмотрим настройку на примере.
Пример настройки версионирования в 1С: ЗУП ред. 3.1
Установите настройки хранения истории изменений для документа «Начисление зарплаты и взносов». Значение параметра «Когда сохранять версии» — При проведении«, «Срок хранения» — «За последнюю неделю» (для примера).

После того, как активировано версионирование, в объектах 1С станут доступны кнопки в виде карандаша с часиками — «Перейти к истории изменений».
В нашем примере она расположена в журнале документов на панели инструментов, а также по нажатию кнопки «Еще».

Во втором варианте она выглядит как строка — «История изменений».

При открытии документа, в нем также присутствует такая кнопка и команда по нажатию кнопки «Еще».

Рассмотрим пример, когда бухгалтер вносила изменения в документ «Начисление зарплаты и взносов».
Конечно, когда изменения производились по одному сотруднику, проще исправить и пересмотреть начисления этого сотрудника. Но предположим, что возникла ситуация, когда «массово напортачили» в программе и данные изменены.
Для иллюстрации примера изменим заработную плату Булочкиной О.И. с 67000 руб. на 75000 руб. и посмотрим, как программа сохранит версии документов и сможем ли мы, используя механизм хранения данных, вернуться к прежней версии.
Нажмите «кнопку-карандашик» — «Перейти к истории изменений».

Становится видно информацию о версиях документа «Начисление зарплаты и взносов»: кто изменил данный объект, а также дату и время изменения.
Для просмотра версии выделите строку и нажмите кнопку «Открыть версию».

В отчете представлены вся информация, показатели и данные документа выделенной версии. Кнопками » » и «-» можно свернуть и развернуть блоки для удобства чтения.

В нашем примере мы знаем, что пользователь изменил зарплату по окладу Булочкиной О.И. на 75000 руб.
Но как же пользователь проанализирует такой объем информации и определит, какие изменения произведены в какой версии?
Для этого есть функция сравнения с помощью одноименной кнопки «Сравнить».
Для сравнения версий выделите нужные строки (с помощью Shift или Ctrl) и нажмите кнопку «Сравнить».
Обратите внимание, при выделении нескольких версий другие команды неактивны, т.к. предназначены для работы с одной строкой-версией.

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

Пролистав таблицу, мы видим, что пользователем Кругловой О. были изменены данные по Булочкиной О.И. Сохраненные версии № 1 и № 2 идентичные, а в версии № 3 прослеживаются изменения.
Обратите внимание на значение поля «Изменения в реквизитах». По умолчанию установлено — «Все». Поэтому отчет получился объемным. Нажав кнопку выбора с тремя точками, пользователь может задать выводимые реквизиты, отметив нужные галочками.

Главный бухгалтер, проанализировав ситуацию, приняла решение восстановить данные документа «Начисления зарплаты и взносов» до внесения изменений зарплаты.
Как это сделать?
Выделите версию объекта, на который хотите перейти и нажмите кнопку «Перейти на версию».
В моделируемом примере нас устроит версия № 2 (до внесения изменений). На нее и перейдем.

В результате проведенных манипуляций в таблице «История изменений: Начисление зарплаты и взносов от 31.08.2021» появилась четвертая версия документа с пометкой — «Выполнен переход к версии № 2 от 10.08.2021 18:32:49» (пример моделировался 10.08.2021).

Откройте документ и проверьте, что в нем изменилось.
Документ перешел к варианту до внесения в него изменений. В нашем примере зарплата сотрудника Булочкиной О.И. автоматически изменилась на 67000 руб. (напомним, она была изменена ранее на 75000 руб.). Начисление НДФЛ и страховых взносов также приняло прежние значения. Т.е. документ полностью принял первоначальный вид.

Этот способ очень удобен. Он позволяет не только отслеживать, когда и кем были произведены изменения, но и «откатывать» состояние объекта в предшествующее состояние. Перейдя на версию объекта и не получив результата, пользователь может повторить операцию снова. Переходы от версии к версии не ограничены и их можно выполнять в пределах хранящихся версий.
Напоминаем, единственный минус версионирования — это то, что хранящиеся данные занимают место и при больших объемах накопленной информации программа может начать притормаживать и подвисать, особенно при работе на слабых компьютерах. Поэтому возможно имеет смысл устанавливать версионирование только для конкретных документов в программе, по которым могут быть спорные моменты.
Объем хранимых версий объектов и их удаление в 1С
Вернемся к разделу «Настройка и хранение истории изменений».
Нажмите гиперссылку «Количество и объем хранения версий объектов».

В отчете представлена информация в графическом и в табличном варианте, где пользователь видит структуру данных версий хранения объектов.
В нашем примере видно, что объект — документ «Начисление зарплаты и взносов» имеет четыре версии и этот объем данных занимает 0,01Мб.

Но это всего лишь один документ. Поэтому, если вы настраиваете версионирование и активно им пользуетесь, смотрите какой объем занимают данные.
Обратите внимание на строку «Очистка устаревших версий». У нас пока таковых не имеется, но при их появлении появится кнопка «Очистить». Здесь также выводится информация об их количестве и объеме. Нажав на эту кнопку старые, неактуальные версии удаляются.
Для автоматизации процесса удаления устаревших версий, установите одноименную галочку «Автоматически удалять устаревшие версии» и вам не придется постоянно отвлекаться на контроль этого процесса.

Теперь вы знаете что такое версионирование и как настроить хранение истории изменения справочников и документов в программах 1С.
Как говорится: «Все гениальное — просто!». Экспериментируйте, используйте этот функционал программы и, главное, не бойтесь что-то испортить, ведь всегда можно вернуть версию объекта. Если вы сочтете это ненужным, то в любой момент вы сможете отключить эту настройку.
Обманчивая ошибка «Данные были изменены или удалены другим пользователем»

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с «///// echo» использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1.
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.
Собственно сам скрипт:
<?php // Полная загрузка сервисных книжек, создан 2018-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once ‘connection.php’; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
///// echo ‘<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>’;
$failure=TRUE;
wp_die( $wpdb2->error );
>
$m_size_file=0;
$m_mtime_file=0;
$m_comment=»;
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.’/_1c_alfa_exchange/AA_hist.csv’;
if (!file_exists($file_hist))
///// echo ‘<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>’;
$m_comment=’Файл обмена с сервисными книжками не существует’;
$failure=TRUE;
>
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure) ///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET[‘foo’]
///// echo ‘<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>’;
$insert_fail_zapros=$wpdb2->insert(‘vin_logs’, array(‘time_stamp’=>time(),’last_mtime_upload’=>$m_mtime_file,’last_size_upload’=>$m_size_file,’comment’=>$m_comment));
wp_die();
///// echo ‘<H2><b>Возврат в начало.</b></H2><br>’;
return $failure;
>
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo ‘<H2><b>Размер файла: ‘.$m_size_file.'</b></H2><br>’;
///// echo ‘<H2><b>Штамп времени файла: ‘.$m_mtime_file.'</b></H2><br>’;
///// echo ‘<H2><b>Формирование запроса на выборку из лога</b></H2><br>’;
////препарируем запрос
$text_zaprosa=$wpdb2->prepare(«SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s», $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
///echo ‘<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>’;
$insert_fail_zapros=$wpdb2->insert(‘vin_logs’, array(‘time_stamp’=>time(),’last_mtime_upload’=>$m_mtime_file,’last_size_upload’=>$m_size_file,’comment’=>’Загрузка отменена, новых данных нет, т.к. найдена запись в логе.’));
wp_die();
return $failure;
>
>
>
////если данные новые, пишем в лог запись о начале загрузки
/////echo ‘<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>’;
$insert_fail_zapros=$wpdb2->insert(‘vin_logs’, array(‘time_stamp’=>time(),’last_mtime_upload’=>0, ‘last_size_upload’=>$m_size_file, ‘comment’=>’Начало загрузки’));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare(«TRUNCATE TABLE %s», ‘vin_history’);
$clear_tbl_zap_repl=str_replace(«‘»,»`»,$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo ‘<H2><b>Очистка таблицы сервисных книжек</b></H2><br>’;
if (empty($results))
///// echo ‘<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>’;
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
>
////загружаем данные
$table=’vin_history’; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=’;’; // Разделитель полей в CSV файле
$enclosed=’»‘; // Кавычки для содержимого полей
$escaped=’
Новый функционал восстановления паролей пользователей информационных баз 1С

Ранее восстановление паролей в 1С пользователей в информационных базах требовало участия администратора, а в крайних случаях и непосредственно фирмы 1С, так как прямое вмешательство в базу нарушает лицензионную политику 1С. Можно представить, как это неудобно, если просто забыл пароль от 1С, и получил серьезные проблемы. Поэтому разработчики 1С позаботились о пользователях, добавив в функциональность платформы «1С:Предприятие» новую операцию по восстановлению пользовательских паролей файловых и серверных ИБ, которые позволяют сбросить пароль в 1С. При выполнении подобных операций нужно быть предельно внимательными и понимать всю ответственность за свои действия. Обязательно сделайте резервную копию базы перед тем, как осуществить сброс пароля администратора 1С.
Появилась возможность дополнить форму аутентификации вопросами «Забыли пароль?» и «Нужна помощь?», установив соответствующее отражение их в параметрах ИБ.
Рис.1 Новая форма
Что делать пользователю?
Если пользователь жмет на первый вопрос, происходит:
- Проход по гиперссылке;
- Формирование электронного письма с кодом восстановления пароля из типового сервиса 1С;
- Передача электронного письма с кодом, но с той почты, адрес которой был задан администратором.
При первом варианте откроется страница браузера, которая даст возможность администратору или партнеру задать свои настройки для «поведения» при данной операции.
При втором – запускается типовой сервис 1С, который поможет восстановить доступ через указание e-mail адрес пользователя. Вариант отправки электронного письма, чтобы поменять пароль в 1С, через настраиваемый почтовый сервер, позволяет админу написать любой текст и выбрать любые настройки оформления отправки.
Рис.2 Укажите e-mail
При положительной проверке введенного адреса высылается код, и пользователь видит новшество – форму смены пароля.
Рис.3 Форма смены пароля
После введения и проверки присланного кода, можно будет изменить пароль доступа к 1С.
В «1С:Предприятие» встроена защита от попыток подбора кодов подтверждения, параметры этой защиты можно установить в параметрах ИБ.
При использовании OpenID-аутентификации сброс паролей в 1С будет произведен через провайдера, поскольку именно там процесс проверки подлинности. В этом случае, после того как удалось сменить пароль в 1С, случится переход в провайдерскую форму проверки подлинности.
Для тех, кто нажал «Нужна помощь?», админ может прописать сайт с подробными инструкциями, как восстановить пароль в 1С, и контактными данными на случай возникновения проблем.
Настройки проверки подлинности
Изменять такие настройки можно посредством конфигуратора или встроенного языка.
В первом случае – в «Администрирование» нужно найти новый раздел по допнастройкам проверки.
Рис.4 Пункт в меню «Администрирование»
Здесь можно найти множество возможностей по настройке, в том числе для редактирования текста отправляемого электронного письма.
Рис.5 Дополнительные настройки проверки
Во втором случае – глобальный контекст встроенного языка получил новый объект ДополнительныеНастройкиАутентификации (AdditionalAuthenticationSettings).
Результат применения такого кода – в возможностях корректировки пользователей ИБ появились новые поля.
Рис.6 Новые поля
Также во встроенном языке аналогичные параметры прибавлены в тип данных ПользовательИнформационнойБазы, то есть АдресЭлектроннойПочты и ЗапрещеноВосстанавливатьПароль.
Все события операциям смены паролей и отказы фиксируются в журнал регистрации, для чего в события смены пользователя были добавлены два вышеназванных новых поля.
Работа с файловой версией 1С 8.3
Основные действия мы будем производить с файлом формата 1CD из папки, где расположена информационная база. Существует два варианта убрать пароли для входа в 1С – HEX-редакторы и программа TOOL1CD. Программы эти можно без труда найти в интернете и большинство из них бесплатны.
В первом случае смысл заключается в отключении таблицы с пользователями, чтобы заставить 1С считать, что в ИБ их нет. После этого платформа запускает конфигурацию с правами администратора, и мы можем создать новых пользователей: открываем файл 1CD в установленном HEX-редакторе и через поиск ищем в формате Unicode «users.usr».
Рис.7 Unicode «users.usr»
В найденной строке найдем значение «09» и изменим число, расположенное левее, с «00» на «01». После этого, воспользовавшись поиском, находим строку «v8users» и меняем первую букву на любую другую. Делаем мы это, чтобы 1С не нашел эту строку и подумал, что в нашей базе нет ни одного пользователя. На этом работа с HEX-редактором закончена, но нам еще нужно воспользоваться утилитой «chdbfl.exe».
Рис.8 Утилита «chdbfl.exe»
Найти ее можно в папке bin, находящейся внутри каталога, куда установлена платформа. Это программа проверяет и исправляет файловые базы, а в нашем случае может помочь избежать встречи с ошибкой формата потока.
Второй способ основан на том, чтобы именно изменить пароль у конкретного пользователя на пустой. Для этого открываем файл ИБ в программе TOOL1CD и в списке таблиц находим «V8USERS», где содержатся данные всех пользователей. Чтобы получить пароль в виде хеш-формата SHA-1, нажимаем на поле DATA строки конкретного пользователя и заменяем значение там на «2jmj7l5rSw0yVb/vlWAYkK/YBwk= », означающее пустой пароль.
Рис.9 Изменить пароль у конкретного пользователя на пустой
С помощью кнопки «Записать» под табличной частью сохраняем данные поля в текстовый файл.
Рис.10 Сохранение в текстовый файл
Рис.11 Режим редактирования таблицы
Рис.12 Подтверждаем изменения
Снятие пароля в 1С успешно завершилось!
Если у вас остались вопросы по работе с файловой базой, обратитесь на нашу линию консультации 1С в Москве, мы с радостью вам поможем.
Работа с клиент-серверной 1С
Если у вас 1С работает на сервере, то действия будут совершенно другими. В первую очередь, нужен доступ к консоли сервера базы данных, так как изменения будут производиться именно там. Суть решения заключается в том, чтобы заставить 1С подумать, что пользователей нет, поэтому любой сеанс запустится с правами администратора. В этом нам поможет простой алгоритм:
- Запускаем утилиту для управления БД;
- Создаем запрос, в котором будем переименовывать таблицу v8users и файл users.usr, чтобы 1С не смогла их распознать. Вместо «DatabaseName» пропишем имя собственной базы
После этих действий сброс пароля пользователя 1С 8.3 можно считать успешно выполненным. Помните, что каждая подобная операция – большой риск, так как администратор может ошибиться при написании запроса. При этом и 1С далеко не самая устойчивая система к внешним взаимодействиям. Поэтому обязательно заведите правило хранить пароли в надежном месте и пользуйтесь вышеприведенными алгоритмами в крайних случаях.
Если помимо сброса пароля у вас регулярно возникают вопросы, обратитесь к нашим специалистам. Мы с радостью проконсультируем вас, а также подберем для вас оптимальную цену на сопровождение 1С, ориентируясь на ваши индивидуальные задачи.
|
|||
| sprinter83
03.05.11 — 17:09 |
Добрый день. В конфигурации есть два документа «Заказ» и «Оплата заказа». В документе «Заказ» есть реквизит «СтатусЗаказа». Статус заказа вычисляется (устанавливается) в модуле объекта «Заказы». При этом при проведении оплаты в документе «Оплата заказа» статус документа «Заказ» может меняться. В общем-то проблема в том, что если открыта форма документа «Заказ» и при этом Проводим связанный с ним документ «Оплата заказа». То в форме «Заказа» статус документа автоматически не меняется. А при попытке записать «Заказ» выходит ошибка «Данные были изменены или удалены другим пользователем». Подскажите пожалуйста каким образом можно решить данную проблему. Заранее благодарен. |
||
| sprinter83
1 — 03.05.11 — 17:13 |
Проще говоря смысл такой. При записи документа «Оплата заказа» перезаписывается документ «Заказ» — при этом в модуле объекта «Заказ» меняется статус заказа, и получаются расхождения между формой и объектом, а обновить данные формы не получается. |
||
| Axel2009
2 — 03.05.11 — 17:15 |
(1) а как пробовал обновить данные формы? |
||
| sprinter83
3 — 03.05.11 — 17:15 |
«Не получается» — в смысле не знаю как это сдалать. В обработке оповещения пишу так
ОбъектБазы = ДанныеФормыВЗначение(Объект, Тип(«ДокументОбъект.Заказы»));
{Документ.Заказы.Форма.ФормаДокумента.Форма(1649)}: Ошибка при вызове метода контекста (ДанныеФормыВЗначение) |
||
| Axel2009
4 — 03.05.11 — 17:18 |
УправляемаяФорма (ManagedForm)
ОбновитьОтображениеДанных()
В принудительном порядке обновляет содержание элементов управления. |
||
| sprinter83
5 — 03.05.11 — 17:22 |
Пробовал. Не прокатывает. Ни чего не меняется. И также при попытке записать ошибка «Данные были изменены или удалены другим пользователем» |
||
| Axel2009
6 — 03.05.11 — 17:22 |
(5) а что обновлял? |
||
| sprinter83
7 — 03.05.11 — 17:25 |
открытую форму «заказа» |
||
| sprinter83
8 — 03.05.11 — 17:26 |
&НаКлиенте |
||
| Axel2009
9 — 03.05.11 — 17:28 |
а если кнопку забацать в заказе «обновитьотображениеданных» они будут обновляться? |
||
| sprinter83
10 — 03.05.11 — 17:33 |
Нет не работает. Хотя точку останова ставил, Функция выполняется. А что она там выполняет не ясно, ни чего ни меняется. |
||
| Axel2009
11 — 03.05.11 — 17:48 |
(10) мм хз почему не работает. может он работает тока на списки. для формы работает ЭтаФорма.Прочитать(); |
||
|
sprinter83 12 — 03.05.11 — 18:04 |
Спасибо, работает!!! Странно, мне кажется что я раньше выходил на функцию ЭтаФорма.Прочитать(); ни чего не получалось. Или мне это только кажется 🙂 |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
|
lighthead9288 0 / 0 / 0 Регистрация: 05.02.2014 Сообщений: 5 |
||||||||||||
|
1 |
||||||||||||
Ошибка «Данные были изменены или удалены другим пользователем» при проведении10.02.2014, 22:42. Показов 23391. Ответов 15 Метки нет (Все метки)
Доброго времени суток, уважаемые эксперты. Стоит задача: обеспечить возможность ручной корректировки проводок созданного документа ПриходТовара(имеющего соответствующий реквизит РучнаяКорректировка). Содержание модуля объекта следующее:
Запустил отладку, установил флажок «Корректировка движений», попробовал провести — вылезла ошибка
Всё чудесно проводится,но появилась новая проблема — при изменении значений табличной части или реквизитов формы и последующем проведении сохраняются старые значения.(К примеру, был приход на Склад1 5 единиц Товара1; изменяешь 5 единиц на 4 — всё равно остаётся 5).
Возникает вопрос: как правильно обновить форму? В правильном ли месте(на клиенте) я это делаю?
__________________
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
11.02.2014, 01:28 |
2 |
|
ЭтаФорма.Прочитать(); Читать данные из объекта нужно точно не перед записью…
0 |
|
duk337 2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
||||
|
11.02.2014, 13:39 |
3 |
|||
|
Решение
это что за метод?
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
11.02.2014, 13:50 |
4 |
|
это что за метод? Форма считывает данные из базы
1 |
|
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
|
11.02.2014, 18:07 |
5 |
|
Обновляет контекст (буфер) из объекта, уничтожая изменения? ЭтаФорма.Модифифицированность, интересно, Ложь после этого? А чего его в синт.поме нету? Кликните здесь для просмотра всего текста Форма (обычное приложение).Методы: Активизировать (Activate) Добавлено через 1 минуту Добавлено через 2 минуты Добавлено через 1 минуту
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
11.02.2014, 20:52 |
6 |
|
в СП есть, но это расширение упр. формы присуще только тем формам которые принадлежат объекту Расширение управляемой формы для объектов (Managed form extension for objects) Прочитать() Обновляет объект управляемой формы. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.
0 |
|
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
|
11.02.2014, 22:08 |
7 |
|
ЭТАФОРМА.Прочитать() — ??
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
11.02.2014, 22:46 |
8 |
|
ЭТАФОРМА.Прочитать() Угу…
0 |
|
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
|
12.02.2014, 00:16 |
9 |
|
ну-ну… Добавлено через 15 минут
0 |
|
Dethmontt Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
||||||||
|
12.02.2014, 00:29 |
10 |
|||||||
|
duk337, не поверишь, но в тонком тоже есть ЭтотОбъект — только в модуле объекта
а,
Добавлено через 1 минуту
1 |
|
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
|
12.02.2014, 08:31 |
11 |
|
Спасибо! Без этих тонкостей нет ощущения материала. Объект — данные в буфере формы. ЭтотОбъект — это уже рантайм, наверное. Не по теме: Куда Константин 1С подевался? Интересно его мнение как преподавателя по тонким формам. Не по теме: Хотя вот новый заказ — с обязательным условием повторить оракловые интерфейсы из старой системы один в один. Какие уж тут тонкие формы. Но я рад, что народ пересаживается с оракл-аппликейшн на 1С, хоть и на толстого.
0 |
|
lighthead9288 0 / 0 / 0 Регистрация: 05.02.2014 Сообщений: 5 |
||||||||
|
12.02.2014, 16:34 [ТС] |
12 |
|||||||
|
Спасибо большое за ответы! Я разобрался )
Следовательно, на форме надо было просто обработать это оповещение в событии ОбработкаОповещения:
0 |
|
SonicQ 286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
||||
|
06.11.2014, 17:34 |
13 |
|||
|
Dethmontt, так где правильно разместить данную строку
столкнулся с такой же проблемой, при изменении какого либо реквизита дока она вылезает.
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
06.11.2014, 21:51 |
14 |
|
Dethmontt, так где правильно разместить данную строку Сразу после того как изменил значения реквизитов ОБЪЕКТА на сервере
1 |
|
286 / 186 / 18 Регистрация: 20.02.2012 Сообщений: 925 |
|
|
06.11.2014, 23:43 |
15 |
|
Dethmontt, то есть под директивой &НаСервере ?
0 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
07.11.2014, 00:12 |
16 |
|
Расширение управляемой формы для документа (Managed form extension for documents) Прочитать() Обновляет объект управляемой формы. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
0 |
-
Добрый день,
прошу помочь по мере сил…
1. Самописная конфигурация на 8.3.10 (с совместимостью 8.3.9)
2. Есть документ, в документе — табличная часть, в табличной части — поле «Сотрудник» с типом «СправочникСсылка» (ссылается на справочник «сотрудников»)
3. С некоторых пор документ не позволяет перепровести, если в заполненном поле «сотрудник» нажать кнопку «открытия» и пересохранить открывшийся элемент справочника «сотрудники» — пишет ошибку «Данные были изменены или удалены другим пользователем».
Подскажите, пожалуйста, как бы «поймать» место возникновения ошибки?
Заранее благодарю.. -
Offline
TerANik
Профессионал в 1С- Регистрация:
- 19 ноя 2014
- Сообщения:
- 1.281
- Симпатии:
- 98
- Баллы:
- 54
Смотрите в сторону метода Удалить(). Такое ощущение что где то в методах используется непосредственное удаление в базе. Т.е. при обработке какого то события, документ удаляется непосредственно.
-
Спасибо за «наводку», нет, сама запись «сотрудника» нигде не удаляется программно. К справочнику «Сотрудники» привязан еще документ «Приказы по сотруднику», к последнему — еще и периодический регистр приказов. Вот приказы можно удалять программно. Хотя я эту возможность отключал — ошибка все равно всплывает.
причем «раньше» было все «как надо» — если с «сотрудником» было что-то не так, можно было из расходного документа открыть запись справочника, там все поправить и вернуться обратно в расходный документ с обновлением данных + последующим перепроведением. Сейчас же — почти постоянно вылезает «ошибка» (из названия темы), причем, в ряде случаев, достаточно просто открыть ссылку на справочник — и все, «приехали»
.После простого «открытия» и пересохранения сотрудника «ошибка» перестает проявляться, если закомментить события «перед записью» и «при открытии» (для формы справочника «сотрудники»). Если же вносить изменения в «сотрудника» — «ошибка» неизбежна

Обидно, что не знаю, как ее вычислить…
-
Offline
TerANik
Профессионал в 1С- Регистрация:
- 19 ноя 2014
- Сообщения:
- 1.281
- Симпатии:
- 98
- Баллы:
- 54
Я имел ввиду что удаляется программно не элемент справочника «Сотрудники», а тот документ который у вас не проводится. Может быть при открытии элемента справочника «Сотрудники» что то прописано. В любом случае непосредственное удаление нужно искоренять во всей конфигурации. Это не правильно. Но ваша задача вам виднее.
-
Нет, подобного «удаления» нет и в помине. Документы, если и удаляются, то только «руками».
В форме элемента справочника «сотрудники» есть табличная часть (динамический список) — список документов (приказов) по сотруднику.При открытии элемента справочника сотрудники прописано лишь:
1. открыть
2. отфильтровать приказы по сотруднику (табличная часть)вот и все
-
О! вроде нашел — нашел «кусок кода» в одной из процедур формы элемента справочника «сотрудники», который «открывал» расходный документ и перезаписывал данные в одном из реквизитов.
Видимо, из-за того, что он это делал, сам «расходный документ» оставался необновленным, но «чувствовал», что его изменили — вот и «ругался» ошибкой…
Сейчас «выдеру» эту часть и перепроверю. -
Да, дело было в этом «куске». Избавился от него и не жалею.
TerANik, — спасибо за содействие!


