Как изменить значение одного поля регистра сведений
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) НовенькийЯ, я так делала, но на этапе "записать" выходила ошибка "недостаточно памяти". А сейчас, решила для ответа точно посмотреть текст ошибки, а у меня все прошло хорошо :0 Видимо, требовалось перезагрузить компьютер и все. Проблема была не там, где я ее искала.
Спасибо за отклик!
Спасибо за отклик!
вот так делала:
Запрос= Новый запрос;
запрос.Текст =
"ВЫБРАТЬ
| ДвижениеКатушек.Период,
| ДвижениеКатушек.Ключ,
| ДвижениеКатушек.Серия,
| ДвижениеКатушек.Номер,
| ДвижениеКатушек.Сотрудник,
| ДвижениеКатушек.Маршрут,
| ДвижениеКатушек.НомерПриход,
| ДвижениеКатушек.НомерВыручка,
| ДвижениеКатушек.НомерВозврат,
| ДвижениеКатушек.НомерНедостача,
| ДвижениеКатушек.НомерСписано,
| ДвижениеКатушек.КоличествоПриход,
| ДвижениеКатушек.КоличествоВыручка,
| ДвижениеКатушек.КоличествоВозврат,
| ДвижениеКатушек.КоличествоНедостача,
| ДвижениеКатушек.КоличествоСписано,
| ДвижениеКатушек.СуммаПриход,
| ДвижениеКатушек.СуммаВыручка,
| ДвижениеКатушек.СуммаВозврат,
| ДвижениеКатушек.СуммаНедостача,
| ДвижениеКатушек.СуммаСписано
|ИЗ
| РегистрСведений.ДвижениеКатушек КАК ДвижениеКатушек"
;
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
НаборЗаписей = РегистрыСведений.ДвижениеКатушек.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаРезультат);
Для Каждого Запись Из НаборЗаписей Цикл
Если СтрДлина(СокрЛП(Запись.Номер))=2 тогда
Запись.Номер = "0"+СокрЛП(Запись.Номер);
ИначеЕсли СтрДлина(СокрЛП(Запись.Номер))=1 тогда
Запись.Номер = "00"+СокрЛП(Запись.Номер);
КонецЕсли;
КонецЦикла;
Сообщить("Запись");
НаборЗаписей.Записать();
Сообщить("Всё");
Показать
Как вариант попробуй писать построчно в транзакциях, скажем по 10К строк на транзакцию, получится немного дольше, но тогда памяти точно хватит.
Как то так попробуй
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
НачатьТранзакцию();
НомерПП=0;
НаборЗаписей = РегистрыСведений.ДвижениеКатушек.СоздатьНаборЗаписей();
Для Каждого СтрокаРез из ТаблицаРезультат Цикл
НомерПП=НомерПП+1;
Если НомерПП%10000=0 тогда
НаборЗаписей.Записать(Ложь);
НаборЗаписей=РегистрыСведений.ДвижениеКатушек.СоздатьНаборЗаписей();
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
Запись=НаборЗаписей.Добавить();
ЗаполнитьЗначениеСвойств(Запись,СтрокаРез );
Если СтрДлина(СокрЛП(Запись.Номер))=2 тогда
Запись.Номер = "0"+СокрЛП(Запись.Номер);
ИначеЕсли СтрДлина(СокрЛП(Запись.Номер))=1 тогда
Запись.Номер = "00"+СокрЛП(Запись.Номер);
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
ПоказатьКак то так попробуй
Что-то я запуталась в этом:
Для Каждого СтрокаРез из ТаблицаРезультат Цикл
НомерПП=НомерПП+1;
Если НомерПП%10000=0 тогда
НаборЗаписей.Записать(Ложь);
НаборЗаписей=РегистрыСведений.ДвижениеКатушек.СоздатьНаборЗаписей();
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
А старые записи кто удалять будет? ))
На самом деле всё гораздо проще:
На самом деле всё гораздо проще:
Набор = РегистрыСведений.ДвижениеКатушек.СоздатьНаборЗаписей();
Набор.Прочитать();
Для каждого Запись Из Набор Цикл
Запись.Номер = Формат(Число(Запись.Номер),"ЧЦ=3; ЧВН=");
КонецЦикла;
Набор.Записать(Истина);
Тем не менее разница есть - как минимум не надо делать запрос, результаты которого съедают очень много памяти, если в регистре много записей.
Если всё равно вылетает, можно и разбить обработку: Запросом выбрать все значения какого-то реквизита регистра и далее поочередно их обработать
Единственное реквизит должен быть проиндексирован.
Если всё равно вылетает, можно и разбить обработку: Запросом выбрать все значения какого-то реквизита регистра и далее поочередно их обработать
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДвижениеКатушек.Сотрудник
|ИЗ
| РегистрСведений.ДвижениеКатушек КАК ДвижениеКатушек")
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыСведений.ДвижениеКатушек.СоздатьНаборЗаписей();
Набор.Отбор.Сотрудник.Установить(Выборка.Сотрудник);
Набор.Прочитать();
Для каждого Запись Из Набор Цикл
Запись.Номер = Формат(Число(Запись.Номер),"ЧЦ=3; ЧВН=");
КонецЦикла;
Набор.Записать(Истина);
КонецЦикла;
ПоказатьЕдинственное реквизит должен быть проиндексирован.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот