Как исправить регистр сведений в 1с 8
(3) А можно чуть подробнее ?
Вот так может ? Но это работает только для одной записи ? А как же пробежаться по всем ?
Перебрать записи можно так
НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Но надо пробовать, модификация измерений в регистре может не прокатить.
(8)
Не соглашусь. Все работает.
(13)
Не нужно каждый раз записывать набор. Достаточно один раз в конце.
(9) А почему ожидаемо, какие препятствия могут возникнуть при изменении записей набора регистра сведений в цикле?
План захвата терргиторий:
1. Создать набор записей
2. Установить отбор по Контрагенту1
3. Выгрузить в таблицу значений
4. Очистить набор записей
5. Записать набор записей
6. В таблице значений заменить значение в колонке контрагент на Контрагент2
7. Создать набор записей
8. Установить отбор по Контрагенту2
9. Загрузить таблицу значений
10. Записать набор записей
(10)
План захвата терргиторий:
1. Создать набор записей
2. Установить отбор по Контрагенту1
3. Выгрузить в таблицу значений
4. Очистить набор записей
5. Записать набор записей
6. В таблице значений заменить значение в колонке контрагент на Контрагент2
7. Создать набор записей
8. Установить отбор по Контрагенту2
9. Загрузить таблицу значений
10. Записать набор записей
Вот так без лишнего.
Добрый день, необходимо примерно то же .
Написала так:
Набор=РегистрыНакопления.НДСНачисленный.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ДокументРеализации.Ссылка);
// регистратор беру из формы
Для Каждого СтрокаТЧ ИЗ Таблица Цикл
// здесь меняем все, что необходимо
КонецЦикла;
Набор.Загрузить(Таблица);
Набор.Записать(Истина);
Подскажите, пожалуйста, почему изначально выгружается пустая таблица (даже без отбора, я проверила).
Читаем набор записей с отбором по заменяемому измерению
выгружаем в таблицу
очищаем набор
записываем набор
заменяем в таблице измерение на нужное
загружаем таблицу в набор
записываем набор
Манипулирование записями регистров без использования регистратора
В 1С:Предприятии 8 все регистры, кроме регистров сведений, всегда связаны с регистраторами. Регистры сведений могут быть независимыми или также подчиненными регистратору. В этом разделе мы опишем работу с регистрами, подчиненными регистраторам.
В большинстве случаев записи регистров, подчиненных регистраторам, создаются при проведении документов. Это наиболее "естественный" способ создания записей. В этом случае в процессе проведения документа формируются записи регистра, и, тем самым, происходит отражение в учете события описываемого документом.
Однако в 1С:Предприятии 8 существует возможность изменять записи регистров без участия документа. При этом следует учитывать, что каждая запись регистра всегда подчинена одному и только одному регистратору (документу). Поэтому с точки зрения "времени жизни" записи всегда подчинены конкретным регистраторам. Однако, записи могут изменяться без участия самого документа. Главное, чтобы в них имелась ссылка на документ.
Для изменения записей регистров, подчиненных регистраторам, используются наборы записей. При этом всегда используется отбор по регистратору. То есть совокупность записей, подчиненных одному регистратору, является "гранулой" изменения регистра. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.
При изменении записей регистра можно использовать набор записей, входящий в коллекцию движений документа (свойство Движения объекта ДокументОбъект). Однако это не обязательно. Для изменения записей регистра можно использовать и набор записей созданный с помощью менеджера регистра.
Таким образом, чтобы изменить записи регистра необходимо:
- создать набор записей;
- установить отбор по определенному регистратору;
- прочитать набор;
- изменить записи набора;
- записать набор.
Например, чтобы установить значение реквизита во всех записях регистра можно использовать следующий алгоритм.
//Выберем всех регистраторов регистра
Запрос = Новый Запрос;
Запрос.Текст ;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
//Обойдем регистраторов
Пока Выборка.Следующий() Цикл
Сообщить("Изменение записей по регистратору: " + Выборка.Регистратор);
//Для каждого регистратора выполним изменение набора записей
НаборЗаписей = РегистрыНакопления.УчетНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Выборка.Регистратор;
НаборЗаписей.Прочитать();
Для каждого Запись Из НаборЗаписей Цикл
Запись.Реквизит1 = "Тест";
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
В приведенном примере выполнялось изменение записей. Для добавления записей, если их нет у регистратора, можно выполнять запись без считывания. Для удаления записей можно выполнять запись пустого набора без выполнения считывания.
Заметим, что для добавления большого количества записей по одному регистратору существует возможность записывать записи без замещения. Это регулируется параметром метода Записать(). Такая возможность позволяет добавлять записи, не помещая их всех одновременно в оперативную память.
В регистрах расчетов кроме отбора по регистратору для набора записей можно также установить отбор по другим значениям измерений (только по равенству). Это позволяет выполнить изменение части записей, подчиненных одному регистратору.
Практически все документы в программах 1С, кроме записей в регистр бухгалтерии, формируют движения по регистрам, накапливающим информацию об изменении того или иного объекта учета, на основании которой, в свою очередь, формируются отчеты. Рассмотрим, на примере последней версии 1С:Бухгалтерия 8 – версии 3.0, как формируются записи в регистрах «Начисления зарплаты»…
Рис.1 Записи в регистрах «Начисления зарплаты»
… и «Реализация услуг». Мы видим, что кроме бухгалтерских проводок, в отчете о движении документа присутствуют разные закладки. Это и есть записи регистров, и у каждого документа они свои.
Рис.2 Записи регистров
Посмотреть движение по регистрам можно, нажав кнопку «Показать проводки и другие движения по регистрам», которая будет в любом журнале документов или документе, формирующем движение.
Рис.3 Показать проводки и другие движения по регистрам
Если регистров много, мы можем, используя кнопку «Еще» - команда «Выбор регистров», отобрать регистры, которые мы хотим отобразить.
Рис.4 Команда «Выбор регистров»
Рис.5 Настройка отображения регистров
После отбора нужных регистров, отчет о движении отобразит только движения по выбранным регистрам.
Рис.6 Движения по выбранным регистрам
Обратите внимание, в некоторых документах допускается ручная корректировка регистров. Но, если пользователь необдуманно внесет исправления в одну запись, не исправив другую, связанную с ней, это может повлечь ошибки при попытках сформировать отчетность.
Рис.7 Ручная корректировка регистров
Для корректировки регистров есть два способа:
- Через документ «Операция»;
- В документе, в котором были произведены движения, установив галочку на разрешении ручной корректировки.
Остановимся подробнее на этих вариантах.
Корректировка регистров, используя документ «Операция»
Откроем журнал «Операции, введенные вручную» из раздела меню «Операции».
Рис.8 Журнал «Операции, введенные вручную»
Нажав кнопку «Создать», мы видим варианты операций – «Операция», «Сторно документа», «Типовая операция».
Рис.9 Варианты операций
Для корректировки записей регистра мы можем использовать первые два документа. Разберем принцип их работы.
Документ «Операция»
Рассмотрим, как можно работать с регистрами документом «Операция».
Предположим, пользователь вводит бухгалтерскую запись «Операция, введенная вручную» и не учитывает движения по регистрам. Возьмем пример – исправление начисления зарплаты. Сразу оговорюсь, что такие операции необходимо проводить в документе по начислению зарплаты. Мы делаем это для примера, чтобы показать работу регистров. Проводкой мы уменьшаем начисление зарплаты.
Рис.10 Работа с регистрами документом «Операция»
Сформировав отчет «Карточка счета» (раздел меню «Отчеты» - «Стандартные») по сотруднику, мы видим, что по бухгалтерским проводкам проходит наша корректировка. Уменьшив на 200 руб. сумму зарплаты, у нас получается начислено 21460 руб. (21660 руб. -200 руб.).
Рис.11 Отчет «Карточка счета» по сотруднику
Обороты идут, пользователь рад, но до поры, до времени. Забегая вперед, для примера, сформируем отчет «2-НДФЛ для передачи в ИФНС» по сотруднику. (Раздел меню «Отчеты» - «Регламентированные отчеты»). Из отчета мы видим, что сумма доходов за декабрь не изменилась. Это ситуация возникла, потому что у нас не были сформированы движения по регистрам, которые предусмотрены для заполнения отчетов, и на отчеты наша бухгалтерская операция никак не повлияла.
Рис.12 Сумма доходов за декабрь не изменилась
Вернемся к нашему документу «Операция». Выберем по кнопке «Еще» пункт «Выбор регистров».
Рис.13 Выбор регистров
В открывшемся списке выбираем регистр «Учет доходов для исчисления НДФЛ».
Рис.14 Учет доходов для исчисления НДФЛ
В нашем документе «Операция» появляется еще одна закладка с названием выбранного регистра, где мы добавляем запись, заполняя необходимые данные.
Рис.15 Закладка с названием выбранного регистра
С помощью документа «Операция» мы производим корректировку этого регистра. В операции начисления зарплаты задействовано больше регистров, но мы показываем работу документа на примере одного регистра.
Проверим, как отразилась корректировка регистра «Учет доходов для исчисления НДФЛ» на отчете. Сформируем еще раз отчет «2-НДФЛ для передачи в ИФНС» и увидим, что сумма дохода по строке за 12 месяц изменилась на 200 руб., благодаря корректировке регистра.
Рис.16 Отчет «2-НДФЛ для передачи в ИФНС»
Этот пример нам показывает, что на основании записей регистров происходит заполнение отчетов, и одного исправления бухгалтерской записи документом «Операция, введенная вручную» недостаточно. В случае необходимости, корректировку записей регистров накопления можно сделать этим же документом, выбрав нужный регистр.
Документ «Сторно»
В журнале документов «Операции, введенные вручную» предусмотрен документ «Сторно». Он предназначен для корректировки записей документов закрытого или прошлого периода, в котором уже нельзя вносить изменения. Заполняется он просто. Выбрав документ, записи которого необходимо изменить, записи в таблице становятся доступны для редактирования. Записи отображаются красным, при этом пользователь может изменять их частично, изменяя только записи движения по регистрам.
Рис.17 Сторнировани
Рис.18 НДС Продажи и Реализация услуг
Данная операция приведена для примера. В некоторых программах бывает уже предусмотрены корректировочные документы. Например, документы «Корректировка реализации», «Корректировка поступления», «Корректировка долга» покупателя или поставщику и т.п., в программе «1С:Бухгалтерия 3.0».
Рис.19 Корректировочные документы в «Продажах»
Рис.20 Корректировочные документы в «Покупках»
Регистры, сформированные обработкой «Свертка информационной базы»
Хотелось бы коротко упомянуть еще один способ корректировки регистров. При больших объемах работы программа 1С бывает сильно перегружена, и возникает необходимость навести порядок, в том числе, и в регистрах. Обработка «Свертка информационной базы» позволяет сформировать остатки по регистрам на определенную дату.
Рис.21 Свертка информационной базы
Подробно на ней мы останавливаться не будем, но упомянем, что в результате этой операции в журнале «Операции, введенные вручную» формируются записи с остатками в разрезе регистров, и при необходимости пользователь может их скорректировать или удалить.
Рис.22 Записи с остатками в разрезе регистров
На записях в регистры построена вся работа программы, поэтому пользователю необходимо понимать принцип их работы, как происходит запись в регистры, как корректно произвести их корректировку в случае необходимости. Неправильное внесение корректировок отразится на достоверности информации, в связи с чем, могут возникнуть ошибки при формировании отчетности. Если у вас остались вопросы, наши специалисты с радостью проконсультируют вас, а также подберут оптимальные тарифы и цены на сопровождение 1С.
На последних мы остановимся поподробнее, поскольку они позволяют компилировать данные из БД по разрезам измерений. Например, в «Ценыноменклатуры» хранятся данные для конкретной номенклатуры и характеристики по определенному виду цен.
Рис.1 Регистр «Ценыноменклатуры»
Характеристики
Регистр бывает как периодическим, так и непериодическим, когда не нужно сохранять последовательность изменений. Но если все-таки хранить нужно, то устанавливается, в пределах какого периода программа установит контроль уникальности записей: посекундно, за день, месяц, за квартал и год.
Рис.2 Периодичность и режим записи
Если попытаться создать две записи в пределах одного периода, программа выдаст ошибку «Запись с такими ключевыми полями существует!» и не даст произвести запись в базу данных.
Также можно указать режим записи. Первый с «Подчинением регистратору», при котором записи будут регистрироваться документами и в каждой из них будет указан документ-регистратор. Если выбирать второй – независимый режим, то данные регистрируются не регистратором, а добавляются, например, непосредственно из списка или как обработка.
Рис.3 Режимы записи
Особенность периодического регистра в том, что можно использовать срез крайних или первых, получая готовые значения из базы данных о последнем/первом установленном значении на определенную дату.
Запись в регистр сведений 1С
Строки в регистре с периодом и регистратором, содержащие информацию о ресурсах в разрезе измерений, называются записями.
Чтобы добавить запись в регистр используются или менеджер записей, или набор записей. Если у записей в регистре имеется общий ключ, то необходимо использовать НаборЗаписей. А для записи одной единственной записи, если в регистре все записи уникальны, необходимо использовать МенеджерЗаписи.
Пример записи при использовании объекта РегистрСведенийНаборЗаписей.
Использование менеджера записи:
При использовании набора записей и метода «Записать» происходит запись в регистр сведений набора записей. При этом может происходить как просто добавление строк, так и замещение уже имеющихся строк в регистре. Для независимых регистров, без установки отборов, будет произведено удаление всех записей в регистре и замещение на добавляемые записи.
Если записать без отбора данные в подчиненны регистр, возникнет ошибка.
Пример записи с использованием набора записей в подчиненный регистратору регистр сведений ЦеныНоменклатуры:
Пример записи через менеджер записи:
Поиск и чтение в регистре сведений
Чтобы найти в регистре сведений запись и прочитать ее, нужна помощь запросов. Например, нам надо получить цены, внесенные определенным регистратором:
Изменение и удаление записей
Чтобы удалить запись регистра сведений, например, все курсы валюты EUR, воспользуйтесь следующим кодом:
Для быстрой и полной очистки регистра можно использовать следующий код:
Чтобы скорректировать и изменить регистр, а также быстро заполнить регистр данными, можно написать универсальную обработку.
Регистр сведений – это хранилище сведений конфигураций 1С в виде записей с значениями измерений (разрезы) и соответствующими им значениями (ресурсами). Это могут быть курсы валют в разрезе валют, цены в разрезе номенклатуры и типа цен, в качестве регистратора могут выступать и документы, которые создают записи в регистр.
Пример: «Регистр сведений» - «Курсы валют».
Рис.1 Курсы валют
Если мы откроем Конфигуратор и в дереве метаданных развернем пункт «Регистры сведений», мы увидим список всех регистров сведений.
Рис.2 Регистры сведений
При этом записей в регистрах может накопиться огромное количество. Рассмотрим несколько способов, как можно очистить регистры сведений 1С 8.3. Но при выполнении этих действий рекомендуется сделать резервную копию информационной базы.
Программная очистка регистра сведений
Программная очистка регистра сведений не подчиненного регистратору производится при помощи записи пустого набора записей.
В первой строке кода создается пустой набор записей (набор записей пустой, т.к. данные регистра не прочитаны), во второй – производится его запись, взамен существующих. Результат – пустой регистр.
Данный вариант применим только для регистров сведений с независимым режимом записи, и такой способ очистки занимает очень много времени.
Обработка очистка регистра сведений в 1С 8.3
Существует обработка, с помощью которой можно произвести очистку любого регистра сведений – «Очистка регистра сведений 1С.epf», работающая как в обычных формах, так и в управляемых. Чтобы ею воспользоваться, ее необходимо открыть в пользовательском режиме через пункт меню «Файл» - «Открыть».
Рис.3 Обработка очистка регистра сведений в 1С 8.3
Указываем имя регистра, который нам нужно очистить (обязательно уточнить его название в конфигураторе) и нажимаем кнопку «Очистить регистр».
Рис.4 Очистить регистр
После некоторого ожидания операция завершена. Таким способом можно очистить любой регистр сведений в программе.
Обработка – свертка независимого периодического регистра сведений
Есть еще одна обработка, позволяющая очистить регистр сведений, подходящая для любых конфигурация 8.2 и 8.3, работающих как обычное приложение. (СверткаНезависимогоПериодическогоРегистраСведений.epf).
Чтобы открыть обработку для использования в конфигурации (управляемое приложение), нужно запустить 1С 8.3 в режиме «Толстый клиент (обычное приложение)». Для этого в Конфигураторе изменить режим запуска в пункте меню «Сервис» - «Параметры».
Рис.5 Обработка – свертка независимого периодического регистра сведений
Установив переключатель в положение «Толстый клиент (обычное приложение)», нажимаем кнопку «Применить» или «Ок».
Рис.6 «Толстый клиент (обычное приложение)»
После этого заходим в режим «1С:Предприятие» через меню «Сервис» Конфигуратора.
Рис.7 Заходим в режим «1С:Предприятие»
В результате наша программа открылась в режиме обычного приложения (оно использовалось в более старых версиях программы 1С). Используя кнопку «Открыть» на панели инструментов, открываем нашу обработку. Ее настройки интуитивно понятны. Устанавливаем дату, выбираем регистры, которые хотим очистить и нажимаем кнопку «Выполнить».
Рис.8 Устанавливаем дату, выбираем регистры, которые хотим очистить и нажимаем кнопку «Выполнить»
Наши регистры будут очищены. Но, повторимся, при выполнении этой операции необходимо быть особенно внимательным и обязательно не забыть провести резервное копирование информационной базы, как и при большинстве манипуляций с базой и ее целостностью. Здесь же это особенно важно сделать, так как операция по обнулению регистров необратима.
Читайте также: