Как заменить значение ресурса регистра сведений – универсальная процедура В том случае, когда в каком-то регистре сведений нужно заменить несколько видов значений какого-то конкретного ресурса на заданное значение, лучше использовать вот такую универсальную процедуру (при ее вызове достаточно подставить название регистра, название ресурса и передать старые заменяемые значения и новое, на которое они заменяются):
Код 1C v 8.х // Процедура выполняет в независимом регистре сведений "ИмяРегистраСведений" замену
// всех значений ресурса "ИмяИзменяемогоРесурса", // соответствующих массиву "МассивСтарыхЗначенийРесурса"
// на новое значение ресурса "НовоеЗначениеРесурса".
// В запрос можно передать дополнительное условие, ограничивающее выборку данных из регистра "ДопУсловие"
Процедура ЗаменаРесурсаНезависимогоРегистра(ИмяРегистраСведений, ИмяИзменяемогоРесурса, МассивСтарыхЗначенийРесурса, НовоеЗначениеРесурса, ДопУсловие = "")
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСтарыхЗначенийИзмерения", МассивСтарыхЗначенийРесурса);
Запрос.УстановитьПараметр("НовоеЗначениеИзмерения", НовоеЗначениеРесурса);
// Подготовим таблицу значений для позиционирования (установки отбора) на нужных записях регистра:
Запрос.Текст =
"ВЫБРАТЬ *
|ИЗ
| РегистрСведений." + ИмяРегистраСведений + " КАК Регистр
|ГДЕ
| Регистр." + ИмяИзменяемогоРесурса + " В (&МассивСтарыхЗначенийИзмерения)" + ДопУсловие;
Сообщить("1 Приступаем к выполнению запроса к данным регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
ТаблицаЗаполнения = Запрос.Выполнить().Выгрузить();
Сообщить("2 Приступаем к обработке результата запроса к регистру """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
// заполнение строки progress bar
ЭлементыФормы.Индикатор2.Значение = 0; // обнуляем, чтобы при повторном запуске статусбар сбросился в 0
ЭлементыФормы.Индикатор2.МаксимальноеЗначение = ТаблицаЗаполнения.Количество(); // задаем значение для 100%
// для каждой строки таблицы значений установим отбор и перезапишем регистр
Для Каждого СтрокаЗаполнения Из ТаблицаЗаполнения Цикл
ЭлементыФормы.Индикатор2.Значение = ЭлементыФормы.Индикатор2.Значение + 1; //указываем прирост внутри цикла
// попробуем через СоздатьМенеджерЗаписи()
текЗапись = РегистрыСведений[ИмяРегистраСведений].СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(текЗапись, СтрокаЗаполнения);
// прочитаем эту запись (внимание, эта команда обязательна, иначе можно ненароком очистить весь регистр!)
текЗапись.Прочитать();
Если текЗапись.Выбран() Тогда // убедились, что спозиционироваться удалось
// сообщаем, что именно и на какое значение нужно изменить в регистре
текЗапись[ИмяИзменяемогоРесурса] = НовоеЗначениеРесурса;
// записываем изменения в регистре
текЗапись.Записать();
Иначе // спозиционироваться не удалось, можно выходить
Сообщить("Возникла проблема определения " + НовоеЗначениеРесурса + " в регистре через менеджер записи " + НовоеЗначениеРесурса);
КонецЕсли;
КонецЦикла;
Сообщить("3 Окончание исправления регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
КонецПроцедуры // ЗаменаИзмеренияНезависимогоРегистра()
Категория:
Регистры сведений Как установить курсор на необходимой строке списка регистра сведений Код 1C v 8.х Отбор = Новый Структура;
Отбор.Вставить("Подразделение", ВыбПодразделение);
Отбор.Вставить("Должность", ВыбДолжность);
Рег = РегистрыСведений.СведенияОШтатныхЕдиницах;
КлючЗаписи = Рег.СоздатьКлючЗаписи(Отбор);
// ШтатныеЕдиницы - табличное поле для отображения списка
// записей регистра сведений
ЭлементыФормы.ШтатныеЕдиницы.ТекущаяСтрока = КлючЗаписи;
Код 1C v 8.х // Процедура Установить Строку предназначена для позиционирования строки штатного расписания
Процедура УстановитьСтроку(ПарамОрганизация, ПарамПодразделение, ПарамДолжность) Экспорт
Организация = ПарамОрганизация;
ЭлементыФормы.Подразделения.ТекущаяСтрока = ПарамПодразделение;
// установить должность в списке ШтатныеЕдиницы
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации,
| ШтатноеРасписаниеОрганизаций.Должность,
| ШтатноеРасписаниеОрганизаций.Период КАК Период
|ИЗ
| РегистрСведений.ШтатноеРасписаниеОрганизаций КАК ШтатноеРасписаниеОрганизаций
|ГДЕ
| ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации = &ПодразделениеОрганизации
| И ШтатноеРасписаниеОрганизаций.Должность = &Должность
|
|УПОРЯДОЧИТЬ ПО
| Период УБЫВ");
Запрос.УстановитьПараметр("ПодразделениеОрганизации", ПарамПодразделение);
Запрос.УстановитьПараметр("Должность", ПарамДолжность);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = 1 Тогда
Выборка.Следующий();
ЗначениеКлюча = Новый Структура("ПодразделениеОрганизации, Должность, Период", Выборка.ПодразделениеОрганизации, Выборка.Должность, Выборка.Период);
ЭлементыФормы.ШтатныеЕдиницы.ТекущаяСтрока = РегистрыСведений.ШтатноеРасписаниеОрганизаций.СоздатьКлючЗаписи(ЗначениеКлюча);
КонецЕсли;
КонецПроцедуры
Категория:
Регистры сведений Коды ошибок 1Сv7 10 Ошибка закрытия файла
20 Ошибка создания файла
30 Ошибка определения длины файла
40 Ошибка установки длины файла
50 Ошибка при попытке заблокировать файл
60 Ошибка при открытии файла
70 Ошибка чтения файла
80 Ошибка удаления файла
90 Ошибка переименования файла
100 Ошибка позиционирования в файле
110 Ошибка снятия блокировки с файла
120 Ошибка записи в файл
200 Файл не является базой данных DBF-формата
210 Неопознанное имя поля
220 Неопознанный тип поля
230 Запись слишком длинная
300 Индексный файл не содержит информации о записи
310 Нарушение структуры индексного файла
330 Указанное имя индекса недоступно
340 Ошибка уникальности индекса
400 Ожидается запятая или скобка
410 Выражение не завершено
422 IFF требует параметров одинаковой длины
425 У STR и SUBSTR 2-й и 3-й параметры – константы
430 Неверное число параметров
440 Слишком сложное выражение
450 Пропущена правая скобка
460 Неверный тип подвыражения
470 Неопознанная функция
480 Неопознанный оператор
500 Выражение не завершено символом двойной кавычки
920 Недостаточно памяти
Категория:
Системные Ошибки