Имя: Пароль:
1C
1С v8
"Не удалось записать/провести документ " Бухгалтерия предприятия КОРП 2.0
0 JuixyJes
 
21.08.19
12:48
При попытке проведения документа выходит ошибка "Не удалось записать/ провести документ". Что делать?
1 piter3
 
21.08.19
12:49
Не за что ничего не смотреть,журналы там всякие
2 dezss
 
21.08.19
12:49
Это все, что пишет?
Больше вот вообще ничего?
3 JuixyJes
 
21.08.19
12:51
(2) Вообще ничего, ну кроме названия документа
4 JuixyJes
 
21.08.19
12:54
+(3) пыталась найти через отладчик, никуда не проваливается, ошибки как таковой нет, просто как предупреждение падает
5 dezss
 
21.08.19
12:54
(4) в (1) написал...смотри ЖР.
6 piter3
 
21.08.19
12:55
7 JuixyJes
 
21.08.19
13:28
(5) Журнал операций пойдет?
8 ДенисЧ
 
21.08.19
13:29
(7) Тебе же сказали - ЖР (журнал регистрации). Знакомое слово?
9 piter3
 
21.08.19
13:33
(7) не пойдет
10 JuixyJes
 
21.08.19
14:17
(8) все, поняла, что журнал регистрации, там нет записей про то что не удалось записать документ
11 JuixyJes
 
21.08.19
14:50
+(10) документ даже в процедуру обработки проведения не может попасть, не срабатывает точка останова
12 НадюшаЯЯ
 
21.08.19
14:52
(11) перед записью смотрите и форму тоже захватите
13 JuixyJes
 
21.08.19
14:57
(12) хотела спросить, а вас за что забанили?
14 НадюшаЯЯ
 
21.08.19
14:59
(13) по мнению Волшебника, я как же он выразился "навальная крыса". Ну вообщем такова участь той учетки, не стоит в России даже на сраном формуме выражать свое отношение к власти
15 piter3
 
21.08.19
15:07
(14) Я же надеюсь вы назвали не Мисту - сраным форумом?
16 НадюшаЯЯ
 
21.08.19
15:21
(15) Каждый пусть сделает выводы сам...
17 JuixyJes
 
21.08.19
15:29
(16) свобода слова, что тут скажешь
18 НадюшаЯЯ
 
21.08.19
15:30
(17) Лучше промолчим, любой, офф для меня на этом форуме теперь закрыт. Даже тот который будет на новый год.
19 JuixyJes
 
21.08.19
15:31
Я разобралась с ошибкой, там эти РИБы, вот.
20 JuixyJes
 
21.08.19
15:32
Для доработки дали базу из подразделения, там нельзя дважды записать 1 документ
21 JuixyJes
 
21.08.19
15:32
(20) и при повторной записи из-за этого стоял Отказ = Истина;
22 JuixyJes
 
21.08.19
15:35
Подскажите теперь мне, пожалуйста. Я делала доработку, создала регистр сведений, в который попадают записи при проведении документа. Как при повторном проведении документа добавить новую запись, если в документе поменялся реквизит хоть один
23 НадюшаЯЯ
 
21.08.19
15:38
Различия лучше смотреть перед записью. Там будет отличаться Объект и ссылка, в ссылке еще будут старые записи. Это как раз и будет вашим маяком для создания новой записи при проведении. Но если человек просто запишет документ а потом его проведет, то данный алгоритм не сработает.
24 JuixyJes
 
21.08.19
15:42
(23) Я подписку на событие сделала, условие написала, но вот запись новая не создается. Только изменяется запись
25 НадюшаЯЯ
 
21.08.19
15:44
А как должно быть, если отменить проведение и заново провести документ?
26 Мимохожий Однако
 
21.08.19
15:46
(4) Включи режим отладки на сервере.
27 НадюшаЯЯ
 
21.08.19
15:47
(26) Обычное приложение, отладка работает в модулях документов и без включенной отладки на сервере, ее не будет только в общих модулях, где прямо стоит галочка на сервере
28 JuixyJes
 
21.08.19
15:50
(27) Так, это я поняла. Тогда подписку на запись сделать нужно, так?
29 НадюшаЯЯ
 
21.08.19
15:51
(28) нет надо ответить на вопрос
30 JuixyJes
 
21.08.19
15:54
(25) Ну тут понятно, при отмене проведения запись удаляется, потом снова добавляется при проведении
31 JuixyJes
 
21.08.19
15:56
И как тогда записи добавлять новые в регистр?
32 НадюшаЯЯ
 
21.08.19
16:06
документ будет измен раз десять, сколько записей будет в регистре? Потом отмена проведения, потом проведение - сколько записей?
33 JuixyJes
 
21.08.19
16:09
При отмене проведения записи движений удалятся, при проведении останется одна. Но как тогда реализовать добавление записей? Просто нужно каждое изменение 1 реквизита в документе заносить в РС, потом по этому РС сделать отчет.
34 НадюшаЯЯ
 
21.08.19
16:12
Нужно запросом в момент проведения, до записи в регистр вытащить текущие записи и их тоже использовать при записи
35 JuixyJes
 
21.08.19
16:20
(34) хммм, я вот не подумала, а ведь будет ругаться на то что запись с такими полями уже есть
36 JuixyJes
 
21.08.19
16:22
Процедура ПП_КОЖОбработкаПроведения(Источник, Отказ) Экспорт
    
    Регистр = Источник.Движения.ПП_КОЖ;
    Регистр.Записывать = Истина;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПП_КОЖ.Регистратор,
    |    ПП_КОЖ.Дата,
    |    ПП_КОЖ.НомерДоговора,
    |    ПП_КОЖ.Заемщик,
    |    ПП_КОЖ.Менеджер,
    |    ПП_КОЖ.Сумма
    |ИЗ
    |    РегистрСведений.ПП_КОЖ КАК ПП_КОЖ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Если РезультатЗапроса.Пустой() Тогда
        Движение = Регистр.Добавить();
        Движение.Период = Источник.Дата;
        Движение.Дата = Источник.Дата;
        Движение.НомерДоговора = Источник.Номер;
        Движение.Заемщик = Источник.Клиент;
        Движение.Менеджер = Источник.Сотрудник;
        Движение.Сумма = Источник.СуммаКредита;
    Иначе
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Движение = Регистр.Добавить();
                Движение.Период = ВыборкаДетальныеЗаписи.Дата;
                Движение.Дата = ВыборкаДетальныеЗаписи.Дата;
                Движение.НомерДоговора = ВыборкаДетальныеЗаписи.НомерДоговора;
                Движение.Заемщик = ВыборкаДетальныеЗаписи.Заемщик;
                Движение.Менеджер = ВыборкаДетальныеЗаписи.Менеджер;
                Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;

            Если ВыборкаДетальныеЗаписи.НомерДоговора = Источник.Номер и  ВыборкаДетальныеЗаписи.Сумма <> Источник.СуммаКредита Тогда
                Движение = Регистр.Добавить();
                Движение.Период = Источник.Дата;
                Движение.Дата = Источник.Дата;
                Движение.НомерДоговора = Источник.Номер;
                Движение.Заемщик = Источник.Клиент;
                Движение.Менеджер = Источник.Сотрудник;
                Движение.Сумма = Источник.СуммаКредита;
            КонецЕсли;    
        КонецЦикла;
    КонецЕсли;    

КонецПроцедуры
37 JuixyJes
 
21.08.19
16:22
Вот такая у меня подписка на событие
38 JuixyJes
 
21.08.19
16:24
Я так полагаю, то что зависит от регистратора мне и мешает, да? и что записи в регистр нужно делать через менеджер записи
39 ДенисЧ
 
21.08.19
16:25
Сделай этот РС независимым, тогда из него движения не будут удаляться при отмене
40 JuixyJes
 
21.08.19
16:28
(39) сделала независимым, записывать движения теперь через менеджер записи да?
41 ДенисЧ
 
21.08.19
16:29
(40) Можешь через менеджер, можешь через набор записей...
42 НадюшаЯЯ
 
21.08.19
16:32
(40) Как выяснилось, что менеджер записи надстойка над набором записи, тогда в любом случае через набор
43 JuixyJes
 
21.08.19
16:37
Процедура ПП_КОЖОбработкаПроведения(Источник, Отказ) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПП_КОЖ.Дата,
    |    ПП_КОЖ.НомерДоговора,
    |    ПП_КОЖ.Заемщик,
    |    ПП_КОЖ.Менеджер,
    |    ПП_КОЖ.Сумма
    |ИЗ
    |    РегистрСведений.ПП_КОЖ КАК ПП_КОЖ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Если РезультатЗапроса.Пустой() Тогда
        Движение = РегистрыСведений.ПП_КОЖ.СоздатьМенеджерЗаписи();
        Движение.Период = Источник.Дата;
        Движение.Дата = Источник.Дата;
        Движение.НомерДоговора = Источник.Номер;
        Движение.Заемщик = Источник.Клиент;
        Движение.Менеджер = Источник.Сотрудник;
        Движение.Сумма = Источник.СуммаКредита;
        Движение.Записать();
    Иначе
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл            
            Если ВыборкаДетальныеЗаписи.НомерДоговора = Источник.Номер и  ВыборкаДетальныеЗаписи.Сумма <> Источник.СуммаКредита Тогда
                Движение = РегистрыСведений.ПП_КОЖ.СоздатьМенеджерЗаписи();
                Движение.Период = Источник.Дата;
                Движение.Дата = Источник.Дата;
                Движение.НомерДоговора = Источник.Номер;
                Движение.Заемщик = Источник.Клиент;
                Движение.Менеджер = Источник.Сотрудник;
                Движение.Сумма = Источник.СуммаКредита;
                Движение.Записать();
            КонецЕсли;    
        КонецЦикла;
    КонецЕсли;    

