Имя: Пароль:
1C
1С v8
РежимЗаписиДокумента
0 Diademal
 
30.10.19
19:07
Всем Привет!!! Есть проблема!! Имею Общий модуль  с Процедурой, которая находит нужный документ делает внем изменение, копирует новый документ иперепроводит их. Проблема в том что старый документ проводиться, но в регистр дынные не поподают. Не знаю почему?   Помогите Пожалуйста!!!
Кусок Кода
                
                      Если ВыборкаДетальныеЗаписи.Month = 1 Тогда
            ВыборкаДетальные=ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
            ВыборкаДетальные.Copy = Истина;
            ВыборкаДетальные.Записать(РежимЗаписиДокумента.Проведение);
            ДокументОбъект = ВыборкаДетальныеЗаписи.Регистратор.Скопировать();
            ДокументОбъект.Дата=ТекущаяДата();
            ДокументОбъект.Copy = Ложь;
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
1 Anton1307
 
30.10.19
19:15
"Пятачок, неси ружьё..."
2 Diademal
 
30.10.19
19:25
То где я Лоханулся?
3 Diademal
 
30.10.19
19:47
На всякий случай полный код.

Запрос = Новый Запрос;
    Запрос.Текст = "
    
    | ВЫБРАТЬ
    | *
    | ИЗ
    |РегистрСведений.RegistrCopySpending Как RegistrCopySpending
    |Где  Copy = Ложь";
    

    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Month = 1 Тогда
            ВыборкаДетальные=ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
            ВыборкаДетальные.Copy = Истина;
            ВыборкаДетальные.Записать(РежимЗаписиДокумента.Проведение);
            ДокументОбъект = ВыборкаДетальныеЗаписи.Регистратор.Скопировать();
            ДокументОбъект.Дата=ТекущаяДата();
            ДокументОбъект.Copy = Ложь;
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Create New Documents #"+Строка(ВыборкаДетальныеЗаписи.Регистратор))
        Иначе
        КонецЕсли;
    КонецЦикла;
4 ДенисЧ
 
30.10.19
19:49
Нет обработки проведения.
или
В старом документе движения делались в подписке, которую ты не скопировал.
или
просто вон из профессии.
5 Diademal
 
30.10.19
20:21
Попробую остатся в професии!! Я так понял что нужно создать
ПодпискаНаСобытие там  ОбработкаПроведения и там создать процедурку? Так?
6 unregistered
 
30.10.19
20:39
В какой регистр и какие данные не попадают?
Как ты это определяешь?
7 Василий Алибабаевич
 
30.10.19
20:43
(6) Для начала нужно определиться выполняет ли программа строчку
"Если ВыборкаДетальныеЗаписи.Month = 1 Тогда"

И если нет - то как это связано с условием в запросе "Где  Copy = Ложь" и где брать вообще это самое "Copy" и может ли оно вообще когда-нибудь принять значение "Ложь"?
8 Василий Алибабаевич
 
30.10.19
20:49
+ (7) А вообще - тема конечно лихо обозначена. Именно РежимЗаписиДокумента и есть причиной всея и все.
9 Diademal
 
30.10.19
21:21
В документе Код

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Ссылка,
    |    Дата,
    |    DateCopy,
    |    Copy,
    |    DateCopyMonth ,
    |    РазностьДат(ДАТА,&ТекущаяДата,МЕСЯЦ) Как Month
    |        ИЗ
    |    Документ.РасходДенег Как РасходДенег
    |Где  ПометкаУдаления = Ложь И Copy = Ложь И DateCopy <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |И  РазностьДат(&ТекущаяДата,DateCopy,День) >= 30";     
    
    Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());    
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    
           Если ВыборкаДетальныеЗаписи.Month = 1 Тогда
             Движение = Движения.RegistrCopySpending.Добавить();
            Движение.Период = Дата;
            Движение.DateCopy = ВыборкаДетальныеЗаписи.DateCopy;
            Движение.DateCopyMonth = ВыборкаДетальныеЗаписи.DateCopyMonth;
            Движение.Month = ВыборкаДетальныеЗаписи.Month;
            Движение.Copy = ВыборкаДетальныеЗаписи.Copy;
        Иначе
    КонецЕсли;


Он выполняеться! Я провел документ в Регистр записало Copy = Ложь и Month =1 . То что надо!
Потом в Общем Модуле
Запрос = Новый Запрос;
    Запрос.Текст = "
    
    | ВЫБРАТЬ
    | *
    | ИЗ
    |РегистрСведений.RegistrCopySpending Как RegistrCopySpending
    |Где  Copy = Ложь";
    
    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Month = 1 Тогда
            ВыборкаДетальные=ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
            ВыборкаДетальные.Copy = Истина;
            ВыборкаДетальные.Записать(РежимЗаписиДокумента.Проведение);
            ДокументОбъект = ВыборкаДетальныеЗаписи.Регистратор.Скопировать();
            ДокументОбъект.Дата=ТекущаяДата();
            ДокументОбъект.Copy = Ложь;
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Create New Documents #"+Строка(ВыборкаДетальныеЗаписи.Регистратор))
        Иначе
        КонецЕсли;
    КонецЦикла;

Он всё создает, но не записывает изменения в Регистр.

Так как выше написали что нужно ПодпискаНаСобытие, но я ни когда не использовал этот метод.Буду разбираться!!!
10 craxx
 
30.10.19
21:24
(9) это слишком сильное колдунство?
11 ДенисЧ
 
30.10.19
21:26
(9) И даже не читал ни одной книжки про 1с...
Начни с Митичкина, на худой конец, если фамилия Радченко тебе претит...
12 hhhh
 
30.10.19
21:59
(7) не, тут всё нормально. Это сокращенное написание


    |Где  Copy = Ложь

то же самое, что

    |Где  RegistrCopySpending.Copy = Ложь
13 catena
 
31.10.19
04:57
(9)Никто и нигде не писал, что нужна подписка.
А вот освоить сортировки или группировки в запросах не помешало бы. чтобы не писать
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    КонецЦикла;
И отладчик тоже освоить.
14 Diademal
 
31.10.19
18:43
Спасибо за советы!!!! Буду Осваивать!!
15 Жан Пердежон
 
31.10.19
18:50
странно, что ещё никто не высказался, по поводу использования кириллицы+латиницы вперемешку
16 Diademal
 
01.11.19
07:16
Уже высказались почти все!!!! Спасибо понял! Программированием не зарабатываю, пишу для себя, Нравиться, виду свой маленький бизнес, 1С лучше чем Excel. Поэтому пробую иногда писать. Учиться нет времени.
На счет  кириллицы+латиницы вперемешку: Начал писать 4 года назад на Русском, жил в Украине, сейчас перехожу на английский, живу в США поэтому уже подключаю английский.
Перед тем как просить помощь, я поверьте  мне почитал интернет, попробовал все свои знание, но не смог.  Здесь спросить не кого.
В место того что Хаять лучше подскажите как Сделать, для этого наверно форум и сделали что бы друг другу помогать. Я с этого сайта, поверьте мне все свои не многие знания получил.
Извините за длинное письмо.
17 D_E_S_131
 
01.11.19
10:35
(16) Ну может хотя бы вкратце написать, а что вообще делается в вашей конфигурации? А то какие-то выборки из регистра, какие-то копирования документов по непонятному принципу...
18 Diademal
 
01.11.19
17:38
Ок.
У меня есть Документ РасходДенег. Каждого 1 числа мне надо его повторять до определеной даты. Решил попробывать сделать Автомотическое Копирование.
Создал РегистрСведений RegistrCopySpending и туда записываю при проведении документа нужные данные.
DateCopy-Конечная дата повтора
Month- Когда придет нужное число (ТекущаяДата) оно отнимится от Даты документа и Я Получу 1. Которую запишу в регистр.
Copy- Этот параметр я сделал для того, если скопируеться новый документ, что бы из него 2 раз не делалась копия.
Создал Общие модуль:
Проверяю что Copy была ложь, оставляю только документы которые не копировались.
Создаю Копии из них.
В старые Документы Изменяю Copy-Ложь на Истину и Провожу его. Хотел что бы в Регистре поменялись данные, но они там почему-то не сохраняються, но вдокументе изменяються. Надо вручную перепровести, тогда всё Ок.
Вродебы Всё Описал. Может Не правильный метод, но другого не нашёл.

Спасибо !!!


ВЫБРАТЬ
    |    Ссылка,
    |    Дата,
    |    DateCopy,
    |    Copy,
    |    DateCopyMonth ,
    |    РазностьДат(ДАТА,&ТекущаяДата,МЕСЯЦ) Как Month
    |        ИЗ
    |    Документ.РасходДенег Как РасходДенег
    |Где  ПометкаУдаления = Ложь И Copy = Ложь И DateCopy <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |И  РазностьДат(&ТекущаяДата,DateCopy,День) >= 30";     
    
    Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());    
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    
           Если ВыборкаДетальныеЗаписи.Month = 1 Тогда
             Движение = Движения.RegistrCopySpending.Добавить();
            Движение.Период = Дата;
            Движение.DateCopy = ВыборкаДетальныеЗаписи.DateCopy;
            Движение.DateCopyMonth = ВыборкаДетальныеЗаписи.DateCopyMonth;
            Движение.Month = ВыборкаДетальныеЗаписи.Month;
            Движение.Copy = ВыборкаДетальныеЗаписи.Copy;
        Иначе
    КонецЕсли;

Общие модули

| ВЫБРАТЬ
    | *
    | ИЗ
    |РегистрСведений.RegistrCopySpending Как RegistrCopySpending
    |Где  Copy = Ложь";
    
    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Month = 1 Тогда
            ВыборкаДетальные=ВыборкаДетальныеЗаписи.Регистратор.ПолучитьОбъект();
            ВыборкаДетальные.Copy = Истина;
            ВыборкаДетальные.Записать(РежимЗаписиДокумента.Проведение);
            ДокументОбъект = ВыборкаДетальныеЗаписи.Регистратор.Скопировать();
            ДокументОбъект.Дата=ТекущаяДата();
            ДокументОбъект.Copy = Ложь;
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Create New Documents #"+Строка(ВыборкаДетальныеЗаписи.Регистратор))
        Иначе
        КонецЕсли;
    КонецЦикла;
19 D_E_S_131
 
01.11.19
17:57
Я бы просто сделал регл задание, которое в 00:00:01 пробегается по актуальным документам и смотрит не прошел ли месяц. По результатам выборки уже и создавать новые документы, ставя признак неактуальности у старых.
20 Diademal
 
01.11.19
18:21
Ok. Спасибо попробую!!
Основная теорема систематики: Новые системы плодят новые проблемы.