выбор реквизита склад в ТЧ

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

tarakan

#1
Здравствуйте!
я решил в 1с 7.7 космплексная конфа 4,5 сделать что бы реквизит склад в документах выбирался из тобличной части!(для того что бы в документе ПриходТМЦ можно было за один документ разное кол. деталей, разложить на несколько складов)
НО я встрял на модуле документа!

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

документ проводиться но в отчётах деталь есть а по складам её нет!
далее следует:

// Проведение по регистрам оперативного учета.
Если (ПустоеЗначение(ВидыДвижений) = 1) ИЛИ (Найти(ВидыДвижений, "Регистр") <> 0) Тогда
ПроведениеПоРегистрам();
Если СтатусВозврата() = 0 Тогда
Возврат;
КонецЕсли;
КонецЕсли
Если ДатаДок >= глДатаПоПриказу147 Тогда
СкорретироватьДвиженияПартийПоАвансам();
КонецЕсли;
глПриПроведении(Контекст, ВидыДвижений);
КонецПроцедуры
скорей всего нужно переписать проведение по регистрам но если честно то ни разу этого не делал и даже не имею представления как это делать!
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#2
скорей всего нужно переписать проведение по регистрам но если честно то ни разу этого не делал и даже не имею представления как это делать!
Дык в чем проблема? погляди процедуру ПроведениеПоРегистрам() и пожалуй в нее и внеси необходимые правки
 
T

tarakan

#3
Код:
Процедура ПроведениеПоРегистрам()

Перем ВремРегистры;
Перем ВремПоставщики, ВремЗаказы, ВремЗаказыЗаявки;

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

ТаблицаДокумента=глПодготовитьТаблицуДокумента(Контекст);

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

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

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

ВремРегистры	 = СоздатьОбъект("Регистры");
ВремЗаказы		 = ВремРегистры.Заказы;
ВремЗаказыЗаявки = ВремРегистры.ЗаказыЗаявки;

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

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

// Принимать на реализацию будет только товары
Если КодОперации=Перечисление.КодыОпераций.ПриемНаРеализацию Тогда

ТаблицаДокумента.ВыбратьСтроки();
Пока ТаблицаДокумента.ПолучитьСтроку()=1 Цикл
ТаблицаДокумента.ВидТМЦ		= Перечисление.ВидыТМЦ.Товар;
КонецЦикла;	 
КонецЕсли;	

ДвижениеЗаказов(ТаблицаДокумента, ВремЗаказы, ВремЗаказыЗаявки);
глПриходОстатковТМЦ		(Контекст,ТаблицаДокумента,СписокПараметров);
глОприходованиеПартийТМЦ(Контекст,ТаблицаДокумента,СписокПараметров);

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

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

ТаблицаДокумента.ВыбратьСтроки();
Пока ТаблицаДокумента.ПолучитьСтроку()=1 Цикл
ТаблицаДокумента.ВидДолга		= ВидДолгаПоТМЦ(ТаблицаДокумента.ВидТМЦ);
ТаблицаДокумента.КредДокумент  = ТекущийДокумент();
КонецЦикла;	 

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

КонецПроцедурыПроцедура ПроведениеПоРегистрам()
Если не сложно том ожно хотя бы тыкнут где надо испровлять?
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
ну я бы для начала поглдел отладчиком - попадает ли склад в СписокПараметров. Если попадает - смогтреть дальше процедуры, если нет - тогда разбираться с тем как у тебя заполняется и хранится склад в доке
 

vbs

Well-known member
18.02.2007
1 708
1
#5
Придется лопатить процедуру глСписаниеОстатковТМЦ в глобальном модуле. Стандартно она обеспечивает списание с одного склада (см.шапку документа),
тебе же нужно в ней перебрать строки накладной (конт.ВыбратьСтроки()) и обеспечить списание с разных складов
 
H

Hryv

#6
ИМХО задача такого уровня сложности, что если спрашивать советы на форуме, то лучше вообще за нее не браться
последствия могут быть плачевными

Кроме того, не спроста изначально все приходуется на один склад, а затем перемещается куда надо
 

vbs

Well-known member
18.02.2007
1 708
1
#7
Кроме того, не спроста изначально все приходуется на один склад, а затем перемещается куда надо
Что тут еще добавить ? Я бы тоже не стал связываться с товарами с разных складов в одной накладной ;)
 
T

tarakan

#8
Придется лопатить процедуру глСписаниеОстатковТМЦ в глобальном модуле. Стандартно она обеспечивает списание с одного склада (см.шапку документа),
тебе же нужно в ней перебрать строки накладной (конт.ВыбратьСтроки())
Это я уже и сам понял! Осталось только облажиться Литературой!