Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приходная накладная ГТД
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
wmatik
1С Предприятие 7.7(сетевая версия) - 7.70.027,Конф: ПУБ(7.70.010)
Ситуация следующая, приходуют ОС документов Приходная накладная ГТД, в проводках место хранения нет. Но бухгалтеру важно чтобы оно числилось на конкретном складе. В шапке документа место хранения указано, но в проводках не отображается. Каким образом можно разрешить данную проблему, подскажите пожалуйста.
Вот собственно та процедура кот отвечает за ОС:

Процедура ПроводкиПоОСиНМА()
    
    глКомментарий("Выполняются формирование проводок по инвестициям",2);
    
    тбТовары = 0;
    ВыгрузитьТабличнуюЧасть(тбТовары,"ТМЦ,Кво,Коэффициент,СуммаБезНДСВал,Перевозка,ПеревозкаВал,Акциз,Пошлина,Тамо
женныеУслуги,СуммаБезНДС,НДС");
    Если тбТовары.КоличествоСтрок()=0 Тогда
        глНеПроводить(Контекст,"Отсутствуют ТМЦ в табличной части.");
        Возврат;
    КонецЕсли;      
    тбТовары.ВыбратьСтроки();
    Пока тбТовары.ПолучитьСтроку() =1 Цикл
        // на себестоиомсть должна пойти сумма по курсу НБУ
        тбТовары.СуммаБезНДС = глСуммаОсн(тбТовары.СуммаБезНДСВал,Контекст,Валюта);
        тбТовары.Перевозка   = глСуммаОсн(тбТовары.ПеревозкаВал,  Контекст,ВалютаПеревозки);        
    КонецЦикла;
    тбТовары.НоваяКолонка("СуммаБезНДСОсн",   "Число",15,3);
    тбТовары.НоваяКолонка("СуммаПеревозкиОсн","Число",15,3);
    // нужно изменить стоимоть в таблице в соответствии курсом авансом
    кАванса = ?(Итог("СуммаБезНДСВал") = 0,0,АвансВал/Итог("СуммаБезНДСВал")); // часть аванса в себестоимости
    Если кАванса<>0 Тогда
        КурсАванса = ?(ПустоеЗначение(АвансВал)=1,0,АвансОсн/АвансВал);
    Иначе
        КурсАванса = 0;
    КонецЕсли;
    КурсАвансаПеревозчику = 0;
    Если Итог("Перевозка") <> 0 Тогда
        Если ПустоеЗначение(ВалютаПеревозки) = 0 Тогда
            кАвансаПеревозчику = ?(ПустоеЗначение(Итог("ПеревозкаВал"))=1,0,АвансПеревозчикуВал/Итог("ПеревозкаВал")); // часть аванса в себестоимости
            Если кАвансаПеревозчику<>0 Тогда
                КурсАвансаПеревозчику = ?(ПустоеЗначение(АвансПеревозчикуВал)=1,0,АвансПеревозчикуОсн/АвансПеревозчикуВал);
            КонецЕсли;
        КонецЕсли;    
    Иначе
        кАвансаПеревозчику = 0;
    КонецЕсли;      
    тбТовары.ВыбратьСтроки();
    Пока тбТовары.ПолучитьСтроку()=1 Цикл
        тбТовары.СуммаБезНДСОсн = тбТовары.СуммаБезНДСВал * кАванса * КурсАванса + тбТовары.СуммаБезНДС* (1 - кАванса);
        Если ПустоеЗначение(ВалютаПеревозки) = 0 Тогда
            тбТовары.СуммаПеревозкиОсн = тбТовары.ПеревозкаВал * кАвансаПеревозчику * КурсАвансаПеревозчику + тбТовары.Перевозка* (1 - кАвансаПеревозчику);
        Иначе
            тбТовары.СуммаПеревозкиОсн = 0;
        КонецЕсли;    
    КонецЦикла;        
    глОчиститьКлючОкр("Взаим");
    глОчиститьКлючОкр("НДС");
    глОчиститьКлючОкр("ДопНДС");
    глОчиститьКлючОкр("Перев");
    // определим базы для распределения
    ИтогПоПоставщику  = тбТовары.Итог("СуммаБезНДСОсн");
    ИтогПоПеревозчику = тбТовары.Итог("СуммаПеревозкиОсн");
    ИтогНДС           = тбТовары.Итог("НДС");
    // Рассчитать сумму услуг в табличной части
    ИСуммаCНДСТоваров   = 0;
    ИСуммаБезНДСТоваров = 0;
    НомерСтрокиПоследнегоТовара = 1;
    тбТовары.ВыбратьСтроки();
    Пока тбТовары.ПолучитьСтроку()=1 Цикл
        // учтем ошибки округления
        тбТовары.СуммаБезНДСОсн        = глОкрКорр("Взаим", ?(ИтогПоПоставщику  = 0, 0, ВзаиморасчетыПоставщикВсего * тбТовары.СуммаБезНДСОсн/ ИтогПоПоставщику),2);
        тбТовары.НДС                = глОкрКорр("НДС",   ?(ИтогНДС = 0, 0,           НДСВсего * тбТовары.НДС/ ИтогНДС),2);
        тбТовары.СуммаПеревозкиОсн    = глОкрКорр("Перев", ?(ИтогПоПеревозчику = 0, 0, ВзаиморасчетыПеревозчикВсего * тбТовары.СуммаПеревозкиОсн/ ИтогПоПеревозчику),2);        
        
        ИСуммаБезНДСТоваров         = ИСуммабезНДСТоваров + тбТовары.СуммаБезНДСОсн;
        НомерСтрокиПоследнегоТовара = НомерСтроки;
    КонецЦикла;
    МестоХраненияП           = ?(глПартионныйУчетПоСкладам = Да,МестоХранения,0);
    ИтДопНДСПоСтроке         = 0;  
    ОкрПриходСтоимостьВсего  = 0; // для рассчета разницы округления
    тбТовары.ВыбратьСтроки();
    Пока тбТовары.ПолучитьСтроку()=1 Цикл
        ПоставкаП      = ТекущийДокумент();
        ДопНДСПоСтроке = 0;
        Если НДСНаЗатраты = 1 Тогда
            // НДС на себестоимость
            ДопНДСПоСтроке = ?(ИтСуммаБезНДСВал = 0, 0, тбТовары.СуммаБезНДСВал/ИтСуммаБезНДСВал*ДопНДС);
            ДопНДСПоСтроке = глОкрКорр("ДопНДС",ДопНДСПоСтроке, 2);
        КонецЕсли;
        ПриходОстатокТовара = тбТовары.Кво * тбТовары.Коэффициент;
        // рассчитаем себестоимость партии
        ПриходСтоимость     = тбТовары.СуммаБезНДСОсн;
        ПриходНДС           = тбТовары.НДС;
        СчетП               = тбТовары.ТМЦ.Счет;
        глПроводка(Контекст,СчетП,,ПриходСтоимость,"Прих:Себестоимость",ПриходОстатокТовара,тбТовары.ТМЦ,,,
        Контрагент,ПервыйДок,, ,,"ПХ",1,"Взаиморасчеты");
        ОбщаяСтоимостьОС = ПриходСтоимость;
        Если НДСНаЗатраты = 1 Тогда
            глПроводка(Контекст,СчетП,СчетТаможни,ПриходНДС + ДопНДСПоСтроке,"Прих:НДС на себестоимость",, тбТовары.ТМЦ,,,
            Таможня,ПервыйДокТаможни,, ,,"ПХ",1,0); // добавление НДС в себестоимость партии
            ОбщаяСтоимостьОС = ОбщаяСтоимостьОС + ПриходНДС + ДопНДСПоСтроке;
        КонецЕсли;
        ПриходНДС = 0;
        
        // Акциз
        Если тбТовары.Акциз <> 0 Тогда
            ПриходСтоимость = тбТовары.Акциз;
            глПроводка(Контекст,СчетП,СчетПоКоду("64.1.2"),ПриходСтоимость,"Прих:Себестоимость - акциз",, тбТовары.ТМЦ,,,
            ,,, ,,"ПХ",1,0);
            ОбщаяСтоимостьОС = ОбщаяСтоимостьОС + ПриходСтоимость;
        КонецЕсли;    
        // Пошлина
        Если тбТовары.Пошлина <> 0 Тогда
            ПриходСтоимость = тбТовары.Пошлина;
            глПроводка(Контекст,СчетП,СчетПоКоду("64.2.6"),ПриходСтоимость,"Прих:Себестоимость - пошлина",, тбТовары.ТМЦ,,,
            СубконтоПошлина,,, ,,"ПХ",1,0);
            ОбщаяСтоимостьОС = ОбщаяСтоимостьОС + ПриходСтоимость;
        КонецЕсли;    
        // Таможенные услуги
        Если тбТовары.ТаможенныеУслуги <> 0 Тогда
            ПриходСтоимость = тбТовары.ТаможенныеУслуги;
            глПроводка(Контекст,СчетП,,ПриходСтоимость,"Прих:Себестоимость - таможенные услуги",, тбТовары.ТМЦ,,,
            ,,, ,,"ПХ",1,2);
            ОбщаяСтоимостьОС = ОбщаяСтоимостьОС + ПриходСтоимость;
        КонецЕсли;    
        // Перевозка
        Если (Перевозчик.Выбран()=1) и (тбТовары.СуммаПеревозкиОсн <> 0) Тогда
            ПриходСтоимость = тбТовары.СуммаПеревозкиОсн;
            глПроводка(Контекст,СчетП,,ПриходСтоимость,"Прих:Себестоимость - перевозка",, тбТовары.ТМЦ,,,
            ,,, ,,"ПХ",1,3);
            ОбщаяСтоимостьОС = ОбщаяСтоимостьОС + ПриходСтоимость;
        КонецЕсли;
                
        ПриходОстатокТовара = 0;
        
    КонецЦикла; // строки документа
    
КонецПроцедуры //ПроводкиПоОСиНМА

На сколько некорректным будет добавить второе субконто в глПроводка ?
Заранее спасибо
Zaval
Судя по
МестоХраненияП           = ?(глПартионныйУчетПоСкладам = Да,МестоХранения,0);


в базе должен быть включен Партионный учет по складам.

И явная ошибка в коде - это самое "МестоХраненияП" должно присутствовать в вызовах глПроводка(там, где оно нужно)

Если "горит", стоят над головой и нет времени на анализ, то можно сделать,нпр, так
Попытка
глПроводка(Контекст,СчетП,,ПриходСтоимость,"Прих:Себестоимость",ПриходОстатокТовара,тбТовары.ТМЦ,МестоХраненияП,,
        Контрагент,ПервыйДок,, ,,"ПХ",1,"Взаиморасчеты");
Исключение
глПроводка(Контекст,СчетП,,ПриходСтоимость,"Прих:Себестоимость",ПриходОстатокТовара,тбТовары.ТМЦ,,,
        Контрагент,ПервыйДок,, ,,"ПХ",1,"Взаиморасчеты");
КонецПопытки;
wmatik
Вы написали что "МестоХраненияП" должно присутствовать в глПроводка, но даже в типовых конфигурациях (проверяла ПУБ 35,36,40) не стоит в процедуре ПроводкиПоОСиНМА(). Меня то это и насторожило...
А вот насколько необходимо МестоХраненияП в Акцизе, Пошлине, Таможенных услугах, Перевозках?
Zaval
Нет, конечно, на счетах, участвующих в этих проводках его просто некуда вставить)))

По-хорошему, перед вызовом глПроводка нужно проверять счета на наличие субконто "МестаХранения"(или как там его) и только при его наличии - вставлять.
wmatik
ну вот допустим в данном случае у инвестиции счет 152, первое субконто - инвестиция, второе - место хранения, т.е. я могу во все ГлПроводка добавить МестоХранения?
Zaval
Да.
Строго говоря - там счет учета ТМЦ. Возможен у ТМЦ счет учета, на котором нет субк МестаХранения? Или оно не второе?
Лучше все-таки прописать проверку счета на наличие и номер субконто.
wmatik
может я неправильно выражаюсь, но с тмц все понятно, там есть субконто МестоХранения. Меня интересует вариант именно с инвестициями, и у инвестиций счета учета бывают 151 - 153 и у них всех стоит 1е субконто - инвестиции, 2е - МестоХранения. Так что думаю дополнительного условия проверки счета можно не добавлять
Zaval
Это уж Вам решать.)))
wmatik
Спасибо за помощь, Zaval
mister-x
Цитата
1С Предприятие 7.7(сетевая версия) - 7.70.027,Конф: ПУБ(7.70.010)
бачу ви постійно працюєте із цією конфігурацією - можна цю інформацію показати у вашому підписі (вказати це можна в профілі), щоб кожен раз про це не повідомляти
wmatik
спасибо за совет, сейчас так и сделаю
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.