Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 21:27

Выгрузка приема из сайта в 1С 8.1

Автор Zverff, 02 окт 2012, 10:11

0 Пользователей и 1 гость просматривают эту тему.

Zverff

Здравствуйте, делаю выгрузку из сайта.
Проблема: Если на сайте зарегистрировались на прием 2-3 человека в разное время.
Пример: 1 пациент на ВТ: в 9:00
2 пациент на ЧТ: в 11:00
3 пациент на ПН: в 17:00

Когда делаю обмен с сайтом. То создается документ на 3 го пациента, на 1 и 2 пациента не создается.

Функция РазобратьCML(СтрокаCML)

Успешно = Истина;
ОбъектCML = Новый ЧтениеXML();

Попытка
ОбъектCML.УстановитьСтроку(СтрокаCML);
Исключение
СообщитьОбИсключительнойОшибке(Ложь);
Возврат Неопределено;
КонецПопытки;

   

ПостроительDOM = Новый ПостроительDOM;
ДокументDOM  = ПостроительDOM.Прочитать(ОбъектCML);

ФамилияПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Фамилия");
Для Позиц=0 По ФамилияПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ФамилияПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ФамилияУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ФамилияУзелНаим.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ИмяПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Имя");
Для Позиц=0 По ИмяПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ИмяПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ИмяУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ИмяУзелНаим.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ОтчествоПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Отчество");
Для Позиц=0 По ОтчествоПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ОтчествоПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ОтчествоУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ОтчествоУзелНаим.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ГодРожденияПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("ГодРождения");
Для Позиц=0 По ГодРожденияПациентНаим.Количество()-1 Цикл
ДочерниеУзлы = ГодРожденияПациентНаим[Позиц].ДочерниеУзлы;
Для каждого ГодРожденияУзелНаим Из ДочерниеУзлы Цикл
//Сообщить (ИзСтрокиВДату(ГодРожденияУзелНаим.ТекстовоеСодержимое));
КонецЦикла;
КонецЦикла;


НаименованиеПациента = ФамилияУзелНаим.ТекстовоеСодержимое+ " " + ИмяУзелНаим.ТекстовоеСодержимое+ " " + ОтчествоУзелНаим.ТекстовоеСодержимое;
//Сообщить(НаименованиеПациента);

ТелефонПациент = ДокументDOM.ПолучитьЭлементыПоИмени("АдресноеПоле");
Для Позиц=0 По ТелефонПациент.Количество()-1 Цикл
ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда
НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
//Сообщить ("Телефон: " + НомерТелефонУзел);

КонецЕсли;
КонецЦикла;
КонецЦикла;


ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
КонецЦикла;
КонецЦикла;


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Пациенты.Наименование,
| Пациенты.ДатаРождения
|ИЗ
| Справочник.Пациенты КАК Пациенты
|ГДЕ
| Пациенты.Наименование = &НаимПациента
| И Пациенты.ДатаРождения = &ДРПациента";
Запрос.УстановитьПараметр("НаимПациента",СокрЛП(НаименованиеПациента));
Запрос.УстановитьПараметр("ДРПациента",ИзСтрокиВДату(ГодРожденияУзелНаим.ТекстовоеСодержимое));
Результат = Запрос.Выполнить().Выбрать();

ЗапросДок = Новый Запрос;
ЗапросДок.Текст = "ВЫБРАТЬ
| ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
| ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
|ИЗ
| Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
|ГДЕ
| ТалонНаПриемВызовСпециалиста.Пациент.Наименование = &ПацНаименование
| И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
ЗапросДок.УстановитьПараметр("ПацНаименование",СокрЛП(НаименованиеПациента));
ЗапросДок.УстановитьПараметр("ДатаПриема",ИзСтрокиВДатаВремя(ДатаВремя));
РезультатТал = ЗапросДок.Выполнить().Выбрать();

ЗапросПользователей = Новый  Запрос;
ЗапросПользователей.Текст = "ВЫБРАТЬ
| Пользователи.Ссылка КАК Пользователи,
| КлассификаторСпециализаций.Ссылка КАК Специализация
|ИЗ
| Справочник.Пользователи КАК Пользователи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
| ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
|ГДЕ
| КлассификаторСпециализаций.Ссылка = &Специализация1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Пользователи,
| ВложенныйЗапрос.Специализация
|ИЗ
| (ВЫБРАТЬ
| Пользователи.Ссылка КАК Пользователи,
| КлассификаторСпециализаций.Ссылка КАК Специализация
| ИЗ
| Справочник.Пользователи КАК Пользователи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
| ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
| ГДЕ
| КлассификаторСпециализаций.Ссылка = &Специализация) КАК ВложенныйЗапрос";
ЗапросПользователей.УстановитьПараметр("Специализация", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7303"));  
ЗапросПользователей.УстановитьПараметр("Специализация1", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7309"));
РЗПолзователей = ЗапросПользователей.Выполнить().Выбрать();


Если Результат.Следующий() Тогда

//Сообщить("==================================================================================");
//Сообщить("Найден Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + ГодРожденияУзелНаим.ТекстовоеСодержимое + " г.");

Иначе
НовыйПациент =Справочники.Пациенты.СоздатьЭлемент();
НовыйПациент.УстановитьНовыйКод();


ФамилияПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Фамилия");
Для Позиц=0 По ФамилияПациент.Количество()-1 Цикл
ДочерниеУзлы = ФамилияПациент[Позиц].ДочерниеУзлы;
Для каждого ФамилияУзел Из ДочерниеУзлы Цикл
НовыйПациент.Фамилия = ФамилияУзел.ТекстовоеСодержимое;
//Сообщить (ФамилияУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ИмяПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Имя");
Для Позиц=0 По ИмяПациент.Количество()-1 Цикл
ДочерниеУзлы = ИмяПациент[Позиц].ДочерниеУзлы;
Для каждого ИмяУзел Из ДочерниеУзлы Цикл
НовыйПациент.Имя = ИмяУзел.ТекстовоеСодержимое;
//Сообщить (ИмяУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;
ОтчествоПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Отчество");
Для Позиц=0 По ОтчествоПациент.Количество()-1 Цикл
ДочерниеУзлы = ОтчествоПациент[Позиц].ДочерниеУзлы;
Для каждого ОтчествоУзел Из ДочерниеУзлы Цикл
НовыйПациент.Отчество = ОтчествоУзел.ТекстовоеСодержимое;
//Сообщить (ОтчествоУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

ГодРожденияПациент = ДокументDOM.ПолучитьЭлементыПоИмени("ГодРождения");
Для Позиц=0 По ГодРожденияПациент.Количество()-1 Цикл
ДочерниеУзлы = ГодРожденияПациент[Позиц].ДочерниеУзлы;
Для каждого ГодРожденияУзел Из ДочерниеУзлы Цикл
НовыйПациент.ДатаРождения = ИзСтрокиВДату(ГодРожденияУзел.ТекстовоеСодержимое);
//Сообщить ("Год Рождения: " + ГодРожденияУзел.ТекстовоеСодержимое);
КонецЦикла;
КонецЦикла;

//
ТелефонПациент = ДокументDOM.ПолучитьЭлементыПоИмени("АдресноеПоле");
Для Позиц=0 По ТелефонПациент.Количество()-1 Цикл
ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда
НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
//Сообщить ("Телефон: " + НомерТелефонУзел);

КонецЕсли;
КонецЦикла;
КонецЦикла;



НовыйПациент.Записать();


Сообщить("==================================================================================");
сообщить("Создан новый пацент: " + СокрЛП(НаименованиеПациента) + ". Год Рожление: " + ГодРожденияУзел.ТекстовоеСодержимое + " г.");
КонецЕсли;
   

//============================================================================================================
//Проверка есть ли повторные талоны
   
Если РезультатТал.Следующий() Тогда
сообщить("Не создаем: Талон на прием");
Иначе   //Если нет то создаем талон к приему врачу

НовыйТалон = Документы.ТалонНаПриемВызовСпециалиста.СоздатьДокумент();
ХозОпераций = Справочники.ХозОперации.НайтиПоКоду("140010");
НовыйТалон.ХозОперация = ХозОпераций;
НовыйТалон.УстановитьНовыйНомер();

//выбор Пациента из хмл
ПациентНаим = Справочники.Пациенты.НайтиПоНаименованию(НаименованиеПациента);

спПациент = ПациентНаим;
НовыйТалон.Пациент = спПациент;
ТипМедКарты = Справочники.ТипыКарт.НайтиПоНаименованию("Стоматологического больного");
СпТипМедКарты = ТипМедКарты;
НовыйТалон.ТипМедицинскойКарты = СпТипМедКарты;
НовыйТалон.Дата = ТекущаяДата();
Валюта = Справочники.Валюты.НайтиПоКоду("398");
спВалюта = Валюта;
НовыйТалон.ВалютаДокумента = спВалюта;
ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Основной тип цен продажи");
спТипЦен = ТипЦены;
НовыйТалон.ТипЦен = спТипЦен;
НовыйТалон.КурсДокумента = "1";
НовыйТалон.КурсВалютыУпр = "1";
//выбор подразделение из хмл
ТалПодразделение = ДокументDOM.ПолучитьЭлементыПоИмени("Подразделение");
Для Позиц=0 По ТалПодразделение.Количество()-1 Цикл
ДочерниеУзлы = ТалПодразделение[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелПодразделение Из ДочерниеУзлы Цикл
ПодразделениеОрг = Справочники.ПодразделенияКомпании.НайтиПоНаименованию(ТалонУзелПодразделение.ТекстовоеСодержимое);
Подразделение = ПодразделениеОрг;
НовыйТалон.ПодразделениеКомпании = Подразделение.Организация;
НовыйТалон.ПодразделениеКомпании = Подразделение;
КонецЦикла;
КонецЦикла;

//выбор специалиста из хмл
ТалСпециалист = ДокументDOM.ПолучитьЭлементыПоИмени("Специалист");
Для Позиц=0 По ТалСпециалист.Количество()-1 Цикл
ДочерниеУзлы = ТалСпециалист[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелСпециалист Из ДочерниеУзлы Цикл
Специалист = Справочники.Сотрудники.НайтиПоНаименованию(ТалонУзелСпециалист.ТекстовоеСодержимое);
спСотрудники = Специалист;
НовыйТалон.СпециалистНаправления = СпСотрудники;
НовыйТалон.Кабинет = спСотрудники.Кабинет;
КонецЦикла;
КонецЦикла;

//выбор ДатаПриема из хмл
ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
НовыйТалон.ДатаВремяПриема = ИзСтрокиВДатаВремя(ДатаВремя);
НовыйТалон.ДатаВремяОкончанияПриема = ИзСтрокиВДатаВремя(ДатаВремя)+3600;
КонецЦикла;
КонецЦикла;


Пока РЗПолзователей.Следующий() Цикл
Псообщение = РегистрыСведений.Напоминания.СоздатьМенеджерЗаписи();
Псообщение.Автор = ПараметрыСеанса.Пользователь;
Псообщение.ДатаНачала = ТекущаяДата();
Псообщение.РеальнаяДатаОповещения = ТекущаяДата();
Пользователь = РЗПолзователей.Пользователи;
Псообщение.Пользователь = Пользователь;
Сообщение = "Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + ГодРожденияУзелНаим.ТекстовоеСодержимое + " г. " + "Телефон: " + НомерТелефонУзел + " НЕ ЗАБУДЬТЕ ЗАПОЛНИТЬ ДАННЫЕ ПАЦИЕНТА!!!" + " Врач: " + ТалонУзелСпециалист.ТекстовоеСодержимое + ". Подразделение: " + ТалонУзелПодразделение.ТекстовоеСодержимое + ". Дата приема: " + лев(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),10) + " г. Время приема: " + прав(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),5);
Псообщение.Тема = "Новый запись на прием к Врачу!";
Псообщение.Описание = Сообщение;
Псообщение.Записать();
КонецЦикла;

Сообщить(Сообщение);

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

Yura063

А в справочник Пациенты он судя по коду должен тоже создавать только 3 пациента! так? 
Помогли, отблагодари!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск