|
|
|
Изменение записи в регистре накопления | ☑ | ||
|---|---|---|---|---|
|
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???? |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |