|
Перепроведение документа через регламентное задание. | ☑ | ||
---|---|---|---|---|
0
Ly_Alena
20.10.16
✎
10:13
|
Добрый день! Появилась необходимость перепроводить документы, в том числе закрытого периода, но только по одному регистру через регламентное задание. На одном сайте нашла пример как это можно осуществить. В модуле регламентных заданий в процедуре:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокументДляПерепроведения.Ссылка КАК ДокументДляПерепроведения |ИЗ | Документ.ДокументДляПерепроведения КАК ДокументДляПерепроведения |ГДЕ | ДокументДляПерепроведения.ПометкаУдаления = ЛОЖЬ | И ДокументДляПерепроведения.Проведен = ИСТИНА | И ДокументДляПерепроведения.ПровестиПоДебиторам = ИСТИНА"; Результат = Запрос.Выполнить().Выгрузить(); Для Каждого ЭлементРезультата из Результат Цикл ДокументОбъект = ЭлементРезультата.ДокументДляПерепроведения.ПолучитьОбъект(); НачатьТранзакцию(); ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); ДокументОбъект.Движения["ИмяРегистра"].Прочитать(); ТаблицаДвиженийРегистра = ДокументОбъект.Движения["ИмяРегистра"].Выгрузить(); //здесь отменяем проведение документа, чтобы ничего не изменилось //в прошлых периодах (по другим регистрам) ОтменитьТранзакцию(); НаборЗаписей = РегистрыНакопления["ИмяРегистра"].СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ДокументОбъект); НаборЗаписей.Загрузить(ТаблицаДвиженийРегистра); НаборЗаписей.Записать(); КонецЦикла; Выдает ошибку:"{ОбщийМодуль.МодульРегламентныхЗаданий.Модуль(983)}: Ошибка при вызове метода контекста (Записать) по причине: по причине: Не удалось провести «Документ К0000000209 от 05.02.2016 10:33:23″!" |
|||
1
Boleev
20.10.16
✎
10:16
|
продолжайте наблюдение
|
|||
2
iceman2112
20.10.16
✎
10:17
|
от нас что ннвжн?
|
|||
3
iceman2112
20.10.16
✎
10:17
|
нужно*
|
|||
4
Ly_Alena
20.10.16
✎
10:19
|
(2) Нужно сказать почему выходит ошибка на метод "Записать" и как исправить ее.
|
|||
5
Boleev
20.10.16
✎
10:23
|
(4) 100$
|
|||
6
Ly_Alena
20.10.16
✎
10:32
|
(5) какой высокий у вас прайс )
|
|||
7
Mankubus
20.10.16
✎
10:37
|
(0) отладчик в руки и вперед
|
|||
8
Ly_Alena
20.10.16
✎
10:43
|
(7) что может показать мне отладчик на метод записать()?
|
|||
9
DrShad
20.10.16
✎
10:45
|
(8) попадешь в процедуры ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения, ОбработкаПроведения
и там найдешь свою ошибку |
|||
10
Это_mike
20.10.16
✎
10:48
|
(9) разве в этих процедурах анализируется ДНК?
|
|||
11
DrShad
20.10.16
✎
10:56
|
(10) еще как
|
|||
12
Dmitrii
гуру
20.10.16
✎
11:14
|
(0) Попробуйте взять Документ К0000000209 от 05.02.2016 10:33:23 и провести его вручную (вы ведь на копии тренируетесь).
Наверняка система не даст вам этого сделать. Если повезёт, то получите какое-то осмысленное сообщение об ошибке. |
|||
13
Альбатрос
20.10.16
✎
11:28
|
Чот я смысла кода не понял. Проводим док, берем его движения и
их же опять записываем? Или что? |
|||
14
catena
20.10.16
✎
11:37
|
(13)Записываем движения только одного регистра. Чтобы остальные не послетали.
|
|||
15
Wirtuozzz
20.10.16
✎
11:41
|
Предлагаю запись поместить в Попытку и по исключению записывать в Журнал регистрации ОписаниеОшибки(); будет дана более детальная инфа, для раздумий.
|
|||
16
Ly_Alena
20.10.16
✎
11:49
|
(15) Спасибо, попробую.
|
|||
17
Ly_Alena
20.10.16
✎
13:04
|
Теперь новый уровень - говорит что проводит все нормально. но в регистре записей нет...
Если провести документ вручную - записи есть в регистре. |
|||
18
Ly_Alena
20.10.16
✎
13:14
|
(17) В коде регламетного ничего не поменялось.
|
|||
19
Lexey_
20.10.16
✎
13:14
|
(17) НаборЗаписей.Отбор.Регистратор.Установить(ДокументОбъект); - тип неправильный?
|
|||
20
Ly_Alena
20.10.16
✎
13:17
|
(19) вместо ДокументОбъект стоит ЭлементРезультата.ДокументДляПерепроведения
Ссылку передает |
|||
21
eskor
20.10.16
✎
13:19
|
Отладчик и еще раз отладчик. Что оказалось в наборе записей?
|
|||
22
Ly_Alena
21.10.16
✎
06:17
|
Как отключить все проверки типа ПередЗаписью?
|
|||
23
Mankubus
21.10.16
✎
06:21
|
(22) ОбменДанными.Загрузка = Истина
|
|||
24
Ly_Alena
21.10.16
✎
06:55
|
(23) Спасибо! Кажется получилось. Буду проверять при изменении данных.
|
|||
25
ЧеловекДуши
21.10.16
✎
07:17
|
(18) Лена код документа проверь :)
|
|||
26
ЧеловекДуши
21.10.16
✎
07:18
|
(24) За что спасибо?
Документ при этом не проводится. А записи в регистры нужно уже формировать самой, т.е. кодом из какого либо модуля :) |
|||
27
Ly_Alena
21.10.16
✎
07:48
|
(26) Да... вижу. Мое имя Алена.
Код документа нормальный - по кнопке проводится все хорошо. С регламентным засада. |
|||
28
Ly_Alena
21.10.16
✎
08:16
|
На строчке:
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); Идет в процедуру "ПередЗаписью()", оттуда через кучу процедур и проверок в ПередЗаписьюДокументаУстановкаАвтораПередЗаписью() После чего выходит ошибка: "{Отчет.ПроверкаРегламентногоНаПроведениеЗаказовПоставщиков.Форма.ФормаОтчета.Форма(33)}: Ошибка при вызове метода контекста (Записать) ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); по причине: Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!" |
|||
29
ЧеловекДуши
21.10.16
✎
08:19
|
(28) Лена, Алена, побоку, ... Хоть Евдакия...
Вы код смотрите, но ни черта не видите. Запустите отладчик и выполните свое регламентное задание по отладчику. ...Отладчик может... Делайте это в тестовой |
|||
30
Ly_Alena
21.10.16
✎
08:24
|
(29) Естественно я это делаю через отладчик, а не силой мысли!
|
|||
31
ЧеловекДуши
21.10.16
✎
08:24
|
+ 1. Запускаете конфигуратор
2. Ставите точку останова на том месте кода, который хотели бы отладить. 3. Запускаете отладку. 4. Заходите в консоль регламентных задач - Это такая обработка 5. Выполняете свою регламентную на сервере, не перепутайте. - Сдается мне, что у вас есть принципиальное отличие, где выполняется код... Проще говоря, у вас ГУАНО код в модуле документа :) 6. Находите свою ошибку ... 20. Как правило ошибка "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!" предвещает тому, что документ при проведении пишется несколько раз, и криво обрабатывается :) |
|||
32
ЧеловекДуши
21.10.16
✎
08:28
|
+(30) Проверьте подписка на события, бывает так, что туда чего лепят :)
|
|||
33
DrShad
21.10.16
✎
08:39
|
(30) сделай проще, у каждого объекта есть структура ДополнительныеСвойства, вставь в нее какой-то свой ключ (к примеру "РегламентноеПроведение")
далее в процедурах модуля объекта ПриЗаписи, ПередЗаписью и ОбработкаПроверкиЗаполнения вставь условие наподобии проверки ОбменДанными.Загрузка и будет тебе счастие |
|||
34
Ly_Alena
21.10.16
✎
08:41
|
(32) (33) Спасибо! Я нашла ошибку - в процедуре проведения еще менялся реквизит и записывался. Закомментировала в доке, перенесла в регламентное и все провелось. Буду проверять как ведут себя другие регистры.
|
|||
35
Ly_Alena
31.10.16
✎
16:54
|
Хотелось бы возобновить тему.
регламентное запускается, все проходит успешно, в журнале регистрации в нужном мне регистре статус транзакции "Зафиксирована", а записей в регистре нет. Фоновое задание завершено успешно. Делаю внешнюю обработку - запихиваю туда код - запускаю - все проходит как по маслу и запись в регистре появляется. В чем может быть дело? |
|||
36
eddy_n
31.10.16
✎
17:33
|
(35) Взведён признак Записывать Набора записей регистра в процедуре фонового задания?
|
|||
37
Ly_Alena
31.10.16
✎
17:37
|
(36)
ДокументОбъект = ЭлементРезультата.ЗаказПоставщику.ПолучитьОбъект(); Сообщить(ЭлементРезультата.ЗаказПоставщику); НачатьТранзакцию(); Попытка ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); Исключение Сообщить("Не удалось провести документ: " + ЭлементРезультата.ЗаказПоставщику); ОтменитьТранзакцию(); Продолжить; КонецПопытки; ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); ДокументОбъект.Движения[ИмяРегистра].Прочитать(); ТаблицаДвиженийРегистра = ДокументОбъект.Движения[ИмяРегистра].Выгрузить(); //здесь отменяем проведение документа, чтобы ничего не изменилось //в прошлых периодах (по другим регистрам) ОтменитьТранзакцию(); НаборЗаписей = РегистрыНакопления.ДебиторыКредиторыСнабжение.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ЭлементРезультата.ЗаказПоставщику); НаборЗаписей.Загрузить(ТаблицаДвиженийРегистра); НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); |
|||
38
Ly_Alena
31.10.16
✎
17:38
|
Последняя строка ЗафиксироватьТранзакцию() уже дописано от безисходности.
|
|||
39
aleks_default
31.10.16
✎
17:47
|
Фоновое задание под каким пользователем? Есть у него права на проведение документа?
|
|||
40
Ly_Alena
31.10.16
✎
17:48
|
Фоновое запускается с сервера как я понимаю
|
|||
41
aleks_default
31.10.16
✎
17:48
|
(40)И что?
|
|||
42
Ly_Alena
31.10.16
✎
17:50
|
(41) фоновое запускается разве вне зависимости от пользователей?
Как посмотреть? |
|||
43
aleks_default
31.10.16
✎
17:51
|
в консоли рег. заданий.
|
|||
44
разработчик 1с
31.10.16
✎
17:53
|
дата запрета на пользователя заданий стоит
|
|||
45
Ly_Alena
31.10.16
✎
17:53
|
(43) там пользователя нет
|
|||
46
aleks_default
31.10.16
✎
17:58
|
ну значит нужно указать
|
|||
47
Ly_Alena
31.10.16
✎
17:59
|
(46) у меня ни для одного регламентного нет пользователя и как-то работает...
|
|||
48
Ly_Alena
31.10.16
✎
18:01
|
(46) Хорошо, попробуем с пользователем - как его прописать?
|
|||
49
Ly_Alena
31.10.16
✎
18:05
|
Если пользователь регламентного задания не указан, то выполнение происходит с правами, которые определяются набором ролей, указанных в свойстве конфигурации ОсновныеРоли. В том случае, если в этом свойстве не указано ни одной роли, выполнение происходит без ограничения прав доступа.
|
|||
50
Жан Пердежон
31.10.16
✎
18:07
|
(37)
у тебя ОтменитьТранзакцию(); всегда происходить что ли безусловно? было бы удивительно, если бы что-то записалось |
|||
51
Ly_Alena
31.10.16
✎
18:12
|
(50) да всегда - чтобы записи не менялись в прошлом периоде.
С внешней обработки все работает. |
|||
52
Ly_Alena
31.10.16
✎
18:12
|
(50) процедура проводит документ только по одному регистру.
|
|||
53
Жан Пердежон
31.10.16
✎
18:13
|
(52) смотри тогда журнал регистрации;
если там ничего нет - пиши туда сама ОписаниеОшибки() вместо сообщить |
|||
54
Жан Пердежон
31.10.16
✎
18:18
|
(53)+ для набора записей кстати тоже работает
ОбменДанными.Загрузка = Истина; |
|||
55
Ly_Alena
31.10.16
✎
18:24
|
(53) выше писала что по журналу - все пишет и нет никаких ошибок.
|
|||
56
1sanekmaloi1
31.10.16
✎
18:27
|
А весь этот ужас нельзя переписать?
Зачем 2 раза проводится документ? Нельзя сформировать таблицу для регистра и записать набор? |
|||
57
Ly_Alena
31.10.16
✎
18:31
|
(56)в документ пишутся ссылки на документы-движения приход/расход. в документе есть изменяемые реквизиты. эти реквизиты пишутся вместе с данными документов-движений в РН. Когда период документов-движений закрыт и перепровести документы нельзя - можно переповести мой документ и он запишет то что нужно по этим документам в РН. Смысл в том чтобы этот документ перезаписывал только в один регистр, по другим данные не перепроводил.
|
|||
58
Ly_Alena
31.10.16
✎
18:32
|
(56) НаборЗаписей.Загрузить(ТаблицаДвиженийРегистра);
разве это не то, о чем Вы говорите? |
|||
59
1sanekmaloi1
31.10.16
✎
18:36
|
Я говорю что наверняка в модуле объекта дока есть что наподобие:
ОбщийМодуль.СформироватьДвижения() или ОбщийМодуль.СформироватьДвиженеиПоРегистру() или аналог , процедура для формирования необходимой таблицы для движений документа по этому регистру. И ее можно адаптировать для получения ТЗ(при этом документ не нужно записывать,проводить и прочее) а эту ТЗ уже в регистр. |
|||
60
Ly_Alena
31.10.16
✎
18:39
|
(59) есть и по кнопке по регистру перепроводится. Но тогда пользователю нужно будет заходить в документ и перепроводить его. Кто-то забыл это сделать например. Пусть машина за день записывает все движения.
Если я Вас правильно поняла. |
|||
61
1sanekmaloi1
31.10.16
✎
18:42
|
(60)Не возражаю, пусть машина за день записывает все движения.
|
|||
62
1sanekmaloi1
31.10.16
✎
18:48
|
Вообще то я имел ввиду чтобы регламентное выглядело вот так:
ТаблицаДвиженийРегистра = ОбщийМодуль.ПолучитьТаблицуДляРегистраДебиторы(ЭлементРезультата.ЗаказПоставщику); НаборЗаписей = РегистрыНакопления.ДебиторыКредиторыСнабжение.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ЭлементРезультата.ЗаказПоставщику); НаборЗаписей.Загрузить(ТаблицаДвиженийРегистра); НаборЗаписей.Записать(); |
|||
63
Ly_Alena
31.10.16
✎
18:50
|
(62) процедура не в общем модуле. я вас не так поняла. Процедура записи в модуле документа при проведении и по нажатию кнопки.
|
|||
64
1sanekmaloi1
31.10.16
✎
18:52
|
(63)Может программиста позвать?
|
|||
65
Ly_Alena
31.10.16
✎
18:52
|
(64) Давайте позовем )
|
|||
66
Ly_Alena
31.10.16
✎
18:54
|
(64) только чур не такого "пропиши пользователя регламентному заданию"
|
|||
67
Ly_Alena
31.10.16
✎
19:03
|
Как-то не откликаются на зов программисты...
|
|||
68
1sanekmaloi1
31.10.16
✎
19:07
|
(67)Может зовете неправильно?
Хотя для решения вашей задачи уже все расписано как нужно сделать. |
|||
69
Ly_Alena
31.10.16
✎
19:08
|
(68) а если без общего модуля?
|
|||
70
1sanekmaloi1
31.10.16
✎
19:10
|
(69)Разрешаю и без общего, скопируйте код из модуля объекта документа, который формирует набор для данного регистра и используйте этот кусок в регламентном.
|
|||
71
1sanekmaloi1
31.10.16
✎
19:12
|
+(70) Использовать проведение и откат транзакции для получения тз это как "на такси в булошную"
|
|||
72
1sanekmaloi1
31.10.16
✎
19:14
|
+(71)Кстати вы так и не ответили зачем в вашей конструкции проводится документ 2 раза?один раз в попытке и второй раз без попытки?
|
|||
73
Ly_Alena
31.10.16
✎
19:14
|
(71) Была такая мысль, но потом наткнулась на перепроведение документов только по нужному регистру и возрадовалась.
|
|||
74
craxx
31.10.16
✎
19:16
|
(73) ЧТо-то в коде логику не улавливаю
ОтменитьТранзакцию() там зачем?? |
|||
75
Ly_Alena
31.10.16
✎
19:16
|
(72) по факту не проводится ни разу как мне надо. Это уже мудрила
|
|||
76
craxx
31.10.16
✎
19:22
|
(74) а понял. там надо копать модуль набора записей регистра накоплений. походу там тоже подвязка под дату запрета. и это.. я бы набор записей в ТЗ выгружал, а потом уже транзакцию отменял. как-то так.
|
|||
77
craxx
31.10.16
✎
19:23
|
(76) + там надо перед выгрузкой прочитать набор записей.
|
|||
78
Ly_Alena
31.10.16
✎
19:30
|
(77) перед выгрузкой итак читает, после выгрузки отменяет.
(37) |
|||
79
Ly_Alena
31.10.16
✎
19:37
|
http://zdst.net/1s-8-kak-vypolnit-pereprovedenie-dokumentov-tolko-po-odnomu-registru-sohraniv-starye-dvizheniya-po-ostalnym-registram/#comment-148
Не уверена что отсюда взято, но пример кода был такой. |
|||
80
Ly_Alena
31.10.16
✎
19:51
|
С внешней обработки все работает...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |