Опять Я С документом ЗаказНарядАкт

  • Автор темы tarakan
  • Дата начала
T

tarakan

#1
Доброго время Суток!
огромное спасибо за помощь в прошлых темах VBS
кто не знает: Я делал документ для автосервиса ЗаказНарядАкт
В конфигурации Комплексная конфигурация 4.5 (7.70.483)
у меня уже с ним была проблема: не было проводок вообще!
Но после долгой долбежки VBS по мне всё заработало!(проводки стали проводиться)
НО когда бухгалтер увидела мою работу! Показала мне ещё на кучу недоработок

дак вот проблема:
Мой документ реализовывает как услуги так и потраченные матерьялы.
с проводкой на услуги всё в порядки а вот на товар!
Для ясности я прикреплю две картинки Проводки документа реализации и проводки документа ЗаказНарядакт!
Да и ссылки на MD http://files.mail.ru/60RMJ3
и базу http://files.mail.ru/FJ8N8T






Это реализация


_______________.jpg

Это ЗаказНарядАкт

realiz.jpg
 

Вложения

vbs

Well-known member
18.02.2007
1 708
1
#2
Документ новый внедрить в комплексную - дело простое, а вот проводки к нему - далеко не тривиальное.
Похоже, ты обречен по образу и подобию документа "Реализация" настроить справочники "ДвиженияРегистров"
и "ХозОперации" для "ЗаказНарядАкт" так, чтобы они обеспечивали списание с 41 счета.
Правильным это не выглядит, но если главбух так хочет - придется пробовать именно в этом направлении
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#3
какой молодец однако. базу выложил. видать не подписывал док о не разглашении комерческой тайны ;) ;) ;) :D :D
 
T

tarakan

#4
нет подписывал :()
Так всё я проблему решил:
Скопировал в хоз. операциях элемент реализации и все её проводки!
потом в модуле документа ЗаказНарядАкт
прописал заного движение регистров это выгледит так:
Процедура ПроведениеПоРегистрам()

Перем ТаблСписПартий, ТаблСписПартийКом;
Перем ВремРегистры;
Перем ВремЗаявки, ВремЗаказыЗаявки, ВремОстаткиТМЦ, ВремРезервыТМЦ, ВремПартииНаличие, ВремПокупатели;

// Удаление движений по регистрам.
Для Номер = 1 По Метаданные.Регистр() Цикл
ОчиститьДвижения("Регистр."+Метаданные.Регистр(Номер).Идентификатор);
КонецЦикла;

ТаблицаУслуг = СоздатьОбъект("ТаблицаЗначений");
ТаблицаТМЦ = глПодготовитьТаблицуДокумента(Контекст,1,ТаблицаУслуг);

ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(Фирма);

СписокПараметров=СоздатьОбъект("СписокЗначений");

СписокПараметров.ДобавитьЗначение(ТекущийДокумент(),"ТекДок");
СписокПараметров.ДобавитьЗначение(Склад, "Склад");
СписокПараметров.ДобавитьЗначение(Фирма, "Фирма");
СписокПараметров.ДобавитьЗначение(ФирмаДляОстатковТМЦ,"ФирмаДляОстатковТМЦ");
СписокПараметров.ДобавитьЗначение(Контрагент, "Контрагент");
СписокПараметров.ДобавитьЗначение(Договор, "Договор");

// Сформируем список статусов партий
СтатусПартии = СоздатьОбъект("СписокЗначений");
СписокПараметров.ДобавитьЗначение(КодОперации, "КодОперации");

ВремРегистры = СоздатьОбъект("Регистры");
ВремЗаявки = ВремРегистры.Заявки;
ВремЗаказыЗаявки = ВремРегистры.ЗаказыЗаявки;
ВремОстаткиТМЦ = ВремРегистры.ОстаткиТМЦ;
ВремРезервыТМЦ = ВремРегистры.РезервыТМЦ;
ВремПартииНаличие = ВремРегистры.ПартииНаличие;
ВремПокупатели = ВремРегистры.Покупатели;

ФильтрЗаявок ( ТаблицаТМЦ, ТаблицаУслуг, ВремЗаявки, ВремЗаказыЗаявки);
глФильтрОстатковТМЦ (Контекст, ТаблицаТМЦ, СписокПараметров, ВремОстаткиТМЦ,ВремРезервыТМЦ );
глФильтрПартийТМЦ (Контекст, ТаблицаТМЦ, СписокПараметров, ВремПартииНаличие );
Если КодОперации=Перечисление.КодыОпераций.Продажа Тогда
глФильтрДолгов (Контекст, Договор, СписокПараметров, ВремПокупатели );
КонецЕсли;

Если ИтогиАктуальны()=0 Тогда
ВремРегистры.Актуальность(1);
ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;

// контроль величины кредита клиенту (с учетом права пользователя превышать его)
Если КодОперации = глКО.Продажа Тогда
Если КонтрольКредитаПройден(ВремПокупатели) = 0 Тогда
Возврат;
КонецЕсли;
КонецЕсли;

ДвижениеЗаявокПокупателя(ТаблицаТМЦ, ВремЗаявки, ВремЗаказыЗаявки, ВремРезервыТМЦ); // по ТМЦ
ДвижениеЗаявокПокупателя(ТаблицаУслуг, ВремЗаявки, ВремЗаказыЗаявки, ВремРезервыТМЦ); // по услугам и работам

// остатки ТМЦ
Если глСписаниеОстатковТМЦ (Контекст,ТаблицаТМЦ,СписокПараметров, ВремОстаткиТМЦ, ВремРезервыТМЦ)=0 Тогда
Возврат;
КонецЕсли;

// партии ТМЦ
глСписаниеПартийТМЦ(Контекст,ТаблицаТМЦ,СписокПараметров,ВремПартииНаличие,ТаблС
писПартий,ТаблСписПартийКом);

Если КодОперации=Перечисление.КодыОпераций.ПередачаНаРеализацию Тогда

// надо списанные партии оприходовать на регистр "Партии отданные"
ТаблСписПартий.ВыбратьСтроки();
Пока ТаблСписПартий.ПолучитьСтроку()=1 Цикл
//измерения
Регистр.ПартииОтданные. Фирма = ТаблСписПартий.Фирма;
Регистр.ПартииОтданные. Номенклатура = ТаблСписПартий.Номенклатура;
Регистр.ПартииОтданные. СтатусПартии = ТаблСписПартий.СтатусПартии;
Регистр.ПартииОтданные. Партия = ТаблСписПартий.Партия;

Регистр.ПартииОтданные. Договор = Договор;
Регистр.ПартииОтданные. ДокументПередачи= ТекущийДокумент();
// ресурсы
Регистр.ПартииОтданные. Количество = ТаблСписПартий.Количество;
Регистр.ПартииОтданные. СуммаУпр = ТаблСписПартий.СуммаУпр;
Регистр.ПартииОтданные. СуммаРуб = ТаблСписПартий.СуммаРуб;
Регистр.ПартииОтданные. СуммаБезНДС = ТаблСписПартий.СуммаБезНДС;
Регистр.ПартииОтданные. ПродСтоимость = ТаблСписПартий.СуммаПрод;
// реквизиты
Регистр.ПартииОтданные. КодОперации = глКО.ПередачаНаРеализацию;

Регистр.ПартииОтданные. ДвижениеПриходВыполнить();
КонецЦикла;

// проверим, а не указал ли пользователь услуги или работы - их отдавать на релизацию нельзя
ТаблицаУслуг.ВыбратьСтроки();
Если ТаблицаУслуг.ПолучитьСтроку()= 1 Тогда
глНеПроводить(Контекст,"Услуги и работы отдавать на реализацию невозможно! ("+ТаблицаУслуг.Номенклатура+")");
Возврат;
КонецЕсли;


ИначеЕсли КодОперации=Перечисление.КодыОпераций.Продажа Тогда

// движение оборотного регистра "продажи"
ТаблСписПартий.ВыбратьСтроки();
Пока ТаблСписПартий.ПолучитьСтроку()=1 Цикл
глДвижениеОборотовПродаж(Контекст,
Фирма,
Контрагент,
ТаблСписПартий.Партия.Поставщик,
ТаблСписПартий.Номенклатура,
ТаблСписПартий.Количество,
ТаблСписПартий.СуммаУпр,
ТаблСписПартий.СуммаПродУпр);
КонецЦикла;

ТаблСписПартий.Свернуть("СтатусПартии,СтавкаНП,СтавкаНДС,ДоговорКомитента","СуммаПрод,СуммаПродУпр,СуммаПродРуб,НДСПрод,НППрод,СуммаБезНДС");
ТаблСписПартий.НоваяКолонка("КредДокумент");
ТаблСписПартий.НоваяКолонка("ВидДолга");
ТаблСписПартий.НоваяКолонка("Сумма");
ТаблСписПартий.НоваяКолонка("СуммаУпр");
ТаблСписПартий.НоваяКолонка("СуммаРуб");
ТаблСписПартий.НоваяКолонка("СуммаНДС");
ТаблСписПартий.НоваяКолонка("СуммаНП");
ТаблСписПартий.НоваяКолонка("Себестоимость");
ТаблСписПартий.НоваяКолонка("ОблагаетсяНП");

ТаблСписПартий.ВыбратьСтроки();
Пока ТаблСписПартий.ПолучитьСтроку()=1 Цикл
ТаблСписПартий.КредДокумент = ТекущийДокумент();
ТаблСписПартий.ВидДолга = ВидДолгаПоСтатусу(ТаблСписПартий.СтатусПартии);
ТаблСписПартий.Себестоимость= ТаблСписПартий.СуммаБезНДС;
ТаблСписПартий.СуммаНДС = ТаблСписПартий.НДСПрод;
ТаблСписПартий.СуммаНП = ТаблСписПартий.НППрод;
ТаблСписПартий.Сумма = ТаблСписПартий.СуммаПрод;
ТаблСписПартий.СуммаУпр = ТаблСписПартий.СуммаПродУпр;
ТаблСписПартий.СуммаРуб = ТаблСписПартий.СуммаПродРуб;
ТаблСписПартий.ОблагаетсяНП = УчитыватьНП;
КонецЦикла;

СписокПараметров.Установить("ЗнакДвижения", 1); // идет увеличение долга
глДвижениеДолгов(Контекст,Договор,ТаблСписПартий,СписокПараметров,ВремПокупатели
);

// запомним, что мы продали принятые на комиссию товары...
ТаблСписПартийКом.ВыбратьСтроки();
Пока ТаблСписПартийКом.ПолучитьСтроку()=1 Цикл
Регистр.РеализованныйТовар.Фирма = ТаблСписПартийКом.Фирма;
Регистр.РеализованныйТовар.Договор = ТаблСписПартийКом.Партия.ДоговорПоставщика;
Регистр.РеализованныйТовар.Номенклатура = ТаблСписПартийКом.Номенклатура;
Регистр.РеализованныйТовар.Партия = ТаблСписПартийКом.Партия;
Регистр.РеализованныйТовар.ДокПродажи = ТекущийДокумент();
Регистр.РеализованныйТовар.Количество = ТаблСписПартийКом.Количество;
Регистр.РеализованныйТовар.ПродСтоимость = ТаблСписПартийКом.СуммаПродРуб - ТаблСписПартийКом.НППрод;
Регистр.РеализованныйТовар.ДвижениеПриходВыполнить();
КонецЦикла;

// реализация услуг
глДвижениеПартийУслуг(Контекст, ТаблицаУслуг, СписокПараметров);

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

// теперь задолженность покупателя за отпущенные услуги или работы
СписокПараметров.Установить("ЗнакДвижения",1); // увеличился долг клиента

ТаблицаУслуг.Свернуть("Вид,СтавкаНДС,СтавкаНП","Сумма,СуммаУпр,СуммаРуб,СуммаНДС,СуммаНП");

ТаблицаУслуг.НоваяКолонка("КредДокумент");
ТаблицаУслуг.НоваяКолонка("ВидДолга");
ТаблицаУслуг.НоваяКолонка("Себестоимость");
ТаблицаУслуг.НоваяКолонка("ДоговорКомитента");
ТаблицаУслуг.НоваяКолонка("ОблагаетсяНП");

ТаблицаУслуг.ВыбратьСтроки();
Пока ТаблицаУслуг.ПолучитьСтроку()=1 Цикл

ТаблицаУслуг.КредДокумент = ТекущийДокумент();
Если ТаблицаУслуг.Вид = Перечисление.ВидыНоменклатуры.Услуга Тогда
ТаблицаУслуг.ВидДолга = глВД.ДолгЗаУслуги;
Иначе
ТаблицаУслуг.ВидДолга = глВД.ДолгЗаРаботы;
КонецЕсли;

ТаблицаУслуг.Себестоимость = 0;
ТаблицаУслуг.ОблагаетсяНП = УчитыватьНП;

КонецЦикла;

глДвижениеДолгов(Контекст,Договор,ТаблицаУслуг,СписокПараметров,ВремПокупатели);

КонецЕсли;

КонецПроцедуры
 

vbs

Well-known member
18.02.2007
1 708
1
#5
Ну вот, справился !
А сколько бесценного опыта приобрел !