Имя: Пароль:
1C
 
Программно созданные документы не проводятся
0 lion366
 
10.06.10
13:49
Добрый день!

Есть обработка кот создает документы. После заполнения реквизитов выполняется код

Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);

Ошибок никак не появляется, но документы не сохраняются и не проводятся

Если в форме нажать кнопку "Провести", появляется такая ошибка:

"{Документ.БлабЛа.Форма.ФормаДокумента(50)}: Ошибка при установке значения атрибута контекста (Изменил): Документ не выбран
   Изменил=глТекущийПользователь;
по причине:
Документ не выбран"

В чем ошибка понять не могу, переменная заполнена, тип совпадает.

Помогите кто знает!!!
1 Maxus43
 
10.06.10
13:52
точку останова в строке 50 поставь, отладчик врать не будет
2 bask
 
10.06.10
13:56
"Изменил" - реквизит документа? переменную с таким именем не объявлял в модуле?
3 bask
 
10.06.10
13:57
и вообще побольше бы кода для анализа
4 Ненавижу 1С
 
гуру
10.06.10
13:58
Ошибок никак не появляется, но документы не сохраняются и не проводятся

все делается в попытке/исключении?
5 lion366
 
10.06.10
13:59
код передзаписью документа

Изменил=глТекущийПользователь;
   ЭлементыФормы.ВерхняяПанельФормы.Кнопки.Автор.Текст="Создал: "+Автор+". Изменил: "+Изменил;

ошибка вылазит когда выполняеться присвоение. "Изменил" это реквизит, тип справочникссылка.пользователи. переменная "глТекущийПользователь" того же типа. реквизит заполнен
6 lion366
 
10.06.10
14:01
Попытку не использую, т.к. это в модуле формы. я только обработку трогаю(внешняя)

Еще такой момент: если вручную документ создавать то проводится нормально
7 bask
 
10.06.10
14:06
а что перед
Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
?
8 lion366
 
10.06.10
14:10
там идет заполнение реквизитов, установка даты (прошлой), номера :


   Док.Организация = СтрОрг.Организация;                                                    
   Док.Дата = (формат(НаборЗаписей.Fields("aDay").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aMonth").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aYear").Value, "ЧЦ=2; ЧВН=" )+" 00:00:00");
   Док.Автор = ПараметрыСеанса.ТекущийПользователь.Ссылка;
   Док.Изменил = ПараметрыСеанса.ТекущийПользователь.Ссылка;
   Док.Количество = НаборЗаписей.Fields("aIn").Value;
   Док.Комментарий = ТекущаяДата();
       док.УстановитьНовыйНомер(Док.Организация.Префикс);
9 bask
 
10.06.10
14:13
блин, а где Док объявляется и чему присваивается? еще коду, да побольше :)
10 ASU_Diamond
 
10.06.10
14:13
а если кнопку не "провести", а "записать" нажать?
11 Mitriy
 
10.06.10
14:13
+ "Если в форме нажать кнопку "Провести", появляется такая ошибка:" - откуда форма взялась?
12 ASU_Diamond
 
10.06.10
14:16
(11) кстати да, если документы не сохранялись, откуда форма появилась?
13 lion366
 
10.06.10
14:16
создаю документ:
док = документы.блабла.СоздатьДокумент();

с записыванием ошибка такаяже

А вот так показываю форму:
Док.ПолучитьФорму("ФормаДокумента").Открыть();
14 Ненавижу 1С
 
гуру
10.06.10
14:17
(13) переменная Док после этого не меняется?
15 lion366
 
10.06.10
14:17
можно документ не записывать а сразу формы показать, он тогда как новый идет и при закрытии спрашивает сохранять или нет
16 ASU_Diamond
 
10.06.10
14:18
(13) на кнопке "провести" запись висит?
17 lion366
 
10.06.10
14:18
нет только реквизиты его. все это делается в цикле
18 lion366
 
10.06.10
14:19
(15) что это значит? про обработчик проведения?? если да то нет ничего там, только перед записью из 2х строк
19 Mitriy
 
10.06.10
14:19
(17) да покажи ты весь код уже... или стесняешься?
20 bask
 
10.06.10
14:20
между

док = документы.блабла.СоздатьДокумент();

и

Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);

есть открытие формы? сама переменная док нигде не переопределяется? да вообще много чего может быть.

+(19) не боись, покажи
21 lion366
 
10.06.10
14:21
Пока НЕ НаборЗаписей.eof Цикл

Если (НаборЗаписей.Fields("aIn").Value > 0) И (НаборЗаписей.Fields("aOut").Value > 0) Тогда

Сообщить("   "+Строка(НаборЗаписей.Fields("ID_Enter").Value)+"  "+Строка(НаборЗаписей.Fields("aIn").Value)+" "+Строка(НаборЗаписей.Fields("aOut").Value));


СтрОрг = Счетчики.Найти(Строка(НаборЗаписей.Fields("ID_Enter").Value),"Идентификатор");
Если строрг<>Неопределено и строрг.получать тогда
док = документы.КоличествоПокупателей.СоздатьДокумент();

ИначеЕсли строрг=Неопределено тогда
Сообщить("Для идентификатора " + Строка(НаборЗаписей.Fields("ID_Enter").Value) + " не найдена организация");
перейти ~метка1;
КонецЕсли;
Док.Организация = СтрОрг.Организация;                                                    
Док.Дата = (формат(НаборЗаписей.Fields("aDay").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aMonth").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aYear").Value, "ЧЦ=2; ЧВН=" )+" 00:00:00");
//   сообщить(формат(НаборЗаписей.Fields("aDay").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aMonth").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aYear").Value, "ЧЦ=2; ЧВН=" )+" 00:00:00");
Док.Автор = ПараметрыСеанса.ТекущийПользователь.Ссылка;
Док.Изменил = ПараметрыСеанса.ТекущийПользователь.Ссылка;
Док.Количество = НаборЗаписей.Fields("aIn").Value;
Док.Комментарий = ТекущаяДата();
               док.УстановитьНовыйНомер(Док.Организация.Префикс);
//док.Ссылка = док.ПолучитьСсылкуНового();
//Если Сохранять или Проводить Тогда
//Док.Записать(РежимЗаписиДокумента.Запись,РежимПроведенияДокумента.Неоперативный);
//                КонецЕсли;
Если Проводить Тогда
Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
               КонецЕсли;
Если Показывать или Док.Организация.Пустая() Тогда
Док.ПолучитьФорму("ФормаДокумента").Открыть();
               КонецЕсли;

КонецЕсли;
~метка1:НаборЗаписей.MoveNext();
Инт = Инт+1;
КонецЦикла;
22 bask
 
10.06.10
14:22
(21) OMG, хоть отформатируй и быстро спрячь метку, а то убьют
23 asyr83
 
10.06.10
14:23
~метка1 o_0
24 lion366
 
10.06.10
14:23
дааа я не такой ка к все))))
25 ASU_Diamond
 
10.06.10
14:23
а после создания документа его записывать не надо?
26 lion366
 
10.06.10
14:27
Для удобства:

Пока НЕ НаборЗаписей.eof Цикл
  Если (НаборЗаписей.Fields("aIn").Value > 0) И    (НаборЗаписей.Fields("aOut").Value > 0) Тогда

     СтрОрг = Счетчики.Найти(Строка(НаборЗаписей.Fields("ID_Enter").Value),"Идентификатор");
     Если строрг<>Неопределено и строрг.получать тогда
        док = документы.КоличествоПокупателей.СоздатьДокумент();
     ИначеЕсли строрг=Неопределено тогда
        Сообщить("Для идентификатора " + Строка(НаборЗаписей.Fields("ID_Enter").Value) + " не найдена организация");
        перейти ~метка1;
     КонецЕсли;
     Док.Организация = СтрОрг.Организация;                                                    
     Док.Дата = (формат(НаборЗаписей.Fields("aDay").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aMonth").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aYear").Value, "ЧЦ=2; ЧВН=" )+" 00:00:00");
     Док.Автор = ПараметрыСеанса.ТекущийПользователь.Ссылка;
     Док.Изменил = ПараметрыСеанса.ТекущийПользователь.Ссылка;
     Док.Количество = НаборЗаписей.Fields("aIn").Value;
     Док.Комментарий = ТекущаяДата();
     Док.УстановитьНовыйНомер(Док.Организация.Префикс);

     Если Проводить Тогда
        Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
     КонецЕсли;
     Если Показывать или Док.Организация.Пустая() Тогда
        Док.ПолучитьФорму("ФормаДокумента").Открыть();
     КонецЕсли;

  КонецЕсли;
~метка1:НаборЗаписей.MoveNext();
  Инт = Инт+1;
КонецЦикла;
27 akronim
 
10.06.10
14:27
(24) "То, чот ты не такой как все, не означает, что ты на что-то годен". Цитата. Ничего личного.
28 lion366
 
10.06.10
14:28
(25) необязательно. Будет в уме
29 bask
 
10.06.10
14:29
если без меток, то так:

Пока НЕ НаборЗаписей.eof Цикл
   Если (НаборЗаписей.Fields("aIn").Value > 0) И (НаборЗаписей.Fields("aOut").Value > 0) Тогда
       
       СтрОрг = Счетчики.Найти(Строка(НаборЗаписей.Fields("ID_Enter").Value),"Идентификатор");
       Если строрг<>Неопределено и строрг.получать тогда
           док = документы.КоличествоПокупателей.СоздатьДокумент();
           
       ИначеЕсли строрг=Неопределено тогда
           Сообщить("Для идентификатора " + Строка(НаборЗаписей.Fields("ID_Enter").Value) + " не найдена организация");
           НаборЗаписей.MoveNext();
           Инт = Инт+1;
           Продолжить;
       КонецЕсли;
       Док.Организация = СтрОрг.Организация;                                                    
       Док.Дата = (формат(НаборЗаписей.Fields("aDay").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aMonth").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aYear").Value, "ЧЦ=2; ЧВН=" )+" 00:00:00");
       Док.Автор = ПараметрыСеанса.ТекущийПользователь.Ссылка;
       Док.Изменил = ПараметрыСеанса.ТекущийПользователь.Ссылка;
       Док.Количество = НаборЗаписей.Fields("aIn").Value;
       Док.Комментарий = ТекущаяДата();
       док.УстановитьНовыйНомер(Док.Организация.Префикс);
       Если Проводить Тогда
           Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
       КонецЕсли;
       Если Показывать или Док.Организация.Пустая() Тогда
           Док.ПолучитьФорму("ФормаДокумента").Открыть();
       КонецЕсли;
       
   КонецЕсли;
   НаборЗаписей.MoveNext();
   Инт = Инт+1;
КонецЦикла;
30 Ненавижу 1С
 
гуру
10.06.10
14:29
открывается за раз куча форм?
31 lion366
 
10.06.10
14:30
(24) но и переделывать все я тоже смысла не вижу. Вот когда наступлю на граблю, тогда и отрекусь от меток
32 bask
 
10.06.10
14:30
по ходу так
33 bask
 
10.06.10
14:30
(32) к (30)
34 lion366
 
10.06.10
14:30
(30) если пользователь хочет, то пусть смотрит, нет так у него галочка есть
35 RomaH
 
naïve
10.06.10
14:31
у тебя это все в попытке?
ошибок не выводит потому как
36 RomaH
 
naïve
10.06.10
14:31
Попытка
       Если Проводить Тогда
           Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
       КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки
37 RomaH
 
naïve
10.06.10
14:32
что в процедурах про запись документа?
т.е. в модуле дока .. не помню - что-то типа ПередЗаписью ПриЗаписи
38 bask
 
10.06.10
14:33
есть ситуации когда ни одно из условий не выполняется в:

Если строрг<>Неопределено и строрг.получать тогда

ИначеЕсли строрг=Неопределено тогда

конецесли;

?
39 hhhh
 
10.06.10
14:33
может дата кривая? Куда-нибудь в 31-й век попадают документы.
40 lion366
 
10.06.10
14:34
Было в попытке, но без нее все работает аналогично.

Есть только ПередЗаписью в модуле формы:
Изменил=глТекущийПользователь;
ЭлементыФормы.ВерхняяПанельФормы.Кнопки.Автор.Текст="Создал: "+Автор+". Изменил: "+Изменил;


Модуль документа вообще пустой
41 ASU_Diamond
 
10.06.10
14:34
Док.ПолучитьФорму("ФормаДокумента").Открыть();
на этом разве останавливается выполнение программы?
42 Serg_1960
 
10.06.10
14:35
(просто так, любопытно, как автор думает) Что происходит после строки?

Док.ПолучитьФорму("ФормаДокумента").Открыть()
43 RomaH
 
naïve
10.06.10
14:36
мда, алгоритм вообще кривой
Пока НЕ НаборЗаписей.eof Цикл
   Если (НаборЗаписей.Fields("aIn").Value > 0) И (НаборЗаписей.Fields("aOut").Value > 0) Тогда
       
       СтрОрг = Счетчики.Найти(Строка(НаборЗаписей.Fields("ID_Enter").Value),"Идентификатор");
       Если строрг<>Неопределено и строрг.получать тогда
           док = документы.КоличествоПокупателей.СоздатьДокумент();
           Сообщить("Создали новый док");
       ИначеЕсли строрг=Неопределено тогда
           Сообщить("Для идентификатора " + Строка(НаборЗаписей.Fields("ID_Enter").Value) + " не найдена организация");
           НаборЗаписей.MoveNext();
           Инт = Инт+1;
           Продолжить;
       КонецЕсли;
       Док.Организация = СтрОрг.Организация;                                                    
       Док.Дата = (формат(НаборЗаписей.Fields("aDay").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aMonth").Value, "ЧЦ=2; ЧВН=" )+"."+формат(НаборЗаписей.Fields("aYear").Value, "ЧЦ=2; ЧВН=" )+" 00:00:00");
       Док.Автор = ПараметрыСеанса.ТекущийПользователь.Ссылка;
       Док.Изменил = ПараметрыСеанса.ТекущийПользователь.Ссылка;
       Док.Количество = НаборЗаписей.Fields("aIn").Value;
       Док.Комментарий = ТекущаяДата();
       док.УстановитьНовыйНомер(Док.Организация.Префикс);
       Если Проводить Тогда
           Сообщить("попытались провести док");
Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
       КонецЕсли;
       Если Показывать или Док.Организация.Пустая() Тогда
           Док.ПолучитьФорму("ФормаДокумента").Открыть();
       КонецЕсли;
       
   КонецЕсли;
   НаборЗаписей.MoveNext();
   Инт = Инт+1;
КонецЦикла;

что в окне сообщений после выполнения?
44 lion366
 
10.06.10
14:37
(39) дата в документ садиться
45 lion366
 
10.06.10
14:37
(38) условие работает как надо
46 bask
 
10.06.10
14:37
(45) да, я прогнал, сорри
47 lion366
 
10.06.10
14:38
(41) (42) идет дальше, просто открываются формы документов
48 RomaH
 
naïve
10.06.10
14:39
короче - точку останова за записи - и смотреть ссылку в объекте после записи
49 lion366
 
10.06.10
14:39
(43) а там вы товарищ срочку добавили
Сообщить("Создали новый док");
50 lion366
 
10.06.10
14:40
(43) по вашему напишет что создали документ (2 раза в моем случае)
51 RomaH
 
naïve
10.06.10
14:40
(49) и ? я там две строчки добавил - посмотреть ка в условия заходит
52 RomaH
 
naïve
10.06.10
14:41
почему два раза?
53 lion366
 
10.06.10
14:41
(48) вот тут еще интересный момент. ссылка то пустая, хоть до хоть после. но и когда вручную делаю тоже(хотя тогда проводиться)
54 lion366
 
10.06.10
14:44
(51)(52) инт вообще только для того чтобы потом сказать сколько сделали.
никакой нагрузки смысловой

2 раза т.к. по условию и по наличию данных. на это тоже не стоит обращать внимания
55 RomaH
 
naïve
10.06.10
14:46
... ты давай сюда выложи сообщение которое выводится при выполнении кода из (43)
56 lion366
 
10.06.10
14:46
(43) это не пойдет мне, т.к. если он не нашел то надо просто показать документ с незаполненным реквизитом(тем который ненашли). а по вашей методике мы это пропустим
57 hhhh
 
10.06.10
14:47
(53) вот это шокирует

    Если строрг<>Неопределено и строрг.получать тогда
        док = документы.КоличествоПокупателей.СоздатьДокумент();

то есть получается, если строрг.получать не равно ИСТИНА у тебя вообще получается бред. Документы не создаются, а формы открываются тем не менее.
58 lion366
 
10.06.10
14:49
(55)


Для идентификатора 2~474~160 не найдена организация
//тут еще куча аналогичных строк
Создали новый док
попытались провести док
Создали новый док
попытались провести док
Для идентификатора 660~295~818 не найдена организация
59 lion366
 
10.06.10
14:50
(55)создаем новый док только 2 раза т.к. тока 2 галочки.

апочему я In не использую
60 lion366
 
10.06.10
14:51
(53) читать внимательней, там сразу за этим переход на метку где все пропущено уже
61 hhhh
 
10.06.10
14:52
(58) а как ищешь организацию? Что-то в коде нет этого поиска.
62 lion366
 
10.06.10
14:52
(60)для (57) ответ
63 ASU_Diamond
 
10.06.10
14:52
(53) до записи ссылка и должна быть пустая, а вот то что после пустая - это уже что-то нездоровое
у тебя в модуле документа (не формы документа) точно ничего нет?
64 lion366
 
10.06.10
14:53
(58) организация сидит в таблице, в ней я и ищю
СтрОрг = Счетчики.Найти(Строка(НаборЗаписей.Fields("ID_Enter").Value),"Идентификатор");
65 ASU_Diamond
 
10.06.10
14:54
(60) Если у тебя
строрг.получать=Ложь
то в строрг=Неопределено не зайдет
66 lion366
 
10.06.10
14:54
(63) совсем пусто там
67 ASU_Diamond
 
10.06.10
14:54
(66) а модуль проведения тогда где?
68 hhhh
 
10.06.10
14:56
(62) сам вчитайся повнимательнее в код: переход на метку у тебя идет только если СтрОрг = Неопределено. Вник?
69 bask
 
10.06.10
14:57
(65) пипец, тогда я не прогнал в (38)
70 lion366
 
10.06.10
14:58
(65)
  Если строрг<>Неопределено и строрг.получать тогда
     док = документы.КоличествоПокупателей.СоздатьДокумент();
           
  ИначеЕсли строрг=Неопределено  или не строрг.получать тогда
     Сообщить("Для идентификатора " + Строка(НаборЗаписей.Fields("ID_Enter").Value) + " не найдена организация");
     НаборЗаписей.MoveNext();
     Инт = Инт+1;
     Продолжить;
  КонецЕсли;

Тут был касяк, согласен. но он выявлялся только когда мы галочки снимали. а я этого не делал
71 lion366
 
10.06.10
14:59
(68) да нашол, но опять же в этом случае этого не случалось
72 lion366
 
10.06.10
15:02
(67) есть общий модуль, там событие ПередЗаписьюДокументовПередЗаписью

сейчас его ковырну досканально
73 ASU_Diamond
 
10.06.10
15:03
(71) без
           Док.ПолучитьФорму("ФормаДокумента").Открыть();
пробовал?
74 lion366
 
10.06.10
15:04
(73) конечно, на форме есть галочка которая рулит показывать или нет. эффект одинаковый
75 lion366
 
10.06.10
15:21
(72) модуль посмотрел, ничего интересного одни если и все проскакиваю
76 hhhh
 
10.06.10
15:31
а Основной реквизит формы какой у тебя там задан?
77 lion366
 
10.06.10
15:35
(76) непонял что значит основной реквизит. Думаю это наименование

а может ли быть касяк изза того что я через 1 переменную прогоняю все документы?
т.е. когда второй документ фактически перекрывает первый
78 hhhh
 
10.06.10
15:39
(77) нет - это объект документ - другими словами "контекст", который у тебя теряется в строке 50.
79 lion366
 
10.06.10
15:42
еще такой момент: после проведения ссылка заполнена и флажок проведен у документа стоит, а в списке документов его нет
80 hhhh
 
10.06.10
15:47
(79) это внутри транзакции, а если потом отмена тразакции: Отказ = Истина; то всё херится. Откатывается назад.
81 lion366
 
10.06.10
15:57
!!!!!!!!!!!!!!!!!!!ВСЕ!!!!!!!!!!!!!!!!!!!!!!!

трабл был в транзакции. ПоЛучаеться я начинал транзакцию, но не заканчивал!

перемудрил одним словом
82 lion366
 
10.06.10
15:58
Всем участвующим спасибо за содействие. Отдельное спасибо уважаемому hhhh, за наводку на мысль!