```1c
    Процедура ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла)

    //НомерКолонки1 = 1;
    //НомерКолонки2 = 2;

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.Прочитать(ИмяВременногоФайла);

    Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
    Построитель.Выполнить();
    ТЗ = Построитель.Результат.Выгрузить();

    ////////////// дальсвой свой код

    Док = Документы.НачислениеЗарплаты;
    Сотр = Справочники.ФизическиеЛица;
    СпрВидРасчета = ПланыВидовРасчета.Удержания;
    //Строк=ТабличныйДокумент.Cells(1,1).SpecialCells(11).Columns;

    НовыйДок = Док.СоздатьДокумент();

    НовыйДок.Дата = НаДату;
    НовыйДок.МесяцНачисления = НаДату;
    //НовыйДок.Организация = Справочники.Организации.НайтиПоКоду("000000003");

    //Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
    //
    // ЗначениеКолонки1 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки1).Текст);
    // ЗначениеКолонки2 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки2).Текст);
    //
    //КонецЦикла;

    Для Сч = 4 По ТабличныйДокумент.ВысотаТаблицы Цикл
    ТабЧасть = НовыйДок.Удержания;
    НоваяСтр = ТабЧасть.Добавить();

    ТабНомер = СокрЛП(ТабличныйДокумент.Область(Сч, 2).Текст);
    Наименование = СокрЛП(ТабличныйДокумент.Область(Сч, 3).Текст);
    СуммаОбеда = СокрЛП(ТабличныйДокумент.Область(Сч, 5).Текст);
    ДатаОбеда = НаДату;
    Если СтрДлина(СокрЛП(ТабНомер)) = 5 Тогда
    ТабНомер = "0" + СокрЛП(ТабНомер);
    КонецЕсли;
    ТабНомер = СокрЛП(ТабНомер) + " ";

    Сотр1 = Сотр.НайтиПоКоду(ТабНомер);
    Если Не Сотр1.Пустая() Тогда
    НоваяСтр.ФизическоеЛицо = Сотр.НайтиПоКоду(ТабНомер);
    Иначе
    Сообщить ("Сотрудник не найден "+ ТабНомер);
    Конецесли;
    НоваяСтр.Результат = СуммаОбеда;
    НоваяСтр.ДатаНачала = НаДату;
    НоваяСтр.ДатаОкончания = ДатаОбеда;
    Расчет1 = СпрВидРасчета.НайтиПоКоду("11112");
    Если Не Расчет1.Пустая() Тогда
    НоваяСтр.Удержание = Расчет1;
    Иначе
    Сообщить ("Шифр оплаты \Удержания по столовой\ не найден",3);
    КонецЕсли;

    Конеццикла;
    НовыйДок.Записать();

    ///////////////Начисления

    Док = Документы.НачислениеЗарплаты;
    Сотр = Справочники.ФизическиеЛица;
    СпрВидРасчета = ПланыВидовРасчета.Начисления;
    //Строк=ТабличныйДокумент.Cells(1,1).SpecialCells(11).Columns;

    НовыйДок = Док.СоздатьДокумент();

    НовыйДок.Дата = НаДату;
    НовыйДок.МесяцНачисления = НаДату;
    //НовыйДок.Организация = Справочники.Организации.НайтиПоКоду("000000003");

    //Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
    //
    // ЗначениеКолонки1 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки1).Текст);
    // ЗначениеКолонки2 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки2).Текст);
    //
    //КонецЦикла;

    Для Сч = 4 По ТабличныйДокумент.ВысотаТаблицы Цикл
    ТабЧасть = НовыйДок.Начисления;
    НоваяСтр = ТабЧасть.Добавить();

    ТабНомер = СокрЛП(ТабличныйДокумент.Область(Сч, 2).Текст);
    Наименование = СокрЛП(ТабличныйДокумент.Область(Сч, 3).Текст);
    СуммаОбеда = СокрЛП(ТабличныйДокумент.Область(Сч, 5).Текст);
    ДатаОбеда = НаДату;
    Если СтрДлина(СокрЛП(ТабНомер)) = 5 Тогда
    ТабНомер = "0" + СокрЛП(ТабНомер);
    КонецЕсли;
    ТабНомер = СокрЛП(ТабНомер) + " ";

    Сотр1 = Сотр.НайтиПоКоду(ТабНомер);
    Если Не Сотр1.Пустая() Тогда
    НоваяСтр.Сотрудник = Сотр.НайтиПоКоду(ТабНомер);
    Иначе
    Сообщить ("Сотрудник не найден "+ ТабНомер);
    Конецесли;

    Если СуммаОбеда>"40" тогда
    СуммаОбеда="40" ;
    КонецЕсли;

    НоваяСтр.Результат = СуммаОбеда;
    НоваяСтр.ДатаНачала = НаДату;
    НоваяСтр.ДатаОкончания = ДатаОбеда;
    Расчет1 = СпрВидРасчета.НайтиПоКоду("ПИТКО");
    Если Не Расчет1.Пустая() Тогда
    НоваяСтр.Начисление = Расчет1;
    Иначе
    Сообщить ("Шифр оплаты \Удержания по столовой\ не найден",3);
    КонецЕсли;

    Конеццикла;
    НовыйДок.Записать();

    КонецПроцедуры
```

Суть в том, что нужно загрузить удержание по столовой из эксель(Все данные загружаются)
А вот начисление по этому же документу некорректно загружаются ФИО сотрудника не добавляет. Остается пустым
в чем может быть причина?
Скрин
---
Сотр это справочник физические лица или сотрудники?У тебя физлица.У Физ.лиц нет таб номера.И в приказах на начисления нет поля физические лица,там выбираются сотрудники.
---
Сотр это справочник физические лица или сотрудники?У тебя физлица.У Физ.лиц нет таб номера.И в приказах на начисления нет поля физические лица,там выбираются сотрудники.
---
Спасибо большое
---
А в удержаниях выбираются значит физические лица?
---
Нет,так же сотрудники.
---
Странно, в удержаниях стоит физические лица и всё работает. Вы случайно в циклах не разбираетесь ?
---
Когда новый документ создаете там физ лица выбираются?
---
На сколько я понял твою задачу.Тебе дают эксель в котором есть фио,таб номер и так далее.Тебе нужно при заполнении сделать запрос и отобрать в справочнике сотрудники строки в которых сойдутся и фио и табельный номер.Если нашли передаешь ссылку.Если нет,можно пару условий написать типа Табельный сошелся а фио нет,выдать сообщение.
---
Суть в том, что в начислениях я поставил сотрудники, а в удержаниях физические лица. Теперь всё работает
---
Ну если все работает.Значит вопросов нет.
---
Можете помочь условием?
```1c
    Если СуммаОбеда>"39,99" тогда
    СуммаОбеда="40" ;
    КонецЕсли;
```

Если сумма меньше 40, то он оставляет ее. Если больше, то записывает как 40. Но суть в том, что он цифры большее 100 оставляет, а от 40 до 99 изменяет на 40
---
Пробовал добавить Или СуммаОбеда>"100", тогда он вообще всё подряд заменяет на 40
---
А типы какие? СуммаОбеда это число? А "39,99" это строка?
---
Как текстовый стоят. Ладно, вроде решил. Поставил если длина СуммаОбеда больше 2 тогда сумма обеда равен 40
---
Хотя нет, если ставить и сумма>40 или длина строки>2 то записывает всё 40. А если оставить только длина строки>40, то цифры до 99 не изменяет
---
Ты бы выложил обработку,что бы наглядно можно было посмотреть код.
---
Полный кодКод&НаКлиенте
Процедура Команда1(Команда)

   ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
   ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Лист Microsoft Excel'; en = 'Лист Microsoft Excel'") + "(*.xlsx)|*.xlsx;*.xls";

   ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтаФорма);
   НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

КонецПроцедуры

Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПомещенныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;

   Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл

      РасширениеФайла = "";
      МассивСтрок = СтрРазделить(ПереданныйФайл.Имя, ".", Ложь);
      Если МассивСтрок.Количество() > 1 Тогда
         РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];
      КонецЕсли;

      ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПереданныйФайл.Хранение);
      ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
      ДвоичныеДанные.Записать(ИмяВременногоФайла);

      ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла);

    КонецЦикла;

КонецПроцедуры
&НаСервере
Процедура ОбработатьВыборФайлаНаСервере(ИмяВременногоФайла)

   //НомерКолонки1 = 1;
   //НомерКолонки2 = 2;

   ТабличныйДокумент = Новый ТабличныйДокумент;
   ТабличныйДокумент.Прочитать(ИмяВременногоФайла);

   Построитель = Новый ПостроительЗапроса;
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
    Построитель.Выполнить();
    ТЗ = Построитель.Результат.Выгрузить();

   ////////////// дальсвой свой код

   Док            = Документы.НачислениеЗарплаты;
Сотр           = Справочники.ФизическиеЛица;
СпрВидРасчета  = ПланыВидовРасчета.Удержания;
 //Строк=ТабличныйДокумент.Cells(1,1).SpecialCells(11).Columns;

 НовыйДок = Док.СоздатьДокумент();

НовыйДок.Дата = НаДату;
НовыйДок.МесяцНачисления = НаДату;
//НовыйДок.Организация = Справочники.Организации.НайтиПоКоду("000000003");

   //Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
   //
   //   ЗначениеКолонки1 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки1).Текст);
   //   ЗначениеКолонки2 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки2).Текст);
   //
   //КонецЦикла;

Для Сч = 4 По ТабличныйДокумент.ВысотаТаблицы-1 Цикл
   ТабЧасть = НовыйДок.Удержания;
    НоваяСтр = ТабЧасть.Добавить();

    ТабНомер       = СокрЛП(ТабличныйДокумент.Область(Сч, 2).Текст);
    Наименование   = СокрЛП(ТабличныйДокумент.Область(Сч, 3).Текст);
    СуммаОбеда     = СокрЛП(ТабличныйДокумент.Область(Сч, 5).Текст);
    ДатаОбеда      = НаДату;
   Если СтрДлина(СокрЛП(ТабНомер)) = 5 Тогда
      ТабНомер = "0" + СокрЛП(ТабНомер);
   КонецЕсли;
   ТабНомер = СокрЛП(ТабНомер) + "      ";

   Сотр1 = Сотр.НайтиПоКоду(ТабНомер);
   Если Не Сотр1.Пустая() Тогда
        НоваяСтр.ФизическоеЛицо = Сотр.НайтиПоКоду(ТабНомер);
    Иначе
       Сообщить ("Сотрудник не найден "+ ТабНомер);
    Конецесли;
    НоваяСтр.Результат   = СуммаОбеда;
      НоваяСтр.ДатаНачала     = НаДату;
      НоваяСтр.ДатаОкончания  = ДатаОбеда;
    Расчет1 = СпрВидРасчета.НайтиПоКоду("11112");
    Если Не Расчет1.Пустая() Тогда
       НоваяСтр.Удержание = Расчет1;
    Иначе
       Сообщить ("Шифр оплаты \Удержания по столовой\ не найден",3);
   КонецЕсли;

Конеццикла;
НовыйДок.Записать();

///////////////Начисления

   Док            = Документы.НачислениеЗарплаты;
Сотр           = Справочники.Сотрудники;
СпрВидРасчета  = ПланыВидовРасчета.Начисления;
 //Строк=ТабличныйДокумент.Cells(1,1).SpecialCells(11).Columns;

 НовыйДок = Док.СоздатьДокумент();

НовыйДок.Дата = НаДату;
НовыйДок.МесяцНачисления = НаДату;
//НовыйДок.Организация = Справочники.Организации.НайтиПоКоду("000000003");

   //Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
   //
   //   ЗначениеКолонки1 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки1).Текст);
   //   ЗначениеКолонки2 = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, НомерКолонки2).Текст);
   //
   //КонецЦикла;

Для Сч = 4 По ТабличныйДокумент.ВысотаТаблицы-1 Цикл
   ТабЧасть = НовыйДок.Начисления;
    НоваяСтр = ТабЧасть.Добавить();

   Если ТабличныйДокумент.Область(Сч, 2)>"39" тогда
      СуммаОбеда="40"  ;
   КонецЕсли;

    ТабНомер       = СокрЛП(ТабличныйДокумент.Область(Сч, 2).Текст);
    Наименование   = СокрЛП(ТабличныйДокумент.Область(Сч, 3).Текст);
    СуммаОбеда     = СокрЛП(ТабличныйДокумент.Область(Сч, 5).Текст);
    ДатаОбеда      = НаДату;

   Если СтрДлина(СокрЛП(СуммаОбеда))> 2 тогда
      СуммаОбеда="40"  ;
   КонецЕсли;

   Если СтрДлина(СокрЛП(ТабНомер)) = 5 Тогда
      ТабНомер = "0" + СокрЛП(ТабНомер);
   КонецЕсли;
   ТабНомер = СокрЛП(ТабНомер) + "      ";

Сотр1 = Сотр.НайтиПоКоду(ТабНомер);
                Если Не Сотр1.Пустая() Тогда
                 НоваяСтр.Сотрудник = Сотр.НайтиПоКоду(ТабНомер);
    Иначе
       Сообщить ("Сотрудник не найден "+ ТабНомер);
   Конецесли;

    НоваяСтр.Результат   = СуммаОбеда;
      НоваяСтр.ДатаНачала     = НаДату;
      НоваяСтр.ДатаОкончания  = ДатаОбеда;
    Расчет1 = СпрВидРасчета.НайтиПоКоду("ПИТКО");
    Если Не Расчет1.Пустая() Тогда
       НоваяСтр.Начисление = Расчет1;
    Иначе
       Сообщить ("Шифр оплаты \Удержания по столовой\ не найден",3);
   КонецЕсли;

Конеццикла;
НовыйДок.Записать();

КонецПроцедуры

Показать полностью
---
Напиши свою почту,я тебе скину обработку по загрузке из эксель. Она правда под 8.2.Но принцип можно подсмотреть.
---
ranis_kuk@mail.ru
---
конечно все запишет под 40, ведь в "39,99" больше 2ух символов. Не проще переделать формат ячеек в excel файле на числовой?
---
В экселе он общий, а в 1с как числовой
---
Ну то есть ты сравниваешь число и строку?
---
Код  Если Число(СуммаОбеда)>40 тогда
      СуммаОбеда=40  ;
   КонецЕсли;Показать полностью
Вот так сделал, теперь работает
---
Молодец!
Про счетчик в цикле по моему не правильно.ТабличныйДокумент это документ эксель?

```1c
    Для Сч = 4 По ТабличныйДокумент.ВысотаТаблицы-1 Цикл
```
---
Да. Там пришлось изменить на Для Сч = 1 По ТабличныйДокумент.ВысотаТаблицы-1 Цикл. Ведь в ручную удаляют теперь заголовки и тд
---
Эксель заносится в ТЗ
---
Как сделать так, чтобы период начисление брал из месяца начисления?

```1c
    НачисленияПериодДействия=НовыйДок.МесяцНачисления ;
    НачисленияПериод=НовыйДок.МесяцНачисления ;
    НачисленияДатаОкончания=НовыйДок.МесяцНачисления;
    НачисленияДатаНачала=НовыйДок.МесяцНачисления ;
    Период=НовыйДок.МесяцНачисления ;
    Период=НовыйДок.МесяцНачисления
```

Всё это пробовал не получается
---
А документ какой?
---
Документы.НачислениеЗарплаты
---
Ты хочешь загружать эксель сразу в документ начисления зп?А если его случайно перезаполнят?
И второй вопрос.А месяц начисления в документе у тебя какой тип имеет?Если бы это была дата.То можно КонецМесяца(<Дата>) ,НачалоМесяца(<Дата>)
---
Экселевский файл создается из другого приложения. Месяц начисление "Дата"
---
это:

```1c
    Если Не Сотр1.Пустая() Тогда
    Сотрудник = Сотр1;
```

замените на это:

```1c
    Если Не Сотр1.Пустая() Тогда
    НоваяСтр.ФизическоеЛицо = Сотр1
```
---
В начислениях не физическоеЛицо, а Сотрудник