Имя: Пароль:
1C
 
Изменение записи в регистре накопления
0 quazare
 
20.05.09
07:02
Народ, возможно ли программно изменить запись движения в регистре накопления?

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

Регистратор... количество
документ1      5              - было
документ1      2              - стало
1 Shurjk
 
20.05.09
07:04
(0) Да
2 Irbis
 
20.05.09
07:07
(0) Ты не поверишь...
3 Нуф-Нуф
 
20.05.09
07:18
товар тырим батенька?
4 quazare
 
20.05.09
07:27
а в каких случаях это необходимо?

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

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

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

или подскажите как сделать по-другому. каждая партия имеет свой уникальный ид.
5 Irbis
 
20.05.09
07:31
(4) На одну позицию номенлатуры 70 тысяч партий? Вы чем торгуете? Может в подходе ошибка?
6 Леха Дум
 
20.05.09
07:40
(0) А вариант с отложенным проведением не устраивает?
7 quazare
 
20.05.09
07:46
Номенклатуры порядка 10-15 тыс. на момент внесения остатков (точка "старта") - внесено более 70 тыс партий.(приход).

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

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

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

думаю, если не считать остатки по приходу/расходу, а сразу вносить изменения в "приход" при проведении документа реализации, то можно будет сразу выбирать непустые партии и набирать количество...
8 Wist
 
20.05.09
07:58
(1) А разве изменять регистр накопления можно не регистратором?
9 Shurjk
 
20.05.09
08:00
(8) Можно но регистратор все равно указать придеться
10 quazare
 
20.05.09
08:05
(9)Подскажи как программно сделать запись в документе "расхода", чтобы "проведение" только изменяло параметр в регистре строчке записи партии - не могу пока найти ни в книге, ни в инете...

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

Вообще была идея сделать это через регистр сведений... не столько важна "история" системы, сколько быстрая работа ...
11 Shurjk
 
20.05.09
08:06
(10) Смотри - НаборЗаписей
12 Wist
 
20.05.09
08:08
Хмм... посмотрел, действительно набор записей для РН создается и записывается. А в случае перепроведения регистратора, который был указан для программной записи, что произойдет? Я так понимаю, если стоит "удалять движения автоматически" (а так стоит практически везде), то программная запись "потеряется"?
13 NcSteel
 
20.05.09
08:08
(10) Думаю достаточн тот код который ты навоял оптимизировать. В студию его.
14 Shurjk
 
20.05.09
08:11
(12) Ага удалится...
15 Wist
 
20.05.09
08:15
(14) Интересно, кто-нибудь кроме личностей "а после меня хоть потоп" использует эту фичу в работе... ИМХО это будет похуже пресловутого go to в коде, за такое надо сразу убивать.
16 quazare
 
20.05.09
08:20
(12) ты говоришь, о том, что если я сначала ввожу партию "документ 1" (кол-во 10), затем "как-то программно" сокращаю эту партию до (кол-во 2), а потом перепровожу "документ 1" - количество становиться опять 10?


(14) Особенность партионного учета - если ты перепроводишь какой-то документ внесенный раннее - нужно перепровести все документы (прочитал где-то, да это и понятно, иначе последовательности пропадут);
17 Shurjk
 
20.05.09
08:22
(15) Не разу не встречал...
18 Shurjk
 
20.05.09
08:24
(16) Да. Я же говорю посмотри НаборЗписей и поймешь почему так происходит...
19 quazare
 
20.05.09
09:32
НаборЗаписей - такого не нашел в СП.
Нашел

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

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


и в общем - возможен ли другой подход для убыстрения работы?
20 quazare
 
20.05.09
12:34
ауу народ, есть еще мысли по этому вопросу?
21 DrWatson
 
20.05.09
12:41
Пример (7) напиши подробнее. Что значит "набирать" в заказе? Почему и где нужно менять количество в партиях?
22 Loser
 
20.05.09
12:42
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
   //

   Запрос=Новый Запрос;
   Запрос.Текст=
     "ВЫБРАТЬ
    |    ТоварыНаСкладах.Период как Период,
    |    ТоварыНаСкладах.Регистратор как Регистратор,
    |    ТоварыНаСкладах.Количество как Количество
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    | ГДЕ
    | ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    |И  ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ";
   
    Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
    Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);
   
    Результат=Запрос.Выполнить();
    Выборка=Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
           Сообщить (Выборка.Количество());
           Выборка.Количество()
    КонецЦИкла;
23 Loser
 
20.05.09
12:43
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДок);
НаборЗаписей.Прочитать();
// ищешь нужную строку в наборе и правишь
НаборЗаписей.Записать();
24 Loser
 
20.05.09
12:46
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
   //


   Запрос=Новый Запрос;
   Запрос.Текст=
     "ВЫБРАТЬ
    |    ТоварыНаСкладах.Период как Период,
    |    ТоварыНаСкладах.Регистратор как Регистратор,
    |    ТоварыНаСкладах.Количество как Количество
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    | ГДЕ
    | ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    |И  ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ";
   
    Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
    Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);
   
    Результат=Запрос.Выполнить();
    Выборка=Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
          НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор);
         НаборЗаписей.Прочитать();
           НаборЗаписей.Количество=5;
         НаборЗаписей.Записать();
    КонецЦИкла;
25 Loser
 
20.05.09
12:53
нет, так не получатся.
Как прочитать ресурс Количество в Наборе записей и изменить его?
 НаборЗаписей.Количество=5; - это не правильно
26 Loser
 
20.05.09
13:26
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();

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

       КонецЦИкла;
27 quazare
 
20.05.09
13:48
ВыборСуществующихПартий = Новый Запрос("ВЫБРАТЬ
                                              |    СкладскойРегистр.Ид КАК Ид,
                                              |    СкладскойРегистр.Количество КАК Колво
                                              |ИЗ
                                              |    РегистрНакопления.СкладскойРегистр КАК СкладскойРегистр
                                              |ГДЕ
                                              |    СкладскойРегистр.Артикул = &Артикул
                                              |    И СкладскойРегистр.ВидДвижения = &ВидДвижения
                                              |    И СкладскойРегистр.Количество > 0
                                              |
                                              |УПОРЯДОЧИТЬ ПО
                                              |    СкладскойРегистр.СрокГодности");
                                           
ВыборСуществующихПартий.УстановитьПараметр("Артикул",ВыбранныйАртикул);
ВыборСуществующихПартий.УстановитьПараметр("ВидДвижения", ВидДвиженияНакопления.Приход);
Результат = ВыборСуществующихПартий.Выполнить().Выбрать();

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

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

   Для каждого Движ из НаборЗаписей Цикл
       
       Движ.Количество=100;
   
   КонецЦикла;

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

пишет, что "поле объекта не обнаружено (Ид)" - странно :(
28 DrWatson
 
20.05.09
14:02
(27) см (23). Отбор только по регистратору.
29 BICO
 
20.05.09
14:33
(0) а как отработает ситуация отмены проведения или повторного проведения твоя система ??
30 quazare
 
20.05.09
14:41
(29) полное перепроведение как при любом партионном учете.
(28) бред какой-то:

1. я делаю выборку партий, которые меня интересуют, запросом указанным выше.

мне нужно ид партии и его количество.

Теперь при определенном ид - нужно просто поменять количество и все. возможно это сделать запросом??? типа update????
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс