При работе в 1С, особенно когда много документов или номера редактируются ручками, можно получить ошибки вида:
Значение поля "Код" не уникально или Значение поля "Номер" не уникально
Что делать? Перенумеровывать
Нужно восстановить нумерацию документов или элементов справочника:
Пользователю Посмотрите: Перенумерация документов, справочников , и сама Обработка Универсальные подбор и обработка объектов
Сбилась автонумерация у документа или справочника с текстовым кодом, что делать?
Программисту: Посмотрите примеры выше и дополнительно: Как сбросить счётчик нумерации документов или справочников
В модуле ПередЗаписью() дописать функционал проверки:
Код 1C v 8.х …
//Проверим текущий номер документа и установим новый если он занят
Если НомерЗанят(Номер) Тогда
УстановитьНовыйНомер();
КонецЕсли;
//функция НомерЗанят() по функционалу очень проста
// в вашей ситуации возможно ее придется изменить
Функция НомерЗанят(НомерДока)
Результат = Ложь;
Попытка
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| Документ_.Номер
|ИЗ
| Документ.Документ КАК Документ_
|ГДЕ
| Документ_.Номер =НомерДока
| И Не Документ_.Ссылка =ТекДок»;
Запрос.УстановитьПараметр(«НомерДока», НомерДока);
Запрос.УстановитьПараметр(«ТекДок», Ссылка);
Результат = не Запрос.Выполнить().Пустой();
Исключение
КонецПопытки;
возврат Результат;
КонецФункции //НомерЗанят()
В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла...
И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С.
Чтение PDF файлов из 1С
Первым дело я стал искать, как напрямую можно прочитать данные из 1С в PDF файлах - было найдено много информации и вариантов решений, но к сожалению большинство из них не правильно работали с кодировкой В результате банальный текст вида Красный стул превращался в страшную кракозябру.
Далее после долгих поисков был найден конвертер PDF в TXT - pdf2txt
Поддержка командной строки:
PDF2TXT <input PDF file> [output TXT file] [-logfile] [-open] [-space] [-html] [-format] [-silent] [-blankline] [-summary] [-zoom <num>] [-?] [-h]
<input PDF file> : Open an existing PDF file to convert.
[output TXT file] : Write to TEXT file, the default is same filename of input PDF file.
[-first <page number>]: Specify the first page number.
[-last <page number>]: Specify the last page number.
[-logfile] : Write log to "C:\pdf2txt.log" file.
[-open] : Auto open the text file after it be created.
[-space] : Auto insert spaces into text file.
[-html] : Output to a HTML file, not a text file.
[-format] : Keep the page layout in the generated TXT file.
[-silent] : Disable error and warning messages.
[-blankline] : Auto delete blank line in the generated TXT file.
[-summary] : Get PDF document summary.
[-zoom <num>] : Set zoom ratio, the range is from 50 to 200.
[-unicode] : Create UTF-8 encoding text file.
Примеры:
Код Batch File (DOS, CMD, BAT) C:\>PDF2TXT C:\input.pdf
C:\>PDF2TXT C:\input.pdf -unicode
C:\>PDF2TXT C:\input.pdf -first 10 -last 12
C:\>PDF2TXT C:\input.pdf C:\output.txt
C:\>PDF2TXT C:\input.pdf -open -silent -logfile -zoom 150
C:\>PDF2TXT C:\input.pdf C:\output.txt -open -silent
C:\>PDF2TXT C:\*.pdf
C:\>PDF2TXT C:\*.pdf C:\*.txt
C:\>PDF2TXT C:\test\*.pdf C:\test\*.txt
В архиве (Скачать Вы можете из статьи по ссылке ) заготовка 1С обработки для частного случая, если она Вам подойдет - Хорошо
Если же нет, то Мы можем для Вас быстро доработать загрузку PDF в 1С !
Код на 1С для конфигурации УТ 10.3:
Код 1C v 8.х Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
ТекЗнч = СокрЛП(Лев(Стр,Поз-1));
Если ЗначениеЗаполнено(ТекЗнч) Тогда
МассивСтрок.Добавить(ТекЗнч);
КонецЕсли;
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
//Ищем Файлы
тч.Очистить();
НайденныеФайлы = НайтиФайлы(ПутьКPDF,"*.pdf",ложь);
Для каждого стр Из НайденныеФайлы Цикл
Нстр = ТЧ.Добавить();
Нстр.ФайлPDF = стр.Имя;
КонецЦикла;
ЭтаФорма.Обновить();
//Преобразуем PDF в TXT
Для каждого стр Из ТЧ Цикл
Попытка
pdf = СокрЛП(ПутьКPDF+"\"+стр.ФайлPDF);
txt = СтрЗаменить(pdf,"pdf","txt");
Команд = ПутьКPDF2TXT+"\pdf2txt.exe "+pdf+" "+txt;
ЗапуститьПриложение(Команд,ПутьКPDF,Истина);
стр.ФайлTXT = txt;
Исключение
стр.ФайлTXT = "!!!_ОШИБКА";
КонецПопытки;
ЭлементыФормы.ТЧ.ТекущаяСтрока = стр;
ЭлементыФормы.ТЧ.ОбновитьСтроки(стр);
КонецЦикла;
мТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
мСкладПоУмолчанию = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОсновнойСклад");
мОсновноеПодразделение = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОсновноеПодразделение");
мОсновнаяВалютаВзаиморасчетов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОсновнаяВалютаВзаиморасчетов");
мОсновноеВедениеВзаиморасчетовПоДоговорам = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОсновноеВедениеВзаиморасчетовПоДоговорам");
мВидНоменклатурыПоУмолчанию = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОсновнойВидНоменклатуры");
мОтражатьВРеглУчете = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОтражатьДокументыВУправленческомУчете");
мОтражатьВБухУчета = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОтражатьДокументыВБухгалтерскомУчете");
мОтражатьВНалУчете = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(мТекущийПользователь, "ОтражатьДокументыВНалоговомУчете");
//Создаем Документ
Для каждого стр Из ТЧ Цикл
Состояние("Загружаю: "+стр.ФайлTXT);
текдок=Новый ТекстовыйДокумент;
текдок.Прочитать(стр.ФайлTXT,"UTF-8");
ЗагрузкаТЧ=Ложь;
ДокВозвратТоваровОтПокупателя = Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();
ДокВозвратТоваровОтПокупателя.Ответственный = мТекущийПользователь;
ДокВозвратТоваровОтПокупателя.Дата = ОбщегоНазначения.ПолучитьРабочуюДату();
ДокВозвратТоваровОтПокупателя.УстановитьНовыйНомер();
ДокВозвратТоваровОтПокупателя.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;
ДокВозвратТоваровОтПокупателя.СкладОрдер = Склад;
ДокВозвратТоваровОтПокупателя.Подразделение = мОсновноеПодразделение;
ДокВозвратТоваровОтПокупателя.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");
ДокВозвратТоваровОтПокупателя.УчитыватьНДС = ИСТИНА;
ДокВозвратТоваровОтПокупателя.СуммаВключаетНДС = ИСТИНА;
Для Ном=1 по текдок.КоличествоСтрок() цикл
ТСтр = текдок.ПолучитьСтроку(Ном);
ТекСтр = СокрЛП(ТСтр);
Если Найти(ТекСтр, "Всего по накладной")>0 Тогда
ЗагрузкаТЧ=Ложь;
//делаем пересчеты сумм, количества мест и НДС по строкам
Для Каждого СтрокаТабличнойЧасти Из ДокВозвратТоваровОтПокупателя.Товары Цикл
ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя);
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя);
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ДокВозвратТоваровОтПокупателя);
КонецЦикла;
Попытка
ДокВозвратТоваровОтПокупателя.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ДокВозвратТоваровОтПокупателя.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
стр.Документ = ДокВозвратТоваровОтПокупателя.Ссылка;
стр.Инфо = "Все ОК";
ЭлементыФормы.ТЧ.ТекущаяСтрока = стр;
ЭлементыФормы.ТЧ.ОбновитьСтроки(стр);
//ВСЕ
Прервать;
КонецЕсли;
Если ЗагрузкаТЧ Тогда
ТекСтр = СтрЗаменить(ТекСтр, "подложке ","подложке");
ТекСтр = СтрЗаменить(ТекСтр, " ","|");
СтрМ=РазложитьСтрокуВМассивПодстрок(ТекСтр,"|");
Если СтрМ.Количество()>2 Тогда
//Сообщить(СтрМ);
Попытка
НоваяСтрока = ДокВозвратТоваровОтПокупателя.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(СтрМ[2]);
//НоваяСтрока.ХарактеристикаНоменклатуры = СтрокаТаблицы.ХарактеристикаНоменклатуры;
//УстановитьСтавкуНДСВТабЧасти(НоваяСтрока, СтрокаТаблицы);
//ПроверитьНаличиеСерииНоменклатуры(НоваяСтрока, СтрокаТаблицы);
//УстановитьПризнакВеденияПоСериямНоменклатуры(НоваяСтрока);
НоваяСтрока.ЕдиницаИзмерения = НоваяСтрока.Номенклатура.БазоваяЕдиницаИзмерения;
НоваяСтрока.Коэффициент = 1;
НоваяСтрока.Количество = Число(СтрМ[6]);
НоваяСтрока.Цена = Число(СтрМ[7]);
НоваяСтрока.Сумма = Число(СтрМ[8]);
НоваяСтрока.СуммаНДС = Число(СтрМ[11]);
НоваяСтрока.Качество = Справочники.Качество.Новый;
Попытка
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС["НДС"+Лев(СокрЛП(СтрМ[9]),2)];
Исключение
НоваяСтрока.СтавкаНДС = НоваяСтрока.Номенклатура.СтавкаНДС;
КонецПопытки;
Исключение
Сообщить("Не загружено: "+ТекСтр);
КонецПопытки;
Иначе
Продолжить;
КонецЕсли;
Иначе
// Возможно что-то будет
КонецЕсли;
//Сообщить(ТекСтр);
Если Найти(ТекСтр, "Товарная накладная")>0 Тогда
ТекСтр = СтрЗаменить(ТекСтр, " ","|");
СтрМ=РазложитьСтрокуВМассивПодстрок(ТекСтр,"|");
Если СтрМ.Количество()>1 Тогда
//Сообщить(СтрМ);
ДокВозвратТоваровОтПокупателя.НомерВходящегоДокументаЭлектронногоОбмена = СтрМ[1];
ТекДата = СтрМ[2];
ДокВозвратТоваровОтПокупателя.ДатаВходящегоДокументаЭлектронногоОбмена = Дата(Прав(ТекДата,4)+Сред(ТекДата,4,2)+Лев(ТекДата,2));
КонецЕсли;
КонецЕсли;
Если Найти(ТекСтр, "Грузополучатель:")>0 Тогда
//Сообщить(ТекСтр);
//Получим ИНН
ГдеИНН = Найти(ТекСтр, "ИНН");
Если ГдеИНН>0 Тогда
ГдеИННвр= лев(ТекСтр,ГдеИНН+15);
текИНН = Прав(гдеИННвр, СтрДлина(ГдеИННвр)-(ГдеИНН+3));
текИНН = СокрЛП(СтрЗаменить(текИНН,".","")); текИНН = СокрЛП(СтрЗаменить(текИНН,",",""));
ТекОрганизация = Справочники.Организации.НайтиПоРеквизиту("ИНН",текИНН);
Если ТекОрганизация=Справочники.Организации.ПустаяСсылка() Тогда
ДокВозвратТоваровОтПокупателя.Организация = Организация;
Иначе
ДокВозвратТоваровОтПокупателя.Организация = ТекОрганизация;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Найти(ТекСтр, "Поставщик:")>0 Тогда
//Сообщить(ТекСтр);
//Получим ИНН
ГдеИНН = Найти(ТекСтр, "ИНН");
Если ГдеИНН>0 Тогда
ГдеИННвр= лев(ТекСтр,ГдеИНН+15);
текИНН = Прав(гдеИННвр, СтрДлина(ГдеИННвр)-(ГдеИНН+3));
текИНН = СокрЛП(СтрЗаменить(текИНН,".","")); текИНН = СокрЛП(СтрЗаменить(текИНН,",",""));
ТекПоставщик = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",текИНН);
ДокВозвратТоваровОтПокупателя.Контрагент = ТекПоставщик;
ДокВозвратТоваровОтПокупателя.ДоговорКонтрагента = ТекПоставщик.ОсновнойДоговорКонтрагента;
КонецЕсли;
КонецЕсли;
Если Найти(ТекСтр, "Плательщик:")>0 Тогда
//Сообщить(ТекСтр);
//Получим ИНН
ГдеИНН = Найти(ТекСтр, "ИНН");
Если ГдеИНН>0 Тогда
ГдеИННвр= лев(ТекСтр,ГдеИНН+15);
текИНН = Прав(гдеИННвр, СтрДлина(ГдеИННвр)-(ГдеИНН+3));
текИНН = СокрЛП(СтрЗаменить(текИНН,".","")); текИНН = СокрЛП(СтрЗаменить(текИНН,",",""));
ТекПлательщик = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",текИНН);
КонецЕсли;
КонецЕсли;
Если текстр="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" Тогда
ЗагрузкаТЧ=Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ПутьКPDF2TXTОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите каталог с PDF2TXT";
Если ДиалогОткрытия.Выбрать() Тогда
ПутьКPDF2TXT = ДиалогОткрытия.Каталог;
ПутьКPDF = ДиалогОткрытия.Каталог;
КонецЕсли;
КонецПроцедуры
Процедура ПутьКPDFОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите каталог с PDF2TXT";
Если ДиалогОткрытия.Выбрать() Тогда
ПутьКPDF = ДиалогОткрытия.Каталог;
КонецЕсли;
КонецПроцедуры
УстановитьНовыйНомер(<ПрефиксНомера>)
Параметры:
<ПрефиксНомера> (необязательный)
Тип: Строка.
Префикс устанавливаемого номера.
Значение по умолчанию: Пустая строка
Описание:
Устанавливает новый номер документа для заданного префикса номера.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Для документов с нумерацией в пределах периода, номер устанавливается в пределах периода, соответствующего установленной дате документа. Если дата - пустая, процедура установит номер в пределах периода соответствующего пустой дате.
Пример:
Код 1C v 8.х УстановитьНовыйНомер(Организация.Префикс+"СП-");
РасходнаяНакладная.УстановитьНовыйНомер(ПрефиксИБ);
В типовой конфигурации, как правило, установка нового номера происходит через подписку на событие "
ПриУстановкеНовогоНомера ...". Последовательность вызова процедур, при работе через форму документа, при этом следующая:
- МодульФормы ПередЗаписью()
- МодульОбъекта ПередЗаписью()
- МодульОбъекта ПриУстановкеНовогоНомера()
- Событие(подписка) ПриустановкеНовогоНомера() (установка префиксов и номера)
- МодульОбъекта ПриЗаписи() (префиксы и номер установлены)
- Модульформы ПриЗаписи()
- МодульФормы ПослеЗаписи()
Для 8.2:
Открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных:
проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать на клиенте.
Код 1C v 8.2 УП ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");
При этом создается новый документ и открывается для редактирования основная форма этого документа.
Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения.
Создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю:
можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события ОбработкаЗаполнения, записать, и передать ссылку на новый документ в метод глобального контекста ОткрытьЗначение(), который откроет форму этого документа. Например:
Код 1C v 8.2 УП &НаКлиенте
Процедура ПриходнаяНакладная(Команда)
СсылкаНаДокумент = СоздатьНовыйДокумент();
ОткрытьЗначение(СсылкаНаДокумент);
КонецПроцедуры
&НаСервере
Функция СоздатьНовыйДокумент()
НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Номер = "111";
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Записать();
Возврат НовыйДокумент.Ссылка;
КонецФункции
Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции для интерактивной работы
Код 1C v 8.2 УП // ЕЩЕ ПРИМЕР:
&НаКлиенте
Процедура СоздатьНовыйДокумент(Команда)
// Вставить содержимое обработчика.
Если СоздатьНовыйДокументНаСервере() = 0 Тогда
Сообщить("Не удалось создать новый документ");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьНовыйДокументНаСервере()
Перем НоваяРасходнаяНакладная;
Перем СтрокаТЧ;
НоваяРасходнаяНакладная=ДокРасходнаяНакладная.СоздатьДокумент();
//Заполняем реквизиты шапки
НоваяРасходнаяНакладная.Дата= ТекущаяДата();
НоваяРасходнаяНакладная.Фирма =Справочники.Фирмы.ОсновнаяФирма;
НоваяРасходнаяНакладная.Контрагент=Справочники.Контрагенты.НайтиПоКоду("000000001");
НоваяРасходнаяНакладная.Склад=Справочники.Склады.ОсновнойСклад;
//Заполняем табличную часть
СтрокаТЧ=НоваяРасходнаяНакладная.ТЧТовары.Добавить();
СтрокаТЧ.Товар=Справочники.Номенклатура.НайтиПоКоду("000000002");
СтрокаТЧ.Цена=СтрокаТЧ.Товар.РозничнаяЦена;
СтрокаТЧ.Количество= 2;
СтрокаТЧ.Сумма=СтрокаТЧ.Цена*СтрокаТЧ.Количество;
Попытка
НоваяРасходнаяНакладная.Записать();
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;
КонецФункции
Для 8.1:
Код 1C v 8.х
//Создаем документ Выплата, Документ будет создан и показан пользователю, Но НЕ ЗАПИСАН
НовДок = Документы.ЗарплатаКВыплатеОрганизаций.ПолучитьФормуНовогоДокумента();
НовДок.Дата=ТекущаяДата();
НовДок.Организация=Организация;
НовДок.ПериодРегистрации=ПериодРегистрации;
НовДок.ответственный= глЗначениеПеременной("глТекущийПользователь");
НовДок.Комментарий="Выплата за "+МесяцСтрока;
НовДок.ЭлементыФормы.Комментарий.Доступность=Ложь;
Для Каждого ТекущаяСтрока Из ТаблицыЗначений Цикл // заполним табличную часть документа, из ТаблицыЗначений
НС=НовДок.зарплата.добавить();
нс.Авторасчет=истина;
нс.Физлицо = ТекущаяСтрока.Физлицо;
нс.ВыплаченностьЗарплаты=Перечисления.ВыплаченностьЗарплаты.НеВыплачено;
нс.сумма=ТекущаяСтрока.Результат;
КонецЦикла;
НовДок.Открыть();
//Для создания и записи документа используется следующий код:
НовДок = Документы.РасходнаяНакладная.СоздатьДокумент();
НовДок.Дата=ТекущаяДата();
НовыйДок.УстановитьНовыйНомер();
НовДок.Организация=Организация;
НовДок.ПериодРегистрации=ПериодРегистрации;
НовДок.ответственный= глЗначениеПеременной("глТекущийПользователь");
НовДок.Комментарий="Выплата за "+МесяцСтрока;
НовДок.ЭлементыФормы.Комментарий.Доступность=Ложь;
Для Каждого ТекущаяСтрока Из ТаблицыЗначений Цикл // заполним табличную часть документа, из ТаблицыЗначений
НС=НовДок.зарплата.добавить();
нс.Авторасчет=истина;
нс.Физлицо = ТекущаяСтрока.Физлицо;
нс.ВыплаченностьЗарплаты=Перечисления.ВыплаченностьЗарплаты.НеВыплачено;
нс.сумма=ТекущаяСтрока.Результат;
КонецЦикла;
НовДок.Записать();
//Или так:
НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент();
НовыйДок.Дата = ПолеВводаДаты;
НовыйДок.УстановитьВремя();
НовыйДок.УстановитьНовыйНомер();
// Формирование табличной части
Для Н=1 По N Цикл
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;
// формируются другие реквизиты табличной части
КонецЦикла;
НовыйДок.Записать();
СписокДокументов.Добавить(НовыйДок.Ссылка);