Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Операции и проводки
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
НатальяНаталья
Конфигурация 7.7 Хозрасчетная буз. 504 релиз. Хочу в существующие операции, созданные документом ПутевойЛист(нетиповой,созданный программистом) проставить значения субконто. Раньше они были пустыми. Но не получается, выдает ошибку, что нельзя изменять записанные операции. Пробовала программно пометить на удаление,выключить проводки и т. д.. но ничего не помогает. ЭПодскажите пожалуйста. что я делаю не так.
Код текста прилагаю:

Процедура ЗаполнитьТопливо() 
Опер=СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ");
Пока Опер.ПолучитьОперацию()=1 Цикл
    опер.ВыбратьПроводки();
    Пока Опер.Получитьпроводку()=1 Цикл
        Опер.ВключитьПроводки(0);
        //Опер.Удалить(0);
        //Опер.СнятьПометкуУдаления();
        Если Опер.Дебет.Счет=счетпокоду("АМ") тогда
            тз1.ВыбратьСтроки();
            Пока тз1.получитьстроку()=1 Цикл
                Если тз1.Авто=Опер.Дебет.Автомобили  тогда
                    Опер.Дебет.Материалы = тз1.Топливо;
                    прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;    
        Если Опер.Кредит.Счет=счетпокоду("АМ") тогда
            тз1.ВыбратьСтроки();
            Пока тз1.получитьстроку()=1 Цикл
                Если тз1.Авто=Опер.Кредит.Автомобили  тогда
                    Опер.Кредит.Материалы = тз1.Топливо;
                    прервать;
                КонецЕсли;
            КонецЦикла;
            
        КонецЕсли;
        Опер.ВключитьПроводки(1);
        
    КонецЦикла;
    
КонецЦикла;

Конецпроцедуры
Acid
включить/выключить проводки - дело бесполезное.
а где команда Операция.Записать(); ?
НатальяНаталья
Цитата(Acid @ 28.04.11, 10:56) необходимо зарегистрироваться для просмотра ссылки
включить/выключить проводки - дело бесполезное.
а где команда Операция.Записать(); ?



Ошибка выдается на строке:
Опер.Дебет.Материалы = тз1.Топливо;
т.е. до операция. записать(), дело не доходит. Но на всякий случай попробую
Acid
Опер.Дебет.Субконто1=тз1.Склад;
Опер.Дебет.Субконто2=тз1.Топливо;
НатальяНаталья
Цитата(Acid @ 28.04.11, 13:15) необходимо зарегистрироваться для просмотра ссылки
Опер.Дебет.Субконто1=тз1.Склад;
Опер.Дебет.Субконто2=тз1.Топливо;

Спасибо,что навели на мысль. Теперь возникает другая ошибка.
Поле агрегатного объекта не обнаружено (Субконто2)
хотя в отладчике выдает ТипЗначенияСтр(Опер.Дебет.Материалы) = "Справочник", а это и есть субконто2.
Может быть я изначально не то делаю?
Дело в том , что ч добавила к забалансовому счету АМ еще одно субконто. Было Субконто1: автомобили, а добавила субконто2: материалы, свернула базу и хотела пернести все остатки с пустого субконто2 на нужные мне. Но почему то не получается . Помогите пожалуйста насколько это возможно.
Ziam
Бросьте самодеятельность, обратитесь сразу к специалисту. Ибо (из опыта) потом будет дороже это стоить.
Почему? Я так понимаю, слова "Вид субконто" и какой тип оно имеет вам ничего не скажут. Плюс возникнет вопрос с зависшими суммами на пустом субконто 2 (но у вас вроде есть план, как с этим бороться).
В общем резюме: не лезьте туда, где ничего не понимаете. С последующими уточняющими вопросами на форумах, думаю, вас просто отправят изучать мат часть. Да и разжовывать основы людям, которые далеки от программирования 1С никто не будет.
НатальяНаталья
Цитата(Ziam @ 28.04.11, 14:00) необходимо зарегистрироваться для просмотра ссылки
Бросьте самодеятельность, обратитесь сразу к специалисту. Ибо (из опыта) потом будет дороже это стоить.
Почему? Я так понимаю, слова "Вид субконто" и какой тип оно имеет вам ничего не скажут. Плюс возникнет вопрос с зависшими суммами на пустом субконто 2 (но у вас вроде есть план, как с этим бороться).
В общем резюме: не лезьте туда, где ничего не понимаете. С последующими уточняющими вопросами на форумах, думаю, вас просто отправят изучать мат часть. Да и разжовывать основы людям, которые далеки от программирования 1С никто не будет.

Тип субконто- справочник материалы. Буду благодарна за любой ответ.
Acid
ну или так: Опер.Дебет.Субконто(2)=тз1.Топливо;
НатальяНаталья
Цитата(Acid @ 28.04.11, 14:19) необходимо зарегистрироваться для просмотра ссылки
ну или так: Опер.Дебет.Субконто(2)=тз1.Топливо;

Опер.Дебет.Субконто(2) <<?>>= тз1.Топливо;
{(72)}: Неопознанный оператор
Может в 7.7 вообще нельзя программно изменять уже ранее записанные проводки? Или надо к ним обращаться через документ?
В конфигураторе в операции поставила -разрешено редактировать операции документа. Может еще какие-нибудь настройки существуют?
Acid
все-таки Опер.Дебет.Субконто2=тз1.Топливо;
только перед этой операцией нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.

разжевал как мог.
НатальяНаталья
Цитата(Acid @ 28.04.11, 14:55) необходимо зарегистрироваться для просмотра ссылки
все-таки Опер.Дебет.Субконто2=тз1.Топливо;
только перед этой операцией нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.

разжевал как мог.

Второе субконто есть , т.к. в бухитогах оно прекрасно учавствует и выдает по нему и СКК и СКД () и показывает его тип , и в данной обработке показывает его значение в отладчике :Опер.Дебет.ПредставлениеСубконто(2) = "<...>". и еще так :Опер.ПредставлениеСубконто() = "ЗИЛ - 4331 №Е-701 св<...>"
А на счет совпадения с тз, уже делала так:
спр=СоздатьОбъект("Справочник.Материалы");
Если спр.НайтиПоНаименованию(Строка(СокрЛП(тз1.Топливо.Наименование)),0,1) =1 тогда
топливо=спр.ТекущийЭлемент();
КонецЕсли;
Опер.Дебет.Материалы = топливо;
Спасибо, что не бросаете меня,а пытаетесь помочь!
Acid
вы считаете, что у вашей операции одна проводка?
igmig65
Цитата
Дебет.<Субконто>
Синтаксис:
Дебет.<Субконто>
Назначение:
Атрибут служит для доступа к cубконто дебета проводки (корреспонденции) выбранной операции, где
<Субконто> - название cубконто счета дебета, как оно задано в конфигураторе.

Если у вас ВидСубконто имеет тип "Справочник.Материалы", то как он задан в коф-ре, если Материалы, то:
Опер.Дебет.Материалы=тз1.Топливо;
это 1 вариант.
а вот 2:
Цитата
Дебет.Субконто(<?>,)
Синтаксис:
Дебет.Субконто(<НомерСубконто>|<ВидСубконто>,<Субконто>)
Назначение:
Обращение к субконто дебета проводки (корреспонденции) операции. Если при использовании метода Субконто первым параметром передается порядковый номер субконто или вид субконто, то метод возвратит значение субконто, имеющего этот номер. Если вторым параметром передается значение субконто, метод присваивает указанное значение виду субконто проводки.
Возвращает: если указан порядковый номер вида субконто или вид субконто, метод возвращает значение типа ''ВидСубконто''.
Параметры:
<НомерСубконто> - числовое выражение - порядковый номер субконто. По умолчанию 1.
<ВидСубконто> - значение типа ''ВидСубконто'', которое должно быть установлено. Необязательный параметр.
<Субконто> - значение субконто. Параметр необязательный. Если параметр не задан - значение не изменяется.

Соответственно, если это 2 субконто, то
Опер.Дебет.Субконто(2,тз1.Топливо);
ну и Записать() конечно
НатальяНаталья
Цитата(Acid @ 28.04.11, 15:27) необходимо зарегистрироваться для просмотра ссылки
вы считаете, что у вашей операции одна проводка?

нет не одна . Я перебираю проводки :
опер.ВыбратьПроводки();
Пока Опер.Получитьпроводку()=1 Цикл
Но дело в том , что он спотыкается на первой записи
Опер.Дебет.Материалы = топливо;

и выдает ошибку: Нельзя изменять записанные проводки!
Я писала и Опер.Записать(); и Опер.Записатьпроводки() . но до этих строк даже не доходит.
НатальяНаталья
Цитата(igmig65 @ 28.04.11, 15:34) необходимо зарегистрироваться для просмотра ссылки
Если у вас ВидСубконто имеет тип "Справочник.Материалы", то как он задан в коф-ре, если Материалы, то:
Опер.Дебет.Материалы=тз1.Топливо;
это 1 вариант.
а вот 2:

Соответственно, если это 2 субконто, то
Опер.Дебет.Субконто(2,тз1.Топливо);
ну и Записать() конечно

Опять выдает ту же ошибку: Опер.Дебет.Субконто(2,тз1.Топливо);
{E:\............\EXTFORMS\ТОПЛИВО АВТОМОБИЛЕЙ.ERT(77)}: Нельзя изменять записанные проводки!
igmig65
Цитата
Опер.Дебет.Субконто(2,тз1.Топливо);

ошибка вываливается на этой строке?
полностью код от создания операции в студию плиз
Acid
Цитата(НатальяНаталья @ 28.04.11, 15:35) необходимо зарегистрироваться для просмотра ссылки
нет не одна . Я перебираю проводки :
опер.ВыбратьПроводки();
Пока Опер.Получитьпроводку()=1 Цикл
Но дело в том , что он спотыкается на первой записи
Опер.Дебет.Материалы = топливо;

и выдает ошибку: Нельзя изменять записанные проводки!
Я писала и Опер.Записать(); и Опер.Записатьпроводки() . но до этих строк даже не доходит.

ну если вы считаете, что спотыкается на первой (а вы ошибаетесь), то первая проводка у вас какая?
поэтому то и нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.
и кто так значения из тз выбирает???
должно быть примерно так:
если опер.дебет.счет.Количествосубконто()>1 Тогда
Если Опер.Дебет.Субконто(2).Вид()=тз1.ПолучитьЗначение(н,"Топливо").Вид() тогда
Опер.Дебет.Субконто(2)=тз1.ПолучитьЗначение(н,"Топливо");
конецесли;
конецесли;

где н - это номер строки в тз. соответственно. нужно или до этого спозиционироваться на ваше топливо, или встраивать цикл по тз.
igmig65
я тоже подозреваю, что присваивается субконто не там где нужно, тоесть где его нет вообще или другой вид
НатальяНаталья
Цитата(igmig65 @ 28.04.11, 15:46) необходимо зарегистрироваться для просмотра ссылки
ошибка вываливается на этой строке?
полностью код от создания операции в студию плиз


Процедура ЗаполнитьТопливо() 
Опер=СоздатьОбъект("Операция");
Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ");
Пока Опер.ПолучитьОперацию()=1 Цикл
    опер.ВыбратьПроводки();
    Пока Опер.Получитьпроводку()=1 Цикл
        //Опер.ВключитьПроводки(0);
        //Опер.Удалить(0);
        //Опер.СнятьПометкуУдаления();
        Если Опер.Дебет.Счет=счетпокоду("АМ") тогда
            тз1.ВыбратьСтроки();
            Пока тз1.получитьстроку()=1 Цикл
                Если тз1.Авто=Опер.Дебет.Автомобили  тогда
                    Опер.Дебет.Материалы = тз1.Топливо;
                    прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;    
        Если Опер.Кредит.Счет=счетпокоду("АМ") тогда
            тз1.ВыбратьСтроки();
            Пока тз1.получитьстроку()=1 Цикл
                Если тз1.Авто=Опер.Кредит.Автомобили  тогда
                    Опер.Кредит.Материалы = тз1.Топливо;
                    прервать;
                КонецЕсли;
            КонецЦикла;
            
        КонецЕсли;
        //Опер.ВключитьПроводки(1);
      Опер.Записатьпроводки();  
    КонецЦикла;
   Опер.Записать();
КонецЦикла;
Конецпроцедуры



Дело в том, что это не вновь созданная операция, а в уже существующие операции, созданные обработкой WRAP (сверткой бухгалтерских итогов), я хочу на место пустого субконто, поставить нужное мне.
Заранее благодарна за помощь.
НатальяНаталья
Цитата(Acid @ 28.04.11, 15:53) необходимо зарегистрироваться для просмотра ссылки
ну если вы считаете, что спотыкается на первой (а вы ошибаетесь), то первая проводка у вас какая?
поэтому то и нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.
и кто так значения из тз выбирает???
должно быть примерно так:
если опер.дебет.счет.Количествосубконто()>1 Тогда
Если Опер.Дебет.Субконто(2).Вид()=тз1.ПолучитьЗначение(н,"Топливо").Вид() тогда
Опер.Дебет.Субконто(2)=тз1.ПолучитьЗначение(н,"Топливо");
конецесли;
конецесли;

где н - это номер строки в тз. соответственно. нужно или до этого спозиционироваться на ваше топливо, или встраивать цикл по тз.

Из отладчика:
Опер.Дебет.Субконто(2).Вид() = "Материалы"
тз1.ПолучитьЗначение(н,"Топливо").Вид() = "Материалы"
опер.дебет.счет.Количествосубконто() = 2

но уже на уровне проверки синтаксических ошибок выдает:
Опер.Дебет.Субконто(2)<<?>>=тз1.ПолучитьЗначение(н,"Топливо");
{(80)}: Неопознанный оператор
logist
С утра был документ Путевой лист
Цитата(НатальяНаталья @ 28.04.11, 10:38) необходимо зарегистрироваться для просмотра ссылки
Хочу в существующие операции, созданные документом ПутевойЛист(нетиповой,созданный программистом) проставить значения субконто. Раньше они были пустыми. Но не получается, выдает ошибку, что нельзя изменять записанные операции. Пробовала программно пометить на удаление,выключить проводки и т. д.. но ничего не помогает.

теперь оказывается это свернутые проводки
Цитата(НатальяНаталья @ 28.04.11, 15:57) необходимо зарегистрироваться для просмотра ссылки
Дело в том, что это не вновь созданная операция, а в уже существующие операции, созданные обработкой WRAP (сверткой бухгалтерских итогов), я хочу на место пустого субконто, поставить нужное мне.

прошло 19 сообщений, Наталья, что еще Вы забыли сказать?
igmig65
я понял, что не новая операция, имел ввиду создания ее как объекта, на какой строке в отладчике вываливается?
Acid
вот это лишнее:Опер.Записатьпроводки();

поставьте счетчик внутри цикла с=с+1
перед присваиванием будете видеть номер проводки, где спотыкается.
сообщить(""+с);
Acid
logist, я думаю уже пора традиционно требовать фотку smile.gif
igmig65
Цитата
logist, я думаю уже пора традиционно требовать фотку

в руках с монитором, на котором код, типа скрин laugh.gif

рс: администратор, пардон за флуд
НатальяНаталья
Цитата(igmig65 @ 28.04.11, 16:11) необходимо зарегистрироваться для просмотра ссылки
я понял, что не новая операция, имел ввиду создания ее как объекта, на какой строке в отладчике вываливается?


