MAGNet
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Ну.. граждане одножопники одинассники, у меня к вам есть что сказать Второго дня изучал ОЛЕ и, таки, преуспел. Мой VBS научился общаться с эской. Пришло время изучить тайную магию запросов и вникнуть в таинства не очень объектно-ориентированного программирования. Из коробки были извлечены две ЖКК 1997-го года выпуска и я окунулся в прошлое.. Первое, что меня повергло в ступор - примеры из книжки не работают. Ну и ладно - это же издержки, такое не в первой. В целом суть стала понятна, но тут ждали вторые грабли - есть такие общеизвестные в узких кругах моменты, которые нигде не написаны, но без них не работает. В общем, сегодняшний день у меня ушел на борьбу разума с копипастой - копипаста победила. Ну и теперь к сути: была поставлена тривиальная задача - выгрузить номенклатуру с актуальными ценами и остатками на сайт. В моем понимании - это два раза плюнуть, но чтение специализированных форумов меня повергло в уныние, сложилось впечатление, что либо это сделать очень сложно, либо очень дорого. Да, я не ошибся - это действительно просто, вся сложность в деталях. ВАЖНО! Задача была поставлена не мне (я ваще сисьодмин), а некоему гипотетическом программисту, который про семерку уже лет 10 как забыл.. и вот что у неё получилось: выгрузка номенклатуры с ценой на сайт - найти универсальную обработку, которая формирует прайс-листы (400 кб), немного поправить её с её помощью лепить ексельки.. тут меня заклинило и в обработку по выгрузке остатков я даже смотреть не стал. весь сегодняшний день я потратил на чтение ЖКК, инторнетов, аццких скрижалей и своей предсмертной записки. родилось: Код: Процедура Сформировать() ТекстЗапроса = "//{{ЗАПРОС(Цены) |Период с '25.08.17' по '25.08.17'; |Артикул = Справочник.Цены.Владелец.Код; |Номенклатура = Справочник.Цены.Владелец; |Цена = Справочник.Цены.Цена; |Единица = Справочник.Цены.Единица; |Группировка Номенклатура Упорядочить по Номенклатура.Наименование; |"//}}ЗАПРОС ; Запрос = СоздатьОбъект ("Запрос"); Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Файл = СоздатьОбъект ("Текст"); Файл.ДобавитьСтроку ("Артикул;Наименование товара;Количество;Единица измерения;Цена;"); Пока Запрос.Группировка(1) = 1 Цикл Если Запрос.Цена <> 0 Тогда Арт = Строка(Запрос.Артикул) + ";"; Ном = Строка(Запрос.Номенклатура) + ";"; Кол = Строка("") + ";"; Цена = Строка(Запрос.Цена) + ";"; ЕдИзм = Строка(Запрос.Единица) + ";"; Файл.ДобавитьСтроку (Арт + Ном + Кол +ЕдИзм + Цена); КонецЕсли; КонецЦикла; Файл.Записать ("d:\temp\a2.csv"); КонецПроцедуры | В связи с чем возникает ряд совершенно перпендикулярных вопросов: 1. Вот эта самая выстраданная обработка рождает файл за 30 секунд. Почему обработка программиста с десятилетним стажем работает 5 минут? 2. Что тут ещё можно улучшить и где я сделал не правильно? 3. Как добавить в запрос данные из регистров? Нужен актуальный остаток - это главный вопрос. Первый был риторическим, второй - факультативным. Спасибо, если не устали ещё от меня |