Добавить запись в регистр накопления в 1с
Здравствуйте любимые форумчане). Подскажите пожалуйста как можно записать в регистр накопления данные из внешней обработки.
Ибо таким методом не выходит :-) и это понятно)))
Движение = Движения."РегсторНакопления".Добавить();
Движение.ВидДвижения=ВидДвиженияНакопления.Приход;
А задача стоит в следующем!Делается выборка запросом,по контрагентам и бонусным картам, и если сегодня ДР конкретного контрагента тогда ему на карту начисляется определенное кол-во баллов. вот так.
Вроде как-то через "СоздатьНаборЗаписей()" но я не допираю ;-( т.к. Новичок.
Для записи в регистр накопления нужен регистратор, т.е. документ, к которому привязаны движения.
Если нет возможности добавить свой документ в конфигурацию, то можно привязаться к какому-нибудь пустому документу, но учтите, что при его перепроведении движения пропадут.
А код должен выглядеть примерно так:
Написал вот так вот и че-то не каких эмоций не происходит, а именно движение не прошло и в РН не че не прибавилось по этому контрагенту, а точнее по его БонБаллам. (
РТ = РегистрыНакопления.ссБонусыПоКартам.СоздатьНаборЗаписей();
РТ.Отбор.Регистратор.Установить(Регистратор.Ссылка);
РТ.Прочитать();
Движение = РТ.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Бонус =1000;
Движение.Карта = Выборка.НаименованиеБ;
Ну посмотрели бы хоть в синтакс-помощнике, что это за функция и как она работает.
И в отладчике, что вы из нее получаете.
Вам нужно что-то вроде Регистратор = Документы.СМСРегистор.НайтиПоКоду("00000001");
[quote]тут добавить нечего все так[/quote]
Кстати, а петушков, которые просто посты набивают, тут не банят?
если так и не получилось - Сама делала таким образом:
в модуле документа определяла переменную для ТаблицыЗначений_ (для движений) и датуЗаписи (дата записи движений) экспортные
ПриОткрытии документа обнуляем ТаблицуЗначений_ и ДатуЗаписи
В обработке :
НашДокумент = Документ. ПолучитьОбъект();
удаляю движения документа.
Прописываю таблицуЗначений, определённую в модуле.
затем
НашДокумент.ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
В проведении документа:
если ТаблицаЗначений_.количество() = 0 - стандартные движения
если нет, то то, что хотим сделать с таблицей.
Возможно не очень краиво, но точно работает - по другому у меня не получилось.
Не могу сказать что реализовано правильно с точки зрения эффективности и быстродействия,но сделал вот так-вот!
Во внешней обработке написал после запроса
ДокументСи=Документы.СМСРегистор.СоздатьДокумент();
ДокументСи.Дата=ТекущаяДата();
ДокументСи.Карта=Выборка.карта;
ДокументСи.Бонус=1000;
ДокументСи.Записать();
Где: ДокументСи=Документы.СМСРегистор.СоздатьДокумент();
Это созданный в конфе документ "СМСРегистор", в котором созданы реквизиты "карта,бонус," еще планируется ссылка на контрагент! естественно он заполняется и после записи проводится по РН.БонусыНаКарте.
ИМХО так наверное даже лучше т.к. обработка изначально будет выполняться автоматом пакетным запуском,и для того что б отследить пополняемые бонусы это самый реальный вариант, плюс потом можно отчетик наклепать типо. НачисленныеБонусыЗаМесяц. А Так же можно всегда их и потереть)))
А Вообще Все это для РАРУСОВСКОГО модуля SMS4B))))Точнее то что от него осталось)))Ибо он переделан теперь весь))Так что если кому то надо , подскажу как там все у меня реализовано)Буду рад если и мне че нить путное посоветуют)))
Как добавить записи в независимый регистр сведений?
Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект РегистрСведенийМенеджерЗаписи..
Например, для того, чтобы в независимый регистр сведений ЗначенияСвойствОбъектов с измерениями Объект, Свойство и ресурсом Значение добавить одну запись, содержащую значение некоторого свойства выбранной номенклатуры, можно использовать следующий код:
[php]
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = ПолеВводаНоменклатура;
МенеджерЗаписи.Свойство = ПолеВводаСвойствоНоменклатуры;
МенеджерЗаписи.Значение = ПолеВводаЗначениеСвойства;
МенеджерЗаписи.Записать();
[/php]
В результате выполнения этого кода новая запись будет добавлена в регистр, или, если регистр уже содержит запись с выбранными значениями измерений Объект и Свойство, – существующая запись будет заменена новой.
Если требуется добавить несколько записей в регистр сведений, можно использовать объект РегистрСведенийНаборЗаписей..
Например, для того, чтобы в тот же самый регистр сведений ЗначенияСвойствОбъектов добавить несколько записей о значениях различных свойств выбранной номенклатуры, можно использовать следующий код (предполагается, что свойства и соответствующие им значения находятся в таблице значений ТаблицаСвойств, сформированной заранее):
[php]
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(ПолеВводаНоменклатура);
Для Каждого СтрокаТаблицы Из ТаблицаСвойств Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = ПолеВводаНоменклатура;
НоваяЗапись.Свойство = СтрокаТаблицы.Свойство;
НоваяЗапись.Значение = СтрокаТаблицы.ЗначениеСвойства;
КонецЦикла;
НаборЗаписей.Записать();
[/php]
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения Объект (по которому установлен отбор в наборе записей), – существующие записи будут заменены новыми.
Регистры сведений позволяют хранить произвольные данные в разрезе нескольких измерений. Они позволяют получить срез информации (текущее значение показателей) на любой момент времени.
Для регистров сведений связь с регистраторами не всегда обязательна.
Добавление записей в регистр сведений
Программно добавить записи в регистр сведений можно двумя способами:
- с помощью объекта МенеджерЗаписи;
- с помощью объекта НаборЗаписей.
Добавление записей с помощью объекта МенеджерЗаписи
Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Таким образом, для того, чтобы в периодический, независимый регистр сведений “КурсыВалют” с измерением “Валюта” и ресурсами “Курс” и “Кратность” добавить одну запись – курс и кратность валюты на определенную дату – можно использовать следующий код:
Добавление записей в независимый регистр сведений помощью объекта НаборЗаписей
Добавление записей в независимый регистр сведений с помощью НабораЗаписей выполняется по следующему алгоритму:
- Создание объекта НабораЗаписи;
- Установка отбора по измерениям и периоду (если регистр периодический);
- Добавление и заполнение значений полей записи;
- Запись набора.
Для примера выполним добавление записей в тот же регистр сведений “КурсыВалют“, предварительно установив отбор по измерению “Валюта” и периоду.
Добавление записей в регистр сведений, подчиненный регистратору
Для добавление записей в регистр сведений, подчиненный регистратору, выполняется с помощью объекта НаборЗаписей по следующему алгоритму:
- Создание объекта НаборЗаписей;
- Установка отбора по определенному регистратору;
- Заполнение записей набора;
- Запись набора.
Изменение записей в регистре сведений
Изменение записей в независимом регистре сведений
Изменять записи в независимом регистре сведений можно как с помощью МенеджераЗаписи, так и с помощью НабораЗаписей. Изменение записей выполняется по следующему алгоритму:
- Создание объекта МенеджерЗаписи или НаборЗаписи;
- Установить отборы;
- Чтение записей из базы данных, соответствующих наложенному отбору;
- Редактирование полученных записей;
- Запись измененных записей.
При изменении записей в независимом регистре сведений с помощью объекта МенеджерЗаписи, действуют такие же ограничения как и при добавлении. При изменении записи с помощью менеджера, после чтения значений выполним проверку – есть ли записи для изменения.
В отличии от менеджера записи, работа с набором записи позволяет изменять сразу несколько записей, полученных в результате установленного отбора. Поэтому изменение записей производим в цикле.
Изменение записей в регистрах сведений подчиненных регистраторам
Изменение записей регистров, подчиненных регистраторам, возможно только с помощью наборов записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.
Изменение записей выполняется по следующему алгоритму:
- Создать объект НаборЗаписей;
- Установить отбор по определенному регистратору;
- Прочитать набор;
- Изменить записи набора;
- Записать набор.
Удаление записи в регистре сведений
Удаление записи из независимого регистра сведений
Для удаления записи из независимого регистра сведений выполняется по следующему алгоритму:
Ругается на "ЭтотОбъект.Ссылка". Что это в данном случае? Или это неверно и нужно так же программно создавать документ?
Заранее спасибо всем ))))
Ошибки при записи движений документа в регистр накопления
Здравствуйте. Есть собственная конфигурация 1С 8.3 по планированию и учету проектов. В Конфигурации.
Регистр сведений «Списанные материалы из эксплуатации». Почему регистр сведений, а не регистр накопления?
Существует Регистр сведений «Списанные материалы из эксплуатации». Регистр сведений предназначен.
Регистр сведений. Добавление записи
Есть независимый, непериодический регистр сведений. Добавляю запись.
Добавление записи регистра накопления
Доброго времени суток! Подскажите, как программно заполнить регистр "Продажи по дисконтным.
Решение
откуда пытаетесь? Почему не стандартной обработкой проведения в модуле документа?
Вместо ЭтотОбъект.Ссылка - Объект.Ссылка.
мне нужно именно при определённых условиях записывать данные.
Исправила на Объект.Ссылка, теперь ошибка
Он же установлен. Не понимаю.
Решение
пропишите эти условия в обработке проведения.
Чем плохо делать записи программно вне обработки проведения: надо предусмотреть их удаление при отмене проведения/удалении документа. А если в нем что-то поменяют? А вашу команду для записей не нажмут, или нажмут, и к предыдущим добавятся еще парочку. Ерунда будет в регистре.
GreenkA, точно! Вы правы. Так и сделаю. Огромное спасибо.
А я смогу в модуле так же обращаться к элементам формы.
Программное добавление записи в подчиненной форме.
Есть подчиненная форма, в которой заполняются поля. При нажатии опр.клавиши на клаве необходимо.
Программное добавление слайдов (в PP 2010 нет записи макроса)
Нужно создать прогу в которой выбирается количество слайдов определенного макета, который выбрал.
регистр накопления
добрый день! у меня такая проблема, не могу понять как в 1С 8.1 обратится к записям документа в.
Регистр Накопления 1С
Привет. Я очень мало знаю русский. Извините за этого. Как заполнить одну колонку (себестоимость) в.
регистр накопления
Создайте регистр "Задолженности" таким образом, чтобы он позволил в разрезе контрагентов учитывать.
Детективная история
Сразу покажу на небольшом примере почему это так важно.
Пусть у нас есть начисление заработной платы за январь:
В начале февраля мы создаём ведомость на выплату зарплаты из кассы и нажимаем кнопку "Заполнить":
И получаем следующее:
Но ведь за январь:
- Начисление 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С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Читайте также: