8.х Документы не отражаются в учете

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем lex_nv, 26 апр 2012.

  1. TopicStarter Overlay
    lex_nv
    Offline

    lex_nv

    Регистрация:
    14 ноя 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Помогите советом,ибо моз уже кипит
    1Сv8.2, Бухгалтерия предприятия, редакция 2.0


    Добавляю программно документ Поступление на расчетный счет вот таким образом:
    Код:
    Сообщить("ВходящийПлатеж");
    Попытка
    ВходящийДокумент=Документы.ПоступлениеНаРасчетныйСчет.НайтиПоНомеру(Номер,ДатаДокумента).ПолучитьОбъект();
    
    Исключение
    ВходящийДокумент=Документы.ПоступлениеНаРасчетныйСчет.СоздатьДокумент();
    ВходящийДокумент.Дата=ДатаДокумента;
    ВходящийДокумент.Номер=Номер;
    КонецПопытки;
    
    ВходящийДокумент.Организация=Справочники.Организации.НайтиПоКоду("000000001").Ссылка;
    ВходящийДокумент.ДатаВходящегоДокумента=ДатаДокумента;
    ВходящийДокумент.Дата=ДатаДокумента;
    ВходящийДокумент.НомерВходящегоДокумента=ВходящийНомер;
    ВходящийДокумент.СчетОрганизации=Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета",ПолучательСчет).Ссылка;
    ВходящийДокумент.СчетБанк=ПланыСчетов.Хозрасчетный.НайтиПоКоду("51").Ссылка;
    ВходящийДокумент.СуммаДокумента=СуммаПлатежа;
    ВходящийДокумент.НазначениеПлатежа=НазначениеПлатежа;
    ВходящийДокумент.ВидОперации=Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ОплатаПокупателя;
    ВходящийДокумент.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643").Ссылка;
    ВходящийДокумент.РасшифровкаПлатежа.Очистить();
    НоваяРасшифровкаПлатежа=ВходящийДокумент.РасшифровкаПлатежа.Добавить();
    НоваяРасшифровкаПлатежа.СпособПогашенияЗадолженности=Перечисления.СпособыПогашенияЗадолженности.Автоматически;
    НоваяРасшифровкаПлатежа.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
    НоваяРасшифровкаПлатежа.СуммаНДС=ВходящийДокумент.СуммаДокумента-ВходящийДокумент.СуммаДокумента*100/118;
    НоваяРасшифровкаПлатежа.СчетУчетаРасчетовСКонтрагентом=ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01").Ссылка;
    НоваяРасшифровкаПлатежа.СчетУчетаРасчетовПоАвансам=ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02").Ссылка;
    НоваяРасшифровкаПлатежа.СуммаПлатежа=ВходящийДокумент.СуммаДокумента;
    
    КонтрагентПлательщик=Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",ПлательщикИНН);
    ВходящийДокумент.Контрагент=КонтрагентПлательщик.Ссылка;
    Если ВходящийДокумент.Контрагент.Наименование<>"" Тогда
    Сообщить(ВходящийДокумент.Контрагент.Наименование);
    ЗапросВ1С = Новый Запрос;
    ЗапросВ1С.Текст = "ВЫБРАТЬ
    |	СчетаКонтрагентов.Код,
    | СчетаКонтрагентов.НомерСчета,
    | СчетаКонтрагентов.Владелец
    |ИЗ
    |	Справочник.БанковскиеСчета КАК СчетаКонтрагентов
    |ГДЕ СчетаКонтрагентов.Владелец=&Владелец
    | И СчетаКонтрагентов.НомерСчета=&НомерСчета";
    
    ЗапросВ1С.УстановитьПараметр("Владелец",ВходящийДокумент.Контрагент);
    ЗапросВ1С.УстановитьПараметр("НомерСчета",ПлательщикСчет);
    Выборка = ЗапросВ1С.Выполнить().Выбрать();	  
    Пока Выборка.Следующий() Цикл
    ВходящийДокумент.СчетКонтрагента=Справочники.БанковскиеСчета.НайтиПоКоду(Выборка.Код).Ссылка;
    КонецЦикла;
    
    Если ВходящийДокумент.СчетКонтрагента.Наименование="" Тогда
    Сообщить("Добавляем новый банковский счет");
    НовыйСчетКонтрагента=Справочники.БанковскиеСчета.СоздатьЭлемент();
    НовыйСчетКонтрагента.Владелец=ВходящийДокумент.Контрагент;
    НовыйСчетКонтрагента.Банк=Справочники.Банки.НайтиПоКоду(ПлательцикБик).Ссылка;
    НовыйСчетКонтрагента.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоКоду("643").Ссылка;
    НовыйСчетКонтрагента.ВидСчета="Расчетный";
    НовыйСчетКонтрагента.НомерСчета=ПлательщикСчет;
    НовыйСчетКонтрагента.Наименование=НовыйСчетКонтрагента.Банк.Наименование +" (Расчетный)";
    Если НовыйСчетКонтрагента.Банк.Наименование<>"" Тогда
    НовыйСчетКонтрагента.Записать();
    ВходящийДокумент.СчетКонтрагента=Справочники.БанковскиеСчета.НайтиПоКоду(НовыйСчетКонтрагента.Код).Ссылка;
    Иначе
    Сообщить("Нет банка в справочнике");
    КонецЕсли;
    КонецЕсли;  
    
    
    ЗапросВ1С = Новый Запрос;
    ЗапросВ1С.Текст = "ВЫБРАТЬ
    |	Договора.Код,
    | Договора.Дата,
    | Договора.Владелец
    |ИЗ
    |	Справочник.ДоговорыКонтрагентов КАК Договора
    |ГДЕ Договора.Владелец=&ВладелецДоговоров
    | И Договора.ВидДоговора=&ВидДоговора
    |УПОРЯДОЧИТЬ ПО Дата";
    
    ЗапросВ1С.УстановитьПараметр("ВладелецДоговоров",ВходящийДокумент.Контрагент);
    ЗапросВ1С.УстановитьПараметр("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
    
    Выборка = ЗапросВ1С.Выполнить().Выбрать();	  
    Пока Выборка.Следующий() Цикл
    НоваяРасшифровкаПлатежа.ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.НайтиПоКоду(Выборка.Код).Ссылка;
    КонецЦикла;
    
    
    Иначе
    Сообщить("Контрагент "+ПлательщикНазвание+" не найден");
    КонецЕсли;
    
    Попытка
    ВходящийДокумент.Записать(РежимЗаписиДокумента.Запись);
    ВходящийДокумент.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
    Сообщить(ОписаниеОшибки());
    //ВходящийДокумент.Записать(РежимЗаписиДокумента.Запись);
    //ВходящийДокумент.ПолучитьФорму("ФормаДокумента").Открыть();
    КонецПопытки;
    
    Вроде бы все хорошо, добавляется, документы видны как проведенные, но если открыть документ->Действия->Результат проведения документа, то там пусто. Перепроведение документа через форму - тот же эффект. Но заметил - если зменить в документе дату (например на одну минуту) и перепровести его, то проводки появляются.

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

    Буду благодарен за любые мысли
  2. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Зачем Вы два раза записываете документ? (сначала просто запись, а потом проведение).
    Простую запись уберите, т.е. вот эту строчку

    Код:
    ВходящийДокумент.Записать(РежимЗаписиДокумента.Запись);
    Оставьте только проведение.
  3. TopicStarter Overlay
    lex_nv
    Offline

    lex_nv

    Регистрация:
    14 ноя 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    1cUserAndrew, так тоже пробовал - результ тот же.

    К стате если созданный документ просто записать через ВходящийДокумент.Записать(РежимЗаписиДокумента.Запись), а потом через форму его попытаться провести, то он проводится без ошибок, но проводки так же не создаются.
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Я попробовал полностью скопировать Ваш код и запустить обработку.
    Когда убрал строку
    Код:
    ВходящийДокумент.Записать(РежимЗаписиДокумента.Запись);
    все получилось
  5. TopicStarter Overlay
    lex_nv
    Offline

    lex_nv

    Регистрация:
    14 ноя 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    попробовал как Вы сказали, сделал новую обрабоку, скопировал туда код, убрал указанную строку - результат тот же.
    Действия->Результат проведения документа - пусто.

    Попробовал то же самое в новой базе, завел одного контрагента и заполнил банковские реквизиты.

    Вот код обработки полностью.

    Код:
    Номер="00000001";  
    ВходящийНомер="458";  
    ДатаДокумента=Дата("15.01.2012 14:45:22");
    СуммаПлатежа=100;
    НазначениеПлатежа="Назначение платежа";
    
    //Плательщик
    ПлательщикСчет="40911810907900000010";
    ПлательцикБик="047169745";
    ПлательщикНазвание="ХМБ г.НВартовск";
    ПлательщикИНН="8601000666";
    //Получатель
    ПолучательСчет="40702810067160101343";
    
    Попытка
    ВходящийДокумент=Документы.ПоступлениеНаРасчетныйСчет.НайтиПоНомеру(Номер,ДатаДокумента).ПолучитьОбъект();
    Исключение
    ВходящийДокумент=Документы.ПоступлениеНаРасчетныйСчет.СоздатьДокумент();
    ВходящийДокумент.Дата=ДатаДокумента;
    ВходящийДокумент.Номер=Номер;
    КонецПопытки;
    ВходящийДокумент.Организация=Справочники.Организации.НайтиПоКоду("000000001").Ссылка;
    ВходящийДокумент.ДатаВходящегоДокумента=ДатаДокумента;
    ВходящийДокумент.Дата=ДатаДокумента;
    ВходящийДокумент.НомерВходящегоДокумента=ВходящийНомер;
    ВходящийДокумент.СчетОрганизации=Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета",ПолучательСчет).Ссылка;
    ВходящийДокумент.СчетБанк=ПланыСчетов.Хозрасчетный.НайтиПоКоду("51").Ссылка;
    ВходящийДокумент.СуммаДокумента=СуммаПлатежа;
    ВходящийДокумент.НазначениеПлатежа=НазначениеПлатежа;
    ВходящийДокумент.ВидОперации=Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ОплатаПокупателя;
    ВходящийДокумент.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643").Ссылка;
    ВходящийДокумент.РасшифровкаПлатежа.Очистить();
    НоваяРасшифровкаПлатежа=ВходящийДокумент.РасшифровкаПлатежа.Добавить();
    НоваяРасшифровкаПлатежа.СпособПогашенияЗадолженности=Перечисления.СпособыПогашенияЗадолженности.Автоматически;
    НоваяРасшифровкаПлатежа.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
    НоваяРасшифровкаПлатежа.СуммаНДС=ВходящийДокумент.СуммаДокумента-ВходящийДокумент.СуммаДокумента*100/118;
    НоваяРасшифровкаПлатежа.СчетУчетаРасчетовСКонтрагентом=ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01").Ссылка;
    НоваяРасшифровкаПлатежа.СчетУчетаРасчетовПоАвансам=ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02").Ссылка;
    НоваяРасшифровкаПлатежа.СуммаПлатежа=ВходящийДокумент.СуммаДокумента;
    
    КонтрагентПлательщик=Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",ПлательщикИНН);
    ВходящийДокумент.Контрагент=КонтрагентПлательщик.Ссылка;
    Если ВходящийДокумент.Контрагент.Наименование<>"" Тогда
    Сообщить(ВходящийДокумент.Контрагент.Наименование);
    ЗапросВ1С = Новый Запрос;
    ЗапросВ1С.Текст = "ВЫБРАТЬ
    | СчетаКонтрагентов.Код,
    | СчетаКонтрагентов.НомерСчета,
    | СчетаКонтрагентов.Владелец
    |ИЗ
    | Справочник.БанковскиеСчета КАК СчетаКонтрагентов
    |ГДЕ СчетаКонтрагентов.Владелец=&Владелец
    | И СчетаКонтрагентов.НомерСчета=&НомерСчета";
    
    ЗапросВ1С.УстановитьПараметр("Владелец",ВходящийДокумент.Контрагент);
    ЗапросВ1С.УстановитьПараметр("НомерСчета",ПлательщикСчет);
    Выборка = ЗапросВ1С.Выполнить().Выбрать();  
    Пока Выборка.Следующий() Цикл
    ВходящийДокумент.СчетКонтрагента=Справочники.БанковскиеСчета.НайтиПоКоду(Выборка.Код).Ссылка;
    КонецЦикла;
    
    Если ВходящийДокумент.СчетКонтрагента.Наименование="" Тогда
    Сообщить("Добавляем новый банковский счет");
    НовыйСчетКонтрагента=Справочники.БанковскиеСчета.СоздатьЭлемент();
    НовыйСчетКонтрагента.Владелец=ВходящийДокумент.Контрагент;
    НовыйСчетКонтрагента.Банк=Справочники.Банки.НайтиПоКоду(ПлательцикБик).Ссылка;
    НовыйСчетКонтрагента.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоКоду("643").Ссылка;
    НовыйСчетКонтрагента.ВидСчета="Расчетный";
    НовыйСчетКонтрагента.НомерСчета=ПлательщикСчет;
    НовыйСчетКонтрагента.Наименование=НовыйСчетКонтрагента.Банк.Наименование +" (Расчетный)";
    Если НовыйСчетКонтрагента.Банк.Наименование<>"" Тогда
    НовыйСчетКонтрагента.Записать();
    ВходящийДокумент.СчетКонтрагента=Справочники.БанковскиеСчета.НайтиПоКоду(НовыйСчетКонтрагента.Код).Ссылка;
    Иначе
    Сообщить("Нет банка в справочнике");
    КонецЕсли;
    КонецЕсли;
    
    
    ЗапросВ1С = Новый Запрос;
    ЗапросВ1С.Текст = "ВЫБРАТЬ
    | Договора.Код,
    | Договора.Дата,
    | Договора.Владелец
    |ИЗ
    | Справочник.ДоговорыКонтрагентов КАК Договора
    |ГДЕ Договора.Владелец=&ВладелецДоговоров
    | И Договора.ВидДоговора=&ВидДоговора
    |УПОРЯДОЧИТЬ ПО Дата";
    
    ЗапросВ1С.УстановитьПараметр("ВладелецДоговоров",ВходящийДокумент.Контрагент);
    ЗапросВ1С.УстановитьПараметр("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
    
    Выборка = ЗапросВ1С.Выполнить().Выбрать();  
    Пока Выборка.Следующий() Цикл
    НоваяРасшифровкаПлатежа.ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.НайтиПоКоду(Выборка.Код).Ссылка;
    КонецЦикла;
    
    
    Иначе
    Сообщить("Контрагент "+ПлательщикНазвание+" не найден");
    КонецЕсли;
    
    Попытка
    ВходящийДокумент.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
    Сообщить(ОписаниеОшибки());
    //ВходящийДокумент.Записать(РежимЗаписиДокумента.Запись);
    //ВходящийДокумент.ПолучитьФорму("ФормаДокумента").Открыть();
    КонецПопытки;
    
    Может быть из за разница в версии платформы? У меня сейчас вот это:
    1С:Предприятие 8.2 (8.2.13.219)
    Конфигурация: Бухгалтерия предприятия, редакция 2.0 (2.0.33.7)


    Не могли бы Вы мне показать Ваш работающий код?
  6. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Хм...сейчас он не работает )))
    Вчера работал...))

    Видимо, потому что вчера я выносил реквизиты на форму...может, это сыграло роль....

    Ну да ладно... я понял, в чем дело...
    Вы не заполняете реквизит табличной части "СуммаВзаиморасчетов".

    Надо после строки

    Код:
    НоваяРасшифровкаПлатежа.СуммаПлатежа=ВходящийДокумент.СуммаДокумента;
    написать строку

    Код:
    НоваяРасшифровкаПлатежа.СуммаВзаиморасчетов = ВходящийДокумент.СуммаДокумента;
  7. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Ой..Наверное, все-таки сумма взаиморасчетов должна быть равна не сумме документа, а сумме платежа из этой же строки таб части. Плюс еще, наверное, скорректированная то ли на кратность, то ли на курс...точно не знаю.

    Ну чаще всего она будет равна сумме платежа.
    Т.е. написать так:

    Код:
    НоваяРасшифровкаПлатежа.СуммаВзаиморасчетов = НоваяРасшифровкаПлатежа.СуммаПлатежа;
  8. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    А вот это что за чудо техники? Это датой не станет насколько я понимаю
    Код:
    ДатаДокумента=Дата("15.01.2012 14:45:22");
    Запишите так:
    Код:
    ДатаДокумента=Дата('20120115144522');
  9. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Я тоже впервые такое увидел :)))
    Но, вроде, работает ))

    Вообще, конечно, если в целом по коду пробежаться, есть моменты, которые я бы поправил ))
    Но ладно уж...сейчас цель - исправить "глобальную" ошибку - чтоб работало )))
  10. TopicStarter Overlay
    lex_nv
    Offline

    lex_nv

    Регистрация:
    14 ноя 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое, очень помогли.
    Если код прокомментируете, то буду благодарен. В 1С опыта мало, специфику "красивого" кода еще пока не осознал.
  11. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Ну например, Вы пишите:
    Код:
    ВходящийДокумент.Организация = Справочники.Организации.НайтиПоКоду("000000001").Ссылка;
    В синтакс-помощнике можно прочитать, что метод НайтиПоКоду уже возвращает ссылку.
    Поэтому получать дополнительно ссылку уже не надо. Т.е. вот это
    Код:
    .Ссылка
    лишнее.

    Ошибки, конечно, нет. Результат будет тот же.
    Разница в производительности.
    Когда Вы обращаетесь к реквизиту через точку (в данном случае к реквизиту "Ссылка"), система делает запрос к базе данных, считывая при этом кроме ссылки все остальные реквизиты справочника. Понятно, что это затрата определенных ресурсов.

    Тоже самое, например, с валютой. Лучше так:
    Код:
    ВходящийДокумент.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");
    А к предопределенным элементам вообще можно обращаться из конфигуратора прямо по имени. Не надо ничего искать по коду.
    Это я в данном случае на план счетов намекаю.
    Вместо этого
    Код:
    ПланыСчетов.Хозрасчетный.НайтиПоКоду("51").Ссылка
    Пишите
    Код:
    ПланыСчетов.Хозрасчетный.РасчетныеСчета

Поделиться этой страницей