Конфигурация 7.7 Хозрасчетная буз. 504 релиз. Хочу в существующие операции, созданные документом ПутевойЛист(нетиповой,созданный программистом) проставить значения субконто. Раньше они были пустыми. Но не получается, выдает ошибку, что нельзя изменять записанные операции. Пробовала программно пометить на удаление,выключить проводки и т. д.. но ничего не помогает. ЭПодскажите пожалуйста. что я делаю не так. Код текста прилагаю:
Процедура ЗаполнитьТопливо() Опер=СоздатьОбъект("Операция"); Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ"); Пока Опер.ПолучитьОперацию()=1 Цикл опер.ВыбратьПроводки(); Пока Опер.Получитьпроводку()=1 Цикл Опер.ВключитьПроводки(0); //Опер.Удалить(0); //Опер.СнятьПометкуУдаления(); Если Опер.Дебет.Счет=счетпокоду("АМ") тогда тз1.ВыбратьСтроки(); Пока тз1.получитьстроку()=1 Цикл Если тз1.Авто=Опер.Дебет.Автомобили тогда Опер.Дебет.Материалы = тз1.Топливо; прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если Опер.Кредит.Счет=счетпокоду("АМ") тогда тз1.ВыбратьСтроки(); Пока тз1.получитьстроку()=1 Цикл Если тз1.Авто=Опер.Кредит.Автомобили тогда Опер.Кредит.Материалы = тз1.Топливо; прервать; КонецЕсли; КонецЦикла;
КонецЕсли; Опер.ВключитьПроводки(1);
КонецЦикла;
КонецЦикла;
Конецпроцедуры
Причина редактирования: Для вставки кода используйте специальные теги!
Спасибо,что навели на мысль. Теперь возникает другая ошибка. Поле агрегатного объекта не обнаружено (Субконто2) хотя в отладчике выдает ТипЗначенияСтр(Опер.Дебет.Материалы) = "Справочник", а это и есть субконто2. Может быть я изначально не то делаю? Дело в том , что ч добавила к забалансовому счету АМ еще одно субконто. Было Субконто1: автомобили, а добавила субконто2: материалы, свернула базу и хотела пернести все остатки с пустого субконто2 на нужные мне. Но почему то не получается . Помогите пожалуйста насколько это возможно.
Бросьте самодеятельность, обратитесь сразу к специалисту. Ибо (из опыта) потом будет дороже это стоить. Почему? Я так понимаю, слова "Вид субконто" и какой тип оно имеет вам ничего не скажут. Плюс возникнет вопрос с зависшими суммами на пустом субконто 2 (но у вас вроде есть план, как с этим бороться). В общем резюме: не лезьте туда, где ничего не понимаете. С последующими уточняющими вопросами на форумах, думаю, вас просто отправят изучать мат часть. Да и разжовывать основы людям, которые далеки от программирования 1С никто не будет.
Бросьте самодеятельность, обратитесь сразу к специалисту. Ибо (из опыта) потом будет дороже это стоить. Почему? Я так понимаю, слова "Вид субконто" и какой тип оно имеет вам ничего не скажут. Плюс возникнет вопрос с зависшими суммами на пустом субконто 2 (но у вас вроде есть план, как с этим бороться). В общем резюме: не лезьте туда, где ничего не понимаете. С последующими уточняющими вопросами на форумах, думаю, вас просто отправят изучать мат часть. Да и разжовывать основы людям, которые далеки от программирования 1С никто не будет.
Тип субконто- справочник материалы. Буду благодарна за любой ответ.
Опер.Дебет.Субконто(2) <<?>>= тз1.Топливо; {(72)}: Неопознанный оператор Может в 7.7 вообще нельзя программно изменять уже ранее записанные проводки? Или надо к ним обращаться через документ? В конфигураторе в операции поставила -разрешено редактировать операции документа. Может еще какие-нибудь настройки существуют?
все-таки Опер.Дебет.Субконто2=тз1.Топливо; только перед этой операцией нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.
все-таки Опер.Дебет.Субконто2=тз1.Топливо; только перед этой операцией нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.
разжевал как мог.
Второе субконто есть , т.к. в бухитогах оно прекрасно учавствует и выдает по нему и СКК и СКД () и показывает его тип , и в данной обработке показывает его значение в отладчике :Опер.Дебет.ПредставлениеСубконто(2) = "<...>". и еще так :Опер.ПредставлениеСубконто() = "ЗИЛ - 4331 №Е-701 св<...>" А на счет совпадения с тз, уже делала так: спр=СоздатьОбъект("Справочник.Материалы"); Если спр.НайтиПоНаименованию(Строка(СокрЛП(тз1.Топливо.Наименование)),0,1) =1 тогда топливо=спр.ТекущийЭлемент(); КонецЕсли; Опер.Дебет.Материалы = топливо; Спасибо, что не бросаете меня,а пытаетесь помочь!
Почти ветеран
Группа: Местный
Сообщений: 623
Из: Донецкая обл
Спасибо сказали: 171 раз
Рейтинг: 144.5
Цитата
Дебет.<Субконто> Синтаксис: Дебет.<Субконто> Назначение: Атрибут служит для доступа к cубконто дебета проводки (корреспонденции) выбранной операции, где <Субконто> - название cубконто счета дебета, как оно задано в конфигураторе.
Если у вас ВидСубконто имеет тип "Справочник.Материалы", то как он задан в коф-ре, если Материалы, то: Опер.Дебет.Материалы=тз1.Топливо; это 1 вариант. а вот 2:
Цитата
Дебет.Субконто(<?>,) Синтаксис: Дебет.Субконто(<НомерСубконто>|<ВидСубконто>,<Субконто>) Назначение: Обращение к субконто дебета проводки (корреспонденции) операции. Если при использовании метода Субконто первым параметром передается порядковый номер субконто или вид субконто, то метод возвратит значение субконто, имеющего этот номер. Если вторым параметром передается значение субконто, метод присваивает указанное значение виду субконто проводки. Возвращает: если указан порядковый номер вида субконто или вид субконто, метод возвращает значение типа ''ВидСубконто''. Параметры: <НомерСубконто> - числовое выражение - порядковый номер субконто. По умолчанию 1. <ВидСубконто> - значение типа ''ВидСубконто'', которое должно быть установлено. Необязательный параметр. <Субконто> - значение субконто. Параметр необязательный. Если параметр не задан - значение не изменяется.
Соответственно, если это 2 субконто, то Опер.Дебет.Субконто(2,тз1.Топливо); ну и Записать() конечно
нет не одна . Я перебираю проводки : опер.ВыбратьПроводки(); Пока Опер.Получитьпроводку()=1 Цикл Но дело в том , что он спотыкается на первой записи Опер.Дебет.Материалы = топливо;
и выдает ошибку: Нельзя изменять записанные проводки! Я писала и Опер.Записать(); и Опер.Записатьпроводки() . но до этих строк даже не доходит.
Если у вас ВидСубконто имеет тип "Справочник.Материалы", то как он задан в коф-ре, если Материалы, то: Опер.Дебет.Материалы=тз1.Топливо; это 1 вариант. а вот 2:
Соответственно, если это 2 субконто, то Опер.Дебет.Субконто(2,тз1.Топливо); ну и Записать() конечно
Опять выдает ту же ошибку: Опер.Дебет.Субконто(2,тз1.Топливо); {E:\............\EXTFORMS\ТОПЛИВО АВТОМОБИЛЕЙ.ERT(77)}: Нельзя изменять записанные проводки!
нет не одна . Я перебираю проводки : опер.ВыбратьПроводки(); Пока Опер.Получитьпроводку()=1 Цикл Но дело в том , что он спотыкается на первой записи Опер.Дебет.Материалы = топливо;
и выдает ошибку: Нельзя изменять записанные проводки! Я писала и Опер.Записать(); и Опер.Записатьпроводки() . но до этих строк даже не доходит.
ну если вы считаете, что спотыкается на первой (а вы ошибаетесь), то первая проводка у вас какая? поэтому то и нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз. и кто так значения из тз выбирает??? должно быть примерно так:
если опер.дебет.счет.Количествосубконто()>1 Тогда Если Опер.Дебет.Субконто(2).Вид()=тз1.ПолучитьЗначение(н,"Топливо").Вид() тогда Опер.Дебет.Субконто(2)=тз1.ПолучитьЗначение(н,"Топливо"); конецесли; конецесли;
где н - это номер строки в тз. соответственно. нужно или до этого спозиционироваться на ваше топливо, или встраивать цикл по тз.
ошибка вываливается на этой строке? полностью код от создания операции в студию плиз
Процедура ЗаполнитьТопливо() Опер=СоздатьОбъект("Операция"); Опер.ВыбратьОперацииСПроводками(ВыбНачПериода,ВыбКонПериода,"АМ"); Пока Опер.ПолучитьОперацию()=1 Цикл опер.ВыбратьПроводки(); Пока Опер.Получитьпроводку()=1 Цикл //Опер.ВключитьПроводки(0); //Опер.Удалить(0); //Опер.СнятьПометкуУдаления(); Если Опер.Дебет.Счет=счетпокоду("АМ") тогда тз1.ВыбратьСтроки(); Пока тз1.получитьстроку()=1 Цикл Если тз1.Авто=Опер.Дебет.Автомобили тогда Опер.Дебет.Материалы = тз1.Топливо; прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если Опер.Кредит.Счет=счетпокоду("АМ") тогда тз1.ВыбратьСтроки(); Пока тз1.получитьстроку()=1 Цикл Если тз1.Авто=Опер.Кредит.Автомобили тогда Опер.Кредит.Материалы = тз1.Топливо; прервать; КонецЕсли; КонецЦикла;
Дело в том, что это не вновь созданная операция, а в уже существующие операции, созданные обработкой WRAP (сверткой бухгалтерских итогов), я хочу на место пустого субконто, поставить нужное мне. Заранее благодарна за помощь.
ну если вы считаете, что спотыкается на первой (а вы ошибаетесь), то первая проводка у вас какая? поэтому то и нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз. и кто так значения из тз выбирает??? должно быть примерно так:
если опер.дебет.счет.Количествосубконто()>1 Тогда Если Опер.Дебет.Субконто(2).Вид()=тз1.ПолучитьЗначение(н,"Топливо").Вид() тогда Опер.Дебет.Субконто(2)=тз1.ПолучитьЗначение(н,"Топливо"); конецесли; конецесли;
где н - это номер строки в тз. соответственно. нужно или до этого спозиционироваться на ваше топливо, или встраивать цикл по тз.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!