Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
/// Как прочитать записи регистра накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьЗаписиРегистраНакопленияНаСервере() // Получим все записи регистра накопления ЗаказыКлиентов // по организации ООО "Ромашка" за 1 квартал 2014 года, // упорядочив их по возрастанию даты. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыКлиентов.Период, | ЗаказыКлиентов.Регистратор, | ЗаказыКлиентов.НомерСтроки, | ЗаказыКлиентов.Активность, | ЗаказыКлиентов.Контрагент, | ЗаказыКлиентов.Номенклатура, | ЗаказыКлиентов.Количество |ИЗ | РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов |ГДЕ | ЗаказыКлиентов.Активность = Истина И | ЗаказыКлиентов.Организация = &ВыбОрганизация И | ЗаказыКлиентов.Период МЕЖДУ &НачДата И &КонДата |УПОРЯДОЧИТЬ ПО | ЗаказыКлиентов.Период"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); // начальная дата - 1 января 2014 года Запрос.УстановитьПараметр("НачДата", '20140101000000'); // конечная дата - 31 марта 2014 года 23 часа 59 минут 59 секунд Запрос.УстановитьПараметр("КонДата", '20140331235959'); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Период + "] " + Записи.Номенклатура + " " + Записи.Количество + " шт." + " (" + Записи.Регистратор + ")" ); КонецЦикла; КонецПроцедуры /// Как получить обороты по регистру накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьОборотыПоРегиструНапопленияНаСервере() // За получение оборотов по регистру накопления за произвольный период // с заданной периодичностью в различных разрезах аналитики отвечает // виртуальная таблица Обороты, // у неё есть следующие параметры: // 1. Начало периода (включая) // 2. Конец периода (включая) // 3. Периодичность (например, Период, Запись, Год, Месяц...) // 4. Условие (например, Организация = &ВыбОрганизация) // Пример №1 Сообщить("Пример №1"); // Посчитаем сколько и каких продуктов было заказано за 1 квартал // 2014 года в организации ООО "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыКлиентовОбороты.Номенклатура, | ЗаказыКлиентовОбороты.Организация, | ЗаказыКлиентовОбороты.КоличествоОборот |ИЗ | РегистрНакопления.ЗаказыКлиентов.Обороты( | ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00), | ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59), | Период, | Организация = &ВыбОрганизация | ) КАК ЗаказыКлиентовОбороты |УПОРЯДОЧИТЬ ПО | ЗаказыКлиентовОбороты.Номенклатура"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "За 1 кв. 2014 года заказали " + Записи.КоличествоОборот + " шт. " + Записи.Номенклатура ); КонецЦикла; // Пример №2 Сообщить("Пример №2"); // Посчитаем сколько бананов было заказано за каждый месяц // в 1 квартале 2014 года в организации "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыКлиентовОбороты.Период, | ЗаказыКлиентовОбороты.Номенклатура, | ЗаказыКлиентовОбороты.Организация, | ЗаказыКлиентовОбороты.КоличествоОборот |ИЗ | РегистрНакопления.ЗаказыКлиентов.Обороты( | &НачПериод, | &КонПериод, | Месяц, | Организация = &ВыбОрганизация И | Номенклатура = &ВыбНоменклатура | ) КАК ЗаказыКлиентовОбороты |УПОРЯДОЧИТЬ ПО | ЗаказыКлиентовОбороты.Период"; Запрос.УстановитьПараметр("НачПериод", '20140101000000'); Запрос.УстановитьПараметр("КонПериод", '20140331235959'); Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "За " + Формат(Записи.Период, "ДФ=ММММ") + " заказали " + Записи.КоличествоОборот + " шт. " + Записи.Номенклатура ); КонецЦикла; КонецПроцедуры /// Как получить остатки по регистру накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьОстаткиПоРегиструНакопленияНаСервере() // За получение остатков по регистру накопления в разрезе // аналитики отвечает виртуальная таблица Остатки, // у неё есть следующие параметры: // 1. Период, на который считаем остатки, исключая саму дату. // Если нужны остатки на дату включительно - используем // тип Граница (см. пример ниже). // 2. Условие (например, Организация = &ВыбОрганизация) // Получим остатки бананов на основном складе в организации // ООО "Ромашка" на 31 марта 2014 года (включительно) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыЕдыОстатки.Склад, | ЗапасыЕдыОстатки.Номенклатура, | ЗапасыЕдыОстатки.Организация, | ЗапасыЕдыОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ЗапасыЕды.Остатки( | &ВыбДата, | Склад = &ВыбСклад И | Номенклатура = &ВыбНоменклатура | ) КАК ЗапасыЕдыОстатки"; Запрос.УстановитьПараметр("ВыбДата", Новый Граница('20140331235959', ВидГраницы.Включая) ); Запрос.УстановитьПараметр("ВыбСклад", Справочники.Склады.НайтиПоНаименованию("Основной") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "Остатки " + " " + Записи.Номенклатура + " на складе " + Записи.Склад + " на дату " + "31.03.2014 (включительно) " + " составляют " + Записи.КоличествоОстаток + " шт."); КонецЦикла; КонецПроцедуры /// Как получить сразу остатки и обороты по регистру /// накопления в 1с 8.3, 8.2 &НаСервере Процедура КакПолучитьСразуОстаткиИОборотыПоРегиструНакопленияНаСервере() // За получение остатков и оборотов за произвольный период // с заданной периодичностью в разрезе аналитики отвечает // виртуальная таблица ОстаткиИОбороты, у неё есть параметры: // 1. Начало периода (включая) // 2. Конец периода (включая) // 3. Периодичность (например, Период, Год, Месяц...) // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода) // 5. Условие (например, Организация = &ВыбОрганизация) // Для примера получим начальный остаток, приход, расход и конечный остаток // банана на всех складах за каждый месяц 2014 года для // организация ООО "Ромашка". Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыЕдыОстаткиИОбороты.Период, | ЗапасыЕдыОстаткиИОбороты.Номенклатура, | ЗапасыЕдыОстаткиИОбороты.Организация, | ЗапасыЕдыОстаткиИОбороты.КоличествоНачальныйОстаток, | ЗапасыЕдыОстаткиИОбороты.КоличествоОборот, | ЗапасыЕдыОстаткиИОбороты.КоличествоПриход, | ЗапасыЕдыОстаткиИОбороты.КоличествоРасход, | ЗапасыЕдыОстаткиИОбороты.КоличествоКонечныйОстаток |ИЗ | РегистрНакопления.ЗапасыЕды.ОстаткиИОбороты( | ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00), | ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59), | Месяц, ДвиженияИГраницыПериода, | Организация = &ВыбОрганизация И | Номенклатура = &ВыбНоменклатура | ) КАК ЗапасыЕдыОстаткиИОбороты |УПОРЯДОЧИТЬ ПО | ЗапасыЕдыОстаткиИОбороты.Период"; Запрос.УстановитьПараметр("ВыбОрганизация", Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""") ); Запрос.УстановитьПараметр("ВыбНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Банан") ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( Формат(Записи.Период, "ДФ=ММММ") + " [" + Записи.Номенклатура + "] " + "нач. остаток " + Записи.КоличествоНачальныйОстаток + " приход " + Записи.КоличествоПриход + ", расход " + Записи.КоличествоРасход + " кон. остаток " + Записи.КоличествоКонечныйОстаток ); КонецЦикла; КонецПроцедуры /// Как найти и изменить программно записи в регистр накопления /// документа (регистратора) в 1с 8.3, 8.2 &НаСервере Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере() // Предположим у нас есть ссылка на проведенный документ // поступления еды № ВМБП-000002 ПоступлениеСсылка = Документы.ПоступлениеЕды.НайтиПоНомеру( "ВМБП-000002", '20141231' ); // Мы значем, что этот документ делает следующие записи // в регистр накопления "ЗапасыЕды": // Приход [Организация, Склад, Номенклатура] [Количество] // Наша задача: найти эти записи и изменить // их (например, удвоим количество поступившего товара) // и записать вместо старых. // Используем объектную технику получения записей, // ведь мы будем их изменять. Поступление = ПоступлениеСсылка.ПолучитьОбъект(); // Получим набор записей этого документа в регистр "ЗапасыЕды". НаборЗаписей = Поступление.Движения.ЗапасыЕды; // Прочитаем записи из базы данных. НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл // Выведем старые значения. Сообщить( "[" + Запись.Организация + ", " + Запись.Склад + ", " + Запись.Номенклатура + "] " + "[" + Запись.Количество + "]" ); // Удвоим количество. Запись.Количество = 2 * Запись.Количество; КонецЦикла; // Добавим новую запись в регистр накопления. НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка"""); НоваяЗапись.Склад = Справочники.Склады.НайтиПоНаименованию("Основной"); НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Банан"); НоваяЗапись.Период = ТекущаяДата(); НоваяЗапись.Количество = 1000; // Разом запишем набор записей. НаборЗаписей.Записать( Истина // удалим старые записи и запишем вместо них новые ); // Теперь записи регистра ЗапасыЕды по документу № ВМБП-000002, // отличаются от тех, что были записаны документом при проведении. // Чтобы вернуть их к начальному виду - нужно // перепровести документ. КонецПроцедуры /// Как прочитать записи документа в регистр накопления /// запросом в 1с 8.3, 8.2 &НаСервере Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере() // Этот приём используется, если не требуется изменять // найденные записи. // Предположим у нас есть ссылка на проведенный документ // поступления еды № ВМБП-000002 ПоступлениеСсылка = Документы.ПоступлениеЕды.НайтиПоНомеру( "ВМБП-000002", '20141231' ); // Мы значем, что этот документ делает записи // в регистр накопления "ЗапасыЕды". // Прочитаем эти записи запросом. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыЕды.Период, | ЗапасыЕды.Регистратор, | ЗапасыЕды.НомерСтроки, | ЗапасыЕды.Активность, | ЗапасыЕды.ВидДвижения, | ЗапасыЕды.Склад, | ЗапасыЕды.Номенклатура, | ЗапасыЕды.Организация, | ЗапасыЕды.Количество |ИЗ | РегистрНакопления.ЗапасыЕды КАК ЗапасыЕды |ГДЕ | ЗапасыЕды.Регистратор = &ВыбРегистратор |УПОРЯДОЧИТЬ ПО | ЗапасыЕды.НомерСтроки"; Запрос.УстановитьПараметр( "ВыбРегистратор", ПоступлениеСсылка ); РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать(); Пока Записи.Следующий() Цикл Сообщить( "[" + Записи.Организация + ", " + Записи.Склад + ", " + Записи.Номенклатура + "] " + "[" + Записи.Количество + "]" ); КонецЦикла; КонецПроцедуры /// Как создать записи регистра накопления без привязки /// к документу в 1с 8.3, 8.2 &НаСервере Процедура КакСоздатьЗаписиБезДокументаНаСервере() // В нашей тестовой конфигурации нет документа // "ОперацияБух", который присутствует в бухгалтерской базе. Сообщить("Этот пример нельзя выполнить в этой базе."); Возврат; // Записи регистра накопления обязательно // должны быть привязаны к документу, в данном случае // этим документом будет документ "ОперацияБух", // задуманный как раз для ручных операций. Операция = Документы.ОперацияБух.СоздатьДокумент(); Операция.Дата = ТекущаяДата(); Операция.Организация = Справочники.Организации.НайтиПоНаименованию("Милькин В. В. ИП"); Операция.СуммаОперации = 1000; Операция.Содержание = "Ручная операция по регистру накопления ИПДоходы"; Операция.Записать(РежимЗаписиДокумента.Запись); // Затем получаем его набор записей для регистра ИПДоходы НаборЗаписей = Операция.Движения.ИПДоходы; Запись = НаборЗаписей.Добавить(); Запись.Период = Операция.Дата; Запись.Организация = Операция.Организация; // и т.д. заполняем все нужные поля регистра Запись.Сумма = 1000; НаборЗаписей.Записать(Истина); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
Изменение записи в регистре накопления |
Я |
20.05.09 — 07:02
Народ, возможно ли программно изменить запись движения в регистре накопления?
Например — есть такая запись:
Регистратор… количество
документ1 5 — было
документ1 2 — стало
1 — 20.05.09 — 07:04
(0) Да
2 — 20.05.09 — 07:07
(0) Ты не поверишь…
3 — 20.05.09 — 07:18
товар тырим батенька?
4 — 20.05.09 — 07:27
а в каких случаях это необходимо?
партионный учет считается очень медленно — партий более 70 тыс.
приходит заявка — формируется отгрузка — документ с партиями (количество в которых не равно нулю)
пересчет количества номенклатуры на текущий момент — затруднительно.
думаю сделать просто «вычет» количества по партии, а не создавать движение «расход».
или подскажите как сделать по-другому. каждая партия имеет свой уникальный ид.
5 — 20.05.09 — 07:31
(4) На одну позицию номенлатуры 70 тысяч партий? Вы чем торгуете? Может в подходе ошибка?
6 — 20.05.09 — 07:40
(0) А вариант с отложенным проведением не устраивает?
7 — 20.05.09 — 07:46
Номенклатуры порядка 10-15 тыс. на момент внесения остатков (точка «старта») — внесено более 70 тыс партий.(приход).
после этого — пользователь загружает заявку (около 150-200 позиций номенклатуры с заданными количествами) и программа начинает автоматом «набирать» из существующих непустых партий (считаем по остаткам) необходимое количество по учету фифо и сроку годности.
Сейчас все это я реализовал через подсчет остатков приход/расход, работает достаточно медленно.
Сначала я определяю все партии этой номенклатуры, затем определяю для каждой партии пустая она или нет (есть ли движения по ид), выбираю «непустые» — делаю расход по ид этих партий… и так для каждой из 150-200 позиций.
думаю, если не считать остатки по приходу/расходу, а сразу вносить изменения в «приход» при проведении документа реализации, то можно будет сразу выбирать непустые партии и набирать количество…
8 — 20.05.09 — 07:58
(1) А разве изменять регистр накопления можно не регистратором?
9 — 20.05.09 — 08:00
(8) Можно но регистратор все равно указать придеться
10 — 20.05.09 — 08:05
(9)Подскажи как программно сделать запись в документе «расхода», чтобы «проведение» только изменяло параметр в регистре строчке записи партии — не могу пока найти ни в книге, ни в инете…
Или хотя бы как вообще программно поменять запись в регистре (не меняя регистратора)
Вообще была идея сделать это через регистр сведений… не столько важна «история» системы, сколько быстрая работа …
11 — 20.05.09 — 08:06
(10) Смотри — НаборЗаписей
12 — 20.05.09 — 08:08
Хмм… посмотрел, действительно набор записей для РН создается и записывается. А в случае перепроведения регистратора, который был указан для программной записи, что произойдет? Я так понимаю, если стоит «удалять движения автоматически» (а так стоит практически везде), то программная запись «потеряется»?
13 — 20.05.09 — 08:08
(10) Думаю достаточн тот код который ты навоял оптимизировать. В студию его.
14 — 20.05.09 — 08:11
(12) Ага удалится…
15 — 20.05.09 — 08:15
(14) Интересно, кто-нибудь кроме личностей «а после меня хоть потоп» использует эту фичу в работе… ИМХО это будет похуже пресловутого go to в коде, за такое надо сразу убивать.
16 — 20.05.09 — 08:20
(12) ты говоришь, о том, что если я сначала ввожу партию «документ 1» (кол-во 10), затем «как-то программно» сокращаю эту партию до (кол-во 2), а потом перепровожу «документ 1» — количество становиться опять 10?
(14) Особенность партионного учета — если ты перепроводишь какой-то документ внесенный раннее — нужно перепровести все документы (прочитал где-то, да это и понятно, иначе последовательности пропадут);
17 — 20.05.09 — 08:22
(15) Не разу не встречал…
18 — 20.05.09 — 08:24
(16) Да. Я же говорю посмотри НаборЗписей и поймешь почему так происходит…
19 — 20.05.09 — 09:32
НаборЗаписей — такого не нашел в СП.
Нашел
РегистрНакопленияНаборЗаписей.<Имя регистра накопления> (AccumulationRegisterRecordSet.<Имя регистра накопления>)
Выгрузить (Unload)
Синтаксис:
Выгрузить(<Строки>, <Колонки>)
Параметры:
<Строки> (необязательный)
Тип: Массив. Массив строк для выгрузки. Если не указан, выгружаются все строки набора записей.
<Колонки> (необязательный)
Тип: Строка. Список колонок для выгрузки в формате: «Колонка1, Колонка2…». Если список не задан, то будут выгружены все колонки.
Возвращаемое значение:
Тип: ТаблицаЗначений.
Описание:
Создает таблицу значений и копирует в нее записи набора. Структура полученной таблицы совпадает со структурой набора записей.
Пример:
Рег = РегистрыНакопления.Затраты;
НаборЗаписей = Рег.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Документ.Значение = Ссылка;
ОсновныеДанные = НаборЗаписей.Выгрузить();
где-бы взять примерчик по понятнее…
и в общем — возможен ли другой подход для убыстрения работы?
20 — 20.05.09 — 12:34
ауу народ, есть еще мысли по этому вопросу?
21 — 20.05.09 — 12:41
Пример (7) напиши подробнее. Что значит «набирать» в заказе? Почему и где нужно менять количество в партиях?
22 — 20.05.09 — 12:42
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
//
Запрос=Новый Запрос;
Запрос.Текст=
«ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг «;
Запрос.УстановитьПараметр(«ДатаНачала», НачПериода);
Запрос.УстановитьПараметр(«ДатаОкончания», КонПериода);
Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить (Выборка.Количество());
Выборка.Количество()
КонецЦИкла;
23 — 20.05.09 — 12:43
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДок);
НаборЗаписей.Прочитать();
// ищешь нужную строку в наборе и правишь
НаборЗаписей.Записать();
24 — 20.05.09 — 12:46
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
//
Запрос=Новый Запрос;
Запрос.Текст=
«ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг «;
Запрос.УстановитьПараметр(«ДатаНачала», НачПериода);
Запрос.УстановитьПараметр(«ДатаОкончания», КонПериода);
Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор);
НаборЗаписей.Прочитать();
НаборЗаписей.Количество=5;
НаборЗаписей.Записать();
КонецЦИкла;
25 — 20.05.09 — 12:53
нет, так не получатся.
Как прочитать ресурс Количество в Наборе записей и изменить его?
НаборЗаписей.Количество=5; — это не правильно
26 — 20.05.09 — 13:26
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Запрос=Новый Запрос;
Запрос.Текст=
«ВЫБРАТЬ
| ТоварыНаСкладах.Период как Период,
| ТоварыНаСкладах.Регистратор как Регистратор,
| ТоварыНаСкладах.Количество как Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг «;
Запрос.УстановитьПараметр(«ДатаНачала», НачПериода);
Запрос.УстановитьПараметр(«ДатаОкончания», КонПериода);
Результат=Запрос.Выполнить();
Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
Для каждого движ из НаборЗаписей Цикл
Движ.Количество=5;
КонецЦИкла;
НаборЗаписей.Записать();
КонецЦИкла;
27 — 20.05.09 — 13:48
ВыборСуществующихПартий = Новый Запрос(«ВЫБРАТЬ
| СкладскойРегистр.Ид КАК Ид,
| СкладскойРегистр.Количество КАК Колво
|ИЗ
| РегистрНакопления.СкладскойРегистр КАК СкладскойРегистр
|ГДЕ
| СкладскойРегистр.Артикул = &Артикул
| И СкладскойРегистр.ВидДвижения = &ВидДвижения
| И СкладскойРегистр.Количество > 0
|
|УПОРЯДОЧИТЬ ПО
| СкладскойРегистр.СрокГодности»);
ВыборСуществующихПартий.УстановитьПараметр(«Артикул»,ВыбранныйАртикул);
ВыборСуществующихПартий.УстановитьПараметр(«ВидДвижения», ВидДвиженияНакопления.Приход);
Результат = ВыборСуществующихПартий.Выполнить().Выбрать();
НаборЗаписей=РегистрыНакопления.СкладскойРегистр.СоздатьНаборЗаписей();
//=====================================================
Пока Результат.Следующий() Цикл
//Сообщить(Результат.Ид+», «+Результат.Колво);
НаборЗаписей.Отбор.Ид.Установить(Результат.Ид);
НаборЗаписей.Прочитать();
Для каждого Движ из НаборЗаписей Цикл
Движ.Количество=100;
КонецЦикла;
НаборЗаписей.Записать();
КонецЦикла;
пишет, что «поле объекта не обнаружено (Ид)» — странно 
28 — 20.05.09 — 14:02
(27) см (23). Отбор только по регистратору.
29 — 20.05.09 — 14:33
(0) а как отработает ситуация отмены проведения или повторного проведения твоя система ??
quazare
30 — 20.05.09 — 14:41
(29) полное перепроведение как при любом партионном учете.
(28) бред какой-то:
1. я делаю выборку партий, которые меня интересуют, запросом указанным выше.
мне нужно ид партии и его количество.
Теперь при определенном ид — нужно просто поменять количество и все. возможно это сделать запросом??? типа update????
Регистр накопления предназначены для хранения числовых показателей в разрезе нескольких измерений и, при необходимости, в разрезе времени.
Добавление записей в регистр накопления
Для добавления движения в регистр накопления необходимо создать набор записей, установить отбор по регистратору, добавить запись и заполнить значениями. Если требуется добавить несколько записей – добавление производится в цикле.
ТабличнаяЧасть = ДокументСсылка.Материалы; НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); Для Каждого Строка Из ТабличнаяЧасть Цикл Запись = НаборЗаписей.ДобавитьПриход(); ЗаполнитьЗначенияСвойств(Запись, Строка); Запись.Период = ДокументСсылка.Дата; КонецЦикла; НаборЗаписей.Записать();
Удаление записей из регистра накопления
Удаление всех записей по регистратору
Для удаления всех записей из регистра накоплений по регистратору необходимо создать пустой набор записей, установить отбор по регистратору и записать его.
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Записать();
Удаление части записей по регистратору
Очень часто нужно удалить не все записи по регистратору, а только часть из них. Для этого необходимо создать пустой набор записей, установить отбор по регистратору и считать отобранные записи из базы. После чего нужно обойти отобранные записи и удалить из набора .
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл Склад = Запись.Склад; Если Склад.Наименование = "Основной" Тогда НаборЗаписей.Удалить(Запись); КонецЕсли; КонецЦикла; НаборЗаписей.Записать();
Изменение записи в регистре накопления
Изменение записи по регистратору аналогично удалению части записей, только запись не удаляется, а изменяется.
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл Склад = Запись.Склад; Если Склад.Наименование = "Основной" Тогда Запись.Количество = 10; КонецЕсли; КонецЦикла; НаборЗаписей.Записать();
Работа с регистрами накопления
Регистр накопления предназначены для хранения числовых показателей в разрезе нескольких измерений и, при необходимости, в разрезе времени.
Добавление записей в регистр накопления
Для добавления движения в регистр накопления необходимо создать набор записей, установить отбор по регистратору, добавить запись и заполнить значениями. Если требуется добавить несколько записей – добавление производится в цикле.
Удаление записей из регистра накопления
Удаление всех записей по регистратору
Для удаления всех записей из регистра накоплений по регистратору необходимо создать пустой набор записей, установить отбор по регистратору и записать его.
Удаление части записей по регистратору
Очень часто нужно удалить не все записи по регистратору, а только часть из них. Для этого необходимо создать пустой набор записей, установить отбор по регистратору и считать отобранные записи из базы. После чего нужно обойти отобранные записи и удалить из набора .
Изменение записи в регистре накопления
Изменение записи по регистратору аналогично удалению части записей, только запись не удаляется, а изменяется.
Чтобы изменить запись регистра накопления нужно использовать функцию СоздатьНаборЗаписей ();
Пример:
НаборЗаписей = РегистрыНакопления.РасчетыНалоговыхАгентовСБюджетомПоНДФЛ.СоздатьНаборЗаписей(); //Выбираем нужный регистр
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();
Для Каждого СтрокаТаблицы Из НаборЗаписей Цикл
СтрокаТаблицы.РеквизитыПлатежногоПоручения = «Новое значение»; //устанавливаем нужное значение реквизита
КонецЦикла;
НаборЗаписей.Записать();
1с как изменить регистр накопления
Бывают ситуации, когда нужно изменить движения какого-то документа в регистре накопления или регистре сведений, для которого документ является регистратором.
В таком случае не обязательно проводить манипуляции с документом, можно изменить его движения непосредственно в регистре.
Для изменения записей регистров, подчиненных регистраторам, используются наборы записей. При этом нужно установить отбор по регистратору.
При изменении записей регистра можно использовать набор записей, входящий в коллекцию движений документа (свойство Движения объекта ДокументОбъект), либо можно использовать набор записей, созданный с помощью менеджера регистра.
Итак, чтобы изменить записи регистра нужно:
– Создать набор записей;
– Установить отбор по определенному регистратору;
– Прочитать набор;
– Изменить записи набора;
– Записать набор.
Например, изменим записи в регистре накопления «Данные о начислениях».
Документ , ФизическоеЛицоВыбранноеЗначение , ФизическоеЛицоНовоеЗначение – это реквизиты формы внешней обработки, с помощью которой мы изменяем записи регистра.
В этом примере выполнялось изменение записей. Если нужно добавить записи, если их нет у регистратора, то можно выполнять запись без считывания. Для удаления записей можно записать пустой набор без выполнения считывания.