После того как находится первая операция, она кстати имеет одну проводку и дело доходит до присвоения субконто значения , то выдает эту ошибку.
Сейчас возникло вот еще ,что . По совету я дописала
                        если опер.дебет.счет.Количествосубконто()>1 Тогда
                            сообщить(опер.дебет.счет.Количествосубконто());
                            //Если Опер.Дебет.Субконто(2).Вид()=тз1.ПолучитьЗначение(н,"Топливо").Вид() тогда
                            //    
                            //    Опер.Дебет.Субконто(2)=тз1.ПолучитьЗначение(н,"Топливо");
                            //конецесли;
                        конецесли;


Так пока не были закомментированы эти 4 строчки выдавалась ошибка в Опер.Дебет.Субконто(2): Неизвестный оператор , хотя количество субконото сообщает 2 и вид сообщает правильно, такой же как в ТЗ
НатальяНаталья
Цитата(Acid @ 28.04.11, 16:15) необходимо зарегистрироваться для просмотра ссылки
logist, я думаю уже пора традиционно требовать фотку smile.gif

Это хорошо . что у человека хорошее настроение, а на подобные подколки я не обижаюсь. Хотелось бы конечно помощи в решении моей проблемы. А потом и посмеяться можно. С уважением.
Acid
пробуйте так: Опер.Дебет.Субконто(2,тз1.Топливо);
НатальяНаталья
Цитата(Acid @ 28.04.11, 16:28) необходимо зарегистрироваться для просмотра ссылки
пробуйте так: Опер.Дебет.Субконто(2,тз1.Топливо);


1
Опер.Дебет.Субконто(2,тз1.Топливо);
{E:\.......\EXTFORMS\ТОПЛИВО АВТОМОБИЛЕЙ.ERT(82)}: Нельзя изменять записанные проводки!
Цифра 1 это номер проводки (поставила счетчик по вашему совету). Но все по прежнему, ошибка та же.


Но на сегодня хватит. Спасибо большое за желание помочь. Надеюсь завтра что-нибудь получится. Если будет время завтра не бросайте меня.
Acid
эту команду убрали? : Опер.Записатьпроводки();
igmig65
Цитата
После того как находится первая операция, она кстати имеет одну проводку и дело доходит до присвоения субконто значения , то выдает эту ошибку

Посмотрите что показывает в отладчике перед присвоением :

опер.дебет.счет.ВидСубконто(2).ТипСубконто()=
5_kopeek
Метод ВыбратьОперацииСПроводками выбирает проводки и позиционируется на проводках, а не на операции. Отдельно от операции изменить проводку нельзя. Поэтому
Цитата(НатальяНаталья @ 28.04.11, 15:35) необходимо зарегистрироваться для просмотра ссылки
и выдает ошибку: Нельзя изменять записанные проводки!

Предлагаю спозиционироваться на операции и корректировать проводки как составляющие этой операции. Например, это может выглядеть как-то так:
Процедура ЗаполнитьТопливо() 
    Опер=СоздатьОбъект("Операция");
    ОперПоз=СоздатьОбъект("Операция");
    Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ");  
    Пока Опер.ПолучитьОперацию()=1 Цикл
        ОперПоз.НайтиОперацию(Опер.Документ);
        ОперПоз.ВыбратьПроводки();
        Пока ОперПоз.Получитьпроводку()=1 Цикл
            Если ОперПоз.Дебет.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=ОперПоз.Дебет.Автомобили  тогда
                        ОперПоз.Дебет.Субконто(2,тз1.Топливо);
                        прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;    
            Если ОперПоз.Кредит.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=ОперПоз.Кредит.Автомобили  тогда
                        ОперПоз.Кредит.Субконто(2,тз1.Топливо);
                        прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
        ОперПоз.Записать();
    КонецЦикла;
Конецпроцедуры
НатальяНаталья
Цитата(5_kopeek @ 28.04.11, 23:07) необходимо зарегистрироваться для просмотра ссылки
Метод ВыбратьОперацииСПроводками выбирает проводки и позиционируется на проводках, а не на операции. Отдельно от операции изменить проводку нельзя. Поэтому

Предлагаю спозиционироваться на операции и корректировать проводки как составляющие этой операции. Например, это может выглядеть как-то так:
Процедура ЗаполнитьТопливо() 
    Опер=СоздатьОбъект("Операция");
    ОперПоз=СоздатьОбъект("Операция");
    Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ");  
    Пока Опер.ПолучитьОперацию()=1 Цикл
        ОперПоз.НайтиОперацию(Опер.Документ);
        ОперПоз.ВыбратьПроводки();
        Пока ОперПоз.Получитьпроводку()=1 Цикл
            Если ОперПоз.Дебет.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=ОперПоз.Дебет.Автомобили  тогда
                        ОперПоз.Дебет.Субконто(2,тз1.Топливо);
                        прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;    
            Если ОперПоз.Кредит.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=ОперПоз.Кредит.Автомобили  тогда
                        ОперПоз.Кредит.Субконто(2,тз1.Топливо);
                        прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
        ОперПоз.Записать();
    КонецЦикла;
Конецпроцедуры



Огромное спасибо!!! Ошибки больше нет, но записывает только операцию первого попавшегося документа. А операции вручную не видит. Но самое главное вы объяснили, откуда она берется, навели на правильные мысли. Теперь я что-нибудь придумаю, а то прямо замкнутый круг какой-то. Огромное спасибо еще раз!!!
НатальяНаталья
Цитата(5_kopeek @ 28.04.11, 23:07) необходимо зарегистрироваться для просмотра ссылки
Метод ВыбратьОперацииСПроводками выбирает проводки и позиционируется на проводках, а не на операции. Отдельно от операции изменить проводку нельзя. Поэтому

Предлагаю спозиционироваться на операции и корректировать проводки как составляющие этой операции. Например, это может выглядеть как-то так:
Процедура ЗаполнитьТопливо() 
    Опер=СоздатьОбъект("Операция");
    ОперПоз=СоздатьОбъект("Операция");
    Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ");  
    Пока Опер.ПолучитьОперацию()=1 Цикл
        ОперПоз.НайтиОперацию(Опер.Документ);
        ОперПоз.ВыбратьПроводки();
        Пока ОперПоз.Получитьпроводку()=1 Цикл
            Если ОперПоз.Дебет.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=ОперПоз.Дебет.Автомобили  тогда
                        ОперПоз.Дебет.Субконто(2,тз1.Топливо);
                        прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;    
            Если ОперПоз.Кредит.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=ОперПоз.Кредит.Автомобили  тогда
                        ОперПоз.Кредит.Субконто(2,тз1.Топливо);
                        прервать;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
        ОперПоз.Записать();
    КонецЦикла;
Конецпроцедуры



Еще раз спасибо!

Написала код:


Процедура ЗаполнитьТопливо() 
    Опер=СоздатьОбъект("Операция");    
    Опер.ВыбратьОперации(ВыбНачПериода,ВыбКонПериода);    
    Пока Опер.ПолучитьОперацию()=1 Цикл
        Опер.ВыбратьПроводки();
        Пока Опер.Получитьпроводку()=1 Цикл
            Если Опер.Дебет.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=Опер.Дебет.Автомобили  тогда
                        Опер.Дебет.Субконто(2,тз1.Топливо);
                        
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;    
            Если Опер.Кредит.Счет=счетпокоду("АМ") тогда
                тз1.ВыбратьСтроки();
                Пока тз1.получитьстроку()=1 Цикл
                    Если тз1.Авто=Опер.Кредит.Автомобили  тогда
                        Опер.Кредит.Субконто(2,тз1.Топливо);
                        
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
        Опер.Записать();
    КонецЦикла;
Конецпроцедуры

и все получилось прекрасно! Все дело оказывается в ВыбратьОперацииСПроводками. Вот так всегда хочется как быстрее, а получается как всегда!
5_kopeek
Да, только во втором варианте Вы перебираете ВСЕ операции и проводки, а в первом -- отфильтрованные по счету АМ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.