Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Операции и проводки , Изменение программно существующих операций 2 страниц V   1 2 >          
НатальяНаталья Подменю пользователя
сообщение 28.04.11, 10:38
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

Конфигурация 7.7 Хозрасчетная буз. 504 релиз. Хочу в существующие операции, созданные документом ПутевойЛист(нетиповой,созданный программистом) проставить значения субконто. Раньше они были пустыми. Но не получается, выдает ошибку, что нельзя изменять записанные операции. Пробовала программно пометить на удаление,выключить проводки и т. д.. но ничего не помогает. ЭПодскажите пожалуйста. что я делаю не так.
Код текста прилагаю:

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

Конецпроцедуры
Причина редактирования: Для вставки кода используйте специальные теги!

Acid Подменю пользователя
сообщение 28.04.11, 10:56
Сообщение #2

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 379 раз
Рейтинг: 0

включить/выключить проводки - дело бесполезное.
а где команда Операция.Записать(); ?

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 12:42
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

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



Ошибка выдается на строке:
Опер.Дебет.Материалы = тз1.Топливо;
т.е. до операция. записать(), дело не доходит. Но на всякий случай попробую

Acid Подменю пользователя
сообщение 28.04.11, 13:15
Сообщение #4

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 379 раз
Рейтинг: 0

Опер.Дебет.Субконто1=тз1.Склад;
Опер.Дебет.Субконто2=тз1.Топливо;

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 13:45
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Acid @ 28.04.11, 13:15) *
Опер.Дебет.Субконто1=тз1.Склад;
Опер.Дебет.Субконто2=тз1.Топливо;

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

Ziam Подменю пользователя
сообщение 28.04.11, 14:00
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 234
Из: Харцызск
Спасибо сказали: 62 раз
Рейтинг: 0

Бросьте самодеятельность, обратитесь сразу к специалисту. Ибо (из опыта) потом будет дороже это стоить.
Почему? Я так понимаю, слова "Вид субконто" и какой тип оно имеет вам ничего не скажут. Плюс возникнет вопрос с зависшими суммами на пустом субконто 2 (но у вас вроде есть план, как с этим бороться).
В общем резюме: не лезьте туда, где ничего не понимаете. С последующими уточняющими вопросами на форумах, думаю, вас просто отправят изучать мат часть. Да и разжовывать основы людям, которые далеки от программирования 1С никто не будет.

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 14:14
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

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

Тип субконто- справочник материалы. Буду благодарна за любой ответ.

Acid Подменю пользователя
сообщение 28.04.11, 14:19
Сообщение #8

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 379 раз
Рейтинг: 0

ну или так: Опер.Дебет.Субконто(2)=тз1.Топливо;

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 14:26
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Acid @ 28.04.11, 14:19) *
ну или так: Опер.Дебет.Субконто(2)=тз1.Топливо;

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

Acid Подменю пользователя
сообщение 28.04.11, 14:55
Сообщение #10

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 379 раз
Рейтинг: 0

все-таки Опер.Дебет.Субконто2=тз1.Топливо;
только перед этой операцией нужно проверять - есть ли у данного счета 2-ое субконто и совпадает ли вид этого субконто с тем, что в тз.

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

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 15:16
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

Acid Подменю пользователя
сообщение 28.04.11, 15:27
Сообщение #12

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 379 раз
Рейтинг: 0

вы считаете, что у вашей операции одна проводка?

igmig65 Подменю пользователя
сообщение 28.04.11, 15:34
Сообщение #13

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Из: Донецкая обл
Спасибо сказали: 171 раз
Рейтинг: 144.5

Цитата
Дебет.<Субконто>
Синтаксис:
Дебет.<Субконто>
Назначение:
Атрибут служит для доступа к cубконто дебета проводки (корреспонденции) выбранной операции, где
<Субконто> - название cубконто счета дебета, как оно задано в конфигураторе.

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

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

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 15:35
Сообщение #14

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Acid @ 28.04.11, 15:27) *
вы считаете, что у вашей операции одна проводка?

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

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

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 15:40
Сообщение #15

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

igmig65 Подменю пользователя
сообщение 28.04.11, 15:46
Сообщение #16

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Из: Донецкая обл
Спасибо сказали: 171 раз
Рейтинг: 144.5

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

ошибка вываливается на этой строке?
полностью код от создания операции в студию плиз

Acid Подменю пользователя
сообщение 28.04.11, 15:53
Сообщение #17

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 379 раз
Рейтинг: 0

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

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

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

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

igmig65 Подменю пользователя
сообщение 28.04.11, 15:57
Сообщение #18

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Из: Донецкая обл
Спасибо сказали: 171 раз
Рейтинг: 144.5

я тоже подозреваю, что присваивается субконто не там где нужно, тоесть где его нет вообще или другой вид

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 15:57
Сообщение #19

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(igmig65 @ 28.04.11, 15:46) *
ошибка вываливается на этой строке?
полностью код от создания операции в студию плиз


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



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

НатальяНаталья Подменю пользователя
сообщение 28.04.11, 16:10
Сообщение #20

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

но уже на уровне проверки синтаксических ошибок выдает:
Опер.Дебет.Субконто(2)<<?>>=тз1.ПолучитьЗначение(н,"Топливо");
{(80)}: Неопознанный оператор

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 22:47
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!