Имя: Пароль:
1C
1С v8
проблема с РС
0 SH_tan
 
10.06.15
14:36
Добрый день Всем!!!
Вот такая проблема (сразу прошу сильно не пинать так как с РС мало работал)
Вообщем сделал РС непереодический и независимый и надо чтобы он по Отбору и в зависимости от того проводим или отмена проведения Прибавлял записи и удалял но что то ни как не получается код ниже

НаборЗаписей = РегистрыСведений.Отправка.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    НаборЗаписей.Прочитать();
        
    Если НаборЗаписей.Количество()=0 И РежимЗаписиДокумента.Проведение = РежимЗаписи Тогда  // Нет записи
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Документ = Ссылка;
        НоваяЗапись.Дата = Ссылка.Дата;
        НоваяЗапись.Отправлено = Ложь;
            
        НаборЗаписей.Записать();
    ИначеЕсли РежимЗаписиДокумента.ОтменаПроведения = РежимЗаписи Тогда                        // Есть запись
        Попытка
            НоваяЗапись = НаборЗаписей.Добавить();
            НаборЗаписей.Записать();
        Исключение;
            ТекстОписаниеОшибки = ОписаниеОшибки();
            ПолноеОписаниеОшибки = ТекстОписаниеОшибки;
        ВызватьИсключение ТекстОписаниеОшибки;
        КонецПопытки;
    КонецЕсли;
1 anatoly
 
10.06.15
14:37
сразу не понял какой смысл делать регистр независимым??
2 Heckfy
 
10.06.15
14:38
(1) Ну хз... Может для логов например.....
3 SH_tan
 
10.06.15
14:38
и еще как в непереодическом и независимом РС сделать отбор по Ресурсу, в справке написано что нельзя, а надо, как быть?
4 butterbean
 
10.06.15
14:39
(0) чтобы очистить записи в наборе нужно вызвать метод Очистить(), а не добавить()
5 SH_tan
 
10.06.15
14:39
(1) (2) для того чтобы потом знать какие отправил а какие нет
6 butterbean
 
10.06.15
14:39
(3) запросом, но это бред конечно, значит регистр неправильно спроектирован
7 SH_tan
 
10.06.15
14:39
(4) хорошо сейчас попробую
9 Heckfy
 
10.06.15
14:41
(4) НаборЗаписей = РегистрыСведений.Отправка.СоздатьНаборЗаписей();
НаборЗаписей.Записать()

Вообще весь регистр почистит :)
10 butterbean
 
10.06.15
14:41
(9) да, удобная вещь
11 SH_tan
 
10.06.15
14:42
(4) ошибка
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:

Обращение к процедуре объекта как к функции (Очистить)
12 SH_tan
 
10.06.15
14:43
(8) блин не жгу а помощи ищу
13 SH_tan
 
10.06.15
14:44
(8) вообще хочу разобраться почему у меня ошибка возникла в (0)
14 SH_tan
 
10.06.15
14:45
(6) тогда какой надо?
15 SH_tan
 
10.06.15
14:50
не у кого нет мыслей?
16 JesteR
 
10.06.15
14:51
Напиши
Какая структура регистра, где измерения, где ресурсы.
17 SH_tan
 
10.06.15
14:52
Причем записывает РС нормально без ошибок
18 SH_tan
 
10.06.15
14:53
(16)
Измерение

Документ(ссылка)

Ресурсы

Дата (Дата и время)
Отправлено (булево)
19 vicof
 
10.06.15
14:53
(17) Автор, у тебя между ушами каша. Ты даже мысли не можешь сформулировать понятно для окружающих.
20 JesteR
 
10.06.15
14:55
Если РежимЗаписи = РежимЗаписиДокумента.Проведение  Тогда
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Документ = Ссылка;
        НоваяЗапись.Дата = Ссылка.Дата;
        НоваяЗапись.Отправлено = Ложь;
        НаборЗаписей.Записать();
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения
        НаборЗаписей.Записать();
КонецЕсли;

как-то так....
21 JesteR
 
10.06.15
14:56
(20) Набор.Прочитать() не делай.
22 SH_tan
 
10.06.15
14:56
(19) при проведении Документа эта часть кода отрабатывает как надо (при условии что нет такого же регистра сведений по отбору)

НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Документ = Ссылка;
        НоваяЗапись.Дата = Ссылка.Дата;
        НоваяЗапись.Отправлено = Ложь;
            
        НаборЗаписей.Записать();
23 JesteR
 
10.06.15
14:57
Короче вот:

НаборЗаписей = РегистрыСведений.Отправка.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Документ.Установить(Ссылка);

Если РежимЗаписи = РежимЗаписиДокумента.Проведение  Тогда
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Документ = Ссылка;
        НоваяЗапись.Дата = Ссылка.Дата;
        НоваяЗапись.Отправлено = Ложь;
        НаборЗаписей.Записать();
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения
        НаборЗаписей.Записать();
КонецЕсли;
24 SH_tan
 
10.06.15
14:57
(21) сейчас попробую
25 butterbean
 
10.06.15
14:57
(21) при перепроведении будет хрень
26 JesteR
 
10.06.15
14:57
(23)Блин, во втором кейсе забыл ТОГДА
27 JesteR
 
10.06.15
14:58
(25)Обоснуй
28 SH_tan
 
10.06.15
15:00
(25) при перепроведении он перезаписывается
29 SH_tan
 
10.06.15
15:00
(27) но он не отработает условие отбора
НаборЗаписей.Количество()=0
у него всегда 0
30 Галахад
 
гуру
10.06.15
15:02
Интересно, а когда Отправлено должно стать Истиной?
31 SH_tan
 
10.06.15
15:02
при отмене проведения
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{Документ.ПриходнаяНакладная()}: {Документ.ПриходнаяНакладная()}: Обращение к процедуре объекта как к функции (Очистить)
32 SH_tan
 
10.06.15
15:03
(30) по идее внешняя обработка должна менять
33 vicof
 
10.06.15
15:04
(32) Когда пойдет дождь?
По идее я купил шланг
34 SH_tan
 
10.06.15
15:05
(31) не нормально отменяет, не обновил Конфигуратор, сори
35 Галахад
 
гуру
10.06.15
15:06
(34) А если пару раз провести?
36 SH_tan
 
10.06.15
15:08
(35) перезаписывает уже имеющийся РС
37 SH_tan
 
10.06.15
15:08
(35) это плохо
38 lEvGl
 
гуру
10.06.15
15:09
Важно понять условие отправки/не отправки. Когда отправлять а когда нет, считается перепроведение уже проведенного необходимостью отправки или нет. Если речь о приходах, то оприходовали, сообщили о материалах и количестве. Через пол часа кладовщик (или кто там) перебивает количество в документе, вопрос - надо отправить заново? Еще через пол часа перебивает в этом же документе дату документа и проводит, вопрос - надо отправить? и тд условий и вариантов много.
А как почистить регистр или добавить новых записей - вопрос последний.
39 SH_tan
 
10.06.15
15:15
(38)
отправляется по времени 3 раза 10-00, 12-00, 16-00

обработка должна запросом выбрать те у которых в Ресурсе стоит Отправлено - Ложь и с Периодом 2 дня
далее формирует Таблицу и передает ее на почту, при этом должна получить РегСведений и поменять его на Отправлено - Истина

то есть кто что там меняет нас не интересует, нам важен факт того что произошло.
40 SH_tan
 
10.06.15
15:16
(39) Таблицу - это то что пришло
41 SH_tan
 
10.06.15
15:18
вообщем вот так подходит

НаборЗаписей = РегистрыСведений.ОтправкаПриходов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Документ.Установить(Ссылка);
    НаборЗаписей.Прочитать();
        
    Если НаборЗаписей.Количество()=0 И РежимЗаписиДокумента.Проведение = РежимЗаписи Тогда  // Нет записи
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Документ = Ссылка;
        НоваяЗапись.Дата = Ссылка.Дата;
        НоваяЗапись.Отправлено = Ложь;
            
        НаборЗаписей.Записать();
    ИначеЕсли РежимЗаписиДокумента.ОтменаПроведения = РежимЗаписи Тогда                        // Есть запись
        Попытка
            //НоваяЗапись = НаборЗаписей.Очистить();
            НаборЗаписей.Записать();
        Исключение;
            ТекстОписаниеОшибки = ОписаниеОшибки();
            ПолноеОписаниеОшибки = "что то не так "+ТекстОписаниеОшибки;
        ВызватьИсключение ТекстОписаниеОшибки;
        КонецПопытки;
    КонецЕсли;
42 butterbean
 
10.06.15
15:19
(41) но так ведь ничего не очищается
43 SH_tan
 
10.06.15
15:19
блин, не подумал если сперва проведут а потом отменять в промежутке времени с 9-00 до 10-00, будут попадать ненужные доки(((
44 SH_tan
 
10.06.15
15:20
(42) как сделать на условие
если у имеющегося РС Отправлено = Истина Тогда ненадо отчищать?
45 floody
 
10.06.15
15:23
вот уж ваистену каша так каша
46 butterbean
 
10.06.15
15:25
(44) проверить первую и единственную запись в набор
47 SH_tan
 
10.06.15
15:26
(46) Если НаборЗаписей.ЭтотОбъект[0].Отправлено Тогда так?
48 SH_tan
 
10.06.15
15:27
(45) если какашка тогда предложи чтобы было не какашка
49 vicof
 
10.06.15
15:28
(45) А мне за констатацию этого факта предупреждение влепили. Демократия, блин.
50 samozvanec
 
10.06.15
15:28
(44) сделай РС периодическим, док пишет отправлено ЛОЖЬ, обработка пишет ИСТИНА, срезом последних получишь, которые надо отправить.
51 samozvanec
 
10.06.15
15:30
(50) к (48)
52 SH_tan
 
10.06.15
15:31
(50) попробую так
53 SH_tan
 
10.06.15
15:34
(50) В пределах года поставить?
а Использовать отбор по периоду в качестве основного - это ставить или не надо?
54 samozvanec
 
10.06.15
15:34
(52) если хочешь фокусы, как в (38), пиши Отправлено = Ложь не датой документа, а текущей датой, когда по условию нужно отправить повторно
55 samozvanec
 
10.06.15
15:35
(53) в пределах секунды ставь, не ошибешься. ставь.
56 SH_tan
 
10.06.15
15:53
(55) при проведении тогда будет много записей с одной и той же приходной накладной, вопрос - зачем?
57 SH_tan
 
10.06.15
15:53
(55) так как переодичность 1 сек и период всегда меняется ТекущаяДата()
58 samozvanec
 
10.06.15
16:00
(56) а ты не каждый раз пиши, а только когда надо отправить. если ты в принципе хочешь отправлять только 1 раз, пиши датой документа
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан