Имя: Пароль:
1C
 
Программное создание "Поступления товаров и услуг"
0 nio-kun
 
12.01.11
12:22
Здравствуйте!

У нас используется 1С 8.1 с немножко изменённой УТ 10.3.11.4. Передо мной стоит задача импортировать в 1С номенклатуру и остатки из DBF-файла. Для этого читаю из файла строчки, выуживаю наименования и артикулы, заношу их в справочник номенклатуры. После этого добавляется соответствующая строчка в документ "Поступление товаров и услуг": артикул, количество, закупочная цена и прочие реквизиты. Всё вроде проходит гладко, справочник номенклатуры заполняется, документ "Поступление товаров и услуг" проводится, потом также программно создаю и провожу "Установку цен номенклатуры"... Вроде всё хорошо. НО! На складе - пусто! Ни один товар из "Поступления..." на склад не попадает и в аедомости остатков по складам тоже не фигурирует. А между тем всё проведено. Если делать всё вручную - товар на склад попадает, но всё вручную вбивать - нереально, там тысячи товаров от сотни поставщиков.

Работает всё так:

Попытка Б =  Новый XBase;
Исключение
 Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

Б.ОткрытьФайл(Файл,,1);
Б.Кодировка=КодировкаXBase.OEM;    

Если Б.Открыта()=0 Тогда
Сообщить("Не удалось открыть файл DBF","!");
Возврат;
КонецЕсли;

СПр=Справочники.Контрагенты;
СПД = Справочники.ДоговорыКонтрагентов;

СППр=Справочники.Производители;
СПМ = Справочники.Марки;
СР=Справочники.Размеры;
СД=Справочники.РазмерыДисков;
СпНом=Справочники.Номенклатура;
РС=Справочники.Радиусы;

ТекущийКонтрагент="";

//Считываем контрагента
ТекущийКонтрагент=СокрЛП(Б.POST);
Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(ТекущийКонтрагент, Истина);
   
//Создаём документ "Поступление товаров и услуг" и заполняем шапку
ПТУ=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
ПТУ.ВалютаДокумента=Справочники.Валюты.НайтиПоНаименованию("руб");
ПТУ.Контрагент=Контрагент;
ПТУ.Организация = Справочники.Организации.НайтиПоКоду("000000001");
ПТУ.ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Основной договор", истина,, Контрагент);
ПТУ.Дата = ТекущаяДата();
ПТУ.Грузоотправитель = Контрагент;
ПТУ.Грузополучатель = Справочники.Организации.НайтиПоКоду("000000001");
ПТУ.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
ПТУ.ОтражатьВБухгалтерскомУчете=Истина;
ПТУ.ОтражатьВНалоговомУчете = Истина;
ПТУ.ОтражатьВУправленческомУчете = Истина;
ПТУ.СкладОрдер = Справочники.Склады.НайтиПоНаименованию("Главный склад");
ПТУ.ТипЦен=Справочники.ТипыЦенНоменклатурыКонтрагентов.НайтиПоНаименованию("Закупочная", истина,,Контрагент);
ПТУ.КратностьВзаиморасчетов = 1;
ПТУ.КурсВзаиморасчетов=1;
ПТУ.Записать();
   
Пока СокрЛП(Б.POST)=ТекущийКонтрагент Цикл

//... Тут анализируем строчку номенклатуры,
// формируем наименование, артикул, марку, модель...

Произв=СокрЛП(Б.FIRM);
Производитель=СППр.НайтиПоНаименованию(Произв, истина);
Мар=Сокрлп(Б.MODEL);
Марка=СПМ.НайтиПоНаименованию(Мар, истина);
Размер=СокрЛП(Б.SIZE);
Радиус=СокрЛП(Б.RADIUS);
Родитель=СпНом.НайтиПоНаименованию(Радиус, Истина, СпНом.НайтиПоНаименованию("Шины",Истина));
Наименование="Шина "+Производитель.Наименование+" "+Марка.Наименование+" "+СокрЛП(Размер)+" "+Радиус;

   НовШина=СпНом.СоздатьЭлемент();
   НовШина.Наименование=Наименование;
   НовШина.НаименованиеПолное = Наименование;
   НовШина.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
   НовШина.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Шина");
НовШина.Производитель=СПпр.НайтиПоНаименованию(Произв, истина);
НовШина.Марка=Марка;
НовШина.Радиус=РС.НайтиПоНаименованию(Радиус, истина);
НовШина.Размер=Ср.НайтиПоНаименованию(Размер, истина);
НовШина.НР=НовШина.Размер.Наименование;
   
Артикул=СокрЛП(СтрЗаменить(Б.NUM, " ", ""))+"ш";
НовШина.Артикул=Артикул;
НовШина.Родитель=Родитель;
НовШина.Записать();
Штуки=Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
Штуки.Наименование="шт";
Штуки.ЕдиницаПоКлассификатору=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
   Штуки.Владелец=НовШина.Ссылка;
   Штуки.Коэффициент=1;
   Штуки.Записать();
   НовШина.ЕдиницаХраненияОстатков=Штуки.Ссылка;
   НовШина.ЕдиницаИзмеренияМест=Штуки.Ссылка;
   НовШина.ЕдиницаДляОтчетов=Штуки.Ссылка;
   НовШина.Записать();
   
//Теперь добавляем только что созданный товар в документ прихода    

НоваяСтрока=ПТУ.Товары.Добавить();
Ном=СпНом.НайтиПоРеквизиту("Артикул", Артикул, Родитель);
НоваяСтрока.Номенклатура=Ном;
Кол = Число(Сокрлп(Б.REZ));
Цен = Число(Сокрлп(Б.ZP))/Кол;
НоваяСтрока.Количество=Кол; НоваяСтрока.Цена=Цен;
НоваяСтрока.Сумма=Кол*Цен;
НоваяСтрока.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
НоваяСтрока.СуммаНДС=0;
НоваяСтрока.ЕдиницаИзмерения=Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт", истина, ,Ном);
ПТУ.Записать();

//Проводим документ
Попытка
   ПТУ.Проведен=Истина;
Исключение
Сообщить ("Ошибка при проведении! Строка "+Стр)
КонецПопытки;

//Переходим на следующую строку
Если Стр < Б.КоличествоЗаписей() Тогда
Стр=Стр+1;

Б.Перейти(Стр);
   Иначе
       Прервать;

//....
//Ну и в конце концов:

Б.ЗакрытьФайл();


Что же я сделал не так? Почему проведённый документ не добавляет товара на склад?
1 КМ155
 
12.01.11
12:24
(0)[ПТУ.Проведен=Истина;]
окуеть
2 butterbean
 
12.01.11
12:24
(0) не ПТУ.Проведен = Истина, а ПТУ.Записать(РежимЗаписиДокумента.Проведение)
3 Wobland
 
12.01.11
12:24
всё не читал, но проведение - это у тебя вот это:
ПТУ.Проведен=Истина;
?
4 Wobland
 
12.01.11
12:26
и чтение из ДБФ немного по-другому делается
5 nio-kun
 
12.01.11
13:07
butterbean, изменил, как Вы подсказали - никакой разницы.
Можно вообще не проводить документ программно, а провести потом вручную - результата это не меняет, товары на складе не появляются.
6 Wobland
 
12.01.11
13:09
(5) движений по регистру точно нет?
7 rbcvg
 
12.01.11
13:10
(5) "товары на складе не появляются" - движения то есть?
8 Dmitriy_76
 
12.01.11
13:23
Добавь вид поступления на склад(у тебя видимо ставится по ордеру видимо...):

ПТУ.ПоступлениеТоваровУслуг.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
9 Dmitriy_76
 
12.01.11
13:26
точнее так

ПТУ.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад
10 КМ155
 
12.01.11
13:26
(5)[товары на складе не появляются.]
и не появятся
в ТЧ нет Коэффициента, без него не работает пересчет единиц измерения
11 nio-kun
 
12.01.11
13:36
Если имеется в виду "Движения документа по регистрам" - да, есть. Даже отчёт по закупкам формируется!
12 ДенисЧ
 
12.01.11
13:37
Коэффициент в ТЧ, коэффициент у единицы
13 PVV65
 
12.01.11
13:41
(11) Так посмотри, как4ие движения сделал документ. Сразу станет ясно какие измерения не записаны. И там копать.
14 Dmitriy_76
 
12.01.11
13:42
(10) без коэффицента документ бы не провелся... а он его пытался руками проводить...

(11) что с ордерной схемой поступления (что у тебя в доке стоит ? по ордеру или на склад )?
15 КМ155
 
12.01.11
13:43
(11) [Движения документа по регистрам" - да, есть]
чё есть,по:
ТоварамНаСкладах
ТоварамОрганизаций
ПартиямТоваровНаСкладах(уу)

нет ни куя
16 ДенисЧ
 
12.01.11
13:43
(14)
ПТУ.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;

Читай внимательно
17 Dmitriy_76
 
12.01.11
13:45
(16) ага. не увидел эту строчку в его коде
18 КМ155
 
12.01.11
13:51
(15) + 1
создай в ПТиУ 1 строчку Руками, проведи
убедись в том, что остатки появились и Рг двинулись
заполни в ТЧ все необходимые реквизиты, либо в лоб
либо в цикле типовую процедуру заполнения ТЧ
19 nio-kun
 
12.01.11
13:51
КМ155, Спасибо!

Добавил

НоваяСтрока.Коэффициент=1;

И всё заработало как следует!
Спасибо!

Тему можно закрывать, сердечно благодарю всех за помощь!
20 КМ155
 
12.01.11
13:53
(19) ОК