До старта конференции

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

Обработки - Обработка документов

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

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

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

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

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

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

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

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

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


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

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

См. также

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

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

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

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

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

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

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

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


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

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


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


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

Т.е. я не к тому, чтобы повыпендриваться. Просто совет.
Я сам когда пишу код, бывает ситуация, когда можно написать некрасиво, а совесть гложет - ну некрасиво же процессорные ресурсы транжирить)
Короче, придурь кодерская, обычные люди не поймут.
5. Дмтрий Иваньков (pollikarp) 74 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) 4 28.05.15 09:51 Сейчас в теме
Спс за обработку.
Внес изменения, у меня при "Без НДС" ставило 18%, но уже все гуд.

Вопрос, не получается от обработки добиться, чтоб она при создании в справочнике номенклатуры ,выставляла "Тип номенклатуры"- "Товары" если есть возможность подсказать, что дописать?
9. Павел Алексеенко (qwinter) 510 28.05.15 10:18 Сейчас в теме
(6) Soikalv, (8) Chel, так есть куча переводов типовой на 8.2 и 8.3, от простого перевода на уф, до супер универсальных)
10. Алексей Титов (r24al) 11 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).Получить(строкаТП));		
КонецЦикла;	
...Показать Скрыть
Оставьте свое сообщение