Перейти к содержимому

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

  • автор:

Редактирование регистров вручную

В 1С:Предприятии 8 существует возможность организовать в форме редактирование пользователем записей любого регистра, в том числе, и для подчиненного регистратору. Данная возможность соответствует общему подходу, принятому в 1С:Предприятии 8 в отношении модификации записей регистров. Система допускает и программное, и интерактивное изменение записей регистра без какого-либо участия регистратора (документа). Для выполнения таких изменений достаточно указать только ссылку на регистратор, чтобы определить значение отбора записей регистра.

Следует заметить, что эта возможность никак не противоречит типовой стратегии формирования движений при проведении документов. Система допускает, наряду с основной стратегией, используемой в большинстве случаев и предполагающей формирование движений в процессе проведения, и другие варианты. Например, непосредственное изменение движений может использоваться для создания документов, предназначенных для ручного редактирования движений регистров. Такая возможность широко используется для регистров бухгалтерского учета, но может применяться и для других регистров. Это позволяет предоставить пользователю или администратору системы возможность отражения в регистре операций, для которых не предусмотрено в конфигурации специального документа. Такая возможность никак не нарушает общую модель использования регистра как централизованной системы учета, а позволяет решать в нем дополнительные, заранее не предусмотренные задачи. Другим вариантом использования ручного редактирования регистров может являться предоставление пользователю возможности вносить изменения в движения, сформированные документом (в форме документа или в отдельной форме). Разумеется, реализация такой возможности требует от разработчика конфигурации решения вопросов связанных с регулированием полномочий пользователя и возможностью повторного формирования движений документом после их ручной корректировки. Например, может отмечаться, что движения данного документа изменены вручную и не должны обновляться при проведении. Система предоставляет весь необходимый набор средств для поддержки таких решений (расширения табличного поля, предназначенные для редактирования наборов записей, возможность отключения активности записей, отключение автоматического удаления движений и т.д.) Соответственно, это решение может применяться разработчиком, если он считает необходимым наличие такой возможности в прикладном решении.

В качестве примера рассмотрим создание документа «РучнаяОперация» для изменения данных регистра «УчетНоменклатуры».

Прежде всего, следует запретить проведение документа «РучнаяОперация». Работа стандартного механизма проведения документов нам, в данном случае, будет не нужна, поскольку мы собираемся вручную изменять записи в регистре накопления.
Затем, несмотря на то, что документ «РучнаяОперация» не проводится, следует указать, что движения документа будут находиться в регистре накопления «УчетНоменклатуры». Это необходимо для того, чтобы в форме документа нам был доступен для редактирования набор записей регистра накопления, содержащий движения документа «РучнаяОперация». Данная ситуация как раз очень хорошо иллюстрирует тот факт, что изменение записей регистра может выполняться не только при проведении документа, но и другими способами.

После этого в форме документа «РучнаяОперация» следует расположить табличное поле с командной панелью. Тип значения этого табличного поля должен быть «РегистрНакопленияНаборЗаписей.УчетНоменклатуры». Затем следует указать, что источником данных для этого табличного поля будут являться движения документа «РучнаяОперация» по регистру «УчетНоменклатуры»:

Все, по большому счету, ручная операция готова. Можно в режиме «1С:Предприятие» создать новый документ, и используя пиктограммы командной панели, связанной с табличным полем, вручную редактировать набор записей этого документа.

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

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

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

Если теперь в режиме "1С:Предприятие" перезаписать созданные ранее документы "РучнаяОперация", можно убедиться, что дата движений будет синхронизирована с датой документа.

Такой способ синхронизации является самым простым и не учитывает возможность программной записи документа «РучнаяОперация». В самом деле, при программном вызове метода Записать() у объекта документа, он будет записан без участия формы документа. Это значит, что событие «При записи» формы документа вызвано не будет, и наш код обработчика не отработает. Чтобы предусмотреть возможность синхронизации периода движений документа с датой документа и в случае программной записи объекта документ, следует использовать обработчик события Перед записью() объекта документ, а не формы документа.

