|
v7: Перенесли базы 1С 7.7 на сервер 2012 | ☑ | ||
---|---|---|---|---|
0
IngWar2008
18.09.17
✎
14:28
|
После обнаружился косяк интересный... обработку выполняет неправильино (Обработка создает документы "Оказание услуг" и финансовые движения. Вот на 2012 сервере он из списка контрагентов кому-то может не создать документ, при чем логики почему он его пропускает найти не удалось.)... но самое интересное что на старом сервере делает все правильно... те же действия те же данные... на 2012 сервере с косяком... на старом копирую базу выполняет без косяка.
|
|||
1
1dvd
18.09.17
✎
14:30
|
да, дела...
|
|||
2
Ёпрст
18.09.17
✎
14:31
|
(0) Продолжайте наблюдение
|
|||
3
Pahomich
18.09.17
✎
14:34
|
Раньше и трава была зеленее...А вы не верите!
|
|||
4
vcv
18.09.17
✎
14:34
|
Вероятна проблема с сортировкой. Всяческих таблиц значений. Надеешься, что, например, будут идти строки сначала по одному контрагенту, а потом по другому, а они в разбивку.
|
|||
5
Изучаю1С8
18.09.17
✎
14:52
|
Имеет смысл код показать.
|
|||
6
IngWar2008
18.09.17
✎
14:55
|
Сейчас код вставлю
|
|||
7
IngWar2008
18.09.17
✎
14:57
|
Перем ТЗ;
Функция НеобходимоТехобслуживаниеПоОборудованию(Оборудование, НаДату,НачальнаяДата, КонечнаяДата,Колво) Если Оборудование.ПометкаУдаления() = 0 Тогда Если Сред(НазваниеНабораПрав(),9) = "СВГО" Тогда ВидОборудования = Перечисление.ВидыОборудования.СВГО; ИначеЕсли Сред(НазваниеНабораПрав(),9) = "СПГ" Тогда ВидОборудования = Перечисление.ВидыОборудования.СПГ; Иначе ВидОборудования = Перечисление.ВидыОборудования.СПП; КонецЕсли; КоличетвоОбслуживаний = Оборудование.Вид.КоличествоОбслуживаний; Периодический = СоздатьОбъект("Периодический"); Периодический.ИспользоватьОбъект("ДатаОбслуживания", Оборудование.ТекущийЭлемент()); Периодический.ВыбратьЗначения(НачальнаяДата, КонечнаяДата); Колво = 0; Пока Периодический.ПолучитьЗначение()=1 Цикл Колво = Колво + 1; КонецЦикла; Если //(Оборудование.Вид.ВидНоменклатуры.Вид = ВидОборудования) и ((ПустоеЗначение(Оборудование.ДатаОбслуживания.Получить(НаДату))=1) или (Колво < КоличетвоОбслуживаний)) Тогда Возврат 1; КонецЕсли; КонецЕсли; Возврат 0; КонецФункции Функция НеобходимоТехобслуживаниеПоДоговору(Договор, НаДату) Дог = Договор; Если ПустоеЗначение(Дог.ДоговорКонтрагента)=0 Тогда Дог = Дог.ДоговорКонтрагента; КонецЕсли; НачальнаяДата = Дог.ДатаЗаключения; Если Дог.ДатаПролонгации.Получить(НаДату) > Дог.ДатаЗаключения Тогда НачальнаяДата = Дог.ДатаПролонгации.Получить(НаДату); КонецЕсли; КонечнаяДата = ДобавитьМесяц(НачальнаяДата,Дог.СрокДействия.Получить(НаДату)*12); Оборудование = СоздатьОбъект("Справочник.ГазовоеОборудование"); Оборудование.ИспользоватьВладельца(Договор); Оборудование.ВыбратьЭлементы(); Пока Оборудование.ПолучитьЭлемент() = 1 Цикл Колво = 0; Если НеобходимоТехобслуживаниеПоОборудованию(Оборудование, НаДату, НачальнаяДата, КонечнаяДата, Колво)=1 Тогда Возврат 1; КонецЕсли; КонецЦикла; Возврат 0; КонецФункции Процедура УдалитьДокумент() Если ПустоеЗначение(Документ)=0 Тогда Док = СоздатьОбъект("Документ.ОказаниеУслуг"); Док.НайтиДокумент(Документ); Док.Удалить(); Документ = ""; КонецЕсли; КонецПроцедуры Процедура УдалитьДокументы() ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл УдалитьДокумент(); КонецЦикла; КонецПроцедуры Процедура Заполнить() Корпуса = СокрЛП(Корпуса); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл Если ПустоеЗначение(Документ)=0 Тогда Если Вопрос("В документе есть ссылки на докумены оказания услуг. Удалить документы оказания услуг ?","Да+Нет") = "Да" тогда УдалитьДокументы(); Иначе Возврат; КонецЕсли КонецЕсли; КонецЦикла; УдалитьСтроки(); Запрос=СоздатьОбъект("Запрос"); ТекстЗапроса=" |Контрагент=Справочник.Контрагенты.ТекущийЭлемент; |НаселенныйПункт=Справочник.Контрагенты.НаселенныйПункт; |Улица=Справочник.Контрагенты.Улица; |НомерДома=Справочник.Контрагенты.НомерДома; |Корпус=Справочник.Контрагенты.Корпус; |Квартира=Справочник.Контрагенты.Квартира;"; Если НаселенныеПункты.Выбран()=1 Тогда ТекстЗапроса=ТекстЗапроса+"Условие (НаселенныйПункт=НаселенныеПункты);"; КонецЕсли; Если Улицы.Выбран()=1 Тогда ТекстЗапроса=ТекстЗапроса+"Условие (Улица=Улицы);" КонецЕсли; Если ПустоеЗначение(Дома)=0 Тогда ТекстЗапроса=ТекстЗапроса+"Условие (НомерДома=Дома);" КонецЕсли; //ТекстЗапроса=ТекстЗапроса+"Группировка НаселенныйПункт; //|Группировка Улица; ТекстЗапроса=ТекстЗапроса+"Группировка Контрагент Упорядочить по Контрагент.НомерДома,Контрагент.Квартира; |Обрабатывать НеПомеченныеНаУдаление;"; Запрос.Выполнить(ТекстЗапроса); ПоказатьКорпус = 0; ПоказатьНомерКвартиры = 0; ПоказатьДом = 0; Пока запрос.Группировка("Контрагент")=1 Цикл Контр = Запрос.Контрагент.ТекущийЭлемент(); Если (Запрос.ЭтоГруппа("Контрагент")=1) Тогда Продолжить; Иначе Договоры = СоздатьОбъект("Справочник.Договоры"); Договоры.ИспользоватьВладельца(Контр); Договоры.ВыбратьЭлементы(); Пока Договоры.ПолучитьЭлемент()=1 Цикл Если ВидыДоговоров.Выбран()=1 Тогда Если Договоры.ВидДоговора.Вид <> ВидыДоговоров.Вид Тогда Продолжить; КонецЕсли; КонецЕсли; //Если (ПустоеЗначение(Корпуса)=0) Тогда // Если (ВРег(СокрЛП(Контр.Корпус)) <> ВРег(СокрЛП(Корпуса))) Тогда // Продолжить; // КонецЕсли; //КонецЕсли; //Если Договоры.ДатаЗаключения < Дата("01.07.2010") Тогда // Продолжить; //КонецЕсли; Если (ПустоеЗначение(Договоры.ДоговорКонтрагента)=0) Тогда Если (ДатаДок < Договоры.ДоговорКонтрагента.ДатаЗаключения) Тогда Продолжить; КонецЕсли; ИначеЕсли (ДатаДок < Договоры.ДатаЗаключения) Тогда Продолжить; КонецЕсли; Исп = ?(ПустоеЗначение(Договоры.ДоговорКонтрагента.Исполнитель)=0,Договоры.ДоговорКонтрагента.Исполнитель,Договоры.Исполнитель); Если Исполнитель.Выбран()=1 Тогда Если Исп <> Исполнитель Тогда Продолжить; КонецЕсли; КонецЕсли; Если (Договоры.Статус <> Перечисление.СтатусДоговора.Действует) и (Договоры.ДоговорКонтрагента.Статус <> Перечисление.СтатусДоговора.Действует) Тогда Продолжить; КонецЕсли; ДатаОкончанияДоговораКонтрагента = ДобавитьМесяц(Макс(Договоры.ДоговорКонтрагента.ДатаЗаключения,Договоры.ДоговорКонтрагента.ДатаПролонгации.Получить(ДатаДок)),Договоры.ДоговорКонтрагента.СрокДействия.Получить(ДатаДок)*12); ДатаОкончанияДоговора = ДобавитьМесяц(Макс(Договоры.ДатаЗаключения,Договоры.ДатаПролонгации.Получить(ДатаДок)),Договоры.СрокДействия.Получить(ДатаДок)*12); Если (ПустоеЗначение(Договоры.ДоговорКонтрагента)=0) Тогда Если (ДатаДок > ДатаОкончанияДоговораКонтрагента) Тогда Продолжить; КонецЕсли; ИначеЕсли (ДатаДок > ДатаОкончанияДоговора) Тогда Продолжить; КонецЕсли; Если ((Договоры.ВидДоговора.Вид = Перечисление.ВидДоговора.СПП) или (Договоры.ВидДоговора.Вид = Перечисление.ВидДоговора.СВГО) или (Договоры.ВидДоговора.Вид = Перечисление.ВидДоговора.СПГСВГО) или (Договоры.ВидДоговора.Вид = Перечисление.ВидДоговора.СПГ) или ((Договоры.ВидДоговора.Вид = Перечисление.ВидДоговора.Тройственный) и (ПустоеЗначение(Договоры.ДоговорКонтрагента)=0))) и ( НеобходимоТехобслуживаниеПоДоговору(Договоры.ТекущийЭлемент(),ДатаДок)=1 ) Тогда НоваяСтрока(); НаселенныйПункт =запрос.НаселенныйПункт.ТекущийЭлемент(); Улица = запрос.улица.ТекущийЭлемент(); Дом = запрос.номерДома; Корпус =запрос.корпус; Квартира = запрос.квартира; Контрагент = Контр; Договор = Договоры.ТекущийЭлемент(); Сумма = Договор.Сумма; Если ПоказатьКорпус = 0 Тогда ПоказатьКорпус = ?(ПустоеЗначение(Запрос.Корпус)=1,0,1); КонецЕсли; Если ПоказатьДом = 0 Тогда ПоказатьДом = ?(ПустоеЗначение(Запрос.НомерДома)=1,0,1); КонецЕсли; Если ПоказатьНомерКвартиры = 0 Тогда ПоказатьНомерКвартиры = ?(ПустоеЗначение(Запрос.Квартира)=1,0,1); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Форма.НаселенныйПункт.Видимость(ПустоеЗначение(НаселенныеПункты)); Форма.Улица.Видимость(ПустоеЗначение(Улицы)); Форма.Корпус.Видимость(ПоказатьКорпус); Форма.Квартира.Видимость(ПоказатьНомерКвартиры); Форма.Дом.Видимость(?(ПустоеЗначение(Дома)=1,ПоказатьДом,0)); Комментарий = ?(ПустоеЗначение(НаселенныеПункты)=0,НаселенныеПункты.Наименование,"")+ ?(ПустоеЗначение(Улицы)=0,","+Улицы.Наименование,"")+ ?(ПустоеЗначение(Дома)=0,","+Строка(Дома),""); Если КоличествоСтрок() = 0 Тогда Предупреждение("По запросу нет данных"); Иначе ВыгрузитьТабличнуюЧасть(ТЗ); ТЗ.Сортировать("+НаселенныйПункт,+Улица,+Дом,+Корпус,+Квартира"); ЗагрузитьТабличнуюЧасть(ТЗ); КонецЕсли; Форма.печРеестра.Видимость(?(КоличествоСтрок() = 0,0,1)); КонецПроцедуры Процедура РасчитатьИтог() ВыбратьСтроки(); Итого = 0; Пока ПолучитьСтроку()=1 Цикл Если (ПустоеЗначение(Документ)=0) Тогда Док = СоздатьОбъект("Документ"); Если Док.НайтиДокумент(Документ)=1 Тогда Если Док.Проведен()=1 тогда Итого = Итого + Док.Итог("Всего"); Сообщить(Итог); //Сообщить итог КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ПриЗаписи() Участок = Комментарий; СлужбаАвтор = Сред(НазваниеНабораПрав(),9); РасчитатьИтог(); КонецПроцедуры Процедура ПровестиДокумент() Если ПустоеЗначение(Документ)=0 Тогда Док = СоздатьОбъект("Документ.ОказаниеУслуг"); Если Док.НайтиДокумент(Документ)=1 Тогда Если Док.Проведен()=1 Тогда Док.СделатьНеПроведенным(); Иначе Док.Провести(); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПровестиДокументы() ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ПровестиДокумент(); КонецЦикла; КонецПроцедуры Процедура ПриУдаленииСтроки() Если ПустоеЗначение(Документ)=0 Тогда Ответ = Вопрос("По абоненту "+Контрагент.Наименование+" сормирован докумнет оказания услуг ( №"+Документ.НомерДок+" от "+Документ.ДатаДок+"). Удалить докумнет оказнаия услуг ?","Да+Нет+Отмена"); Если Ответ="Да" Тогда УдалитьДокумент(); Записать(); ИначеЕсли Ответ = "Отмена" Тогда СтатусВозврата(0); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() глПроверкаРазрешенияРедактирования(Контекст); Если Форма.ТолькоПросмотр() = 1 Тогда Форма.кнДок.Доступность(0); Форма.кнДоки.Доступность(0); Форма.удалитьДок.Доступность(0); Форма.удалитьДоки.Доступность(0); Форма.провестиДок.Доступность(0); Форма.провестиДоки.Доступность(0); Форма.печРеестра.Доступность(0); Форма.кнОк.Доступность(0); Форма.кнЗаполнить.Доступность(0); КонецЕсли; ПоказатьКорпус = 0; ПоказатьНомерКвартиры = 0; ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл Если ПоказатьКорпус = 0 Тогда ПоказатьКорпус = ?(ПустоеЗначение(Контрагент.Корпус)=1,0,1); КонецЕсли; Если ПоказатьНомерКвартиры = 0 Тогда ПоказатьНомерКвартиры = ?(ПустоеЗначение(Контрагент.Квартира)=1,0,1); КонецЕсли; Сумма = Договор.Сумма; КонецЦикла; Форма.НаселенныйПункт.Видимость(ПустоеЗначение(НаселенныеПункты)); Форма.Улица.Видимость(ПустоеЗначение(Улицы)); Форма.Дом.Видимость(ПустоеЗначение(Дома)); Форма.Корпус.Видимость(ПоказатьКорпус); Форма.Квартира.Видимость(ПоказатьНомерКвартиры); Форма.печРеестра.Видимость(?(КоличествоСтрок() = 0,0,1)); РасчитатьИтог(); КонецПроцедуры Процедура ОформитьДокумент(Все=0) Если ПустоеЗначение(Документ)=0 Тогда Если Все=0 Тогда ОткрытьФорму(Документ); КонецЕсли; Возврат; КонецЕсли; //НачатьТранзакцию(); Если ПустоеЗначение(ДатаТО)=1 Тогда Если Все=0 Тогда Предупреждение("Не указана дата проведения работ"); КонецЕсли; Возврат; КонецЕсли; Док = СоздатьОбъект("Документ.ОказаниеУслуг"); СчетчикДокументов = СчетчикДокументов + 1; Сообщить(СчетчикДокументов,"Счетчик документов"); Док.Новый(); Док.ДатаДок = ДатаТО; Док.Исполнитель = ?(Исполнитель.Выбран()=1,Исполнитель,?(ПустоеЗначение(Договор.ДоговорКонтрагента.Исполнитель)=0,Договор.ДоговорКонтрагента.Исполнитель,Договор.Исполнитель)); Док.Контрагент = Контрагент; Док.Договор = Договор; Док.ВариантРасчетаНалогов = ?(ПустоеЗначение(Договор.ДоговорКонтрагента.ВариантРасчетаНалогов)=0,Договор.ДоговорКонтрагента.ВариантРасчетаНалогов,Договор.ВариантРасчетаНалогов); Дог = Договор; Если ПустоеЗначение(Дог.ДоговорКонтрагента)=0 Тогда Дог = Дог.ДоговорКонтрагента; КонецЕсли; Если (Дог.ДатаЗаключения >= Дата("01.07.2010")) или (Дог.ВидДоговора.Вид = Перечисление.ВидДоговора.Тройственный) Тогда Док.ФормироватьПроводки = 1; Иначе Док.ФормироватьПроводки = 0; КонецЕсли; НачальнаяДата = Дог.ДатаЗаключения; Если Дог.ДатаПролонгации.Получить(ДатаДок) > Дог.ДатаЗаключения Тогда НачальнаяДата = Дог.ДатаПролонгации.Получить(ДатаДок); КонецЕсли; КонечнаяДата = ДобавитьМесяц(НачальнаяДата,Дог.СрокДействия.Получить(ДатаДок)*12); Оборудование = СоздатьОбъект("Справочник.ГазовоеОборудование"); Оборудование.ИспользоватьВладельца(Договор); Оборудование.ВыбратьЭлементы(1); Док.Комментарий = "Введен на основании документа ТО № '"+НомерДок+" от "+ДатаДок; Пока Оборудование.ПолучитьЭлемент() = 1 Цикл Колво = 0; Если (НеобходимоТехобслуживаниеПоОборудованию(Оборудование.ТекущийЭлемент(),ДатаДок,НачальнаяДата,КонечнаяДата, Колво) = 1) Тогда Док.НоваяСтрока(); Док.Услуга = Оборудование.Вид; Док.Количество = Оборудование.ВЭксплуатации; //Док.Цена = глПолучитьЦену(Контекст,Док.Услуга,Док.ТипЦен,НачальнаяДата); ДатаТарифов = НачальнаяДата; Док.Цена = Док.Услуга.Цена.Получить(ДатаТарифов); Если (Колво + 1) = Оборудование.Вид.КоличествоОбслуживаний Тогда Цена = Окр(Док.Цена/Оборудование.Вид.КоличествоОбслуживаний,2); Цена = Окр(Цена*Колво,2); Док.Цена = Док.Цена - Цена; ИначеЕсли Колво < Оборудование.Вид.КоличествоОбслуживаний Тогда Док.Цена = Окр(Док.Цена/Оборудование.Вид.КоличествоОбслуживаний,2); КонецЕсли; ПорядокХраненияОтпускнойЦены = Док.Услуга.ПорядокХраненияОтпускнойЦены; Ставка = Док.Услуга.ПолучитьАтрибут("СтавкаНДС").Получить(ДатаДок); Если ПустоеЗначение(Док.ВариантРасчетаНалогов.СтавкаНДС) = 0 Тогда Ставка = Док.ВариантРасчетаНалогов.СтавкаНДС; КонецЕсли; Если ПорядокХраненияОтпускнойЦены = 2 Тогда Док.Всего = Док.Количество * Док.Цена; Док.Цена = Док.Цена*100/(100+Ставка.Ставка); Док.НДС = Док.Всего - Док.Цена*Док.Количество; Док.Сумма = Док.Всего - Док.НДС; Иначе Док.Сумма = Док.Количество * Док.Цена; Док.НДС = Док.Сумма*Ставка.Ставка/100; Док.Всего = Док.Сумма + Док.НДС; КонецЕсли; Док.НП = глПоказательДокумента(Док, "НП"); КонецЕсли; КонецЦикла; Док.СлужбаАвтор = Сред(НазваниеНабораПрав(),9); Сообщить("Записал документ"); Док.Записать(); Если Все=0 Тогда ОткрытьФорму(Док.ТекущийДокумент()); // ОтменитьТранзакцию(); Иначе Док.Провести(); КонецЕсли; Документ = Док.ТекущийДокумент(); КонецПроцедуры Процедура ОформитьДокументы(); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ОформитьДокумент(1); КонецЦикла; КонецПроцедуры Процедура ПечатьРеестра() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.ВывестиСекцию("Шапка"); Оборудов = СоздатьОбъект("Справочник.ГазовоеОборудование"); ВыгрузитьТабличнуюЧасть(ТЗ); ТЗ.Сортировать("+НаселенныйПункт,+Улица,+Дом,+Корпус,+Квартира"); ЗагрузитьТабличнуюЧасть(ТЗ); ВыбратьСтроки(); Нпп = 0; Пока ПолучитьСтроку()=1 Цикл Нпп = Нпп + 1; Абонент = Контрагент; Адрес = Абонент.ЮридическийАдрес; Оборудов.ИспользоватьВладельца(Договор); Оборудов.ВыбратьЭлементы(); Оборудование = ""; Если НеобходимоТехобслуживаниеПоДоговору(Договор,ДатаДок)=1 Тогда Дог = Договор; Если (Договор.ВидДоговора = Перечисление.ВидДоговора.Тройственный ) и (ПустоеЗначение(Договор.ДоговорКонтрагента)=0) Тогда Дог = Договор.ДоговорКонтрагента; КонецЕсли; НачальнаяДата = Дог.ДатаЗаключения; Если Дог.ДатаПролонгации.Получить(ДатаДок) > Дог.ДатаЗаключения Тогда НачальнаяДата = Дог.ДатаПролонгации.Получить(ДатаДок); КонецЕсли; КонечнаяДата = ДобавитьМесяц(НачальнаяДата,Дог.СрокДействия.Получить(ДатаДок)*12); Колво = 0; Пока Оборудов.ПолучитьЭлемент() = 1 Цикл Если НеобходимоТехобслуживаниеПоОборудованию(Оборудов, ДатаДок, НачальнаяДата, КонечнаяДата, Колво)=1 Тогда Оборудование = Оборудование + СокрЛП(Оборудов.Вид.Наименование)+" - "+Оборудов.ВЭксплуатации+"; "; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Строка"); КонецЕсли; К |
|||
8
Изучаю1С8
18.09.17
✎
15:12
|
Это все?)
|
|||
9
Злопчинский
18.09.17
✎
15:20
|
(8) надо подождать
|
|||
10
Ёпрст
18.09.17
✎
15:30
|
Код конечно, адский.
Половину, в топку. |
|||
11
Ёпрст
18.09.17
✎
15:31
|
Странно, что он вообще работает
|
|||
12
Ёпрст
18.09.17
✎
15:36
|
1. читать про Без Групп в запросе
2. Выкинуть обращение к ТекущийДокумент/ТекущийЭлемент где ни поподя 3.Выкинуть код с созданием объекта типа Документ и НайтиДокумент для получения отрибутов ссылки, типа проведён и суммы дока. 4. выкинуть вот этот мусор, который устанавливает видимость реквизитов, основываясь на последней строке документа. Форма.НаселенныйПункт.Видимость(ПустоеЗначение(НаселенныеПункты)); Форма.Улица.Видимость(ПустоеЗначение(Улицы)); Форма.Корпус.Видимость(ПоказатьКорпус); Форма.Квартира.Видимость(ПоказатьНомерКвартиры); 5. Выкинуть код изменения ТЧ дока при печати реестра. дальше лень смотреть |
|||
13
Ёпрст
18.09.17
✎
15:37
|
ну и непосредственное удаление объектов в коде.. не айс.
|
|||
14
Ёпрст
18.09.17
✎
15:38
|
На счет того, что что-то там не создаётся, ищется в отладчике за 2 минуты.
|
|||
15
IngWar2008
18.09.17
✎
16:44
|
Спасибо всем
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |