Имя: Пароль:
1C
1С v8
Программно перепровести документы
,
0 Extrim88
 
13.12.12
12:17
Есть документ Поступление автомобилей, у него есть реквизит Автомобиль. запросом отбираю все документы, делающие движения по регистру Остатки автомобилей, в которых есть данный автомобиль.Потом я эти документы пытаюсь перепровести, но проведение не получается, причем никаких ошибок не возникает
1 Extrim88
 
13.12.12
12:17
Код привожу ниже
2 Extrim88
 
13.12.12
12:18
Процедура ПриЗаписи(Отказ)
   дкФормаПриЗаписи(ЭтаФорма,Отказ);
   Если Не Отказ И ЭтотОбъект.Проведен Тогда
       ПерепроведениеДокументов();
   КонецЕсли;    
КонецПроцедуры
3 DrunkAnimal
 
13.12.12
12:18
может без кода?)
4 Extrim88
 
13.12.12
12:18
Процедура ПерепроведениеДокументов() Экспорт
   
   Автомобиль = ЭтотОбъект.Автомобили.ВыгрузитьКолонку("Автомобиль");
   ДатаПоступления = ЭтотОбъект.Дата;
   
   //Отберем документы запросом, делающие движения по регистру Остатки автомобилей, включающие данный автомобиль
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Автомобиль", Автомобиль);
   Запрос.Текст = "ВЫБРАТЬ
                  |    ОстаткиАвтомобилей.Регистратор.Ссылка КАК Регистратор,
                  |    ОстаткиАвтомобилей.Регистратор.Дата КАК Дата,
                  |    ОстаткиАвтомобилей.Автомобиль КАК Автомобиль
                  |ИЗ
                  |    РегистрНакопления.ОстаткиАвтомобилей КАК ОстаткиАвтомобилей
                  |ГДЕ
                  |    ОстаткиАвтомобилей.Автомобиль В(&Автомобиль)";
   
   Выборка = Запрос.Выполнить().Выбрать();
   ДокументыДляПерепроведения = Новый Массив;
   Пока Выборка.Следующий() Цикл
       Если (Выборка.Дата > ДатаПоступления) Тогда
           ДокСсылка = Выборка.Регистратор.ПолучитьОбъект();
           ДокументыДляПерепроведения.Добавить(ДокСсылка);
       КонецЕсли;    
   КонецЦикла;    
   
   Попытка
       Для ид = 0 по ДокументыДляПерепроведения.Количество()-1 Цикл
           ДокументыДляПерепроведения[ид].Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
           Сообщить ("Документ " + ДокументыДляПерепроведения[ид] + " успешно перепроведен!");
       КонецЦикла;
   Исключение;
   КонецПопытки;
   
КонецПроцедуры
5 DrunkAnimal
 
13.12.12
12:19
аааа, при записи перепроведение документов?
6 Defender aka LINN
 
13.12.12
12:19
(0) "проведение не получается, причем никаких ошибок не возникает" - врешь. Нагло, бессовестно, с особым цинизмом
(1) НИНАДА!!!!
7 Defender aka LINN
 
13.12.12
12:19
(4) Спасибо, сблевал.
8 Undefined vs NULL
 
13.12.12
12:20
что говорит отладчег?
9 Wobland
 
13.12.12
12:20
я правильно понял, что автор при проведении одного документа хочет провести целую пачку?
10 Undefined vs NULL
 
13.12.12
12:20
(6)(7) зачем ты пишешь всякое?
11 Extrim88
 
13.12.12
12:20
(7)Рад, что Вам помог)
12 Wobland
 
13.12.12
12:21
(10) всякое - это у Екстрима
13 Undefined vs NULL
 
13.12.12
12:22
(12) да у него вообще цирк
14 Deon
 
13.12.12
12:23
Сотри этот код, удали конфу, выключи комп, выкинь его нахрен.
15 Defender aka LINN
 
13.12.12
12:24
(10) Гоняю, чтобы крылья тренировали.
16 Wobland
 
13.12.12
12:25
+(14) а потом сформулируй задачу одним предложением на русском языке
17 Undefined vs NULL
 
13.12.12
12:30
(15) не взлетит ))
18 Cashtane
 
13.12.12
12:57
Первое:

   Пока Выборка.Следующий() Цикл
       Если (Выборка.Дата > ДатаПоступления) Тогда
           ДокСсылка = Выборка.Регистратор.ПолучитьОбъект();
           ДокументыДляПерепроведения.Добавить(ДокСсылка);
       КонецЕсли;    
   КонецЦикла;

Замени на:

   Пока Выборка.Следующий() Цикл
       Если (Выборка.Дата > ДатаПоступления) Тогда
           ДокументыДляПерепроведения.Добавить(Выборка.Регистратор);
       КонецЕсли;    
   КонецЦикла;

Второе:

   Попытка
       Для ид = 0 по ДокументыДляПерепроведения.Количество()-1 Цикл
           ДокументыДляПерепроведения[ид].Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
           Сообщить ("Документ " + ДокументыДляПерепроведения[ид] + " успешно перепроведен!");
       КонецЦикла;
   Исключение;
   КонецПопытки;

Замени на:
   Попытка
       Для ид = 0 по ДокументыДляПерепроведения.Количество()-1 Цикл
           НовДок = ДокументыДляПерепроведения[ид].ПолучитьОбъект();
           НовДок.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
           Сообщить ("Документ " + ДокументыДляПерепроведения[ид] + " успешно перепроведен!");
       КонецЦикла;
   Исключение;
   КонецПопытки;
20 Cashtane
 
13.12.12
13:00
(19) С быдлокода все начинали.
21 Deon
 
13.12.12
13:02
(20) Это не повод его поддерживать. И у него в ДокументыДляПерепроведения и так объекты живут
22 Cashtane
 
13.12.12
13:07
(21) Ну он понял что надо работать с объектами, но не понял в каком моменте их получить.
23 zva
 
13.12.12
13:16
(0)
Проверку на дату в условие запроса вставть

Попытку внутрь цикла перенеси и в исключении чего-нить напиши, чтоб видеть какой док не провелся

И главное задумайся, что будет когда два пользователя твои чудо-документы Поступление автомобилей откроют, из которых ты перепрведение кучи документов делаешь и просто Ок на форме нажмут, так что в твоей куче документов у них пересечение по автомобилю и по дате получится
24 Cashtane
 
13.12.12
13:20
(0) И научись пользоваться отладчиком. Половина вопросов отпадет.
25 Defender aka LINN
 
13.12.12
13:25
(23) Попытку хоть куда ни засунь, она один хрен транзакцию откатит.
26 Extrim88
 
13.12.12
16:03
Cashtane БОЛЬШОЕ СПАСИБО за наведение на мысль (возможно мой вопрос изначально был и некорректен), потому что только совсем недавно начал писать в 1С. "Знатокам" с маленькой буквы типа  Wobland,Defender aka LINN,Deon,Undefined vs NULL скажу только одно: по Вашим быдлятским советам видно сразу какие вы реально "специалисты" и какой совет можете дать. Да я совсем недавно начал кодить в 1С, да возможно мо
27 Wobland
 
13.12.12
16:04
(26) пример моего совета, пожалуйста
28 Extrim88
 
13.12.12
16:04
мой код никуда не годится, но каждый с чего-то начинал, и хотел бы я посмотреть реально на те "шедевры", которые вы пишете
29 cw014
 
13.12.12
16:05
(28) Докузнища могу сбросить
30 Wobland
 
13.12.12
16:05
(28) первое, что под руку попалось: Отказ=-Источник.Проведен()+1;
31 Extrim88
 
13.12.12
16:06
(27)"Пожалуйста"? не льстите себе
32 Wobland
 
13.12.12
16:06
(31) чо?
33 le_
 
13.12.12
16:06
(28) Не бузи ) Книжки лучше почитай, слушай, что говорят и _думай_ )
34 Wobland
 
13.12.12
16:06
и речь тут не о коде, а о подходе в основном
35 Extrim88
 
13.12.12
16:10
(34)подход у каждого свой. восприятие этого подхода у всех разное
36 le_
 
13.12.12
16:15
(35) Когда рабочая база загнется из-за криво написанной обработки проведения, и когда бухгалтера и экономисты с вилами придут, тогда будет повод задуматься о подходе, оптимизации, стиле, общих принципах и восприятии всего этого.
37 Extrim88
 
13.12.12
16:26
(36)повод всегда есть.рад за вас, если вы все изменения сразу делаете на рабочей базе, лично я сначала снимаю с нее копию. и вот опять все упирается в ПОДХОД)))
38 le_
 
13.12.12
16:32
(37) В копии тестировать - это хорошо.
39 Extrim88
 
13.12.12
16:38
(38)Да и не только тестировать
40 Wobland
 
13.12.12
17:04
и вроде знает, что дятел, но воспитыванию не поддаётся. тяжёлый случай
41 Nenaviwu1c20
 
13.12.12
17:59
Процедура ПерепроведениеДокументов() Экспорт
   
       

   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Автомобиль", ЭтотОбъект.Автомобили.ВыгрузитьКолонку("Автомобиль"));
   Запрос.УстановитьПараметр("Дата",ЭтотОбъект.Дата);
   Запрос.Текст = "ВЫБРАТЬ
                  |    ОстаткиАвтомобилей.Регистратор.Ссылка КАК Регистратор,
                  |    ОстаткиАвтомобилей.Регистратор.Дата КАК Дата,
                  |    ОстаткиАвтомобилей.Автомобиль КАК Автомобиль
                  |ИЗ
                  |    РегистрНакопления.ОстаткиАвтомобилей КАК ОстаткиАвтомобилей
                  |ГДЕ
                  |    ОстаткиАвтомобилей.Автомобиль В(&Автомобиль)
                  |    И ОстаткиАвтомобилей.Регистратор.Дата>&Дата";
   
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
           ДокСсылка = Выборка.Регистратор.ПолучитьОбъект();
           Попытка
           ДокСсылка.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Сообщить ("Документ " + ДокСсылка + " успешно перепроведен!");
    Исключение
         Сообщить ("Не удалось провести " + ДокСсылка);
     КонецПопытки;
     
   КонецЦикла;    
   
   

КонецПроцедуры
42 Nenaviwu1c20
 
13.12.12
18:00
Попробуй так лучше будет думаю
43 Nenaviwu1c20
 
13.12.12
18:11
А так все норм все начинали с быдло-кода)
44 unregistered
 
13.12.12
19:09
(26) >> видно сразу какие вы реально "специалисты" и какой совет можете дать

Вот так взять и просто обоsрать тех людей (коих тут реально мало), кто действительно является специалистами и дают на форуме нормальные советы.
45 prog0101
 
13.12.12
20:41
46 Extrim88
 
14.12.12
09:08
(44)я не говорю про всех, только про некоторых отдельных "деятелей". не спорю, что здесь есть очень хорошие специалисты, которые дают хорошие советы, и их действительно мало. Не говорю за себя, что я что-то из себя представляю в 1С, но по крайней мере первый не грублю людям, которые мало пока разбираются в чем-то.
(40)вы бы себя лучше воспитывали в общении, судя по которому можно сказать, что дятел это больше про вас
47 Defender aka LINN
 
14.12.12
10:34
(46) И кто ж тебя, пернатый, обидел? Мало разбираешься? Ну так сиди и изучай, вкюлчай моск. Выложил кусок гуано на общее обозрение - будь готов, что натыкают носом.

Вообще, аргумент про "я только начал" - это детский сад. Занялся делом - делай и не ной. А то я уже прямо вижу, как пилот самолета разбивает его при посадке и потом рассказывает выжившим пассажирам, что "та я только недавно начал, с кем не бывает"
48 Extrim88
 
14.12.12
16:21
(47)вопрос не в том, что гуано- не гуано, вопрос в том, какое  право например ты и другие могут тут позволять себе называть людей "пернатыми", "дятлами" и т.д. Наверно, тебя так много тыкали носом в твое же "гуано", что ты теперь тут такой "смелый". Обычно грамотные, образованные люди не позволяют себе такого общения. Думаешь, вот ты сидишь на этом форуме 6 с лишним лет, и можешь так общаться, "пилот того самого самолета"
49 Defender aka LINN
 
14.12.12
16:24
(48) Именно поэтому тебя и называют дятлом. За неадекватную реакцию. Это интернеты, тут тебе, такому красивому, но не сильно умному, никто ничем не обязан.
"Обычно грамотные, образованные люди не позволяют себе такого общения" - это тебе в детском саду рассказывали? Реальность несколько суровее :)
50 Extrim88
 
14.12.12
16:31
(48)"Реальный" ты наш, реальность портят как раз кучка таких как ты дерзких людей. а ты такой шибко умный, чтобы судить об уме других?:)
51 Pro-tone
 
модератор
14.12.12
16:44
Defender aka LINN, спору нет все начинали с г-нокода, и ты думаю не исключение. Тебе самому не думаю чтобы нравилось когда тебе писали что-то типа "надо за такой код руки оторвать и в задницу обрубки засунуть". Так что прибери свои сравнения и выражения такие как в (19). Иначе есть повод тебя обсудить в другой ветке.
52 Defender aka LINN
 
14.12.12
16:50
(51) Нет, мой код был идеален с самого начала :)
Есть повод - обсуждай, в чем проблема?

(50) А на мой взгляд, реальность портят люди, которые лезут в профессию не имея к этому ни способностей, ни знаний.
53 Extrim88
 
14.12.12
16:55
(52)Ну выложи пример своего "идеального" кода - пообсуждаем все вместе :) я вот например свое гуано выложил, мне не в па..лу было :)
54 Extrim88
 
14.12.12
17:10
(53):)что и требовалось доказать
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn