Функция ПолучитьПредоплату(Контрагент,Договор) БИ=СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2); БИ.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2); БИ.ВыполнитьЗапрос(ДатаАктов,,"76.79"); СуммаПредоплаты=БИ.СНК()-БИ.СНД(); Возврат СуммаПредоплаты; КонецФункции Функция ПолучитьДатуОплаты(Контрагент,Договор) ДатаОпл = ""; БИ=СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2); БИ.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2); БИ.ВыполнитьЗапрос(Дата(2016,7,1),ДатаАктов,"76.79","51",,,"Операция"); БИ.ВыбратьПериоды(); Пока БИ.ПолучитьПериод()=1 Цикл ДатаОпл = БИ.Операция.ДатаОперации; КонецЦикла; Возврат ДатаОпл; КонецФункции Процедура ПриНачалеВыбораЗначения(ЭлементДиалога, ФлагОбработки) Если ЭлементДиалога="ИмяФайла" Тогда Каталог=""; Файл=ИмяФайла; Разд=Найти(Файл, "\"); Пока 0<Разд Цикл Каталог=Каталог+Лев(Файл, Разд); Файл=Сред(Файл, Разд+1); Разд=Найти(Файл, "\"); КонецЦикла; Каталог=Каталог+"."; Если ФС.СуществуетФайл(Каталог)=0 Тогда Если Вопрос(Каталог+"|Указанный каталог не существует! Создать?",4)=6 Тогда ФС.СоздатьКаталог(Каталог); КонецЕсли; КонецЕсли; Если ФС.ВыбратьФайл(0, Файл, Каталог, "ИмяФайла","Текстовые (*.xls*)|*.xls*", "xls*")=1 Тогда ИмяФайла=Каталог+Файл; КонецЕсли; КонецЕсли; КонецПроцедуры // ПриНачалеВыбораЗначения() //******************************************* Процедура Сформировать() НаимУслЭЭ = "Электроэнергия БелЭЗ"; ЕдИзмЭЭ = "кВт*ч"; НаимУслТрЭЭ = "Трансп. и перераб. электроэн. и обсл. сетей";ЕдИзмТрЭЭ = "кВт*ч"; НаимУслТЭ = "Теплоэнергия БелЭЗ"; ЕдИзмТЭ = "Мкал"; НаимУслТрТЭ = "Трансопртировка теплоэнергии"; ЕдИзмТрТЭ = "Мкал"; НаимУслВода = "Водопотребление и водоотведение, Водоканал"; ЕдИзмВода = "м3"; НаимУслПотериВоды = "Потери на сетях, Водоконал"; ЕдИзмПотериВоды = ""; НаимУслПожСигн = "Пожарная сигнализация, БастионС"; ЕдИзмПожСигн = "мес."; НаимУслТехОбсл = "Содержание и тех.обсл. здания"; ЕдИзмТехОбсл = "м2"; Попытка Excel=СоздатьОбъект("Excel.Application"); Исключение Предупреждение("Excel не установлен!",10); Возврат; КонецПопытки; Попытка Книга = Excel.Workbooks.Open(ИмяФайла); Исключение Сообщить(ОписаниеОшибки()+" Не удалось открыть файл загрузки"); Возврат; КонецПопытки; Лист = Книга.Worksheets(1); ДатаСписка = СокрЛП(Лист.Cells(2,1).Value); // Что за ДатаСписка? В эксель-файле мы такого не указываем, а указываем при запуски скрипта .ert ДатаСписка = СокрЛП(Сред(ДатаСписка,3)); Попытка ДатаСписка = Дата(Прав(ДатаСписка,4),Сред(ДатаСписка,4,2),Лев(ДатаСписка,2)); Исключение Сообщить("В ячейке 2,1 Указана неверная дата списка. Импорт произведён не будет"); Возврат; КонецПопытки; СпрКонт = СоздатьОбъект("Справочник.Контрагенты"); СпрДог = СоздатьОбъект("Справочник.Договоры"); тз = СоздатьОбъект("ТаблицаЗначений"); тз.НоваяКолонка("Контрагент"); тз.НоваяКолонка("Договор"); тз.НоваяКолонка("Сумма"); тз.НоваяКолонка("Метры"); тз.НоваяКолонка("Дни"); ТарифЭЭ = СокрЛП(Лист.Cells(2,2).Value); ТарифТрЭЭ = СокрЛП(Лист.Cells(2,3).Value); ТарифТЭ = СокрЛП(Лист.Cells(2,4).Value); ТарифТрТЭ = СокрЛП(Лист.Cells(2,5).Value); ТарифВода = СокрЛП(Лист.Cells(2,6).Value); ТарифПотериВоды = СокрЛП(Лист.Cells(2,7).Value); КонСтрока = Лист.UsedRange.Rows.Count; Для А=10 по КонСтрока Цикл // список потребителей услуг должен начинаться с 10-й строки файла эксель Контрагент = СокрЛП(Лист.Cells(А,2).Value); Договор = СокрЛП(Лист.Cells(А,3).Value); Метры = СокрЛП(Лист.Cells(А,5).Value); КолЭЭ = СокрЛП(Лист.Cells(А,8).Value); КолТЭ = СокрЛП(Лист.Cells(А,14).Value); КолВоды = СокрЛП(Лист.Cells(А,21).Value); КолПотерьВоды = СокрЛП(Лист.Cells(А,25).Value); КолПожСигн = 1 // но возможно надо делать "если в столбце 30 пусто, тогда 1" ТарифТехОбсл=СокрЛП(Лист.Cells(А,32).Value); // этот тариф указывается напротив каждого контрагента индивидуально Если ПустоеЗначение(Сумма)=0 тогда Если СпрКонт.НайтиПоНаименованию(Контрагент,0,1)=0 Тогда Сообщить("Не найден "+Контрагент); Продолжить; КонецЕсли; Нашли = 0; Спрдог.ИспользоватьВладельца(СпрКонт.ТекущийЭлемент()); СпрДог.ВыбратьЭлементы(); Пока СпрДог.ПолучитьЭлемент() = 1 Цикл Если СокрЛП(СпрДог.ТекущийЭлемент()) = СокрЛП(Договор) Тогда Нашли = 1; Прервать; КонецЕсли; КонецЦикла; Если Нашли = 0 Тогда Сообщить("У контрагента "+Контрагент+" не найден "+Договор); //** Продолжить; КонецЕсли; тз.НоваяСтрока(); тз.Контрагент = СпрКонт.ТекущийЭлемент(); Попытка тз.Сумма = Число(Сумма); Исключение Сообщить("В строке "+СокрЛП(А)+" сумма не является числом: "+Сумма); КонецПопытки; тз.Договор = СпрДог.ТекущийЭлемент(); тз.Метры = Метры; тз.Дни = Дни; Иначе Прервать; КонецЕсли; КонецЦикла; Книга.Close(); Excel.Application.Quit(); Excel = ""; Сообщить(СокрЛП(тз.КоличествоСтрок())+" строк загружено из файла "+ИмяФайла); тз.Свернуть("Контрагент,Договор","Дни,Метры,Сумма"); Док = СоздатьОбъект("Документ.СчётКУ"); тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку() = 1 Цикл Нашли = 0; Док.ВыбратьДокументы(ДатаАктов,ДатаАктов); Пока Док.ПолучитьДокумент() = 1 Цикл Если Док.Контрагент = тз.Контрагент.ТекущийЭлемент() Тогда Нашли = 1; Прервать; КонецЕсли; КонецЦикла; Если Нашли = 0 Тогда Док.Новый(); КонецЕсли; Док.ДатаДок = ДатаАктов; Док.Контрагент = тз.Контрагент.ТекущийЭлемент(); Док.Договор = тз.Договор.ТекущийЭлемент(); Док.Плательщик = Док.Контрагент; Док.ПериодАренды = ПериодАренды; Док.СрокОплаты = ДатаАктов; Док.СуммаПредоплаты = ПолучитьПредоплату(тз.Контрагент,тз.Договор); Док.ДатаОпл = ПолучитьДатуОплаты(тз.Контрагент,тз.Договор); Док.Комментарий = "Создан автоматически из Excel"; Док.УдалитьСтроки(); // Док.НоваяСтрока(); Док.Товар = Услуга; Док.Квм = тз.Метры; Док.Количество = 1; Док.Сумма = тз.Сумма; Док.НДС = 0; Док.НП = 0; Док.Всего = тз.Сумма; // Док.Записать(); // КонецЦикла; КонецПроцедуры Процедура ПриОткрытии() Форма.ГруппаКонтрагентов.ВыборГруппы(1); КонецПроцедуры