Имя: Пароль:
1C
1С v8
ручная операция программно, не делает проводок???
,
0 mnimo
 
22.01.12
21:57
ДокументОп=Документы.ОперацияБух.СоздатьДокумент();
ДокументОп.Дата=РабочаяДата;
ДокументОп.Организация=Справочники.Организации.НайтиПоКоду("000000001");
ДокументОп.Содержание="Заполенно автоматичетски ";
ДокументОп.СпособЗаполнения="Вручную";
Проводка=ДокументОп.Движения.Хозрасчетный.Добавить();
           Проводка.СчетДт=ПланыСчетов.Хозрасчетный.НайтиПоКоду(СокрЛП(Результат.Счет));
           Проводка.СчетКт=ПланыСчетов.Хозрасчетный.НайтиПоКоду("91.01");
Проводка.Период=РабочаяДата;
           Проводка.СубконтоДт.Контрагенты=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1));
           СписокДоговоров=Справочники.ДоговорыКонтрагентов.Выбрать(,Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1),,));
Пока СписокДоговоров.Следующий() Цикл
Если СписокДоговоров.Наименование=СокрЛП(Результат.Субконто2) Тогда
Если Не СписокДоговоров.Ссылка.Пустая() Тогда
                   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры]=СписокДоговоров.Ссылка;
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;
           Проводка.Сумма=Сред(СокрЛП(Результат.СуммаОстаток),2);
Проводка.Активность=Истина;
//Проводка.Записать();
ДокументОп.Проведен=Истина;
ДокументОп.СуммаОперации=Проводка.Сумма;
           ДокументОп.Записать(РежимЗаписиДокумента.Запись);

Как записать проводку, вроде все создал а записать не могу. Ручная операция создается,все ок.
1 Ненавижу 1С
 
гуру
22.01.12
22:13
набор записей надо записать
2 mnimo
 
22.01.12
22:31
ДокументОп=Документы.ОперацияБух.СоздатьДокумент();
           ДокументОп.Дата=РабочаяДата;
           ДокументОп.Организация=Справочники.Организации.НайтиПоКоду("000000001");
           ДокументОп.Содержание="Заполенно автоматичетски ";
           ДокументОп.СпособЗаполнения="Вручную";
           ДокументОп.Проведен=Истина;
           ДокументОп.СуммаОперации=Сред(СокрЛП(Результат.СуммаОстаток),2);
           ДокументОп.Записать(РежимЗаписиДокумента.Запись);
                       
           //Проводка=ДокументОп.Движения.Хозрасчетный.Добавить();
           НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(ДокументОп.Ссылка);
           Проводка=НаборЗаписей.Добавить();
           Проводка.Регистратор=ДокументОп.Ссылка;
           Проводка.Период=ДокументОп.Дата;
           Проводка.СчетДт=ПланыСчетов.Хозрасчетный.НайтиПоКоду(СокрЛП(Результат.Счет));
           Проводка.СчетКт=ПланыСчетов.Хозрасчетный.НайтиПоКоду("91.01");
           Проводка.СубконтоДт.Контрагенты=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1));
           СписокДоговоров=Справочники.ДоговорыКонтрагентов.Выбрать(,Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1),,));
           Пока СписокДоговоров.Следующий() Цикл
               Если СписокДоговоров.Наименование=СокрЛП(Результат.Субконто2) Тогда
                   Если Не СписокДоговоров.Ссылка.Пустая() Тогда
                   Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры]=СписокДоговоров.Ссылка;
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;
           Проводка.Сумма=Сред(СокрЛП(Результат.СуммаОстаток),2);
           //Проводка.Активность=Истина;
           НаборЗаписей.Записать();


Не идет Все равно почему то????
3 Savage
 
22.01.12
22:35
Заполни организацию в строке набора записей. Когда-то давно была такая проблема.
4 mnimo
 
22.01.12
22:54
О ДА!!! Чудо!!! Всем спасибо!!! Читал про Организацию где то, но вот что то не применил((( Еще раз спасибо!!!
5 fimanich
 
22.01.12
22:57
(2) вообще, в коде много что можно бы подредактировать, имхо,
например, счет вот этот 91.01 предопределенный скорее всего, по коду искать не надо, а что-то типа Планы.Счетов.Бухгалтерский.<Имя>.
Поиск контрагента и договора по наименованию, а договора еще и в цикле - это же вообще-то не айс.
Вот это тоже сомнительно, неужто число нельзя вытянуть:
ДокументОп.СуммаОперации=Сред(СокрЛП(Результат.СуммаОстаток),2);

Без обид, просто на заметку, кури мат. часть.
6 fimanich
 
22.01.12
23:01
+(5) а то код твой - неоптимальный уж больно, работать плохо будет, да еще может и некорректно, т.к. могут быть контрагенты и договора с одинаковыми наименованиями...
7 mnimo
 
23.01.12
06:46
Да не, не обижаюсь. Норм замечания, я же учусь буду стараться.)))
8 mnimo
 
23.01.12
08:03
ДокументОп=Документы.ОперацияБух.СоздатьДокумент();
                   ДокументОп.Дата=РабочаяДата;
                   ДокументОп.Организация=Справочники.Организации.НайтиПоКоду("000000001");
                   ДокументОп.Содержание="Заполенно автоматичетски ";
                   ДокументОп.СпособЗаполнения="Вручную";
                   ДокументОп.Проведен=Истина;
                   ДокументОп.СуммаОперации=СокрЛП(Результат.СуммаОстаток)*(-1);
                   ДокументОп.Записать(РежимЗаписиДокумента.Запись);
                   
                   НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
                   НаборЗаписей.Отбор.Регистратор.Установить(ДокументОп.Ссылка);
                   
                   Проводка=НаборЗаписей.Добавить();
                   Проводка.Регистратор=ДокументОп.Ссылка;
                   Проводка.Период=ДокументОп.Дата;
                   Проводка.Организация=ДокументОп.Организация;
                   Проводка.СчетДт=ПланыСчетов.Хозрасчетный.НайтиПоКоду(СокрЛП(Результат.Счет));
                   Проводка.СчетКт=ПланыСчетов.Хозрасчетный.ПрочиеДоходы;
                   
                   
                       
                       Если Результат.Субконто1.Ссылка=Справочники.Контрагенты.НайтиПоКоду(СокрЛП(Результат.Субконто1.Код))
                           И Не Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1)).Пустая()
                           И Не Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1)).ПометкаУдаления Тогда
                           
                           Проводка.СубконтоДт.Контрагенты=Результат.Субконто1.Ссылка;
                           
                       КонецЕсли;
                       
                       
                   СписокДоговоров=Справочники.ДоговорыКонтрагентов.Выбрать(,Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(Результат.Субконто1),,));
                   Пока СписокДоговоров.Следующий() Цикл
                       Если СписокДоговоров.Ссылка=Результат.Субконто2.Ссылка Тогда
                           Если Не СписокДоговоров.Ссылка.Пустая() И Не СписокДоговоров.Ссылка.ПометкаУдаления Тогда
                               Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры]=СписокДоговоров.Ссылка;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЦикла;
                   Проводка.Сумма=Сред(СокрЛП(Результат.СуммаОстаток),2);
                   НаборЗаписей.Записать();


Наверно так как то лучше будет???
9 fimanich
 
23.01.12
09:05
(8) Если Результат.Субконто1.Ссылка=Справочники.Контрагенты.НайтиПоКоду(СокрЛП(Результат.Субконто1.Код))
Это ты там что проверяешь? Что субконто1 - это справочник Контрагенты и оно заполнено, что ли?
Так есть же методы проверки заполненного значения и типа, не надо искать ничего по коду.
Так же и с договорами, никакого цикла не надо, никакого поиска по коду не надо, у тебя уже есть субконто2, проверяй на заполненность и тип и пиши в набор записей.

Вот тоже не надо: Результат.Субконто1.Ссылка, т.к. там и так Ссылка, достаточно Результат.Субконто1

А вот это зачем: Сред(СокрЛП(Результат.СуммаОстаток),2);
Если результат.СуммаОстаток - это число, то зачем ты его в строку, а потом еще Сред. Округляешь так, что ли? Так есть функция округления.
10 1Це
 
23.01.12
09:09
>>   ДокументОп.Проведен=Истина;

клинический случай
11 fimanich
 
23.01.12
09:19
(10) ну да, скорее всего в метаданных Проведение данного документа запрещено...
12 mnimo
 
23.01.12
09:37
(10) Это не заметил да же.)))
13 DSatan
 
23.01.12
09:54
у ТС тяжелый понедельник :)
Основная теорема систематики: Новые системы плодят новые проблемы.