КонецПроцедуры
44 JuixyJes
 
21.08.19
16:39
Сделала так, но при попытке сделать так  Движение.Записать(Ложь); выдает ошибку что запись с такими ключевыми полями уже существует.
45 dezss
 
21.08.19
16:40
(18) Ну вот зря ты так. Бывает такое)
(42) И да и нет. :) В общем, все сложно)
(43) А где в запросе отбор по этому документу?
Я бы посоветовал любую подобную запись оборачивать в Попытку-Исключение.
Движение.Записать();

Вот из-за этого условия при наличии хотя бы 2-х записей по этому источнику, всегда будет происходить запись в регистр. Надо делать регистр периодическим и добавлять срезпоследних в запросе.
Если ВыборкаДетальныеЗаписи.НомерДоговора = Источник.Номер и  ВыборкаДетальныеЗаписи.Сумма <> Источник.СуммаКредита Тогда
46 dezss
 
21.08.19
16:41
(44) Показывай структуру регистра.
47 JuixyJes
 
21.08.19
16:43
48 dezss
 
21.08.19
16:45
(43)
Если регистр не переодический, то эта строка бессмысленна:
Движение.Период = Источник.Дата;
Если периодический, то писать туда надо не дату документа.
(47) Ужас)
Регистр обязательно должен содержать набор измерений. Без них он не может существовать.
49 piter3
 
21.08.19
16:46
(47)А чего сумма реквизит-то
50 dezss
 
21.08.19
16:46
(49) То есть то, что там вообще нет измерений, не важно?)))
51 hhhh
 
21.08.19
16:47
(47) почему измерений нет? в регистре может быть только одна запись для каждой комбинации измерений.
52 piter3
 
21.08.19
16:48
(50)я на сумму глянул и закрыл,дабы не расстраиваться
53 dezss
 
21.08.19
16:51
В общем, добавляй в регистр измерение, в которое будешь пихать сам документ, и делай его периодическим. В период пихай не дату документа, а текущую дату-время. Вот и будет у тебя сколько угодно записей по 1 документу. Остальное, в принципе, можно не менять.
54 dezss
 
21.08.19
16:52
(53) + но в запросе все-таки установи отбор по этому документу (который как раз будет в измерении) и сделай срезпоследних, чтоб только последняя запись проверялась.
55 JuixyJes
 
22.08.19
09:57
(54) вот такой совет, это фактически готовое решение, благодарю, решение помогло. Остался лишь маленький вопрос. мне нужно запросом вытянуть все повторяющиеся записи из этого регистра, сделала вот так, результат запрос 0 строк


ВЫБРАТЬ
    ПП_КОЖ.НомерДоговора,
    ПП_КОЖ.Сумма,
    ПП_КОЖ.Менеджер,
    ПП_КОЖ.Заемщик,
    КОЛИЧЕСТВО(ПП_КОЖ.НомерДоговора) КАК Количество
    ИЗ
    РегистрСведений.ПП_КОЖ КАК ПП_КОЖ

СГРУППИРОВАТЬ ПО
    ПП_КОЖ.НомерДоговора,
    ПП_КОЖ.Сумма,
    ПП_КОЖ.Менеджер,
    ПП_КОЖ.Заемщик

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ПП_КОЖ.НомерДоговора) = 1
56 dezss
 
22.08.19
14:17
(55) Делай так. Просто у тебя ж суммы каждый раз разные будут, вроде, поэтому группируем по уникальному сочетанию полей для твоей выборки. надеюсь, что номера хватит. Но можешь еще и дату добавить.
ВЫБРАТЬ
    ПП_КОЖ.НомерДоговора,
    КОЛИЧЕСТВО(ПП_КОЖ.НомерДоговора) КАК Количество
    ИЗ
    РегистрСведений.ПП_КОЖ КАК ПП_КОЖ

СГРУППИРОВАТЬ ПО
    ПП_КОЖ.НомерДоговора,

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ПП_КОЖ.НомерДоговора) = 1
57 hhhh
 
22.08.19
14:24
(55) повторяющиеся наверно когда > 1, а не = 1 ?
58 dezss
 
22.08.19
15:33
(57) точно...не обратил внимания)))