Добрый вечер всем, помогите пожалуйста никак не пойму.

необходимо что бы по кнопке создать поступление создавался документ новый "Поступление ТоваровУслуг", а так же все данные с формы интерфейса перенеслись в созданный документ.

Платформа 8.0

Следую следующей логике:

```1c
    Процедура СоздатьПоступлениеНажатие(Элемент)
    НовДок=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовДок.Дата=ТекущаяДата();
    НовДок.УстановитьНовыйНомер();
    НовДок.Организация=Организация;
    НовДок.Контрагент=Контрагент;
    НовДок.ОтражатьВБухгалтерскомУчете=Истина;
    НовДок.ОтражатьВНалоговомУчете=Истина;
    НовДок.ОтражатьВУправленческомУчете=истина;
    НовДок.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;

    НовДок.Записать();
    КонецПроцедуры
```

Подскажите что не так, кликаю на кнопку а она просто моргает.

Файлик с интерфейсом обработки добавлю.
---
```1c
    НачатьТранзакцию();
    НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
    Если НайденнаяНоменклатура.Пустая() Тогда
    Сообщить("Не найдена номенклатура по артикулу");
    Отказ = Истина;
    КонецЕсли;

    Если Отказ Тогда
    ОтменитьТранзакцию();
    Иначе
    ЗафиксироватьТранзакцию();
    КонецЕсли;
```

Как-то так...
Загружать все в транзакции обязательно.
---
```1c
    Процедура СоздатьПоступлениеНажатие(Элемент)
    НовДок=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовДок.Дата=ТекущаяДата();
    НовДок.УстановитьНовыйНомер();
    НовДок.Организация=Организация;
    НовДок.Контрагент=Контрагент;
    НовДок.ОтражатьВБухгалтерскомУчете=Истина;
    НовДок.ОтражатьВНалоговомУчете=Истина;
    НовДок.ОтражатьВУправленческомУчете=истина;
    НовДок.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;

    НовДок.Записать();
    Сообщить("Создан документ:" + НовДок.Ссылка);
    КонецПроцедуры
```
---
```1c
    Попытка
    НовДок.Записать();
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;

    НовДок.ПолучитьФорму().Открыть();
```

Попробуйте так и посмотрите.
---
А чем отличается? Ищете в справочнике, если нет то создаете элемент, а потом его подставляете.
Для 8.2 и 8.3 аналогично.
1. Создаете запись номенклатуры вручную, затем консолью запросов смотрите, какие реквизиты надо заполнить.
2. Код будет примерно таким:

```1c
    НС = Справочники.Номенклатура.СоздатьЭлемент();
    НС.Родитель = Родитель;
    НС.Наименование = СтрПолучитьСтроку(СтрокаФайла, 1);
    НС.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию(СтрПолучитьСтроку(СтрокаФайла, 2));
    НС.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
    НС.ВидНоменклатуры = ВидНоменклатуры;
    НС.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
    НС.Качество = Перечисления.ГрадацииКачества.Новый;
    НС.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    НС.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
    НС.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета;
    НС.Записать();
```
---
по идее документ и создается,
в журнале нет ли новых доков?
---
Подключение к ексель и все прочее сделал
//Попытка
   // Excel = Новый COMобъект("Excel.Application");
   // Excel.Workbooks.Open(ИмяФайла);
   // Excel.Sheets(1).select();
   // //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
   // Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
   // Если Версия = "8" тогда
   // Строк = Excel.Cells.CurrentRegion.Rows.Count;
   // Колонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
   // Иначе
   // Строк = Excel.Cells(1,1).SpecialCells(11).Row;
   // Колонок = Excel.Cells(1,1).SpecialCells(11).Column;
   // Конецесли;
---
А процедура к кнопке привязана?
---
Да привязана, сейчас посмотрю, создает ли он что-то, даже если я до этого дойду, то как перенести данные Организации, контрагента и Склада с реквизитов интерфейса обработки?
---
Куда перенести? Вы значения этих параметров и так установили уже в реквизиты документа.
---
перенести выбранные значения из поля ввода сразу в документ, да бы 50 раз не перевыбирать.
---
Так значения на форме очищаются что-ли? Если нет, то и зачем их перевыбирать?
---
Не очищаются, необходимо сделать так, чтобы то что пользователь ввел на форме, перенеслось и в документ при его создании.
---
А сейчас в созданном документе эти реквизиты пустые?
---
Код для выбора файла и прочее его :

```1c
    Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    Фильтр = "Файл поступлений|*.xls";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
    ИмяФайла = СокрЛП(ДиалогОткрытияФайла.ПолноеИмяФайла);
    Иначе
    ИмяФайла = ";
    Предупреждение("Файл Excel не выбран!");
    НомерЛиста = 1;

    Попытка
    Excel = новый COMОбъект("Excel.Application");
    Исключение
    Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
    Возврат;
    КонецПопытки;

    Excel.Workbooks.Open(ИмяФайла);

    Excel.Sheets(НомерЛиста).select();

    Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия = "8" тогда
    ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
    ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
    ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
    ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
    Конецесли;
    КонецЕсли;
    КонецПроцедуры
```
---
не поверите, создается, но почему-то сразу исчезает как только на кнопку жму
---
Где видно, что исчезает?
---
Моргает кнопка при нажатии
---
```1c
    Процедура СоздатьПоступлениеНажатие(Элемент)
    НовДок=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    НовДок.Дата=ТекущаяДата();
    НовДок.УстановитьНовыйНомер();
    НовДок.Организация=Организация;
    НовДок.Контрагент=Контрагент;
    НовДок.ОтражатьВБухгалтерскомУчете=Истина;
    НовДок.ОтражатьВНалоговомУчете=Истина;
    НовДок.ОтражатьВУправленческомУчете=истина;
    НовДок.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад;

    НовДок.Записать();
    Сообщить("Создан документ:" + НовДок.Ссылка);
    КонецПроцедуры
```
---
Вот это то что нужно, спасибо.
---
вот несколько предположений на вскидку
1. возможно нет прав
2. возможно что-то прописано в обработчике "ПриЗаписи" модуля ПоступлениеТоваровУслуг
3. кнопка без обработчика - наверное
4. номер не уникальный - поэтому не создается документ
---
НовДок.УстановитьНовыйНомер() - дает уникальный номер.
---
не дает - если сбился нумератор
---
тогда было бы четкое сообщение об ошибке, что номер не уникален
---
тоже верно, ну значит либо период был установлен не тот, либо отбор в журнале стоял
---
```1c
    Попытка
    НовДок.Записать();
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;

    НовДок.ПолучитьФорму().Открыть();
```

Попробуйте так и посмотрите.
---
Простите, я глуповат))
---
Не глуповат, а ленив - ленишься читать книжки...
---
Все заработало
---
а вознаграждение?)
---
еще и скуповат? ))))))
---
а я кажется знаю, что было - период был установлен не тот, либо отбор в журнале стоял
---
Больше всего теперь интересует вопрос а как создать справочник и засунуть туда значения из колонок из файла Эксель
---
Создаю справочник как и документы
 НовСпр=Справочники.РегистрационныеНомераАлкогольныхСправок.СоздатьЭлемент();
   НовСпр.ФормаСправки=Перечисления.ФормыАлкогольныхСправок.ФормаА;
---
Но перед создание файла необходима проверка:
Для каждой строки загружаемого файла выполняется поиск элемента в справочнике «Номенклатура», значение поля «Артикул» которого равно значению в колонке 1 строки файла.

Если элемент с таким артикулом не найден, пользователю выдаётся сообщение «Не найдена номенклатура с артикулом [значение в колонке 1 строки файла]», документ «Поступление» не сохраняется и выполнение обработки прерывается.
---
```1c
    НачатьТранзакцию();
    НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
    Если НайденнаяНоменклатура.Пустая() Тогда
    Сообщить("Не найдена номенклатура по артикулу");
    Отказ = Истина;
    КонецЕсли;

    Если Отказ Тогда
    ОтменитьТранзакцию();
    Иначе
    ЗафиксироватьТранзакцию();
    КонецЕсли;
```

Как-то так...
Загружать все в транзакции обязательно.
---
А вы не знаете как в 8.0 перенести все данные из колонок файла ексель в попутно созданный справочник, я в 8.3 и 8.2 давно уже есть способы но как в 8.0 не пойму.
---
А чем отличается? Ищете в справочнике, если нет то создаете элемент, а потом его подставляете.
Для 8.2 и 8.3 аналогично.
1. Создаете запись номенклатуры вручную, затем консолью запросов смотрите, какие реквизиты надо заполнить.
2. Код будет примерно таким:

```1c
    НС = Справочники.Номенклатура.СоздатьЭлемент();
    НС.Родитель = Родитель;
    НС.Наименование = СтрПолучитьСтроку(СтрокаФайла, 1);
    НС.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию(СтрПолучитьСтроку(СтрокаФайла, 2));
    НС.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
    НС.ВидНоменклатуры = ВидНоменклатуры;
    НС.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
    НС.Качество = Перечисления.ГрадацииКачества.Новый;
    НС.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
    НС.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
    НС.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета;
    НС.Записать();
```
---
Да разобрался вчера, спасибо, немного по-другому, но похоже.
---
НачатьТранзакцию();
НайденнаяНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
Если НайденнаяНоменклатура.Пустая() Тогда
Сообщить("Не найдена номенклатура по артикулу");
Отказ = Истина;
КонецЕсли;

Если Отказ Тогда
ОтменитьТранзакцию();
Иначе
ЗафиксироватьТранзакцию();
КонецЕсли;

А как сравнить с 1 строкой файла ексель, и если данный артикул не найден по 1 строке, то сообщение и прерывание транзакции?
---
В примере 2 строчка Артикул - это и есть артикул из файла ексель.
Как он там у вас получается я не знаю. Это строка.
Соответственно, ищем по строке, если не нашли (пустая ссылка) то отказ в истину и транзакция прерывается.
Таким образом, у вас либо загрузится все (все должно быть без ошибок), либо не загрузится ничего.
---
а вообще, читать Excel неверно, т.к. это работает только на ОС Windows.
Правильно будет создать табличный документ на форме, и в него копировать записи.
Затем его перебирать и обрабатывать.
---
Я получаю следующим образом строки и колонки ексель

```1c
    Excel = Новый COMобъект("Excel.Application");
    Excel.Workbooks.Open(ИмяФайла);
    Excel.Sheets(1).select();
    Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия = "8" тогда
    Строк = Excel.Cells.CurrentRegion.Rows.Count;
    Колонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
    ВсегоСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
    ВсегоКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
    Конецесли;
    //Создание элемента справочника «Регистрационные номера алкогольных справок»
    Для СЧ=2 По ВсегоСтрок Цикл
    НовСпр=Справочники.РегистрационныеНомераАлкогольныхСправок.СоздатьЭлемент();
    НовСпр.ФормаСправки=Перечисления.ФормыАлкогольныхСправок.ФормаА;
    НовСпр.Наименование=СокрЛП(Excel.Cells(СЧ,5).Value);
    НовСпр.РегистрационныйНомер=СокрЛП(Excel.Cells(СЧ,5).Value);
    НовСпр.Записать();
    СЧ=СЧ+1;
    КонецЦикла;
    //Создание 2 элемента справочника «Регистрационные номера алкогольных справок»
    Для Сч=2 По ВсегоСтрок Цикл
    НовСпр=Справочники.РегистрационныеНомераАлкогольныхСправок.СоздатьЭлемент();
    НовСпр.ФормаСправки=Перечисления.ФормыАлкогольныхСправок.ФормаБ;
    НовСпр.Наименование=СокрЛП(Excel.Cells(СЧ,6).Value);
    НовСпр.РегистрационныйНомер=СокрЛП(Excel.Cells(СЧ,6).Value);
    НовСпр.Записать();
    Сч=Сч+1;
    Excel.Application.Quit();
    КонецЦикла;
```
---
Думаю моим способом не получится получит строку и использовать ваш прописанный алгоритм
---
выложите скриншот ексель файла открытого, посмотрим
---
с ней тоже заминки))
---
да, знаю, это все прописано не мной, а консультантами, которые писали это ТЗ