Добавить запись в регистр накопления в 1с

Обновлено: 04.07.2024

Детективная история

Сразу покажу на небольшом примере почему это так важно.

Пусть у нас есть начисление заработной платы за январь:

В начале февраля мы создаём ведомость на выплату зарплаты из кассы и нажимаем кнопку "Заполнить":

И получаем следующее:

Но ведь за январь:

  • Начисление 50 000 рублей
  • НДФЛ 6 500 рублей
  • Итого к выплате 43 500 рублей

Где закралась ошибка? Что пошло не так? Неужели теперь всегда вводить сумму к выплате вручную?

Опытный бухгалтер тут же сделает оборотно-сальдовую ведомость по 70 счёту:

И будет в ещё большем недоумении, потому что по данным отчёта к выплате выходят всё те же 43 500! И откуда же взялись лишние 5 000 рублей?

Причём такая ситуация (с любыми расчётами) может произойти как в "тройке", так и в "двойке".

Сегодня я попытаюсь приоткрыть завесу тайны - почему же иногда программа ведёт себя так странно. Я расскажу как в таких случаях находить и устранять ошибку. Ближе к концу статьи мы разберёмся - откуда же взялись эти самые 5 000 рублей.

Учимся видеть регистры

При проведении документов 1С:Бухгалтерия 8 делает проводки по бухгалтерским счетам (кнопка ДтКт у любого документа):

Именно на основании этих проводок строятся все бухгалтерские отчёты: Анализ счёта, Карточка счёта, Оборотно-сальдовая ведомость.

Но есть огромный пласт данных, которые пишутся программой параллельно с проводками и используются для всего остального: заполнение КУДИР, книги покупок и продаж, регламентированной отчётности. заработной платы к выплате, наконец

Как вы уже, наверное, догадались этот пласт называется регистрами, вот он:

Я сейчас не буду вдаваться в подробности описания самих регистров, чтобы не запутать вас ещё больше.

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

Давайте присмотримся к регистру "Зарплата к выплате" - именно он имеет смысл для решения нашей проблемы с лишними 5 000:

Мы видим две записи по этому регистру, сделанные в приход, то есть в плюс. Если пролистать экран в право, то мы увидим в первой строчке сумму к выплате "-6 500", а во второй "50 000".

Остаток по этому регистру -6 500 + 50 000 равен 43 500, который и должен попасть в документ "Ведомость на выплату из кассы", когда мы нажимаем на кнопку "Заполнить".

Ещё раз повторюсь - ведомость на выплату определяет нашу задолженность по заработной плате перед сотрудником не по 70 счёту, а по регистру "Зарплата к выплате" .

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

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

Учимся анализировать регистры

И такой инструмент есть, он называется "Универсальный отчёт".

Переходим в раздел "Отчеты" пункт "Универсальный отчёт":

Выбираем тип регистра "Регистр накопления", регистр "Зарплата к выплате" и нажимаем кнопку "Сформировать":

Получилось не очень информативно:

Всё потому, что требуется предварительная настройка отчёта, нажимаем кнопку "Показать настройки" и на закладке "Группировка" добавляем поле "Сотрудник":

На закладке "Отборы" делаем отбор по нашей организации:

Нажимаем кнопку "Сформировать":

Вот это уже более интересно. Видим остаток к выплате нашему сотруднику те самые 48 500 рублей!

Снова заходим в настройки отчёта и добавляем на закладку "Показатели" новое поле "Регистратор":

Снова формируем отчёт:

Вот теперь мы прекрасно видим, что 5 000 появились как результат операции (видимо ввода остатков) 31 декабря 2014 года.

И нам нужно либо изменить эту операцию, либо вручную откорректировать регистр "Зарплата к выплате" и закрыть эти 5 000 рублей, например, 31 декабря 2015 года.

Давайте пойдём вторым путём. Итак, наша задача - сделать так, чтобы на начало 2016 года по регистру "Зарплата к выплате" не было нашей задолженности перед сотрудником.

Это делается ручной операцией.

Учимся корректировать регистры

Заходим в раздел "Операции" пункт "Операции, введенные вручную":

Создаём новую операцию концом 2015 года:

Из меню "Ещё" выбираем пункт "Выбор регистров. ":

Указываем регистр "Зарплата к выплате" и нажимаем ОК:

Переходим на появившуюся закладку регистра и делаем расход на 5 000 рублей:

Этим самым мы как бы отнимаем от регистра 5 000 рублей по сотруднику, чтобы выйти на ноль к началу 2016 года.

Проводим операцию и заново формируем универсальный отчёт:

Всё получилось! Видим, что наша ручная операция от 31.12.2015 вывела остаток в ноль и зарплата к выплате после начисления равна ожидаемым 43 500.

Замечательно. И сейчас мы проверим это в ведомости на выплату.

Но прежде я хочу обратить ваше внимание на ещё один важный момент:

Обратите внимание, что остатки на начало и на конец по группировке "Сотрудник" показывают ерунду. Это никакая не ошибка, это нюанс, который нужно учитывать, связанный с архитектурными особенностями 1с.

Запомните. В том случае, если универсальный отчёт выводится с детализацией до документа (регистратора) - остатки по группировкам будут показывать ерунду.

Если нам требуются остатки по группировке сотрудник - нужно сначала удалить из настроек добавленный нами показатель "Регистратор":

И только потом формировать отчёт:

Сейчас остатки показаны корректно.

Результат

Напоследок убедимся, что мы сделали всё правильно. Снова заходим в ведомость на выплату заработной платы за январь и нажимаем кнопку "Заполнить":

Мы молодцы, на этом пока всё

Кстати, подписывайтесь на новые уроки.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

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

