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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Drakonchegg, 2 окт 2012.

  1. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, делаю выгрузку из сайта.
    Проблема: Если на сайте зарегистрировались на прием 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 Цикл
    ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
    Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
    Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда	
    НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
    //Сообщить ("Телефон: " + НомерТелефонУзел);
    
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;[/color][/font]
    
    [font=comic sans ms][color=#000000]ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
    Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
    ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
    ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
    КонецЦикла;
    КонецЦикла;
    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Пациенты.Наименование,
    | Пациенты.ДатаРождения
    |ИЗ
    | Справочник.Пациенты КАК Пациенты
    |ГДЕ
    | Пациенты.Наименование = &НаимПациента
    | И Пациенты.ДатаРождения = &ДРПациента";
    Запрос.УстановитьПараметр("НаимПациента",СокрЛП(НаименованиеПациента));
    Запрос.УстановитьПараметр("ДРПациента",ИзСтрокиВДату(ГодРожденияУзелНаим.ТекстовоеСодержимое));
    Результат = Запрос.Выполнить().Выбрать();
    
    ЗапросДок = Новый Запрос;
    ЗапросДок.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Пациент.Наименование = &ПацНаименование
    | И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
    ЗапросДок.УстановитьПараметр("ПацНаименование",СокрЛП(НаименованиеПациента));
    ЗапросДок.УстановитьПараметр("ДатаПриема",ИзСтрокиВДатаВремя(ДатаВремя));
    РезультатТал = ЗапросДок.Выполнить().Выбрать();
    
    ЗапросПользователей = Новый  Запрос;
    ЗапросПользователей.Текст = "ВЫБРАТЬ
    | Пользователи.Ссылка КАК Пользователи,
    | КлассификаторСпециализаций.Ссылка КАК Специализация
    |ИЗ
    | Справочник.Пользователи КАК Пользователи
    |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
    |  ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
    |ГДЕ
    | КлассификаторСпециализаций.Ссылка = &Специализация1
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | ВложенныйЗапрос.Пользователи,
    | ВложенныйЗапрос.Специализация
    |ИЗ
    | (ВЫБРАТЬ
    |  Пользователи.Ссылка КАК Пользователи,
    |  КлассификаторСпециализаций.Ссылка КАК Специализация
    | ИЗ
    |  Справочник.Пользователи КАК Пользователи
    |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
    |   ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
    | ГДЕ
    |  КлассификаторСпециализаций.Ссылка = &Специализация) КАК ВложенныйЗапрос";
    ЗапросПользователей.УстановитьПараметр("Специализация", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7303"));	   
    ЗапросПользователей.УстановитьПараметр("Специализация1", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7309"));
    РЗПолзователей = ЗапросПользователей.Выполнить().Выбрать();
    
    
    Если Результат.Следующий() Тогда
    
    //Сообщить("==================================================================================");
    //Сообщить("Найден Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + ГодРожденияУзелНаим.ТекстовоеСодержимое + " г.");
    
    Иначе
    НовыйПациент =Справочники.Пациенты.СоздатьЭлемент();
    НовыйПациент.УстановитьНовыйКод();
    
    
    ФамилияПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Фамилия");
    Для Позиц=0 По ФамилияПациент.Количество()-1 Цикл
    ДочерниеУзлы = ФамилияПациент[Позиц].ДочерниеУзлы;
    Для каждого ФамилияУзел Из ДочерниеУзлы Цикл
    НовыйПациент.Фамилия = ФамилияУзел.ТекстовоеСодержимое;
    //Сообщить (ФамилияУзел.ТекстовоеСодержимое);
    КонецЦикла;
    КонецЦикла;
    
    ИмяПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Имя");
    Для Позиц=0 По ИмяПациент.Количество()-1 Цикл
    ДочерниеУзлы = ИмяПациент[Позиц].ДочерниеУзлы;
    Для каждого ИмяУзел Из ДочерниеУзлы Цикл
    НовыйПациент.Имя = ИмяУзел.ТекстовоеСодержимое;  
    //Сообщить (ИмяУзел.ТекстовоеСодержимое);
    КонецЦикла;
    КонецЦикла;
    ОтчествоПациент = ДокументDOM.ПолучитьЭлементыПоИмени("Отчество");
    Для Позиц=0 По ОтчествоПациент.Количество()-1 Цикл
    ДочерниеУзлы = ОтчествоПациент[Позиц].ДочерниеУзлы;
    Для каждого ОтчествоУзел Из ДочерниеУзлы Цикл
    НовыйПациент.Отчество = ОтчествоУзел.ТекстовоеСодержимое;  
    //Сообщить (ОтчествоУзел.ТекстовоеСодержимое);
    КонецЦикла;
    КонецЦикла;
    
    ГодРожденияПациент = ДокументDOM.ПолучитьЭлементыПоИмени("ГодРождения");
    Для Позиц=0 По ГодРожденияПациент.Количество()-1 Цикл
    ДочерниеУзлы = ГодРожденияПациент[Позиц].ДочерниеУзлы;
    Для каждого ГодРожденияУзел Из ДочерниеУзлы Цикл
    НовыйПациент.ДатаРождения = ИзСтрокиВДату(ГодРожденияУзел.ТекстовоеСодержимое);
    //Сообщить ("Год Рождения: " + ГодРожденияУзел.ТекстовоеСодержимое);
    КонецЦикла;
    КонецЦикла;
    
    //
    ТелефонПациент = ДокументDOM.ПолучитьЭлементыПоИмени("АдресноеПоле");
    Для Позиц=0 По ТелефонПациент.Количество()-1 Цикл
    ДочерниеУзлы = ТелефонПациент[Позиц].ДочерниеУзлы;
    Для каждого ТелефонУзел Из ДочерниеУзлы Цикл
    Если ТелефонУзел.ТекстовоеСодержимое = "Телефон" тогда	
    НомерТелефонУзел =  ТелефонУзел.СледующийСоседний.ТекстовоеСодержимое;
    //Сообщить ("Телефон: " + НомерТелефонУзел);
    
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;[/color][/font]
    [font=comic sans ms][color=#000000] 
    
    НовыйПациент.Записать();
    
    
    Сообщить("==================================================================================");
    сообщить("Создан новый пацент: " + СокрЛП(НаименованиеПациента) + ". Год Рожление: " + ГодРожденияУзел.ТекстовоеСодержимое + " г.");
    КонецЕсли;
    
    
    //============================================================================================================
    //Проверка есть ли повторные талоны
    
    Если РезультатТал.Следующий() Тогда
    сообщить("Не создаем: Талон на прием");
    Иначе   //Если нет то создаем талон к приему врачу
    
    НовыйТалон = Документы.ТалонНаПриемВызовСпециалиста.СоздатьДокумент();
    ХозОпераций = Справочники.ХозОперации.НайтиПоКоду("140010");
    НовыйТалон.ХозОперация = ХозОпераций;
    НовыйТалон.УстановитьНовыйНомер();
    
    //выбор Пациента из хмл  
    ПациентНаим = Справочники.Пациенты.НайтиПоНаименованию(НаименованиеПациента);
    
    спПациент = ПациентНаим;
    НовыйТалон.Пациент = спПациент;
    ТипМедКарты = Справочники.ТипыКарт.НайтиПоНаименованию("Стоматологического больного");
    СпТипМедКарты = ТипМедКарты;
    НовыйТалон.ТипМедицинскойКарты = СпТипМедКарты;
    НовыйТалон.Дата = ТекущаяДата();
    Валюта = Справочники.Валюты.НайтиПоКоду("398");
    спВалюта = Валюта;
    НовыйТалон.ВалютаДокумента = спВалюта;
    ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Основной тип цен продажи");
    спТипЦен = ТипЦены;
    НовыйТалон.ТипЦен = спТипЦен;
    НовыйТалон.КурсДокумента = "1";
    НовыйТалон.КурсВалютыУпр = "1";
    //выбор подразделение из хмл  
    ТалПодразделение = ДокументDOM.ПолучитьЭлементыПоИмени("Подразделение");
    Для Позиц=0 По ТалПодразделение.Количество()-1 Цикл
    ДочерниеУзлы = ТалПодразделение[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелПодразделение Из ДочерниеУзлы Цикл
    ПодразделениеОрг = Справочники.ПодразделенияКомпании.НайтиПоНаименованию(ТалонУзелПодразделение.ТекстовоеСодержимое);
    Подразделение = ПодразделениеОрг;
    НовыйТалон.ПодразделениеКомпании = Подразделение.Организация;
    НовыйТалон.ПодразделениеКомпании = Подразделение;
    КонецЦикла;
    КонецЦикла;
    
    //выбор специалиста из хмл
    ТалСпециалист = ДокументDOM.ПолучитьЭлементыПоИмени("Специалист");
    Для Позиц=0 По ТалСпециалист.Количество()-1 Цикл
    ДочерниеУзлы = ТалСпециалист[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелСпециалист Из ДочерниеУзлы Цикл
    Специалист = Справочники.Сотрудники.НайтиПоНаименованию(ТалонУзелСпециалист.ТекстовоеСодержимое);
    спСотрудники = Специалист;
    НовыйТалон.СпециалистНаправления = СпСотрудники;
    НовыйТалон.Кабинет = спСотрудники.Кабинет;
    КонецЦикла;
    КонецЦикла;
    
    //выбор ДатаПриема из хмл   
    ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
    Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
    ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
    ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
    НовыйТалон.ДатаВремяПриема = ИзСтрокиВДатаВремя(ДатаВремя);
    НовыйТалон.ДатаВремяОкончанияПриема = ИзСтрокиВДатаВремя(ДатаВремя)+3600;
    КонецЦикла;
    КонецЦикла;
    
    
    Пока РЗПолзователей.Следующий() Цикл  
    Псообщение = РегистрыСведений.Напоминания.СоздатьМенеджерЗаписи();
    Псообщение.Автор = ПараметрыСеанса.Пользователь;
    Псообщение.ДатаНачала = ТекущаяДата();
    Псообщение.РеальнаяДатаОповещения = ТекущаяДата();
    Пользователь = РЗПолзователей.Пользователи;
    Псообщение.Пользователь = Пользователь;
    Сообщение = "Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + ГодРожденияУзелНаим.ТекстовоеСодержимое + " г. " + "Телефон: " + НомерТелефонУзел + " НЕ ЗАБУДЬТЕ ЗАПОЛНИТЬ ДАННЫЕ ПАЦИЕНТА!!!" + " Врач: " + ТалонУзелСпециалист.ТекстовоеСодержимое + ". Подразделение: " + ТалонУзелПодразделение.ТекстовоеСодержимое + ". Дата приема: " + лев(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),10) + " г. Время приема: " + прав(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),5);
    Псообщение.Тема = "Новый запись на прием к Врачу!";
    Псообщение.Описание = Сообщение;
    Псообщение.Записать();
    КонецЦикла;
    
    Сообщить(Сообщение);
    
    НовыйТалон.Записать();
    КонецЕсли; 
    
    
    КонецФункции
    

    где я ошибся?
  2. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Код большой. Посмотрите в отладчике сколько раз ваш код создает документ. Если один раз - значит в выборке проблема.
    И еще посмотрите меняет ли свое значение переменная "НовыйТалон", может это один и тот же документ перезаписывается несколько раз.

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

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Да он перезаписывается несколько раз. Ток не знаю как сделать что бы он каждый раз новый создавалься
  4. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Самое простое, что приходит на ум - обнуление переменной
    Код:
    НовыйТалон = Неопределено;
    можно после
    Код:
    НовыйТалон.Записать();
    а можно и перед созданием нового документа.
  5. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
    Функция Разобрать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 Цикл
    ДочерниеУзлы = ТалПодразделение[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелПодразделение Из ДочерниеУзлы Цикл
    ПодразделениеОрг = Справочники.ПодразделенияКомпании.НайтиПоНаименованию(ТалонУзелПодразделение.ТекстовоеСодержимое);
    Подразделение = ПодразделениеОрг;
    
    КонецЦикла;
    КонецЦикла;
    
    //======================== Талон Специалист и кабинет
    ТалСпециалист = ДокументDOM.ПолучитьЭлементыПоИмени("Специалист");
    Для Позиц=0 По ТалСпециалист.Количество()-1 Цикл
    ДочерниеУзлы = ТалСпециалист[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелСпециалист Из ДочерниеУзлы Цикл
    Специалист = Справочники.Сотрудники.НайтиПоНаименованию(ТалонУзелСпециалист.ТекстовоеСодержимое);
    спСотрудники = Специалист;
    
    КонецЦикла;
    КонецЦикла;
    
    //======================== Талон ДАтапреима 
    ТалДатаПриема = ДокументDOM.ПолучитьЭлементыПоИмени("ДатаПриема");
    Для Позиц=0 По ТалДатаПриема.Количество()-1 Цикл
    ДочерниеУзлы = ТалДатаПриема[Позиц].ДочерниеУзлы;
    Для каждого ТалонУзелДатаПриема Из ДочерниеУзлы Цикл
    ДатаВремя = СокрЛП(СтрЗаменить(ТалонУзелДатаПриема.ТекстовоеСодержимое, "Время:",""));
    ДатаПриема = ИзСтрокиВДатаВремя(ДатаВремя);
    КонецЦикла;
    КонецЦикла;
    
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Пациенты.Наименование,
    | Пациенты.ДатаРождения
    |ИЗ
    | Справочник.Пациенты КАК Пациенты
    |ГДЕ
    | Пациенты.Наименование = &НаимПациента
    | И Пациенты.ДатаРождения = &ДРПациента";
    Запрос.УстановитьПараметр("НаимПациента",СокрЛП(НаименованиеПациента));
    Запрос.УстановитьПараметр("ДРПациента",формат(ГодРожденияПациента,"ДЛФ=D"));
    Результат = Запрос.Выполнить().Выбрать();
    
    ЗапросДок = Новый Запрос;
    ЗапросДок.Текст = "ВЫБРАТЬ
    | ТалонНаПриемВызовСпециалиста.ДатаВремяПриема,
    | ТалонНаПриемВызовСпециалиста.Пациент.Ссылка
    |ИЗ
    | Документ.ТалонНаПриемВызовСпециалиста КАК ТалонНаПриемВызовСпециалиста
    |ГДЕ
    | ТалонНаПриемВызовСпециалиста.Пациент.Наименование = &ПацНаименование
    | И ТалонНаПриемВызовСпециалиста.ДатаВремяПриема = &ДатаПриема";
    ЗапросДок.УстановитьПараметр("ПацНаименование",СокрЛП(НаименованиеПациента));
    ЗапросДок.УстановитьПараметр("ДатаПриема",ДатаПриема);
    РезультатТал = ЗапросДок.Выполнить().Выбрать();
    
    ЗапросПользователей = Новый  Запрос;
    ЗапросПользователей.Текст = "ВЫБРАТЬ
    | Пользователи.Ссылка КАК Пользователи,
    | КлассификаторСпециализаций.Ссылка КАК Специализация
    |ИЗ
    | Справочник.Пользователи КАК Пользователи
    |  ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
    |  ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
    |ГДЕ
    | КлассификаторСпециализаций.Ссылка = &Специализация1
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    | ВложенныйЗапрос.Пользователи,
    | ВложенныйЗапрос.Специализация
    |ИЗ
    | (ВЫБРАТЬ
    |  Пользователи.Ссылка КАК Пользователи,
    |  КлассификаторСпециализаций.Ссылка КАК Специализация
    | ИЗ
    |  Справочник.Пользователи КАК Пользователи
    |   ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторСпециализаций КАК КлассификаторСпециализаций
    |   ПО Пользователи.Сотрудник.Специализации.Специализация.Ссылка = КлассификаторСпециализаций.Ссылка
    | ГДЕ
    |  КлассификаторСпециализаций.Ссылка = &Специализация) КАК ВложенныйЗапрос";
    ЗапросПользователей.УстановитьПараметр("Специализация", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7303"));	   
    ЗапросПользователей.УстановитьПараметр("Специализация1", Справочники.КлассификаторСпециализаций.НайтиПоКоду("7309"));
    РЗПолзователей = ЗапросПользователей.Выполнить().Выбрать();
    
    
    Пока Результат.Следующий() Цикл
    НовыйПациент = Неопределено;
    НовыйПациент =Справочники.Пациенты.СоздатьЭлемент();
    НовыйПациент.УстановитьНовыйКод();
    НовыйПациент.Фамилия = ФамилияПациента;
    НовыйПациент.Имя = ИмяПациента;  
    НовыйПациент.Отчество = ОтчествоПациента;  
    НовыйПациент.ДатаРождения = ГодРожденияПациента;
    НомерТелефонУзел =  НомерТелефонУзел;
    НовыйПациент.Записать();
    
    
    Сообщить("==================================================================================");
    сообщить("Создан новый пацент: " + СокрЛП(НаименованиеПациента) + ". Год Рождение: " + формат(ГодРожденияПациента,"ДЛФ=D") + " г.");
    
    КонецЦикла;
    
    //============================================================================================================
    Пока РезультатТал.Следующий() Цикл 
    НовыйТалон = Неопределено;
    НовыйТалон = Документы.ТалонНаПриемВызовСпециалиста.СоздатьДокумент();
    ХозОпераций = Справочники.ХозОперации.НайтиПоКоду("140010");
    НовыйТалон.ХозОперация = ХозОпераций;
    НовыйТалон.УстановитьНовыйНомер();
    
    
    ПациентНаим = Справочники.Пациенты.НайтиПоНаименованию(НаименованиеПациента);
    
    спПациент = ПациентНаим;
    НовыйТалон.Пациент = спПациент;
    ТипМедКарты = Справочники.ТипыКарт.НайтиПоНаименованию("Стоматологического больного");
    СпТипМедКарты = ТипМедКарты;
    НовыйТалон.ТипМедицинскойКарты = СпТипМедКарты;
    НовыйТалон.Дата = ТекущаяДата();
    Валюта = Справочники.Валюты.НайтиПоКоду("398");
    спВалюта = Валюта;
    НовыйТалон.ВалютаДокумента = спВалюта;
    ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Основной тип цен продажи");
    спТипЦен = ТипЦены;
    НовыйТалон.ТипЦен = спТипЦен;
    НовыйТалон.КурсДокумента = "1";
    НовыйТалон.КурсВалютыУпр = "1";
    НовыйТалон.ПодразделениеКомпании = Подразделение.Организация;
    НовыйТалон.ПодразделениеКомпании = Подразделение;
    НовыйТалон.СпециалистНаправления = СпСотрудники;
    НовыйТалон.Кабинет = спСотрудники.Кабинет;
    НовыйТалон.ДатаВремяПриема = ДатаПриема;
    НовыйТалон.ДатаВремяОкончанияПриема = ДатаПриема+3600;
    
    Пока РЗПолзователей.Следующий() Цикл  
    Псообщение = РегистрыСведений.Напоминания.СоздатьМенеджерЗаписи();
    Псообщение.Автор = ПараметрыСеанса.Пользователь;
    Псообщение.ДатаНачала = ТекущаяДата();
    Псообщение.РеальнаяДатаОповещения = ТекущаяДата();
    Пользователь = РЗПолзователей.Пользователи;
    Псообщение.Пользователь = Пользователь;
    Сообщение = "Пациент: " + СокрЛП(НаименованиеПациента) + ". Год Рождения: " + формат(ГодРожденияПациента,"ДЛФ=D") + " г. " + "Телефон: " + НомерТелефонУзел + " НЕ ЗАБУДЬТЕ ЗАПОЛНИТЬ ДАННЫЕ ПАЦИЕНТА!!!" + " Врач: " + спСотрудники + ". Подразделение: " + Подразделение + ". Дата приема: " + лев(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),10) + " г. Время приема: " + прав(СокрЛП(ТалонУзелДатаПриема.ТекстовоеСодержимое),5);
    Псообщение.Тема = "Новый запись на прием к Врачу!";
    Псообщение.Описание = Сообщение;
    Псообщение.Записать();
    КонецЦикла;
    
    Сообщить(Сообщение);
    
    НовыйТалон.Записать();
    КонецЦикла;
    
    
    КонецФункции
    
    сделал так
    но создает документ несколько штук одним и тем же данными
  6. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.174
    Симпатии:
    13
    Баллы:
    29
    может проблема на стороне сайта ? в создании файла обмена ?
  7. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Не думаю, может я не правильно разбираю ХМЛ
  8. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.174
    Симпатии:
    13
    Баллы:
    29
    прикрепи файл
  9. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Ну вы же и устанавливаете в запросе в качестве параметра последнего пациента. Откуда должны взяться другие?
  10. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Вот

    Вложения:

  11. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    походу я с запросом что то не так сделал? я запрос делаю для того что бы есть ли есть такие документы, что бы он заново их не создавал
  12. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Давайте разберем вот этот код:
    Код:
    //========================Фамилия
    ФамилияПациентНаим = ДокументDOM.ПолучитьЭлементыПоИмени("Фамилия");
    Для Позиц = 0 По ФамилияПациентНаим.Количество()-1 Цикл
    ДочерниеУзлы = ФамилияПациентНаим[Позиц].ДочерниеУзлы;
    Для каждого ФамилияУзелНаим Из ДочерниеУзлы Цикл
    ФамилияПациента = ФамилияУзелНаим.ТекстовоеСодержимое;
    КонецЦикла;
    КонецЦикла;
    Что вы хотите здесь получить?
  13. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    там Фамилия, тот кто записался на прием
  14. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Ну это понятно. Вот теперь смотрите.
    Допустим, к вам записалось 3 человека (Иванов, Петров, Сидоров).
    Соответственно, что делает данный код?
    Он перебирает 3 фамилии, при каждом проходе через цикл присваивая переменной "ФамилияПациента" новую фамилию (сначала Иванов, затем Петров и т.д.).
    "ФамилияПациента" принимает лишь последнее значение "Сидоров". Тоже самое происходит с имененем, отчеством и т.д.
    В итоге мы и получаем только последнего человека. Поправьте если я не прав.
  15. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Да таки есть
  16. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Для начала вам нужно создать СписокПациентов (либо массив, либо СписокЗначений) и заполнить пациентами, а затем в запросе использовать конструкцию
    Код:
    "... В (&СписокПациентов)"
  17. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Код:
     СписокПациента = Новый СписокЗначений;
    СписокПациента.Добавить(НаименованиеПациента);
    Теперь думаю и всех, специалиста, организация, время тоже в Список Значений?
  18. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Почему бы и нет. Только в разные :smile:
    И я бы предпочел в СписокЗначений передавать ссылку.
  19. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    ??))) Я просто не сильно освоил 1с)
  20. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Не идет, все равно он как то последние выдает данные, или я не так сделал

Поделиться этой страницей