Удалим обработчик события Перед записью() формы документа и рассмотрим, как выполняется синхронизация даты документа и движений в модуле объекта. Для этого следует создать обработчик события Перед записью() в модуле объекта документа «РучнаяОперация», содержащий следующий текст:

 ОбновитьДатуДвижений  Запрос      В этом случае обработчик будет содержать больше кода за счет дополнительных проверок, которые выполняются в результате того, что возможна как интерактивная, так и программная запись объекта.

Поясним содержание обработчика. Если записывается новый документ или были изменены его движения — следует обновить дату движений. В противном случае мы считываем запросом дату документа из базы данных и сравниваем ее с датой, установленной у записываемого объекта. Если даты разные – также следует обновить дату движений.

Перед установкой даты мы проверяем, был ли прочитан набор записей в свойстве «Движения» объекта и изменялся ли он. Если оба этих условия ложны – это значит, что набор записей в свойстве «Движения» объекта пуст, и это состояние не связано с его изменением. В этом случае, чтобы предотвратить ошибочное удаление записей в регистре (перезапись пустым набором записей), мы предварительно читаем движения из регистра в набор записей в свойстве «Движения». Затем, как и в предыдущем случае, устанавливаем нужную дату для всех записей этого набора. При выполнении записи объекта документ, этот набор будет записан в регистр накопления.

Аналогичным образом в процессе записи документа «РучнаяОперация» можно управлять не только периодом записей регистра накопления, но и значениями других полей регистра.

Например, таким же образом может быть создан документ «Операция», позволяющий вводить ручные операции в регистр бухгалтерии. При этом, вероятно, кроме управления периодом записей регистра, вам потребуется управлять значением поля «Активность» («включать» и «выключать» проводки документа) и т.д.

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

Заметьте, что оба эти способа не исключают модификацию записей регистра через объект «РегистрНаборЗаписей.». Поэтому, если логика конфигурации подразумевает возможность программной модификации объекта набор записей, код обработки следует размещать в обработчике события набора записей. Все попытки изменить данные регистра будут сведены, в конечном счете, к записи именно набора записей.

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

Народ, возможно ли программно изменить запись движения в регистре накопления?

Например — есть такая запись:

Регистратор. количество
документ1 5 — было
документ1 2 — стало

(0) Ты не поверишь.
товар тырим батенька?

а в каких случаях это необходимо?

партионный учет считается очень медленно — партий более 70 тыс.
приходит заявка — формируется отгрузка — документ с партиями (количество в которых не равно нулю)

пересчет количества номенклатуры на текущий момент — затруднительно.

думаю сделать просто «вычет» количества по партии, а не создавать движение «расход».

или подскажите как сделать по-другому. каждая партия имеет свой уникальный ид.

(4) На одну позицию номенлатуры 70 тысяч партий? Вы чем торгуете? Может в подходе ошибка?
(0) А вариант с отложенным проведением не устраивает?

Номенклатуры порядка 10-15 тыс. на момент внесения остатков (точка «старта») — внесено более 70 тыс партий.(приход).

после этого — пользователь загружает заявку (около 150-200 позиций номенклатуры с заданными количествами) и программа начинает автоматом «набирать» из существующих непустых партий (считаем по остаткам) необходимое количество по учету фифо и сроку годности.

Сейчас все это я реализовал через подсчет остатков приход/расход, работает достаточно медленно.

Сначала я определяю все партии этой номенклатуры, затем определяю для каждой партии пустая она или нет (есть ли движения по ид), выбираю «непустые» — делаю расход по ид этих партий. и так для каждой из 150-200 позиций.

думаю, если не считать остатки по приходу/расходу, а сразу вносить изменения в «приход» при проведении документа реализации, то можно будет сразу выбирать непустые партии и набирать количество.

(1) А разве изменять регистр накопления можно не регистратором?
(8) Можно но регистратор все равно указать придеться

(9)Подскажи как программно сделать запись в документе «расхода», чтобы «проведение» только изменяло параметр в регистре строчке записи партии — не могу пока найти ни в книге, ни в инете.

Или хотя бы как вообще программно поменять запись в регистре (не меняя регистратора)

Вообще была идея сделать это через регистр сведений. не столько важна «история» системы, сколько быстрая работа .

(10) Смотри — НаборЗаписей

Хмм. посмотрел, действительно набор записей для РН создается и записывается. А в случае перепроведения регистратора, который был указан для программной записи, что произойдет? Я так понимаю, если стоит «удалять движения автоматически» (а так стоит практически везде), то программная запись «потеряется»?

(10) Думаю достаточн тот код который ты навоял оптимизировать. В студию его.
(12) Ага удалится.

(14) Интересно, кто-нибудь кроме личностей «а после меня хоть потоп» использует эту фичу в работе. ИМХО это будет похуже пресловутого go to в коде, за такое надо сразу убивать.

(12) ты говоришь, о том, что если я сначала ввожу партию «документ 1» (кол-во 10), затем «как-то программно» сокращаю эту партию до (кол-во 2), а потом перепровожу «документ 1» — количество становиться опять 10?

(14) Особенность партионного учета — если ты перепроводишь какой-то документ внесенный раннее — нужно перепровести все документы (прочитал где-то, да это и понятно, иначе последовательности пропадут);

(15) Не разу не встречал.
(16) Да. Я же говорю посмотри НаборЗписей и поймешь почему так происходит.

НаборЗаписей — такого не нашел в СП.
Нашел

РегистрНакопленияНаборЗаписей. (AccumulationRegisterRecordSet.)
Выгрузить (Unload)
Синтаксис:
Выгрузить(, )
Параметры:
(необязательный)
Тип: Массив. Массив строк для выгрузки. Если не указан, выгружаются все строки набора записей.
(необязательный)
Тип: Строка. Список колонок для выгрузки в формате: «Колонка1, Колонка2. «. Если список не задан, то будут выгружены все колонки.
Возвращаемое значение:
Тип: ТаблицаЗначений.
Описание:
Создает таблицу значений и копирует в нее записи набора. Структура полученной таблицы совпадает со структурой набора записей.
Пример:
Рег = РегистрыНакопления.Затраты;
НаборЗаписей = Рег.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Значение = Ссылка;
ОсновныеДанные = НаборЗаписей.Выгрузить();

где-бы взять примерчик по понятнее.

и в общем — возможен ли другой подход для убыстрения работы?

ауу народ, есть еще мысли по этому вопросу?

Пример (7) напиши подробнее. Что значит «набирать» в заказе? Почему и где нужно менять количество в партиях?

Запрос=Новый Запрос;
Запрос.Текст=
«ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг «;

Запрос.УстановитьПараметр(«ДатаНачала», НачПериода);
Запрос.УстановитьПараметр(«ДатаОкончания», КонПериода);

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить (Выборка.Количество());
Выборка.Количество()
КонецЦИкла;

НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДок);
НаборЗаписей.Прочитать();
// ищешь нужную строку в наборе и правишь
НаборЗаписей.Записать();

Запрос=Новый Запрос;
Запрос.Текст=
«ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг «;

Запрос.УстановитьПараметр(«ДатаНачала», НачПериода);
Запрос.УстановитьПараметр(«ДатаОкончания», КонПериода);

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор);
НаборЗаписей.Прочитать();
НаборЗаписей.Количество=5;
НаборЗаписей.Записать();
КонецЦИкла;

нет, так не получатся.
Как прочитать ресурс Количество в Наборе записей и изменить его?
НаборЗаписей.Количество=5; — это не правильно

Запрос=Новый Запрос;
Запрос.Текст=
«ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг «;

Запрос.УстановитьПараметр(«ДатаНачала», НачПериода);
Запрос.УстановитьПараметр(«ДатаОкончания», КонПериода);

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
Для каждого движ из НаборЗаписей Цикл
Движ.Количество=5;
КонецЦИкла;
НаборЗаписей.Записать();

ВыборСуществующихПартий = Новый Запрос(«ВЫБРАТЬ
| СкладскойРегистр.Ид КАК Ид,
| СкладскойРегистр.Количество КАК Колво
|ИЗ
| РегистрНакопления.СкладскойРегистр КАК СкладскойРегистр
|ГДЕ
| СкладскойРегистр.Артикул = &Артикул
| И СкладскойРегистр.ВидДвижения = &ВидДвижения
| И СкладскойРегистр.Количество > 0
|
|УПОРЯДОЧИТЬ ПО
| СкладскойРегистр.СрокГодности»);

ВыборСуществующихПартий.УстановитьПараметр(«Артикул»,ВыбранныйАртикул);
ВыборСуществующихПартий.УстановитьПараметр(«ВидДвижения», ВидДвиженияНакопления.Приход);
Результат = ВыборСуществующихПартий.Выполнить().Выбрать();

НаборЗаписей=РегистрыНакопления.СкладскойРегистр.СоздатьНаборЗаписей();
//=====================================================
Пока Результат.Следующий() Цикл

//Сообщить(Результат.Ид+», «+Результат.Колво);
НаборЗаписей.Отбор.Ид.Установить(Результат.Ид);
НаборЗаписей.Прочитать();

Для каждого Движ из НаборЗаписей Цикл

пишет, что «поле объекта не обнаружено (Ид)» — странно 🙁

Как изменять записи регистра накопления?

Распечатать

Распечатать

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Microsoft SQL Server Native Client Добавление значения в столбец «datetime» привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец «datetime» привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени QR код в 1С 21
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт , который работает с ним. После тог ZIP-архив Разделить и Объединить Файл 0
При работе с большими объемами данных могут возникнуть проблемы при пересылке архивных файлов. Типичной такой ситуацией является ограничение некоторых почтовых серверов на размер сообщения — если письмо превышает некий заранее установленный размер, о Посмотреть все результаты поиска похожих

Еще в этой же категории

Ключевые слова и Изображения

Слова упорядочены по частоте использования в тексте

Только текст:

Текст и код:

Изображения

Отсутствуют
Комментарии

28.03.2018 16:47 Комментарий: 1

Я бы добавил, что отбор можно делать только по Регистратору

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.

[ Главная | FAQ: Все | 7.х | 8.х | 8.2 УП | 8.3 | Видео | Files | Forum | Freelance | Поиск | Реклама на HelpF.pro | Обратная связь ]
HelpF.pro [old Help1C.com] 2009-2023 Все материалы, размещенные на сайте, добавлены посетителями сайта или взяты из свободных источников. Подробнее.

v8: Изменение записи регистра накопления

В регистре накопления есть запись, в которой не заполнено одно Измерение. Подскажите как программно заполнить с помощью внешней обработки.

Возможно, вас также заинтересует
21.08.2014 22:55 Ответ № 1

Примерно так, основа:

 Набор=РегистрыНакопления.ВашРегистр.СоздатьНаборЗаписей(); 
Набор.Отбор..Установить();
Набор.Прочитать();

Для Каждого ТекДвижение Из Набор Цикл
.
//Делаете то что вам хочется
КонецЦикла;


Набор.Записать();
 Процедура МодификацияЗаписейРегистраНакопления() 

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

// изменение существующих записей
Для Каждого Движение Из Набор Цикл
Движение.НДС = 0;
КонецЦикла;

// добавление новых записей
Движение = Набор.ДобавитьРасход();
Движение.НДС = 100;
Движение.Период = ТекущаяДата();

Движение = Набор.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.НДС = 300;
Движение.Период = ТекущаяДата();

// удаление существующих записей
Набор.Удалить(0);

Набор.Записать(Истина);
КонецЕсли;

КонецПроцедуры
 НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); 

Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ";

Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);

Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
Для каждого движ из НаборЗаписей Цикл
Движ.Количество=5;
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
21.08.2014 23:45 Ответ № 2

+ нашел на компе обработку по редактированию регистров Pravka registrov (korrektirovka registrov).rar

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *