Столкнулся с проблемой, что при выгрузке из Excel файла не получается сверить, есть ли сотрудник в базе данных 1с? Сотрудников, которых нет следует выгружать в комментарии. Возможно кто-то сталкивался с похожей проблемой и смог её решить?
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДоговорРаботыУслуги.Ссылка КАК Ссылка, | ДоговорРаботыУслуги.Номер КАК Номер, | ДоговорРаботыУслуги.Представление КАК Представление, | ДоговорРаботыУслуги.Организация.Наименование КАК Организация |ИЗ | Документ.ДоговорРаботыУслуги КАК ДоговорРаботыУслуги";
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Для Стр=2 по ВысСтрок Цикл Сумма=ТабДок.Область(Стр,5).Текст; Если Сумма="" Тогда Продолжить; КонецЕсли; СтрТз=ДанныеФайла.Добавить();
Для Каждого Стр2 из ДанныеФайла Цикл Значения=НайтиЗначения(Стр2.Сотрудник); Если Значения.Пустая() Тогда Значения=СтрТз.Комментарий; КонецЕсли; КонецЦикла; КонецФункции
&НаСервере Функция НайтиЗначения(Сотрудник);
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка КАК Ссылка |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | ФизическиеЛица.ФИО = &ФИО";
Если ВыборкаДетальныеЗаписи.Следующий() Тогда Возврат ВыборкаДетальныеЗаписи.Ссылка; Иначе Возврат Документы.ДоговорРаботыУслуги.ПустаяСсылка(); КонецЕсли; КонецФункции
НаСервере
Функция ПолучитьДоговораНаСервере()
Данные=ПолучитьИзВременногоХранилища(ЭтаФорма.АдресВХ);
ИмяВФ=ПолучитьИмяВременногоФайла("xls");
Данные.Записать(ИмяВФ);
ДанныеФайла=Новый ТаблицаЗначений;
ДанныеФайла.Колонки.Добавить("Дата");
ДанныеФайла.Колонки.Добавить("Номер");
ДанныеФайла.Колонки.Добавить("ТипДокумента");
ДанныеФайла.Колонки.Добавить("Организация");
ДанныеФайла.Колонки.Добавить("Сотрудник");
ДанныеФайла.Колонки.Добавить("Сумма");
ДанныеФайла.Колонки.Добавить("Начало");
ДанныеФайла.Колонки.Добавить("Окончание");
ДанныеФайла.Колонки.Добавить("МесяцНачисления");
ДанныеФайла.Колонки.Добавить("Комментарий");
ДанныеФайла.Очистить();
ТабДок=Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяВФ,СпособЧтенияЗначенийТабличногоДокумента.Значение);
ВысСтрок=ТабДок.ВысотаТаблицы;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорРаботыУслуги.Ссылка КАК Ссылка,
| ДоговорРаботыУслуги.Номер КАК Номер,
| ДоговорРаботыУслуги.Представление КАК Представление,
| ДоговорРаботыУслуги.Организация.Наименование КАК Организация
|ИЗ
| Документ.ДоговорРаботыУслуги КАК ДоговорРаботыУслуги";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Для Стр=2 по ВысСтрок Цикл
Сумма=ТабДок.Область(Стр,5).Текст;
Если Сумма="" Тогда
Продолжить;
КонецЕсли;
СтрТз=ДанныеФайла.Добавить();
СтрТз.Дата=ТекущаяДата();
СтрТз.Номер=ВыборкаДетальныеЗаписи.Номер;
СтрТз.ТипДокумента=Лев(ВыборкаДетальныеЗаписи.Представление,24);
СтрТз.Организация=ВыборкаДетальныеЗаписи.Организация;
СтрТз.Сотрудник=ТабДок.Область(Стр,2).Текст;
СтрТз.Сумма=Сумма;
СтрТз.Начало=Объект.ДатаНачала;
СтрТз.Окончание=Объект.ДатаОкончания;
СтрТз.МесяцНачисления=Объект.Месяц;
СтрТз.Комментарий="";
КонецЦикла;
КонецЦикла;
Для Каждого Стр2 из ДанныеФайла Цикл
Значения=НайтиЗначения(Стр2.Сотрудник);
Если Значения.Пустая() Тогда
Значения=СтрТз.Комментарий;
КонецЕсли;
КонецЦикла;
КонецФункции
&НаСервере
Функция НайтиЗначения(Сотрудник);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Ссылка
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| ФизическиеЛица.ФИО = &ФИО";
Запрос.УстановитьПараметр("ФИО", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Ссылка;
Иначе
Возврат Документы.ДоговорРаботыУслуги.ПустаяСсылка();
КонецЕсли;
КонецФункции