Ругается на "ЭтотОбъект.Ссылка". Что это в данном случае? Или это неверно и нужно так же программно создавать документ?

Заранее спасибо всем ))))

Ошибки при записи движений документа в регистр накопления
Здравствуйте. Есть собственная конфигурация 1С 8.3 по планированию и учету проектов. В Конфигурации.


Регистр сведений «Списанные материалы из эксплуатации». Почему регистр сведений, а не регистр накопления?
Существует Регистр сведений «Списанные материалы из эксплуатации». Регистр сведений предназначен.

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


Добавление записи регистра накопления
Доброго времени суток! Подскажите, как программно заполнить регистр "Продажи по дисконтным.

Решение

Или это неверно и нужно так же программно создавать документ?

откуда пытаетесь? Почему не стандартной обработкой проведения в модуле документа?

Вместо ЭтотОбъект.Ссылка - Объект.Ссылка.

откуда пытаетесь? Почему не стандартной обработкой проведения в модуле документа?

мне нужно именно при определённых условиях записывать данные.

Исправила на Объект.Ссылка, теперь ошибка

Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: РегистрНакопления1)

Он же установлен. Не понимаю.

Решение

мне нужно именно при определённых условиях записывать данные пропишите эти условия в обработке проведения.
Чем плохо делать записи программно вне обработки проведения: надо предусмотреть их удаление при отмене проведения/удалении документа. А если в нем что-то поменяют? А вашу команду для записей не нажмут, или нажмут, и к предыдущим добавятся еще парочку. Ерунда будет в регистре. Тамика, в регистре документ этот выбран как регистратор?

GreenkA, точно! Вы правы. Так и сделаю. Огромное спасибо.

А я смогу в модуле так же обращаться к элементам формы.

наверняка эти элементы связаны с реквизитами объекта, к ним и обращайтесь

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

Программное добавление слайдов (в PP 2010 нет записи макроса)
Нужно создать прогу в которой выбирается количество слайдов определенного макета, который выбрал.

регистр накопления
добрый день! у меня такая проблема, не могу понять как в 1С 8.1 обратится к записям документа в.

Регистр Накопления 1С
Привет. Я очень мало знаю русский. Извините за этого. Как заполнить одну колонку (себестоимость) в.

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

Здравствуйте любимые форумчане). Подскажите пожалуйста как можно записать в регистр накопления данные из внешней обработки.

Ибо таким методом не выходит :-) и это понятно)))

Движение = Движения."РегсторНакопления".Добавить();
Движение.ВидДвижения=ВидДвиженияНакопления.Приход;

А задача стоит в следующем!Делается выборка запросом,по контрагентам и бонусным картам, и если сегодня ДР конкретного контрагента тогда ему на карту начисляется определенное кол-во баллов. вот так.

Вроде как-то через "СоздатьНаборЗаписей()" но я не допираю ;-( т.к. Новичок.

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

А код должен выглядеть примерно так:

Написал вот так вот и че-то не каких эмоций не происходит, а именно движение не прошло и в РН не че не прибавилось по этому контрагенту, а точнее по его БонБаллам. (

РТ = РегистрыНакопления.ссБонусыПоКартам.СоздатьНаборЗаписей();
РТ.Отбор.Регистратор.Установить(Регистратор.Ссылка);
РТ.Прочитать();
Движение = РТ.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Бонус =1000;
Движение.Карта = Выборка.НаименованиеБ;


Ну посмотрели бы хоть в синтакс-помощнике, что это за функция и как она работает.
И в отладчике, что вы из нее получаете.
Вам нужно что-то вроде Регистратор = Документы.СМСРегистор.НайтиПоКоду("00000001"); [quote]тут добавить нечего все так[/quote]
Кстати, а петушков, которые просто посты набивают, тут не банят? Ладно!Все я понял. Буду сам разбираться!Раз некому помочь.

если так и не получилось - Сама делала таким образом:

в модуле документа определяла переменную для ТаблицыЗначений_ (для движений) и датуЗаписи (дата записи движений) экспортные
ПриОткрытии документа обнуляем ТаблицуЗначений_ и ДатуЗаписи

В обработке :
НашДокумент = Документ. ПолучитьОбъект();
удаляю движения документа.
Прописываю таблицуЗначений, определённую в модуле.
затем
НашДокумент.ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);

В проведении документа:
если ТаблицаЗначений_.количество() = 0 - стандартные движения
если нет, то то, что хотим сделать с таблицей.
Возможно не очень краиво, но точно работает - по другому у меня не получилось.

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

Во внешней обработке написал после запроса

ДокументСи=Документы.СМСРегистор.СоздатьДокумент();
ДокументСи.Дата=ТекущаяДата();
ДокументСи.Карта=Выборка.карта;
ДокументСи.Бонус=1000;
ДокументСи.Записать();

Где: ДокументСи=Документы.СМСРегистор.СоздатьДокумент();
Это созданный в конфе документ "СМСРегистор", в котором созданы реквизиты "карта,бонус," еще планируется ссылка на контрагент! естественно он заполняется и после записи проводится по РН.БонусыНаКарте.

ИМХО так наверное даже лучше т.к. обработка изначально будет выполняться автоматом пакетным запуском,и для того что б отследить пополняемые бонусы это самый реальный вариант, плюс потом можно отчетик наклепать типо. НачисленныеБонусыЗаМесяц. А Так же можно всегда их и потереть)))

А Вообще Все это для РАРУСОВСКОГО модуля SMS4B))))Точнее то что от него осталось)))Ибо он переделан теперь весь))Так что если кому то надо , подскажу как там все у меня реализовано)Буду рад если и мне че нить путное посоветуют)))

Читайте также: