Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 15:33

автоматическое создание приходных из 1С

Автор frontera, 29 мая 2012, 14:21

0 Пользователей и 1 гость просматривают эту тему.

frontera

Здрасте всем!
Буду краток: создал файлик epf (как я понимаю внешняя форма или обработчик) для загрузки и автоматического создания документа "приход товара"
с одной стороны все работает, с другой:
1. сумма считается (вижу отладчиком), но не выводится в табличной части нового документа
2. СтавкаНДС вообще никак не хочет устанавливаться

Альфа-Авто: Автосалон+Автосервис+Автозапчасти. Редакция 4.1 (4.1.01.02_003)
1С 8.1.15.14

код
Перем Приложение;

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
ВыборФайла();
КонецПроцедуры

Функция ВыборФайла()
ДиалогОткрытияФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПолноеИмяФайла="";
Фильтр = "Любой файл(*.*)|*.*";
ДиалогОткрытияФайла.Фильтр=Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор=Ложь;
Если ДиалогОткрытияФайла.Выбрать() Тогда
ИмяФайла=ДиалогОткрытияФайла.ПолноеИмяФайла;
ВыбФайл=Новый Файл(ИмяФайла);
Иначе
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
перем Док;
Состояние("Открытие файла");
Приложение = Новый COMОбъект("Excel.Application");
Приложение.Application.Workbooks.Open(ИмяФайла);

Если Приложение=Неопределено Тогда
Предупреждение("MS Excel не загружен");
Возврат;
КонецЕсли;

Запросик = Новый Запрос;
Запросик.УстановитьПараметр("Период",ТекущаяДата());
Запросик.УстановитьПараметр("Валюта",ВыбВалюта);
Запросик.Текст = "ВЫБРАТЬ
| КурсыВалютСрезПоследних.Курс,
| КурсыВалютСрезПоследних.Кратность
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних
|ГДЕ
| КурсыВалютСрезПоследних.Валюта = &Валюта";
РР = Запросик.Выполнить().Выбрать();
РР.Следующий();
Курс = рр.Курс;

ОснЕдИзм = Константы.ОсновнаяЕдиницаИзмеренияКоличества.Получить();

Ох = Новый Запрос;
Ох.УстановитьПараметр("Владелец",ТипНомеклатуры);
Ох.УстановитьПараметр("Наиме","шт");
Ох.Текст = "ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
|ГДЕ
| ЕдиницыИзмерения.Владелец = &Владелец
| И ЕдиницыИзмерения.Наименование ПОДОБНО &Наиме";
Кака = Ох.Выполнить().Выбрать();
Кака.Следующий();
СуперОснЕдИзм = Кака.Ссылка;



Док = Документы.ПоступлениеТоваров.СоздатьДокумент();
Док.СкладКомпании = ВыбСкладКомпании;
Док.Организация = ВыбОрганизации;
Док.ПодразделениеКомпании = ВыбПодразделения;
Док.ХозОперация = ХозОперация;
Док.Дата = ТекущаяДата();
Док.ВалютаДокумента = ВыбВалюта;
Док.Автор = ПараметрыСеанса.Пользователь;
Док.ТипЦен = ТипЦен;
Док.КурсДокумента =Курс;
Док.УстановитьНовыйНомер();
Для ОбрабатываемаяСтрока = НачальнаяСтрока По 1000000 Цикл    //ВсегоСтрок+10
Если (ПустаяСтрока(СокрЛП(Приложение.ActiveSheet.Cells(ОбрабатываемаяСтрока,НомАртикул).Value) )= Истина) Тогда
Прервать;
КонецЕсли;
ОбработкаПрерыванияПользователя();

Артикул  = Приложение.ActiveSheet.Cells(ОбрабатываемаяСтрока,НомАртикул).Value;
Цена     = Приложение.ActiveSheet.Cells(ОбрабатываемаяСтрока,номЦена).Value;
КолВо    = Приложение.ActiveSheet.Cells(ОбрабатываемаяСтрока,номКолво).Value;
Если номГТД > 0 Тогда
ГТД = Приложение.ActiveSheet.Cells(ОбрабатываемаяСтрока,номГТД).Value;
КонецЕсли;
//Стоимость     = Приложение.ActiveSheet.Cells(ОбрабатываемаяСтрока,номСтоимость).Value;

АртикулСтрока = СокрЛП(Формат(Артикул,"ЧГ="));


Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Артикул",АртикулСтрока);
Запрос.Текст = "ВЫБРАТЬ
               | Номенклатура.Ссылка,
               | Номенклатура.ОсновнаяЕдиницаИзмерения,
   | [b]Номенклатура.СтавкаНДС.Ссылка[/b] КАК [b]ТоварНДС[/b]
               |ИЗ
               | Справочник.Номенклатура КАК Номенклатура
               |ГДЕ
               | Номенклатура.Артикул = &Артикул";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Если Выборка.Следующий() Тогда
нс = Док.Товары.Добавить();
Нс.Номенклатура = Выборка.Ссылка;

[b]Нс.СтавкаНДС = Выборка.ТоварНДС;[/b]

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

Нс.Цена         = Цена / Колво;
Нс.Количество   = Колво;
Нс.Коэффициент  = 1;
Нс.Сумма        = Цена;
Нс.СуммаВсего = Нс.Сумма;



ГТДСтрока = СокрЛП(ГТД);
ЗапросГТД = Новый Запрос;
ЗапросГТД.УстановитьПараметр("ГТД", ГТДСтрока);

ЗапросГТД.Текст = "ВЫБРАТЬ
   | ГТД.Ссылка
   |ИЗ
   | Справочник.ГТД КАК ГТД
   |ГДЕ
   | ГТД.Наименование = &ГТД";
   
РезультатГТД = ЗапросГТД.Выполнить().Выбрать();
РезультатГТД.Следующий();

Нс.ГТД = РезультатГТД.Ссылка;

Иначе
Сообщить("Не найден товар с кодом:"+Артикул);
КонецЕсли;
КонецЦикла;
Если Док.Товары.Количество()>0 Тогда
//Док.Записать(РежимЗаписиДокумента.Запись);

Форма = Док.ПолучитьФорму();

Форма.Открыть();
Форма.Обновить();
Приложение.Application.Workbooks.Close();     
Приложение = "";

Предупреждение("Загрузка выполнена!");
Иначе
Предупреждение("Пустой документ!",5);
КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
КонецПроцедуры

Процедура ПриЗакрытии()


так-же пробовал вставить тупо как выбор из формы - никакого результата, Нс.СтавкаНДС = выбНДС (читаем из формы) - не работает, Нс.СтавкаНДС = выбНДС.Ссылка - не работает..
уже весь мозг сломал...

Прошу сильно не пинать - это моя первая работа в 1С

Zavs

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

Номенклатура.СтавкаНДС.Ссылка КАК ТоварНДС

нужно заменить на

Номенклатура.СтавкаНДС КАК ТоварНДС

Посмотрите в отладчике значение и тип Выборка.ТоварНДС для двух разных случаев. При правильном построении запроса тип этого значения должен быть перечисление.

Если я ошибаюсь, то прошу прощения.

frontera

Все равно пишет "БезНДС" в табличной части.. в отладчике то я все данные вижу... то есть оно их вытаскивает в любом случае, но не вставляет...

я уже по разному пробовал, ничего не помогает, и суммы не считаются, хотя например ГТД - на ура тащит... цену, количество тоже без вопросов вставляет... может там по хитрому форму после создания надо как-то пересчитать (чтоб хотябы суммы работали...)
а может надо передать общую сумму документу?

Zavs

А почему вы не записываете документ перед открытием формы? Уже пробовали и не помогло?

Когда вы в отладчике смотрите после присваивания ставки НДС на реквизит табличной части СтавкаНДС, то какое там значение?

frontera

ЦитироватьА почему вы не записываете документ перед открытием формы? Уже пробовали и не помогло?

Очень неохота в боевой базе создавать кучу тестовых документов, которые потом прийдется удалять... хотя мне намекали что сохранение должно помочь (ибо там даже строчка есть закоментированная), помогло или нет - не помню если честно, при записи он на что-то ругался... могу попробовать....

ЦитироватьКогда вы в отладчике смотрите после присваивания ставки НДС на реквизит табличной части СтавкаНДС, то какое там значение?
18% во всех случаях (если оно указано)

Zavs

Если вы не записываете документ, то при открытии обработчик ПриОткрытии() может что-то не видеть у объекта и заполнять ставку НДС по умолчанию установленную для вашего пользователя. Так что попробуйте записать. А с суммой - это последствия проблем с НДС скорее всего.

frontera

В общем либо безсонная ноч, либо я уже куда-то улетел в мыслях (либо вчерашний ДП) в общем спотыкаюсь при записи в договор.. в форме устанавливаю СправочникСсылка.ДоговорыВзаиморасчетов - он мне конечно вываливает ВСЕ
а как отобрать сразу только с конкретным контрагентом?!

Zavs

Не понял. Где отобразить только с конкретным контрагентом?

frontera

в форме выбор договора чтоб был привязан к выбранному контрагенту

Zavs

В свойствах элемента формы Договор установить параметр "Связь по владельцу" - Контрагент.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск