gifts2017

Загрузка приходных накладных из файлов Excel

Опубликовал Алексей Титов (r24al) в раздел Обработки - Обработка документов

  Поставщики часто присылают данные о поставках в виде накладных и счет-фактур в формате Excel. Что бы не вводить данные в базу Бухгалтерии 8.3 вручную, была сделана загрузка.
  Данная обработка изначально была сделана под немного доработанную версию 1С:Бухгалтерия 8.3, но используется и в типовой базе.
  Ей можно встроить в базу или пользоваться как внешней обработкой.
 
 

 В обработке указываем:

  • Ссылку на сам файл загрузки

  • Компанию-поставщик

  • Организацию, по которой будет формироватьсяприход

  • Группу для создания новой номенклатуры

  • Единицу измерения по-умолчанию

  • И данные по строкам с какой и по какую считывать, а так же по номерам колонок на основе данных из файла xls

Для примера мой файл счет-фактуры в Excel выглядит вот так:


Скачать файлы

Наименование Файл Версия Размер
Обработка загрузки версия 1.10 74
.epf 11,38Kb
16.07.14
74
.epf 1.10 11,38Kb Скачать
Обработка загрузки 14
.epf 13,29Kb
14.07.14
14
.epf 1.00 13,29Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Папанов (El_Loco) 12.07.14 10:06
У вас в цикле идет такой вот запрос
	Запрос1.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Наименование КАК Наименование,
		|	Номенклатура.Ссылка КАК Ном
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Наименование = &Наименование
		|
		|УПОРЯДОЧИТЬ ПО
		|	Наименование";
...Показать Скрыть

А не проще так?
Ссылка = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);

Зачем запрос ради ссылки городить?

И еще смутило название реквизита "КолонкаЦена":
НоваяСтрокаПоступления.Сумма = Число(СтрокаТаб.КолонкаЦена);

Сумма это Цена*Количество. Реквизит обозвали не совсем удачно.

И напоследок:
		Если НЕ ЗначениеЗаполнено(СтрокаТаб.КолонкаЦена) тогда
			НоваяСтрокаПоступления.Сумма = 1;
		Иначе

По мне так лучше не заполнять реквизит в таблице, если его нет в экселевской таблице. Пусть юзер руками допишет.

Обработка-то полезная, но код грязноватый.
sergiobargio1; +1 Ответить 3
2. Макас (makas) 14.07.14 11:12
(1) El_Loco,


По мне так лучше не заполнять реквизит в таблице, если его нет в экселевской таблице. Пусть юзер руками допишет.

Обработка-то полезная, но код грязноватый.


Юзер = обычный бухгалтер, он 1С-ой "абракадабры" не знает и не должен знать.


.... код не грязный, а авторский :)
sergiobargio1; +1 Ответить 1
3. Алексей Титов (r24al) 14.07.14 14:53
(1) El_Loco,
Код исправлю и приведу к нормальному виду :)
А по запросу... там много чего на основе этой обработки делал... вот и остались следы непонятные... она у меня и в 8.2 и в Комплексной автоматизации до этого работала.
4. Алексей Папанов (El_Loco) 14.07.14 16:46
(2) makas, юзеру пофиг, но чисто для себя. Программист должен писать чисто. Ну и если ты выкладываешь на обозрение, то может быть твой код кто-нибудь использует. Надо думать о ближних братьях своих ;)

Т.е. я не к тому, чтобы повыпендриваться. Просто совет.
Я сам когда пишу код, бывает ситуация, когда можно написать некрасиво, а совесть гложет - ну некрасиво же процессорные ресурсы транжирить)
Короче, придурь кодерская, обычные люди не поймут.
5. Дмтрий Иваньков (pollikarp) 16.07.14 14:15
(1) El_Loco, По 1 пункту не согласен, не проще и замер производительности тому доказательство, Ваш способ в крупной базе будет искать дольше
6. Зоя Сорокина (Soikalv) 23.01.15 15:54
ничего. работает, интересно. Хотя типовая из 8.2. была надежнее и универсальнее
7. Зоя Сорокина (Soikalv) 23.01.15 15:54
8. Игорь Б (Chel) 28.05.15 09:51
Спс за обработку.
Внес изменения, у меня при "Без НДС" ставило 18%, но уже все гуд.

Вопрос, не получается от обработки добиться, чтоб она при создании в справочнике номенклатуры ,выставляла "Тип номенклатуры"- "Товары" если есть возможность подсказать, что дописать?
9. Павел Алексеенко (qwinter) 28.05.15 10:18
(6) Soikalv, (8) Chel, так есть куча переводов типовой на 8.2 и 8.3, от простого перевода на уф, до супер универсальных)
10. Алексей Титов (r24al) 29.05.15 19:07
(8) Chel,

В коде где происходит создание номенклатуры надо дописать:
НоваяНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар",Истина);
Т.е. программа найдет в справочнике элемент с названием Товар и подставит его во вновь создаваемый.

Пишу по памяти, так что могу ошибиться в названии справочников.
11. y-ha Воронцова (y-ha) 24.10.15 23:56
После сохранения настроек они не восстанавливаются! Проверено на:
Бухгалтерия предприятия, редакция 3.0 (3.0.41.49) (http://v8.1c.ru/buhv8/)
12. y-ha Воронцова (y-ha) 24.10.15 23:58
У новой номенклатуры единица измерения не устанавливается вид номенклатуры - может его в настройки вытащить?
Неправильно определяется ставка НДС, когда она записана как "18", а не "18%".
13. y-ha Воронцова (y-ha) 25.10.15 00:51
Нумерация в соответствии идет с 0 а не с 1. Это я к
лКолонкаНоменклатура = мколонки[1].Значение;

в этом случае берется колонка Количество. Все бы ничего, но у количества часто считается общее количество, которое располагается в строке ниже. При этом пустые строки будут криво отрабатываться.
В моем варианте была доработана загрузка единиц измерения (по коду ОКЕИ), установка вида номенклатуры, переделка ставки НДС.
Но в общем и целом, С небольшими изменениями, обработка со своей задачей справляется. За что спасибо.

P.S. Для поступлений с большим количеством строк лучше переделать загрузку по ячейкам на загрузку через массив:
Excel     = Новый COMОбъект("Excel.Application");
WB         = Excel.Workbooks.Open(ПутьКФайлу);
WS         = WB.Worksheets(1); //указываем номер листа - 1
arr     = WS.UsedRange.Value;  //передаём таблицу в переменную
WB.Close(0);
МассивКолонок = arr.Выгрузить(); //Выгружаем таблицу в массив
всегоСтрок   = (МассивКолонок.Получить(0).Количество())-1;
Для строкаТП = 1 По всегоСтрок Цикл //Работаем со строкой
	НовСтрока = СписокЗагрузки.Добавить();
	НовСтрока.Артикул		= СокрЛП(Формат(МассивКолонок.Получить(0).Получить(строкаТП),"ЧГ=0"));
	НовСтрока.Наименование          = СокрЛП(МассивКолонок.Получить(1).Получить(строкаТП));
	НовСтрока.НаименованиеПолное    = СокрЛП(МассивКолонок.Получить(1).Получить(строкаТП));
	НовСтрока.ЕдиницаИзмерения	= СокрЛП(МассивКолонок.Получить(2).Получить(строкаТП));		
КонецЦикла;	
...Показать Скрыть