Имя: Пароль:
1C
1C 7.7
v7: Изменить значения периодического реквизита
,
0 Slypower
 
28.02.19
11:57
В общем, задача такая. В справочнике Товары есть периодический реквизит ЦенаУч. Он может менять как документов, так и руками. Как записать значение на 04.12.2018г.,  чтобы ьыли заполнены все значения: номерддокумента, сам документ, номерстроки. Если руками вносить, то заполняется только дата и значение. Документ создавать на эту дату - нельзя. Как программно сделать запить?
1 Ёпрст
 
28.02.19
11:59
(0) какой документ вы там хотите увидеть, если документ создавать нельзя ?
2 Slypower
 
28.02.19
11:59
Документ прихода товара))))
3 Slypower
 
28.02.19
12:00
Он уже есть, его нужно подтянуть. Перепроводить сам документ нельзя
4 skafandr
 
28.02.19
12:00
(0)Сам то понял что написал? Какой документ и при чем тут периодический реквизит?
5 Mikeware
 
28.02.19
12:02
(3) запиши напрямую...
6 skafandr
 
28.02.19
12:03
(0) периодический реквизит ЦенаУч как ты правильно написал имеет только значение и дату с которого это значение записано. Остальные данные если ты их видишь хранятся в других реквизитах
7 Slypower
 
28.02.19
12:04
(5) вот интересно как?
    СпрТовары = СоздатьОбъект("Справочник.Товары");
    СпрТовары.НайтиЭлемент(ВыбТовар);
    СпрТовары.ТекущийЭлемент().ИспользоватьДату(ТекущаяДата());
    Пер = СоздатьОбъект("Периодический");
    Пер.ИспользоватьОбъект("ЦенаУч",СпрТовары);
    Пер.ВыбратьЗначения();
    Пока Пер.ПолучитьЗначение()=1 Цикл
        
            Пер.ТекущийДокумент() = ТЗ_Форма.Документ;
            Пер.ТекущийДокумент().НомерДок = ТЗ_Форма.НомерДок;
            Пер.НомерСтроки() = ТЗ_Форма.НомСтроки;//ДанныеИзДок(Пер.ТекущийДокумент(),"НомерСтроки");
            
            Попытка
                Пер.Записать();
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
        
    КонецЦикла;

Так в ошибку бьет.

    СпрТовары = СоздатьОбъект("Справочник.Товары");
    СпрТовары.НайтиЭлемент(ВыбТовар);
    ТЗ_Форма.ВыбратьСтроки();
    Пока ТЗ_Форма.ПолучитьСтроку() = 1 Цикл
        Если ТЗ_Форма.НовЗнач = НетПометки Тогда
            Продолжить;
        КонецЕсли;
        СпрТовары.ТекущийЭлемент().ИспользоватьДату(ТЗ_Форма.ДатаЗн);
        //СпрТовары.ЦенаУч.Установить(ТЗ_Форма.ДатаЗн,ТЗ_Форма.Документ);
        //СпрТовары.ЦенаУч.Установить(ТЗ_Форма.ДатаЗн,ТЗ_Форма.НомерДок);
        //СпрТовары.ЦенаУч.Установить(ТЗ_Форма.ДатаЗн,ТЗ_Форма.НомСтроки);
        //СпрТовары.ЦенаУч.Установить(ТЗ_Форма.ДатаЗн,ТЗ_Форма.Значение);
        СпрТовары.УстановитьАтрибут("ЦенаУч",ТЗ_Форма.Значение);
    КонецЦикла;
    
    Попытка
        СпрТовары.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;


Так ничего не меняется.
8 Mikeware
 
28.02.19
12:05
(7)
update _1sconst ...

ну и у документа флаг поставить, что им пеиодические реквизиты справочников двнуты
9 Mikeware
 
28.02.19
12:06
10 trad
 
28.02.19
12:09
штатными средствами:
У документа убрать "Авто удаление движений"
Доработать модуль проведения, снабдив его специальной веткой алгоритма проведения
И таки провести
11 Bigbro
 
28.02.19
12:12
голосую за (10)
12 Mikeware
 
28.02.19
12:13
(10) (11) для одного ддокумента вообще можно руками проставить
13 trad
 
28.02.19
12:14
(12) да, я бы тоже сделал прямым вмешательством, но я в себе уверен
14 Ёпрст
 
28.02.19
12:23
(10) автоудаление тут вообще не при чем :))
15 Ёпрст
 
28.02.19
12:25
ну и да, самое простое, это update.

А так, можно и это доработать, было бы желание
http://catalog.mista.ru/public/79515/
16 trad
 
28.02.19
12:30
(14) и как ты предлагаешь перепровести документ не трогая существующие движения
17 Ёпрст
 
28.02.19
12:35
(16) ну посмотри (15)
18 Ёпрст
 
28.02.19
12:35
на досуге..
19 Ёпрст
 
28.02.19
12:36
Единственное, я забил на периодику и на проводки, лень было в своё время доделывать
20 Bigbro
 
28.02.19
12:38
(15) гранату помню, пригождалась пару раз, спасибо! ))
21 trad
 
28.02.19
12:42
(17) но в (10) речь про штатный механизм
22 Ёпрст
 
28.02.19
12:46
(21) ты не поверишь, там всё штатно :)
23 Ёпрст
 
28.02.19
12:46
через провести
24 trad
 
28.02.19
12:50
(22) а перехватчик тогда накой?
25 Ёпрст
 
28.02.19
12:57
(24) Чтобы не писать код в каждом модуле проведения документа.
Код то посмотри, там всего то 1 класс добавляется и привет
26 Ёпрст
 
28.02.19
12:57
мот, сгодится для чего-нить
27 trad
 
28.02.19
13:13
(25) лень
ты просто скажи в двух словах как, не трогая движения, перепровести док без 1спп и формекс
28 Ёпрст
 
28.02.19
13:19
(27) провести(параметр) вестимо. Тока придется в модуле проведения обработать параметр.
в параметр передать ТЗ со всеми нужными движениями дока
29 Ёпрст
 
28.02.19
13:21
Ну и твоя галка, как ты понимаешь, по-боку.
Есть галка, в коде обработки параметра не очищаем перед записью движения, есть - чистим. Всё собственна
30 trad
 
28.02.19
13:25
(28) (29) это то все понятно
но ты же понимаешь разницу между "не трогать движения" и "восстановить те же движения"
31 Ёпрст
 
28.02.19
13:29
(30) я понимаю, к чему ты клонишь, ты хочешь очищать только нужное и переписывать только его.
Но по-большому счету, можно и всё переписать
32 Ёпрст
 
28.02.19
13:30
в любом случае, автор в (0) не осилит
33 trad
 
28.02.19
13:30
(31) нельзя. ГП сдвинется
34 Ёпрст
 
28.02.19
13:30
ну и править метаданные, врят ли будет
35 Ёпрст
 
28.02.19
13:31
(33) :) ГП ? Дык установит(куда угодно)
36 trad
 
28.02.19
13:31
(33) + пересчитаются потенциально кривые RG которые исправлять никто не просил
37 trad
 
28.02.19
13:32
(35) но зачем, когда можно ничего этого не делать
38 Ёпрст
 
28.02.19
13:33
(37) ну как зачем ? Кода меньше.
так-то update и привет
39 trad
 
28.02.19
13:40
(38) меньше кода?
1.
собрать все движения по регистрам и периодике в параметр
вместо штатного проведения восстановить движения регистров и периодики из параметра
сделать дополнительное движение по периодике
2.
вместо штатного проведения сделать дополнительное движение по периодике
40 trad
 
28.02.19
13:42
*поправка
2.
в штатном алгоритме добавить вызов ОчиститьДвижения()
вместо штатного проведения сделать дополнительное движение по периодике
41 Сияющий в темноте
 
28.02.19
13:47
есть такой обьект Периодический,он позволяет как читать так и писать.
42 Chameleon1980
 
28.02.19
13:57
(41) да погоди ты
43 trad
 
28.02.19
14:03
(41) ТС нужно значение связать с документом. обьект Периодический такое не умеет
44 Ёпрст
 
28.02.19
14:21
(39) конечно меньше, я даже поделку написал, вообще не надо лезть в модуль дока:)
45 Ёпрст
 
28.02.19
14:22
Твою мысль понял, сымаем галку и чистим тока периодику, её и перезаписываем.
Но, це з\же частный случай
46 trad
 
28.02.19
14:28
(45) в (10) самый что ни на есть общий и штатный способ дозаписи движений и периодики
47 trad
 
28.02.19
14:29
в древнем типовом ТиСе даже помню был применен такой прием для частичного проведения при подборе товаров
48 Ёпрст
 
28.02.19
14:34
(46) но в целом, галку можно и не снимать :)
49 Ёпрст
 
28.02.19
14:34
да расходы на перезапись движений, толкания итогов..ну и хрен с ним
50 Ёпрст
 
28.02.19
14:39
Ну и если че, в (15) галка учитывается
51 Ёпрст
 
28.02.19
14:39
;)
52 trad
 
28.02.19
14:51
(50) но не решает задачи ТС ;)
53 Ёпрст
 
28.02.19
15:18
(52) Ну, не всё коту масленница, кому надо, доделает, там не так много кода добавить
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.