7.7 Помогите создать правильный цикл (1С 7.7)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем BBDragon, 12 мар 2010.

  1. TopicStarter Overlay
    BBDragon
    Offline

    BBDragon Опытный в 1С

    Регистрация:
    11 мар 2010
    Сообщения:
    183
    Симпатии:
    2
    Баллы:
    29
    Необходимо переделать программу в соответствии с новыми требованиями (изменилась структура входящих и, соответственно, формируемых на их основе исходящих документов). Часть работы удалось сделать, но теперь я застрял. Необходимо из загружаемых документов создавать новые, при этом вести разбивку по регионам, т.е. для каждого региона создавать отдельный документ со списком всех пациентов за указанный период. Внутри документа желательно расположить пациентов в алфавитном порядке их фамилий. Документы формируются, но с ошибками, к тому же очень медленно, ибо цикл составлен неправильно.
    Код:
    Процедура Сформировать()      
    Перем ТЗ, ОТЗ;    
    
    //ВыбранноеОкато = СпрОкато.НайтиПоКоду(03000); 
    ТЗ = СоздатьОбъект("ТаблицаЗначений");// Таблица значений для данных 1 документа
    ОТЗ = СоздатьОбъект("ТаблицаЗначений"); // Общая таблица значений с данными всех пациентов отдельного региона
    
    // создаем набор колонок для ТЗ
    ТЗ.НоваяКолонка("Номер", "Число",4,0);
    ТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ТЗ.НоваяКолонка("Имя", "Строка",40);
    ТЗ.НоваяКолонка("Отчество", "Строка",40);
    ТЗ.НоваяКолонка("Пол", "Строка",1);
    ТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ТЗ.НоваяКолонка("Улица", "Строка",150);
    ТЗ.НоваяКолонка("Дом", "Строка",7);
    ТЗ.НоваяКолонка("Корпус", "Строка",5);
    ТЗ.НоваяКолонка("Квартира", "Строка",5);
    ТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7);
    ТЗ.НоваяКолонка("КодТерритории", "Справочник.КодТерритории");
    
    
    // аналогичный набор колонок создаем и для ОТЗ
    ОТЗ.НоваяКолонка("Номер", "Число",4,0);
    ОТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ОТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ОТЗ.НоваяКолонка("Имя", "Строка",40);
    ОТЗ.НоваяКолонка("Отчество", "Строка",40);
    ОТЗ.НоваяКолонка("Пол", "Строка",1);
    ОТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ОТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ОТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ОТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ОТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ОТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ОТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ОТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ОТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ОТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ОТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ОТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ОТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ОТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ОТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ОТЗ.НоваяКолонка("Улица", "Строка",150);
    ОТЗ.НоваяКолонка("Дом", "Строка",7);
    ОТЗ.НоваяКолонка("Корпус", "Строка",5);
    ОТЗ.НоваяКолонка("Квартира", "Строка",5);
    ОТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ОТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ОТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ОТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ОТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ОТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ОТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ОТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ОТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ОТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ОТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ОТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ОТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ОТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ОТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7); 
    ОТЗ.НоваяКолонка("КодТерритории", "Справочник.КодТерритории");
    
    
    СпрОкато = СоздатьОбъект("Справочник.КодТерритории"); // справочник с кодами ОКАТО
    СпрОкато.ВыбратьЭлементы();
    Пока СпрОкато.ПолучитьЭлемент() = 1 Цикл
    ВыбранноеОкато = СпрОкато.ТекущийЭлемент();
    Doc = СоздатьОбъект("Документ.РеестрСчетовВходящийЛПУ");   
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    DocTFOMS = СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    Пока Doc.ПолучитьДокумент() = 1 Цикл // перебираем все документы за период
    Если (Doc.ПометкаУдаления()=0) и (Doc.Проведен()=1) Тогда //просматриваем проведенные и не поченные на удаление документы
    СчетчикСтрок=1;
    Doc.ВыбратьСтроки();			
    Пока Doc.ПолучитьСтроку()=1 Цикл // перебираем все строки документа и заносим в ТЗ 
    ТЗ.НоваяСтрока();
    ТЗ.Номер=СчетчикСтрок;
    ТЗ.ОкатоСтрахования = Doc.ОкатоСтрахования;
    ТЗ.Фамилия=Doc.ФамилияПациента.ФамилияПациента;
    ТЗ.Имя=DOC.ИмяПациента;
    ТЗ.Отчество=DOC.ОтчествоПациента;
    ТЗ.Пол=DOC.ПолПациента;
    ТЗ.ДатаРождения=DOC.ДатаРожденияПациента;
    ТЗ.КодДокумента=DOC.КодДокумента;
    ТЗ.СерияДокумента=DOC.СерияДокумента;
    ТЗ.НомерДокумента=DOC.НомерДокумента;
    ТЗ.СерияНомерПолиса=DOC.СерияНомерПолиса;
    ТЗ.ДатаВыдачиПолиса=DOC.ДатаВыдачиПолиса;
    ТЗ.ДатаОкончанияПолиса=DOC.ДатаОкончанияПолиса;
    ТЗ.СтатусПредставителя=DOC.СтатусПредставителя;
    ТЗ.ФамилияПредставителя=DOC.ФамилияПредставителя;
    ТЗ.ИмяПредставителя=DOC.ИмяПредставителя;
    ТЗ.ОтчествоПредставителя=DOC.ОтчествоПредставителя;
    ТЗ.ОГРНСМО=DOC.ОГРНСМО;
    ТЗ.Гражданство=DOC.Гражданство;
    ТЗ.НаименованиеРайона=DOC.Район;
    ТЗ.КодНП=DOC.КодНП;
    ТЗ.НаселенныйПункт=DOC.НаселенныйПункт;
    ТЗ.КодУлицы=DOC.КодУлицы;
    ТЗ.Улица=DOC.Улица;
    ТЗ.Дом=DOC.Дом;
    ТЗ.Корпус=DOC.Корпус;
    ТЗ.Квартира=DOC.Квартира;
    ТЗ.СтатусЗастрахованного=DOC.СтатусЗастрахованного;
    ТЗ.МестоРаботы=DOC.МестоРаботы;
    ТЗ.ДатаНачалаЛечения=DOC.ДатаНачалаЛечения;
    ТЗ.ДатаОкончанияЛечения=DOC.ДатаОкончанияЛечения;
    ТЗ.ВидМедицинскойПомощи=DOC.ВидМедицинскойПомощи;
    ТЗ.КодПрофиля=DOC.КодПрофиля;
    ТЗ.КодСпециальности=DOC.КодСпециальности;
    ТЗ.КодОсновногоЗаболевания=DOC.КодОсновногоЗаболевания;	
    ТЗ.КодСопутствующегоЗаболевания=DOC.КодСопутствующегоЗаболевания;
    ТЗ.ИсходЗаболевания=DOC.ИсходЗаболевания;
    ТЗ.ОГРНЛПУ=DOC.ОГРНЛПУ;
    ТЗ.СуммаКОплате=DOC.СуммаКОплате;
    ТЗ.ПорядковыйНомер=DOC.ПорядковыйНомер;
    ТЗ.КодПричины=DOC.КодПричины;
    ТЗ.ПризнакОсобыйСлучай=DOC.ПризнакОсобыйСлучай; 
    ТЗ.КодТерритории=Doc.КодТерритории;
    СчетчикСтрок = СчетчикСтрок + 1;
    КонецЦикла;
    ТЗ.ВыбратьСтроки();	
    k = 0;  
    N=0;   
    Пока ТЗ.ПолучитьСтроку() = 1 цикл // перебираем строки ТЗ
    k = k + 1;
    Если ТЗ.ОкатоСтрахования = ВыбранноеОкато.ПолныйКод Тогда // заносим пациентов с указанным Окато в ОТЗ
    ОТЗ.НоваяСтрока();
    N = N +1;
    для m = 1 по ТЗ.КоличествоКолонок() цикл
    ОТЗ.УстановитьЗначение(N,m,ТЗ.ПолучитьЗначение(k,m))
    КонецЦикла;	
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    DocTFOMS.Новый();
    ОТЗ.ВыбратьСтроки();// перебираем строки из ОТЗ (пациенты с одинаковым ОКАТО)
    k=1;
    Пока ОТЗ.ПолучитьСтроку() = 1 цикл
    //Сообщить(ОТЗ.ОкатоСтрахования);
    //Сообщить(ОТЗ.Фамилия);
    //Сообщить(ОТЗ.Имя);
    //Сообщить(ОТЗ.Отчество); 			
    DocTFOMS.НоваяСтрока(); 
    DocTFOMS.НомерСтроки=k;
    DocTFOMS.ОкатоСтрахования=ОТЗ.ОкатоСтрахования;
    DocTFOMS.ФамилияПациента=ОТЗ.Фамилия;
    DocTFOMS.ИмяПациента=ОТЗ.Имя;
    DocTFOMS.ОтчествоПациента=ОТЗ.Отчество;
    DocTFOMS.ПолПациента=ОТЗ.Пол;
    DocTFOMS.ДатаРожденияПациента=ОТЗ.ДатаРождения;
    DocTFOMS.КодДокумента=ОТЗ.КодДокумента;
    DocTFOMS.СерияДокумента=ОТЗ.СерияДокумента;
    DocTFOMS.НомерДокумента=ОТЗ.НомерДокумента;
    DocTFOMS.СерияНомерПолиса=ОТЗ.СерияНомерПолиса;
    DocTFOMS.ДатаВыдачиПолиса=ОТЗ.ДатаВыдачиПолиса;
    DocTFOMS.ДатаОкончанияПолиса=ОТЗ.ДатаОкончанияПолиса;
    DocTFOMS.СтатусПредставителя=ОТЗ.СтатусПредставителя;
    DocTFOMS.ФамилияПредставителя=ОТЗ.ФамилияПредставителя;
    DocTFOMS.ИмяПредставителя=ОТЗ.ИмяПредставителя;
    DocTFOMS.ОтчествоПредставителя=ОТЗ.ОтчествоПредставителя;
    DocTFOMS.ОГРНСМО=ОТЗ.ОГРНСМО;
    DocTFOMS.Гражданство=ОТЗ.Гражданство;
    DocTFOMS.Район=ОТЗ.НаименованиеРайона;
    DocTFOMS.КодНП=ОТЗ.КодНП;
    DocTFOMS.НаселенныйПункт=ОТЗ.НаселенныйПункт;
    DocTFOMS.КодУлицы=ОТЗ.КодУлицы;
    DocTFOMS.Улица=ОТЗ.Улица;
    DocTFOMS.Дом=ОТЗ.Дом;
    DocTFOMS.Корпус=ОТЗ.Корпус;
    DocTFOMS.Квартира=ОТЗ.Квартира;
    DocTFOMS.СтатусЗастрахованного=ОТЗ.СтатусЗастрахованного;
    DocTFOMS.МестоРаботы=ОТЗ.МестоРаботы;
    DocTFOMS.ДатаНачалаЛечения=ОТЗ.ДатаНачалаЛечения;
    DocTFOMS.ДатаОкончанияЛечения=ОТЗ.ДатаОкончанияЛечения;
    DocTFOMS.ВидМедицинскойПомощи=ОТЗ.ВидМедицинскойПомощи;
    DocTFOMS.КодПрофиля=ОТЗ.КодПрофиля;
    DocTFOMS.КодСпециальности=ОТЗ.КодСпециальности;
    DocTFOMS.КодОсновногоЗаболевания=ОТЗ.КодОсновногоЗаболевания;	
    DocTFOMS.КодСопутствующегоЗаболевания=ОТЗ.КодСопутствующегоЗаболевания;
    DocTFOMS.ИсходЗаболевания=ОТЗ.ИсходЗаболевания;
    DocTFOMS.ОГРНЛПУ=ОТЗ.ОГРНЛПУ;
    DocTFOMS.СуммаКОплате=ОТЗ.СуммаКОплате;
    DocTFOMS.ПорядковыйНомер=ОТЗ.ПорядковыйНомер;
    DocTFOMS.КодПричины=ОТЗ.КодПричины;
    DocTFOMS.ПризнакОсобыйСлучай=ОТЗ.ПризнакОсобыйСлучай;
    DocTFOMS.КодТерритории = ОТЗ.КодТерритории;			
    k=k+1;
    КонецЦикла;
    DocTFOMS.Записать(); // и т.д.
    DocTFOMS.Провести();
    КонецЦикла;
    Сообщить("Конец формирования реестров счетов исходящих");
    КонецПроцедуры
    
    Я перебираю справочник кодов ОКАТО в цикле, затем перебираю все документы за указанный период. В каждом из них есть записи по пациентам, у каждого из которых свой регион. Всех пациентов выгружаю в ТЗ, затем в цикле проверяю ее построчно и тех, у кого регион соответствует выбранному ОКАТО - выгружаю в документ. Регионов 89, в итоге у меня цикл идет 89 раз, а нужно обрабатывать все входящие документы и создавать на новые за один проход, иначе скорость работы кошмарно медленная. Подскажите, пожалуйста, как правильно организовать цикл :unsure:
  2. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Видимо правильнее будет использовать Запрос с группировкой по кодам ОКАТО и документы формировать исходя из результатов Зпроса без предварительной выгрузки в ТЗ
  3. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Да, и листинг сделали бы покомпактнее. Для понимания задачи совсем ни к чему всю структуру ТЗ приводить и документов. Достаточно сами циклы оставить и комментарии //здесь заполняется ТЗ, ну или как то в этом духе...
  4. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    криво... куча циклов лишних.. + судя по коду отрабатывает с ошибкой (неверно заполняется ОТЗ)
    самый ленивый вариант:
    Код:
    Процедура Сформировать()      
    Перем ТЗ, ОТЗ;    
    
    //ВыбранноеОкато = СпрОкато.НайтиПоКоду(03000); 
    ТЗ = СоздатьОбъект("ТаблицаЗначений");// Таблица значений для данных 1 документа
    ОТЗ = СоздатьОбъект("ТаблицаЗначений"); // Общая таблица значений с данными всех пациентов отдельного региона
    
    // создаем набор колонок для ТЗ
    ТЗ.НоваяКолонка("Номер", "Число",4,0);
    ТЗ.НоваяКолонка("ОкатоСтрахования", "Строка",5);
    ТЗ.НоваяКолонка("Фамилия", "Строка",40);
    ТЗ.НоваяКолонка("Имя", "Строка",40);
    ТЗ.НоваяКолонка("Отчество", "Строка",40);
    ТЗ.НоваяКолонка("Пол", "Строка",1);
    ТЗ.НоваяКолонка("ДатаРождения", "Дата");
    ТЗ.НоваяКолонка("КодДокумента", "Число",2,0);
    ТЗ.НоваяКолонка("СерияДокумента", "Строка",9);
    ТЗ.НоваяКолонка("НомерДокумента", "Строка",8);
    ТЗ.НоваяКолонка("СерияНомерПолиса", "Строка",25);
    ТЗ.НоваяКолонка("ДатаВыдачиПолиса", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияПолиса", "Дата");
    ТЗ.НоваяКолонка("СтатусПредставителя", "Число",1,0);
    ТЗ.НоваяКолонка("ФамилияПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ИмяПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОтчествоПредставителя", "Строка",40);
    ТЗ.НоваяКолонка("ОГРНСМО", "Строка",15);
    ТЗ.НоваяКолонка("Гражданство", "Строка",3);
    ТЗ.НоваяКолонка("НаименованиеРайона", "Строка",150);
    ТЗ.НоваяКолонка("КодНП", "Число",3,0);
    ТЗ.НоваяКолонка("НаселенныйПункт", "Строка",150);
    ТЗ.НоваяКолонка("КодУлицы", "Число",3,0);
    ТЗ.НоваяКолонка("Улица", "Строка",150);
    ТЗ.НоваяКолонка("Дом", "Строка",7);
    ТЗ.НоваяКолонка("Корпус", "Строка",5);
    ТЗ.НоваяКолонка("Квартира", "Строка",5);
    ТЗ.НоваяКолонка("СтатусЗастрахованного", "Число",2,0);
    ТЗ.НоваяКолонка("МестоРаботы", "Строка",150);
    ТЗ.НоваяКолонка("ДатаНачалаЛечения", "Дата");
    ТЗ.НоваяКолонка("ДатаОкончанияЛечения", "Дата");
    ТЗ.НоваяКолонка("ВидМедицинскойПомощи", "Число",1,0);
    ТЗ.НоваяКолонка("КодПрофиля", "Число",2,0);
    ТЗ.НоваяКолонка("КодСпециальности", "Строка",9);
    ТЗ.НоваяКолонка("КодОсновногоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("КодСопутствующегоЗаболевания", "Строка",7);
    ТЗ.НоваяКолонка("ИсходЗаболевания", "Число",2,0);
    ТЗ.НоваяКолонка("ОГРНЛПУ", "Строка",15);
    ТЗ.НоваяКолонка("СуммаКОплате", "Число",11,2);
    ТЗ.НоваяКолонка("ПорядковыйНомер", "Число",5,0);
    ТЗ.НоваяКолонка("КодПричины", "Строка",8);
    ТЗ.НоваяКолонка("ПризнакОсобыйСлучай", "Строка",7);
    ТЗ.НоваяКолонка("КодТерритории", "Справочник.КодТерритории");
    
    //ОТЗ.Загрузить(ТЗ); // аналогичный набор колонок создаем и для ОТЗ
    
    Doc = СоздатьОбъект("Документ.РеестрСчетовВходящийЛПУ");   
    Doc.ВыбратьДокументы(ВыбНачПериода,ВыбНачПериода);
    DocTFOMS = СоздатьОбъект("Документ.РеестрСчетовИсходящийВТФОМС");
    Пока Doc.ПолучитьДокумент() = 1 Цикл // перебираем все документы за период
    Если (Doc.ПометкаУдаления()=0) и (Doc.Проведен()=1) Тогда //просматриваем проведенные и не поченные на удаление документы
    СчетчикСтрок=1;
    Doc.ВыбратьСтроки();            
    Пока Doc.ПолучитьСтроку()=1 Цикл // перебираем все строки документа и заносим в ТЗ 
    ТЗ.НоваяСтрока();
    ТЗ.Номер=СчетчикСтрок;
    ТЗ.ОкатоСтрахования = Doc.ОкатоСтрахования;
    ТЗ.Фамилия=Doc.ФамилияПациента.ФамилияПациента;
    ТЗ.Имя=DOC.ИмяПациента;
    ТЗ.Отчество=DOC.ОтчествоПациента;
    ТЗ.Пол=DOC.ПолПациента;
    ТЗ.ДатаРождения=DOC.ДатаРожденияПациента;
    ТЗ.КодДокумента=DOC.КодДокумента;
    ТЗ.СерияДокумента=DOC.СерияДокумента;
    ТЗ.НомерДокумента=DOC.НомерДокумента;
    ТЗ.СерияНомерПолиса=DOC.СерияНомерПолиса;
    ТЗ.ДатаВыдачиПолиса=DOC.ДатаВыдачиПолиса;
    ТЗ.ДатаОкончанияПолиса=DOC.ДатаОкончанияПолиса;
    ТЗ.СтатусПредставителя=DOC.СтатусПредставителя;
    ТЗ.ФамилияПредставителя=DOC.ФамилияПредставителя;
    ТЗ.ИмяПредставителя=DOC.ИмяПредставителя;
    ТЗ.ОтчествоПредставителя=DOC.ОтчествоПредставителя;
    ТЗ.ОГРНСМО=DOC.ОГРНСМО;
    ТЗ.Гражданство=DOC.Гражданство;
    ТЗ.НаименованиеРайона=DOC.Район;
    ТЗ.КодНП=DOC.КодНП;
    ТЗ.НаселенныйПункт=DOC.НаселенныйПункт;
    ТЗ.КодУлицы=DOC.КодУлицы;
    ТЗ.Улица=DOC.Улица;
    ТЗ.Дом=DOC.Дом;
    ТЗ.Корпус=DOC.Корпус;
    ТЗ.Квартира=DOC.Квартира;
    ТЗ.СтатусЗастрахованного=DOC.СтатусЗастрахованного;
    ТЗ.МестоРаботы=DOC.МестоРаботы;
    ТЗ.ДатаНачалаЛечения=DOC.ДатаНачалаЛечения;
    ТЗ.ДатаОкончанияЛечения=DOC.ДатаОкончанияЛечения;
    ТЗ.ВидМедицинскойПомощи=DOC.ВидМедицинскойПомощи;
    ТЗ.КодПрофиля=DOC.КодПрофиля;
    ТЗ.КодСпециальности=DOC.КодСпециальности;
    ТЗ.КодОсновногоЗаболевания=DOC.КодОсновногоЗаболевания;    
    ТЗ.КодСопутствующегоЗаболевания=DOC.КодСопутствующегоЗаболевания;
    ТЗ.ИсходЗаболевания=DOC.ИсходЗаболевания;
    ТЗ.ОГРНЛПУ=DOC.ОГРНЛПУ;
    ТЗ.СуммаКОплате=DOC.СуммаКОплате;
    ТЗ.ПорядковыйНомер=DOC.ПорядковыйНомер;
    ТЗ.КодПричины=DOC.КодПричины;
    ТЗ.ПризнакОсобыйСлучай=DOC.ПризнакОсобыйСлучай; 
    ТЗ.КодТерритории=Doc.КодТерритории;
    СчетчикСтрок = СчетчикСтрок + 1;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    ТЗ.Сортировать("ОкатоСтрахования");
    ОкатоСтрахования = "";
    
    ТЗ.ВыбратьСтроки();// перебираем строки из ОТЗ (пациенты с одинаковым ОКАТО)
    Пока ТЗ.ПолучитьСтроку() = 1 цикл
    Если ОкатоСтрахования <> ТЗ.ОкатоСтрахования Тогда
    Если ОкатоСтрахования<>"" Тогда
    DocTFOMS.Записать();
    DocTFOMS.Провести();
    КонецЕсли;
    DocTFOMS.Новый();	
    ОкатоСтрахования = ТЗ.ОкатоСтрахования;
    КонецЕсли;		
    DocTFOMS.НоваяСтрока(); 
    DocTFOMS.НомерСтроки=k;
    DocTFOMS.ОкатоСтрахования=ТЗ.ОкатоСтрахования;
    DocTFOMS.ФамилияПациента=ТЗ.Фамилия;
    DocTFOMS.ИмяПациента=ТЗ.Имя;
    DocTFOMS.ОтчествоПациента=ТЗ.Отчество;
    DocTFOMS.ПолПациента=ТЗ.Пол;
    DocTFOMS.ДатаРожденияПациента=ТЗ.ДатаРождения;
    DocTFOMS.КодДокумента=ТЗ.КодДокумента;
    DocTFOMS.СерияДокумента=ТЗ.СерияДокумента;
    DocTFOMS.НомерДокумента=ТЗ.НомерДокумента;
    DocTFOMS.СерияНомерПолиса=ТЗ.СерияНомерПолиса;
    DocTFOMS.ДатаВыдачиПолиса=ТЗ.ДатаВыдачиПолиса;
    DocTFOMS.ДатаОкончанияПолиса=ТЗ.ДатаОкончанияПолиса;
    DocTFOMS.СтатусПредставителя=ТЗ.СтатусПредставителя;
    DocTFOMS.ФамилияПредставителя=ТЗ.ФамилияПредставителя;
    DocTFOMS.ИмяПредставителя=ТЗ.ИмяПредставителя;
    DocTFOMS.ОтчествоПредставителя=ТЗ.ОтчествоПредставителя;
    DocTFOMS.ОГРНСМО=ТЗ.ОГРНСМО;
    DocTFOMS.Гражданство=ТЗ.Гражданство;
    DocTFOMS.Район=ТЗ.НаименованиеРайона;
    DocTFOMS.КодНП=ТЗ.КодНП;
    DocTFOMS.НаселенныйПункт=ТЗ.НаселенныйПункт;
    DocTFOMS.КодУлицы=ТЗ.КодУлицы;
    DocTFOMS.Улица=ТЗ.Улица;
    DocTFOMS.Дом=ТЗ.Дом;
    DocTFOMS.Корпус=ТЗ.Корпус;
    DocTFOMS.Квартира=ТЗ.Квартира;
    DocTFOMS.СтатусЗастрахованного=ТЗ.СтатусЗастрахованного;
    DocTFOMS.МестоРаботы=ТЗ.МестоРаботы;
    DocTFOMS.ДатаНачалаЛечения=ТЗ.ДатаНачалаЛечения;
    DocTFOMS.ДатаОкончанияЛечения=ТЗ.ДатаОкончанияЛечения;
    DocTFOMS.ВидМедицинскойПомощи=ТЗ.ВидМедицинскойПомощи;
    DocTFOMS.КодПрофиля=ТЗ.КодПрофиля;
    DocTFOMS.КодСпециальности=ТЗ.КодСпециальности;
    DocTFOMS.КодОсновногоЗаболевания=ТЗ.КодОсновногоЗаболевания;    
    DocTFOMS.КодСопутствующегоЗаболевания=ТЗ.КодСопутствующегоЗаболевания;
    DocTFOMS.ИсходЗаболевания=ТЗ.ИсходЗаболевания;
    DocTFOMS.ОГРНЛПУ=ТЗ.ОГРНЛПУ;
    DocTFOMS.СуммаКОплате=ТЗ.СуммаКОплате;
    DocTFOMS.ПорядковыйНомер=ТЗ.ПорядковыйНомер;
    DocTFOMS.КодПричины=ТЗ.КодПричины;
    DocTFOMS.ПризнакОсобыйСлучай=ТЗ.ПризнакОсобыйСлучай;
    DocTFOMS.КодТерритории = ТЗ.КодТерритории;            
    КонецЦикла;
    Сообщить("Конец формирования реестров счетов исходящих");
    КонецПроцедуры
    
  5. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    для файловой платформы такой вариант подойдет, для sql обязательно через Запрос.
    Еще подозреваю, что для заполнения ТЗ вместо цикла по строкам можно воспользоваться функцией Doc.UnloadTable(ТЗ) (не помню на русском название. кажется ВыгрузитьТабЧать()) если не заполняются реквизиты шапки, это тоже повысит скорость выполнения программы..
  6. TopicStarter Overlay
    BBDragon
    Offline

    BBDragon Опытный в 1С

    Регистрация:
    11 мар 2010
    Сообщения:
    183
    Симпатии:
    2
    Баллы:
    29
    фобец, спасибо огромное, все получилось :unsure:
    Вариант обработки с запросом работал гораздо медленнее

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