четверг, 27 декабря 2012 г.

понедельник, 24 декабря 2012 г.

Мимо Проходил. Стихи оставил.

Ссылка на топик стихов Мимо Проходил. На память.

Сверстать новую землю

Товарищи юморят над концом света (кстати, поздравляю, пережили). Думаю, что для 1С-ника это скорее рутина, чем юмор. Особенно когда нужно по-быстрому перенести людей из ЗиК в ЗУП. =)

Заметки из Зазеркалья

Разработчикам 1С не терпится поделиться "вестями с фронтов". Официальный неофициальный блог, эдакая пасхалочка от наших уважаемых - Заметки из Зазеркалья.

суббота, 22 декабря 2012 г.

Опять о клубе

Наконец-то закончился марафон с названием "две встречи клуба черного 1С-ника с промежутком в одну неделю". Обе встречи прошли отлично, на сайте есть фото.
Еще будет видео, я напишу как выложу.

Конечно, уже во всю идет подготовка к третьей встрече, приходите, зовите коллег, рассказывайте друзьям. У нас интересно, а еще пиво и пицца.

пятница, 23 ноября 2012 г.

О зефирках

Друзья, я часто слышу о зефирном тесте. Это тот эксперимент, где детей оставляют наедине с зефиркой и обещают еще одну, если первая не будет съедена за пятнадцать минут.
Красиво, эффективно, убедительно.
Скажите, а есть контр-примеры? Может быть существует альтернативное мнение, какие-то не столь популярные исследования с противоположным результатом? Или, может, подтверждающие? Что-то кроме загадочного Walter Mischel.
Лично мне, как трагические ситуации из окружающей реальности представляются забытые истории из 90-х, с обещанием сказочных прибылей согласившимся "купить акции завода сейчас" или супер-премии "когда все наладится" при задолженности по зарплате в несколько месяцев.
Как вы думаете, новый миф и заговор корпораций или особенность человеческой психологии?

Новости 1С

Радует новостная рассылка 1С от 21 декабря:
07.12.2012 Москва, 7 декабря - ДЕНЬ БУХГАЛТЕРИИ в Большом цирке на пр. Вернадского
Бесплатно – для московских пользователей 1С:ИТС
Интересно, кто из них будет на арене, а кто в зале?

понедельник, 19 ноября 2012 г.

Клуб черного 1С-ника

Друзья, наконец-то заработал клуб.
Заходите, подписывайтесь, регистрируйтесь на встречу: http://club-1c.zfilin.org.ua/

Жду отзывов и предложений.

воскресенье, 11 ноября 2012 г.

Партнерская конференция

Был на партнерской конференции, получил массу удовольствия.

В первый день было много интересных докладов. Вадим Мазур рассказал о положении вещей в отрасли, много говорили о законе 5091. Если крупным аутсорсинговым компаниям он оказался не интересным из-за того, что в редакции убрали льготы по зарплате, то нам, 1С-никам, оставшиеся положения об НДС кажутся любопытными.

Конечно, рассказывали о планах перехода на управляемые формы. УТ выйдет первой и ее можно ожидать в первом квартале 2013, за ней бухгалтерия, ближе к концу 2013. Сроки по УТП и УПП пока под вопросом, но и в этом направлении работы ведутся.

В блоке обсуждения ИТС напомнили о продукте "1С-Звіт", который теперь поддерживает бесплатные ЭЦП от ГНАУ. Для меня эта тема была новой, но думаю, что на этот продукт стоит обратить самое пристальное внимание, поскольку там есть официальная поддержка от 1С и обычному разработчику теперь не придется "бодаться" с этими дикими xml-файлами. Узнал один любопытный момент о выгрузке в ЕРНН. Формулировка в официальных документах хитро изменилась таким образом, что теперь НН можно выдавать клиенту до регистрации ее в электронном ЕРНН.

Владимир Алексеенко (ABBYY) осветил вопросы готовности типовых конфигураций к спорным изменениям в НК, было интересно.

Обсуждали направление аренды ПО, для чего уже готовы соответствующие изменения и инструменты, вроде отдельного сервера лицензий с расширенным управлением ключами.

По бюджетным конфигурациям был хороший обзор, в котором я отметил один небольшой, но важный момент - теперь состояние сотрудника (основное место работы/совместитель) может меняться документами

Много было об обучении партнеров. Безусловно, нужно повышать квалификацию и получать компетенции. Есть интересные программы.

Сергей Нуралиев обрисовал перспективы развития платформы, рассказал о версии 8.3.3. Ничего неожиданного, движемся в сторону мобильных платформ и работе в облаке. Веб-клиент будет существенно переработан, и станет более "легковесным" и более кросс-браузерным. Конечно же я не мог не поймать Сергея в кулуарах с вопросом об 1С и ООП. На сложный вопрос Сергей дал не простой ответ: просто добавить в платформу некий объект от которого можно наследоваться не представляет сложности, но и не имеет смысла. Более интересной темой является возможность наследования от существующих структур, но дело это сложное и не сиюминутное, требующее внимательной работы с хранением данных. Это полностью совпало с моим взглядом на вопрос и я тут же привел пример с группами документов о которых как-то писал. Напоследок, пока он упаковывал ноутбук, поймал его в кадр:


В целом было очень круто и познавательно.

P.S.: Ссылок на имена, события и документы не ставлю, жужл все знает.

пятница, 9 ноября 2012 г.

воскресенье, 4 ноября 2012 г.

Роль в команде

Strum-master. Вам не кажется, что он слишком много говорит не по делу?

пятница, 2 ноября 2012 г.

Agile Буллшит Бинго

Распечатай эту страницу. Затем, когда ты слышишь какое-нибудь слово из таблицы — зачеркивай его. Как только пять слов по вертикали, горизонтали или диагонали оказались зачёркнуты, вставай и кричи Agile Буллшит!


P.S.: Теперь и на нашей улице праздник. Спасибо студии Сибирикс.
Я готов к следующему Agileee!

четверг, 1 ноября 2012 г.

Совершенный код?

xxx: все "правила хорошего кода" написаны кровью, вытекшей из глаз программистов, читавших чужой код
bash.im

четверг, 11 октября 2012 г.

Хроники проекта или наш любимый HR

Дневник PM. Декабрь.
Дорогой дневник, фаза инициации и планирования наконец окончена, и мы приступаем к реализации. Вот наш план:
Январь - поиск сотрудников.
Февраль-март - разработка.
Апрель - сдача проекта, завершение.
Мы составили действительно хороший план, и я верю, что проект будет успешным.

Совещание HR-PM. Примерно начало января.
PM: Итак, Светочка, подведем итоги. Раскидай эту вакансию по всем сайтам. Знание D++ обязательно, ну и остальное. Я тебе там высылал архив с требованиями к кандидатам. Поставим на сайте вилку 4-12 банок колы, надеюсь, придут на 4. Бюджет утверждал сам Верховцев, а ты знаешь, что у нас с этим строго.
HR: Игорь Ибрамович, но такие вакансии начинаются от 8 банок колы.
PM: Ничего, мы же указали - до 12. Должны прийти.

Дневник PM. Февраль.
Дорогой дневник. Уже пятое февраля, и мы посмотрели 16 кандидатов. Не ожидал, что на рынке труда так плохо с программистами. Четыре из них откровенно плохо пахли, пришли в драных джинсах с мощным перегаром. Дважды приходили уволенные сотрудники из Microsoft. Я надеялся, что они будут работать с нами, памятуя свои обиды на Microsoft (а этот проект должен потеснить Microsoft с рынка, точно говорю), но, ознакомившись с полным списком требований, начинали смеяться и уходили без объяснений. Все остальные просто зажрались. Ты знаешь, дорогой дневник, что я сам был разработчиком и помню, как было. Работал сверхурочно с горящим взором. И думаешь, мне за это платили? Нет! Только так, упорным трудом, я добился успеха. Но эти соискатели - это просто ужас. Мы в свое время даже подумать не могли, что на собеседовании можно спрашивать о бесплатном спортзале. Я считаю, что мы связались с отбросами, которые никак не могут найти работу, потому и рассылают резюме в такие хорошие компании, как наша. Думают, им тут халява. И поделом, с такими-то запросами. Неудачники.

Совещание HR-PM. Март.
Светочка! Почему нет кандидатов? Зачем ты подсовываешь мне всякое отребье? Есть же компании, у них работают высококлассные спецы. Ты плохо работаешь, давай ищи. Нам теперь это очень нужно, ты уж постарайся. Давай подвинем вилку на 8-16 банок колы, была не была!

Дневник PM. Март.
Дорогой дневник. Теперь второе марта. Мы вписали в вакансию бесплатный спортзал, и новый список требований к кандидату уже не нужно запаковывать в архив. Кажется, что дело пошло на лад. Но Верховцев вызвал меня на ковер, тыкал пальцем в бюджет и пригрозил, что за задержку по проекту и перерасход по кадрам я буду отвечать. В общем, я думаю, что если немного ужаться и перепланировать, то можно вложиться в сроки. Правда, нужны более грамотные специалисты, чтобы работа шла быстрее, но на последнем совещании мы увеличили привлекательность вакансии, и теперь к нам не приходят упыри. Но все равно, все равно, дорогой дневник, выбрать не из чего. Если бы они все были у нас месяц назад... Эх. Но мы уже на верном пути, и нас ждет успех.

Совещание HR-PM. Апрель.
Светочка! Ебтвоюмать! Первое апреля. Срочно ставь вакансию от 20 банок колы и выше. У нас нет времени, послезавтра встреча с заказчиком, придется переносить сроки. Ищи супермена, нам срочно надо сдать этот проект. Все нужно на вчера!

Дневник PM. Апрель.
Дорогой дневник. Я сделал все что мог и очень доволен собой. К нам вернулись те смешливые парни из Microsoft, ознакомились со сроками, стали смеяться еще больше и снова ушли. Мы звонили им, но на звонки они отвечают сдержанно, а однажды я слышал в трубке голос: "А, это опять те клоуны". Не знаю, что это значит, но мне кажется, что компания Microsoft и ее сотрудники просто слишком любят веселиться и не любят работать. Зато прогресс налицо - к нам на проект идут лучшие из лучших. Нас ждет успех с такими-то силами.

Совещание HR-PM. Май.
Светочка, закрывай вакансии. И кстати, выдай мне трудовую.

В копилку software stories для Макса Дорофеева.

Работодатели, работники, работа

Путешествуя по сайтам вакансий и посещая собеседования сделал определенные выводы.

О сайтах

Сайты rabota.ua и work.ua хороши. Не сложная регистрация, большой выбор вакансий самых разных уровней (на rabota.ua немного больше) удобный интерфейс.
В частности, зарегистрировавшись на той же rabota.ua я без проблем смог "пробежаться" по списку потенциально интересных вакансий и вручную накликать целую "минирассылку" по этим работодателям, настолько там все просто. Ресурсы адаптированы под соискателя.

Сайт hh.ua вызвал только негативные эмоции. Немного подробностей с вашего позволения. Обычно я не заполняю полностью "от и до" профиль на новом ресурсе, на котором регистрируюсь. Ограничиваюсь минимально необходимыми полями и начинаю пользоваться. Со временем, если сайт мне нравится, профиль обрастает подробностями, деталями и становится "живым". Так было с моим профилем в linked.in или, например, ВКонтакте.
Мне кажется, что это логичный и не утомительный пользовательский сценарий.
Здесь же мое минимальное резюме четыре раза отклонялось модераторами. Очень много обязательных полей, которые должны быть заполнены "сразу и навсегда". Причем, требования к заполнению тоже строгие, например в названии учебного заведения я не смог написать "ДонНТУ", пришел отказ с требованием заполнить поле "более детально". Пришлось вписать "Донецкий Национальный и т.д." Так же с многими другими полями.
Из этого я сделал вывод, что сайт больше адаптирован под нужды работодателей, которые хотят получать стройные отчеты с сортировкой и фильтрацией. Само по-себе это не плохо, но я, если честно, забил. И вот почему. При таких строгих требованиях перечень доступных вакансий очень скромный. Т.е. им по-сути нечего было мне предложить.
Из общения с друзьями (из разных областей, не только разработка под 1С) я так же часто слышал отзывы вроде:
Сайт очень "крутой", потому я не стал там регистрироваться, может быть у тебя с ним получится.
Друзья! Не получилось.
И лично мне не понятно как такая политика, отталкивающая соискателей, может быть выгодна работодателям. Если это действительно работает, то я, пожалуй, открою сайт rabota.zfilin.org.ua на котором не сможет зарегистрироваться ни один человек, поскольку требования к заполнению будут просто заоблачными и буду продавать его работодателям как лучший сайт о работе. Друзья, ждите. Я скоро стану миллионером. =)

О вакансиях

Рынок труда в области разработки 1С большой и требовательный. Ему ТРЕБУЮТСЯ специалисты. Разброс зарплат от 5000 до 25000 грн/мес. Фикси обычно предлагают больше, но берут неохотно, франчи встречают с раскрытыми объятьями, но с порога удивляют часовыми ставками которые кажутся слишком уж скромными по сравнению с часовой ставкой "чОрного 1С-ника". Специалист хорошего уровня на хлебах "черного 1С-ника" на данный момент берет от 120 до 250 грн/час. Франч предлагает от 60 до 100, но делает оговорку - есть гарантированная часть. В среднем это 6000-8000. Т.е. ничего не делая ты свои шесть кровных тысяч получаешь. По моим оценкам "на коленке" ничего не делать не получится. Заказы в области автоматизации есть и их много. Вопрос только в том, кто их возьмет. Поэтому с франчами лично я бы связывался только из нижней половины первой двадцатки. Из нижней, поскольку, как говорят, верхние это бодишоп и текучка. Что логично. Так же очень много зависит от собеседования. Идя на собеседование на вакансию, где написано "от 10000 грн." можно договориться и на 20000. В нашей области люди ценят общение, умение договариваться и, конечно опыт. Тут мой совет только один: идите и разговаривайте, не жалейте времени. Оно того стоит. Отдельно скажу, что у фикси про сертификаты можно и не упоминать, а во франче вы можете получить существенный бонус.
Отдельно хочу сказать про одну неприятную особенность фикси. Например, есть вакансия на X денег проект нужно сдать через 5 месяцев. Когда через два месяца фикси не находит никого подходящего, сроки сжимаются и до сдачи остается 3 месяца, но денег по-прежнему X. Часто это доходит до ситуации "надо на вчера" но платить больше никто не будет. Есть сроки, есть утвержденный бюджет, есть бесхребетный менеджер, который не способен признать фазу "найм персонала" провалившейся. В какой-то момент фикси осознает что это провал и в предсмертнопроектной конвульсии выставляет вакансию с оплатой существенно выше рыночной. Но уже слишком поздно, проект не поднять. Ребята, "будьте уважні та обережні".
Надо отметить, что во франчах такие проблемы встречаются реже, там обычно печальный опыт подобного рода уже наработан и бестолковые манагеры редки. Конечно это все не касается фикси у которых нет проектных задач, а только "поддержка и сопровождение". Но и прайс там мельче.

О требованиях

Без чего на вакансию ведущего разработчика лучше и не соваться. Первое - сертификат спеца по платформе минимум (как я писал выше особенно важно для франчей). Второе, как "отче наш" - Конвертация данных. Да-да, не удивляйтесь. Если кто-то думал, что это дополнительный инструмент знание которого желательно, но в случае чего "я и сам конвертацию напишу не хуже" - выкиньте эти заблуждения из головы. Вы умеете строить логические выражения ИЛИ/И, вы знаете что такое цикл с предусловием и массив, вы владеете Конвертацией данных. Только так. Это профессиональная разработка, ребята, тут нет места "велосипедам". Часто спрашивают о БСП. Над БСП вместе с работодателем лучше посмеяться. Или поплакать. По настроению. Но иметь представление нужно. О механизмах платформы говорить не буду - СКД, XDTO, веб-сервисы и все-такое. Бух.учет спрашивают всегда, знать что такое валюта балланса и перечислить основные моменты плана счетов нужно. Интересуются расчетом зарплаты, но реже. Про оперативный/управленческий учет не спрашивают. Что такое ABC-анализ знать не обязательно. Бывает, ценится знание SQL. У меня, если честно, тут слабовато. Знать что такое кластерный индекс нужно. Чисто формально это работа DBA. Но мы знаем, что часто 1С-ник сам себе DBA. Дальше. Инструменты командной работы, groupware. Да, если вы будете работать не один, то вы без вариантов будете работать или не эффективно или через хранилище (не обязательно встроенное от 1С, но понятие о таск-трекерах, репозиториях и прочем должно быть). И, наконец, последнее - работа с требованиями. Конечно, это уже позиция архитектора/аналитика, но ведущий разработчик должен уметь "всосать" требования заказчика и "выплюнуть" ТЗ. Пусть даже себе самому. Ну, тем, кто "халтурил по-маленькому" объяснять не надо.
Все что встречается еще уже детали и частности. У кого-то строгий график посещаемости, кто-то настаивает, чтобы все сотрудники носили шапочки робингуда, где-то обязательно уметь писать еще и на VB.Script. Обо всем этом можно договариваться и все это можно (и нужно!) обсуждать.

Об условиях

Все компании придерживаются КЗОТ-а и, как правило, очень строго. Т.е. вы можете рассчитывать на оплачиваемый отпуск в 24 дня и оплачиваемый больничный. Я лишь раз встретил компанию, которая предоставляла отпуск в 2 недели и одну, которая заявила, что "у нас не болеют". Оплата как правило идет по "сложной схеме". Ну, вы понимаете. =)
Из этого нужно обязательно уточнять, оплачиваются ли отпуска и больничные в полном объеме (что врядли) или только в размере минимального оклада (скорее всего). Чем вы будете сильно огорчены, так как минимальные оклады не велики. Рабочее время обычно с 9 до 18 и даже самые "свободолюбивые" компании не говорят "нам все-равно где вы и как, лишь бы задачи выполняли вовремя". Нет. Готовьтесь, что вам скажут: "в контракте этого нет, но мы ХОТЕЛИ БЫ чтобы вы были в офисе от и до". Это "хотели бы" приравнивается к жесткому условию. Хотите свободы - идите в полный фриланс, стране нужны "черные 1С-ники". Хотя, многие готовы двигать график на пару часов в обе стороны.
Офисы. Про роскошные отдельные кабинеты можно забыть. Да, это зал плотно набитый сотрудниками. Если франч. В фикси как повезет. Могут и рядом с серверной стойкой посадить, но скорее всего вы окажетесь рядом с бухгалтером. Ну, тут и останавливаться не стоит, все и так в курсе. Доп.условий вроде спортзала или бассейна со скидкой как во "взрослой разработке" нет нигде. Обучение в фикси придется выторговывать, во франче оно чуть не обязательно и франч платит. Но время потраченное на обучение в рабочее время не идет. Так что не понятно за чей счет вы будете учиться. Учитывая, что средний семинар от 1С стоит 2000-3000 грн. и длится примерно три дня то считайте, что за свой. В таких условиях я бы с удовольствием пошел на сертифкацию ScrumMaster (900$), но кто ж меня пустит. =)

В основном, вроде бы все. Если чего забыл- пишите, обсудим.
А я желаю вам хорошего дня и хорошего кода. Пока!

суббота, 29 сентября 2012 г.

1С 8.3.2

Ух-ты! Фирма 1С радует с каждым днем.
Только посмотрите, что предлагается в недавно выпущенной версии 8.3.2:
  • реализована мобильная платформа "1С:Предприятия", которая обеспечивает:
    • разработку приложений (конфигураций) для мобильных устройств в среде конфигуратора с учетом ограничений мобильной платформы;
    • генерацию мобильного приложения для записи на мобильное устройство;
    • работу мобильных приложений в операционных системах iOS, AndroidOS;
    • поддержку работы мобильных приложений в режиме Offline и обмен данными с основным приложением (back office);
  • добавлен механизм автоматизированного тестирования конфигураций:
    • для тестирования используется программа на встроенном языке, имитирующая интерактивные действия пользователя и проверяющая результаты их выполнения;
    • интерактивные действия пользователя записываются и затем могут быть воспроизведены;
    • поддерживается для толстого клиента, тонкого клиента и веб-клиента;
    • для тестирования реализована объектная модель;
  • оптимизирована работа с памятью при разработке и обновлении прикладных решений, включающих большой объем функционала;
  • другие улучшения.
Естественно, доступен и полный список изменений.

По-моему грандиозно! Мобильные инструменты и тестирование!

пятница, 28 сентября 2012 г.

iBash - тот самый баш

[12:02:19] Баг Шрёдингера - при тестинге его нет, а на презентации продукта - есть.
[12:20:34] это баг Гейзенберга
[12:20:43] Шредингера - другое
[12:27:21] из разряда смотришь в код и видишь ... "Опля... а как же оно работало до этого год?.." и тутже прибегает QA со словами - "зырь, а оно не работает!"
[12:28:33] правда частенько под них маскируются комплементарные баги
[12:29:57] это когда определенное множество багов интерферируют друг с другом и результирующая интерференционная волновая суперпозиция позволяет софтине работать.. а в процессе рефакторинга какой нить один баг фикситься.. и вылазят все остальные
[12:31:25] В результате чего получается дифракция разработчика от занимаемой должности
[12:31:40] а гейзенбаг это банально - то работает то не работает.. причем вследствии наложения принципов Мерфи на соотношение неопределенности Гейзенберга под дебагером всегда работает
[12:32:48] иногда даже само присутствие девелопера нарушает квантовое состояние бага и он аннигилирует.. наверно с антибагов выползшим из квантовой пены

(с) ибор

Было и так

И напоследок фото, одно из моих рабочих мест на проекте:


Проекты, которые мы выбираем

Закончился мой текущий проект, а точнее один из этапов его развития.
Дальше он пойдет без меня, а я без него.

Покидаю проект с легким сожалением о том, что сделал не все что мог бы сделать и что работать было не так интересно как думалось в начале.

Думаю чем бы заняться дальше, рассматриваю разные предложения, иногда шлю резюме. Текучка и быт...

пятница, 21 сентября 2012 г.

Запрещенные слова


Спасибо сообществу.

P.S.: Все самое нужное запретили! =)

четверг, 13 сентября 2012 г.

О железе

Товарищи рекомендуют толковый сайт о железе.
Там же и торгуют, но не реклама. Говорят действительно качественные обзоры.

Старый анекдот

Офис - большая комната, разделенная полупрозрачными перегородками.
Слышен голос молоденькой сотрудницы, объясняющей программисту:
- Этот документ в 1С не открывается.... а этот отчет не работает...
Через 5 мин. голос гл. бухгалтера:
- Ира, ну что у вас получилось?
В полной тишине из противоположного угла:
- Пока они не разденутся и не лягут - у них ничего не получится!!!

среда, 12 сентября 2012 г.

С праздником!

Пусть с вами всегда будет атмосфера праздника и веселья.
Особенно в этот прекрасный день.

Kindle Paperwhite

Товарищи, наконец-то! То, о чем так долго говорили и мечтали теперь свершилось. E-Ink со встроенной подсветкой!
Остальные ТТХ тоже на уровне.
С нетерпением ждем в магазинах города.

понедельник, 27 августа 2012 г.

Cat Herders, EDS

В каменты о книге "Как пасти котов", товарищ прислал ссылку на рекламный ролик компании, занимающейся работой с IT-персоналом:



Спасибо, Валера.

суббота, 25 августа 2012 г.

На планировании

В переговорке, оккупированной под проведение планирования, стояла тяжелая атмосфера. Решение не давалось. Помимо ведущего архитектора Ивана Константиновича и его "правой руки", подающего большие надежды программиста  Василия, на мозговом штурме присутствовали:
Марк Захарович, директор департамента;
Петр Семенович, начальник отдела продаж;
Максим и Федор, продавцы-консультанты;
Зоре Ахметовна, главный бухгалтер;
Леночка, сотрудница отдела кадров;
Генадий Петрович, электрик;
Секретарша Юля (просто потому, что раз почти все тут);
и ответственный сотрудник Захарыч.
Решение не приходило. Идеи и предложения уже не сыпались как из мешка, а вяло падали на большой переговорный стол и там замирали под тяжелыми взглядами штурмующих.
С областью видимости переменной крСчетчикЗаказов все было так же не ясно, как и в начале встречи.
Шел второй час черепно-мозгового штурма.

В подражание Максу Дорофееву (cм. тэг softwarestories).

вторник, 21 августа 2012 г.

Шесть правил Глеба Жеглова

Хроник-тестировщик w-bf приводит в пример отрывок из фильма и пишет о программистах и тестировщиках.
А я бы тут говорил о заказчике и разработчике. Как вытянуть из заказчика что ему на самом деле необходимо? Как получить информацию о том что больше всего беспокоит заказчика и наладить эффективную коммуникацию? Надо усвоить работу со свидетелем...


понедельник, 20 августа 2012 г.

Как пасти котов

Тем временем продолжаю читать. Недавно прочел знаменитое "Как пасти котов" Дж. Ханк Рейнвотера.
Ощущения двойственные. С одной стороны по определенным причинам я был не в "лучшей форме для чтения" и книгу пережевывал с трудом. Возможно потому она не оправдала моих ожиданий. Еще темы, рассматриваемые в книге, очень разнообразны и по каждой можно написать целую книгу. После Адизеса, ДеМарко, Макконела, Брукса и прочих возникает ощущение, что где-то это все я уже читал, причем гораздо подробнее. Иногда ловил себя на мысли, что кое-в-чем книга уже успела устареть. Не много, но ощущение было.

С другой стороны, как глобальный обзор она хороша. Причем, обзор достаточно подробный. Некоторые главы, в основном посвященные коммуникациям, читал с интересом и на одном дыхании. И уже знакомые вещи прочитывал с удовольствием, кивая себе - "да, да, точно так".

Думаю, что если вы еще не успели "изгрызть" ворох книг по теме, если вы еще вчера были выдающимся инженером, а сегодня почему-то "перекладываете бумажки" или только начали вникать в тонкости мира IT, бросив свою подсахаренную воду, то эта книга должна вам понравиться.

И как напоследок не сослаться на Александра Орлова и его список? Ссылаюсь.

среда, 15 августа 2012 г.

1С:Центр управления производительностью

Если вы почему-то не в курсе, что есть такой продукт, обязательно посмотрите хотя бы описание на сайте 1С.

Основные задачи, которые могут быть решены при помощи ЦУП:
  • Анализ и интегральная оценка текущей производительности работающей многопользовательской информационной системы:
    • Как работает система?
    • Имеются ли проблемы производительности?
    • Можно ли повысить производительность? 
  • Сбор и хранение информации о динамике производительности системы:
    • Как менялась производительность системы с течением времени?
    • Как менялась производительность системы при внесении каких-либо изменений? 
  • Поиск и анализ «узких мест» в коде конфигурации. Получение детальной технической информации обо всех проблемах производительности, имеющихся в системе с целью дальнейшей оптимизации:
    • Какие проблемы производительности имеются в системе и насколько они серьезны?
    • Какие проблемы следует решать в первую очередь?
    • В чем конкретно заключается каждая проблема?
    • Какие объекты метаданных и строки кода конфигурации следует оптимизировать для того, чтобы решить данную проблему? 
  • Регламентный мониторинг производительности системы с автоматическим контролем значений показателей производительности и реакцией на их изменения. 

Эти задачи могут быть решены как для системы, активность в которой эмулируется при помощи Тест-центра, так и для системы, в которой работают реальные пользователи.

Одним из типичных применений "Центра управления производительностью" является анализ производительности и оптимизация работающей многопользовательской информационной системы.

UPD.: И, конечно, не могу не привести замечательную статью по настройке на infostart.

воскресенье, 12 августа 2012 г.

Жук и программист

Недавно вспоминал об этой истории, сохраню себе на память:
approved at 27.04.2007 в 16:16:00
(Зеленый_Филин) Взяли, блин, программиста. Вот вышел во двор... Солнышко светит, хорошо, тепло. Вишни цветут, весна в полный рост. А вокруг жизнь станции кипит. Люди бегают, около склада товар загружают, разгружают, строительная техника работает, кран гудит, телефоны не умолкают: "Покупай! Покупай! Продавай! Продавай!"
А я во дворе стою. Курю... Тут смотрю - по двору жук ползет. Уверенно так, целенаправленно. Я за ним. Присел на корточки и за жуком ползу. Ну, интересно же посмотреть куда это он так спешит. Так пол двора и проползли. Два создания природы. Черный жук и программист.
А потом жук остановился за какой-то своей жучиной надобностью, а я пошел про него пост писать. Вот так.

(NikolaSoft) Чё тя так прёт то? Загруз что ли на работе новой?

(ArizZ) А у нас тут офис-девочки одуванчики на телефоны фодгают. Представляю пространственно-объединяющий континиум: ползающие за жучками программеры, а заними деффочки-папарацци с телефонами))) Весна, да.

(NikolaSoft) мда.... весеннее обострение ;-)

(NikolaSoft) представляю себе картинку: Ползёт себе жук и думает - а шо то за мно по пятам ползает?!... наверное опять нового программера взяли :))))
Ссылка

вторник, 7 августа 2012 г.

Удобная работа с хранилищем конфигурации

Коллеги с Инфостарта подсказывают как можно более удобно организовать работу с хранилищем конфигурации 1С.
Иметь перед глазами список захваченных объектов, чтобы не забывать что нужно вкомитить, групповой захват объектов и прочие удобства. Все штатными средствами.
Подробнее читайте на неофициальном блоге специалистов отдела внедрения ГК "Компьютерный аудит".

воскресенье, 5 августа 2012 г.

1С 8.3: немного подробностей

Некоторые вещи, которые заинтересовали меня в новой платформе 1С 8.3, кроме тех, что я уже упоминал.

Во-первых, появился объект "ХешированиеДанных". Средствами платформы он позволяет получить хеш MD5 или CRC32. Принимает на вход строку или "ДвоичныеДанные". Наконец-то можно вычислять hash MD5 без внешних компонент. Ура! Делается это, например, так:
&НаКлиенте
Процедура ПосчитатьMD5(Команда)

    Хеш = ПолучитьMD5_Сервер(ТекстДляХеша);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = Строка(Хеш);
    Сообщение.Поле = "ТекстДляХеша";
    Сообщение.УстановитьДанные(Объект);
    Сообщение.Сообщить();

КонецПроцедуры

&НаСервере
Функция ПолучитьMD5_Сервер(Текст)

    ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
    ОбъектХеш.Добавить(Текст);
    Возврат ОбъектХеш.ХешСумма;

КонецФункции // ПолучитьMD5_Сервер
Подробности ищите под крышечками в синтакс-помощнике.

Во-вторых, теперь можно управлять представлением. Да-да! Теперь есть событие в модуле менеджера таких объектов, как Справочник, Документ и пр., в котором можно самому сформировать представление. Сделать это можно, например, так:
Команда "Показать ссылку" на форме списка справочника:
&НаКлиенте
Процедура ПоказатьСсылку(Команда)

    Представление = Строка(Элементы.Список.ТекущаяСтрока);
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = Представление;
    Сообщение.Сообщить();

КонецПроцедуры
(Просто выводит в область сообщений ссылку выбранного элемента)
Модуль менеджера справочника "Номенклатура":
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;

    Представление = "(" + Данные.Артикул + ") " + Данные.Наименование;
КонецПроцедуры

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;

    Поля.Добавить("Артикул");
    Поля.Добавить("Наименование");
КонецПроцедуры
Смотрите, что получаем в итоге:
Представление по формуле "(" + Артикул + ") " + Наименование было автоматически рассчитано при приведении к строке для сообщения и в поле ввода типа справочник.
Да-да, это работает и в запросах в функции "ПРЕДСТАВЛЕНИЕ", и в табло во время отладки. Смотрите сами:

Глобальная фишка!
Только не забывайте, что представление в конфигурации получается очень часто, а значит, вызовов этого события будет ОЧЕНЬ много. Не стоит писать туда тяжелые запросы к остаткам. =)

Еще улучшена работа с каталогами. Например, теперь можно запросто получить путь к каталогу документов пользователя функцией (какой? правильно!) КаталогДокументов().
Написано, что оно все работает и в веб-клиенте тоже. Так что теперь проблема "куда бы сохранить пользователю отчет, ни о чем его не спрашивая" перестала существовать.

Добавили тип "ФорматированнаяСтрока". Не мутабельный, сериализуемый, позволяет делать вот такие прекрасные предупреждения:
Причем зеленая надпись - ссылка. По ней можно кликнуть и попасть в элемент справочника. Правда, работает это все пока несколько странно, например, мне не удалось запихать в одну строку ссылки на несколько элементов справочника сразу.
А еще при попытке создать по-настоящему сложную форматированную строку оно ругается на тип первого параметра, хотя тип первого параметра правильный. А когда я однажды действительно напутал с типами, ошибочным у меня был вовсе не первый, а пятый параметр конструктора, но ругалось на первый.
В общем, кому интересно - флаг в руки и мое почтение. Разберетесь, может, и мне расскажете потом.

Наконец-то колонке таблицы на управляемой форме можно задать тип "Произвольный". Не помню, где мне это нужно было, но помню, что очень горевал, что нельзя. Теперь вот можно.

Для интернетов появились функции КодироватьСтроку() и РаскодироватьСтроку(). Это тот самый URL encode/decode, о котором я недавно упоминал. Теперь банановый и в 1С! Примечательно то, что codepage тоже указывается. Это безусловно хорошо.

И вот по администрированию еще. Процитирую:
Реализована возможность создания самораспаковывающегося архива (SFX-архива) клиентского приложения для размещения на веб-сайте. В состав архива можно поместить конфигурационный файл 1CEStart.cfg, содержащий настройки, необходимые для установки, запуска и обновления клиентского приложения. Созданный исполняемый файл предназначен для использования только в ОС Windows.
Для создания архива используется утилита 1CEClientSetupMake.exe, которая публикуется на диске ИТС.
Вот это действительно праздник! Теперь админам будет намного проще разворачивать 1С у пользователя.

Там на самом деле еще очень много изменений. Смотрите официальный ман. Я вам привел то, за что у меня глаз зацепился, а вам, может, совсем другое интересно.
Там и про СКД, и про навигационные ссылки, и про внешние источники данных. Очень много всего интересного.

А я желаю вам хорошего дня и хорошего кода. Спасибо.

суббота, 4 августа 2012 г.

PHP и другое. Собеседование в вопросах и ответах.

PHP, JavaScript, JQuery, CSS, HTML, MySQL, ООП.
Краткий сборник возможных вопросов и ответов на собеседовании.

... В итоге получился сборник в стиле ”вопрос – ответ”, который удобно быстро пролистать, готовясь к собеседованию и который охватывает все основные концепции и ключевые области PHP и веб-разработки. Никакой лишней информации вроде ”во время интервью держите спину прямо!” тут нет, только вопросы, многие из которых вы обязательно услышите и ответ, который устроит того, кто вас собеседует.
http://phpbook.comli.com/

Почему не хватает 1С-ников?

Интересное мнение опубликовал недавно Piter Antares на Инфостарте. В статье затрагивается тема постоянно "нагревающегося" рынка труда 1С.

Действительно - почему?

пятница, 3 августа 2012 г.

Открыть форму внешней обработки. Памятка.

Небольшая памятка c ИТС и сайта 1c-galaxy.ru

Как программно открыть внешнюю обработку?

В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.

Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:

  • Передать файл внешней обработки на сервер
  • Подключить внешнюю обработку
  • Открыть форму внешней обработки

Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекста ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.

В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.

При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища, мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.

Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки, - которое мы используем для того, чтобы открыть форму этой обработки.

Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму(), в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма". В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается в вопросе "Как получить неосновную форму обработки?"
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

    //Помещаем обработку во временном хранилище
    АдресХранилища = "";
    Результат = ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь);
    ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);

    // Откроем форму подключенной внешней обработки
    ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");

КонецПроцедуры

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)

    Возврат ВнешниеОбработки.Подключить(АдресХранилища);

КонецФункции

При работе с внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.

  • Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы.
  • Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.
  • Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.
От себя так же хочу добавить, что у объекта ВнешняяОбработкаОбъект, есть свойство ИспользуемоеИмяФайла, доступное в контексте сервера. Тоже может пригодиться.

ЭВМ ли телефон? Нет?

У товарищей тут телефон НЕ ЭВМ. А, что! Это идея! Несколько андроидофонов в кластер на линупсе и 1С можно не покупать! Раз телефон не ЭВМ, то и 1С не ПО. Какая-такая лицензия?


Особо юморных товарищей от комментариев, вроде "1С и так не ПО" прошу воздержаться.

воскресенье, 29 июля 2012 г.

Интервью с Андреем Данилюком

Мой коллега, Андрей Данилюк, недавно давал интервью для одного любопытного блога.
Полюбопытствуйте редкий пока для "наших кругов" формат.

пятница, 27 июля 2012 г.

Функция Wolf() в полнолуние void на луну!
(c) баш

четверг, 26 июля 2012 г.

MVVM, 1С

Luxoft наконец-то выложил видео с семинара про MVVM, о котором я как-то писал.



Все-таки между схемой "Модель-Вид-Модель вида" и схемой "Объект-Форма-Структура данных формы" есть что-то общее. Можно сказать, что в режиме управляемого приложения, платформа 1С вынуждает разработчика использовать MVVM.
И глядя на вопрос с этой стороны некоторые загадочные моменты становятся более понятными. Например, функция "РеквизитФормыВЗначение" реализует доступ к данным модели вида. И вообще все операции, которые делаются между объектом и его данными на форме это по-сути связь между "Моделью" и "Моделью вида", те самые bindings.

среда, 18 июля 2012 г.

ADO

Несколько ссылок посвященных технологии ADO.

Вот неплохая статья про ADO для Delphi. В ней доступное вступление о том что такое ADO, MDAC, OLE DB и другие страшные слова: http://www.sql.ru/articles/mssql/2005/122703ado.shtml

А вот вполне приличный справочник по объектам ADO. Незаменимая вещь:  http://wiht.link/ado_net_resources

И, конечно, ссылка на infostart. Чтение CSV через ADO: http://infostart.ru/public/98398/

IT-Jam

IT-Jam Kiev September 1st 2012
Все-таки интересно во что превратился IT-Jam за последнее время. В Харькове, помню, было весело.

пятница, 6 июля 2012 г.

1C 8.3

Несколько дней назад вышла ознакомительная версия 1С 8.3
Много интересных изменений. Лично мне больше всего понравилось вот это:
  • реализована выгрузка конфигурации в набор файлов и загрузка из него;
  • теперь для операционной системы Linux созданы клиентские приложения, аналогичные тем, которые существуют для операционной системы Windows (толстый клиент, конфигуратор);
  • данные внешних источников можно помещать во временные таблицы для использования в сложных запросах;
Развернутый отчет об изменениях можно посмотреть на сайте 1С.

вторник, 19 июня 2012 г.

URL encode/decode online

Хороший инструмент для сабжа. Поддерживает выбор кодировки.
http://www.url-encode-decode.com/

Тестирование RegExp

За последние несколько месяцев почти прекратил использовать надоевшие конструкции, вроде:
а=Найти(б); Если а>0 Тогда в=Лев(г,а)...

Не, то, чтобы я не знал о RegExp раньше. Еще до 1С активно использовал их в PHP, но в 1С как-то не использовал. Сам даже не знаю почему.

Использовать их не просто, а очень просто, например вот так (запишу, как памятку себе):
    РегЭксп = Новый COMОбъект("VBScript.RegExp");

    РегЭксп.IgnoreCase = Истина;
    РегЭксп.Global = Истина;
    РегЭксп.MultiLine = Ложь;

    РегЭксп.Pattern = "([^0]*)0+(.*)";

    Результат = РегЭксп.Replace(Номер, "$1-$2");
Код создания объекта очень простой, а в написании самой сложной части (шаблона) помогают программы тестирования регулярных выражений.
Лично я сейчас пользуюсь Rad Software Regular Expression Designer, так же совсем недавно я встретил интересную публикацию на инфостарт. Там можно скачать обработку 1С, предназначенную для тестирования RegExp.
Есть и платные аналоги.
С инструментом тестирования разработка поискового шаблона превращается в удовольствие.
Используйте RegExp-ы и хорошего вам дня, и хорошего кода.

Набросать кода

Инженер из берлоги поделился интересной ссылкой codepad.org.
Сложно представить практическую пользу от этого инструмента, но образовательная и развлекательная несомненна. Если надо по-быстрому кода "на коленке" набросать, и целый Visual Studio ставить не хочется, то это как-раз для вас.
Поддерживается несколько языков.

суббота, 26 мая 2012 г.

Scrumboard

Scrumboard бывает разный...

пятница, 18 мая 2012 г.

А теперь новости кода

Сегодня в Киеве участниками конференции "Рефакторинг навсегда" был подписан пакт о ненападении на мирно пашущий код.
Основной темой документа стал призыв "работает и не трогай".
В то же время опозиционные силы  развернули масштабную кампанию против гуманного обращения со старым кодом. "Долой спагетти" и "Мы за паттерны", вот какие лозунги сейчас можно услышать на улицах.
Следите за развитием событий.

четверг, 17 мая 2012 г.

Второй параметр в методе "Выбрать". Группировки.

Сразу хочу предупредить, что вопрос освещаемый в этой статье очень специальный и если вы хотите увидеть общий обзор всего, да с практической пользой и применением, то лучше вам дальше не читать.
Тем же, кого, как и меня, беспокоил не не давал спокойно спать этот мелкий и назойливый вопрос "ну почему список" - добро пожаловать. Итак, интерес исключительно академический, практическая значимость сомнительна. Поехали!
Все началось с того, наш любимый синтакс помощник выдал мне вот такую справку:

РезультатЗапроса (QueryResult)
Выбрать (Choose)

Синтаксис:
Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)

Параметры:
<ТипОбхода> (необязательный)
Тип: ОбходРезультатаЗапроса.
Задает тип обхода записей в получаемой выборке.
Значение по умолчанию: Прямой

<Группировки> (необязательный)
Тип: Строка.
Список группировок по которым будет вестись обход, разделенных запятыми.
Для детальных записей указывается пустая строка. В случае, если группировки не указаны - будет использоваться следующая группировка, указанная в предложении запроса "ИТОГИ".

<ГруппировкиДляЗначенийГруппировок> (необязательный)
Тип: Строка.
Список группировок, из которых будут выбираться значения группировок для обхода, разделенных запятыми. Если указано "Все", то будут выбираться все значения группировок. Если указана пустая строка, то значения для группировок будут выбираться из предыдущей группировки.

Возвращаемое значение:
Тип: ВыборкаИзРезультатаЗапроса.

Описание:
Формирует выборку записей из результата запроса.

Доступность:
Сервер, толстый клиент, внешнее соединение.

Примечание:
Получение выборок очень большого размера (более 64Mb) требует наличия достаточного количества свободного места на диске, используемом для размещения временных файлов сервера и клиента.

Пример:
Выборка = РезультатЗапроса.Выбрать();
Казалось бы, всё понятно, все пользовались миллион раз. Но, обратите внимание, что в описании второго параметра написано:
Список группировок по которым будет вестись обход, разделенных запятыми.
Исходя из практики сразу скажу, что этот параметр используется редко даже с одной группировкой. Проще в самом запросе указать группировки в нужном порядке, чтобы потом по ним "идти", чем потом в коде пропускать какие-то группировки. Да, и вообще, как уже говорилось - СКД рулит. Но какое-то поведение все-таки закладывалось в метод, когда в параметре перечислен именно список группировок? Какое? Этот вопрос беспокоил не только меня, но интернет предательски молчал.
Вот те мучающиеся вопросом бедолаги, которых мне удалость разыскать (всем привет!):
Миста и Итланд:
1С, версия для обучения:
1С, форум специалистов:
Ответы однообразны: а зачем тебе это, делай лучше так...

Но мы же договорились, что нами движет академический интерес?
Давайте разберемся что же именно "знает" выборка из результатов запроса и что "знает" выборка из выборки?
Если мы, как обычно, напишем:
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.Прямой);

То объект "Выборка" будет "знать" (хранить информацию) о всех данных, которые вернул запрос. Заметьте, я специально не опускал первый параметр, хотя по-умолчанию и так подставляется прямой тип обхода. При этом, если в запросе были группировки, то на каждом шаге выборки мы получим разный тип записи запроса (см. метод Выборка.ТипЗаписи) и разный уровень группировок (см. метод Выборка.Уровень).

Если же у нас в запросе есть несколько группировок, например "Склад, Номенклатура, ХарактеристикаНоменклатуры, Регистратор" (ИТОГИ, ну вы помните) и мы представим такую конструкцию:
ВыборкаСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
Пока
ВыборкаСклад.Следующий() Цикл

   
ВыборкаНоменклатура = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
    Пока
ВыборкаНоменклатура.Следующий() Цикл

       
ВыборкаХарактеристикаНоменклатуры = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ХарактеристикаНоменклатуры");
        Пока
ВыборкаХарактеристикаНоменклатуры.Следующий() Цикл



        КонецЦикла;

    КонецЦикла;

КонецЦикла;

То объект "ВыборкаСклад" будет знать только о единственном уровне группировок "Склад" и остальные для него значения не имеют. И хотя он позволит опуститься на уровень ниже, но "ВыборкаНоменклатура" это уже другой объект со своим "знанием" для которого, опять-таки, существует единственная группировка - "Номенклатура". Т.е. сам первый параметр определяет будет ли созданный объект обладать информацией о всех уровнях группировки или только об одном. Такие слова как "два уровня"  или "три уровня" тут неуместны.

Жаль, что метод "Выбрать" нельзя "раскрутить" и посмотреть изнутри, было бы любопытно как оно устроено. Но, имеем черный ящик, с чем и живем.

Зато, посмотрите как просто группируются записи по нескольким группировкам, при прямой выборке:
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.Прямой, "Номенклатура,ХарактеристикаНоменклатуры", ",");

Чем это отличается от выборки без второго и третьего параметров? Только тем, что итоговые записи будут исключительно по указанным группировкам, причем, в итоговой записи "Номенклатура", например, не будет склада, так как по нему не проводилась группировка.
Тут важно отметить одну тонкость. Даже если вы хотите опустить третий параметр метода "Выбрать", количество группировок для значений группировок указать придется, как это сделал я, вставив туда запятую. А вообще правильно было бы сделать, например, так:
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.Прямой, "Склад,Номенклатура", "Все,Склад");

Итак, подытожу. Бесполезное знание и бестолковый параметр метода. Нет золота в серых горах. Увы. =(

P.S.: Вот переписка с 1С на эту тему, может кого-то занинтересует:
>> В каком случае во втором параметреиспользуется ИМЕННО СПИСОК группировок разделенных запятыми, какое при этом поведение выборки, и нет ли наглядного примера иллюстрирующего такой случай?
<< Список группировок можно применять когда требуется получить группировку выборку по указанным полям.
<< Пример: РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой, "Товар,Покупатель", "Все,Товар");
>> Верно ли я понимаю, что использовать список группировок во втором параметре можно _только_ с типом обхода результата запроса "ОбходРезультатаЗапроса.Прямой"?
<< Да, с другими типами обхода при выборке получается только один уровень, поэтому указывать вторую группировку бессмысленно.
Извините.

Публикация на Инфостарт

понедельник, 14 мая 2012 г.

Навигационные ссылки

Кое-что о навигационных ссылках.

Вот описание из справки 1С, раздел "1С:Предприятие - Встроенный язык - Интерфейс (управляемый) - ПредставлениеНавигационнойСсылки - НавигационнаяСсылка":
  •     Объект информационной базы - e1cib/data/<путь к метаданному>?ref="<идентификатор ссылки>";
  •     Запись регистра информационной базы - e1cib /data/<путь к метаданному>?<имя ключевого поля>="<значение>"[&<имя ключевого поля>="<значение>"];
  •     Реквизит объекта информационной базы - e1cib/data/<путь к метаданному>.<имя реквизита>?ref="<идентификатор ссылки>";
  •     Реквизит табличной части объекта информационной базы - e1cib/data/<путь к метаданному>.<имя табличной части>.<имя реквизита>?ref="<идентификатор ссылки>"index="<индекс строки табличной части>";
  •     Реквизит записи регистра информационной базы - e1cib/data/<путь к метаданному>.<имя реквизита>?<имя ключевого поля>="<значение>" [&<имя ключевого поля>="<значение>"];
  •     Отчет - e1cib/app/<путь к метаданному>;
  •     Обработка - e1cib/app/<путь к метаданному>;
  •     Раздел - e1cib/navigationpoint /<имя раздела>;
  •     Навигационная точка - e1cib/navigationpoint/<имя раздела>/<имя команды>;
  •     Временное хранилище - e1cib/tempstorage/<идентификатор временного значения>.
А в описании к релизу платформы 8.2.15.310 есть вот такое:
Изменен формат навигационных ссылок. Из текста ссылок убраны символы двойных кавычек (”), а значения параметров (после символа “=”) кодируются в соответствии с разделом 2.2. URL Character Encoding Issues стандарта RFC 1738 (с помощью символа “%” и двух шестнадцатеричных символов) для значений измерений регистров сведений и ключей таблиц внешних источников данных. Если измерение регистра сведений имеет составной тип и в значении измерения указывается имя типа, то имя типа также кодируется.
Наконец-то они приводят ссылки в порядок и к RFC.

воскресенье, 6 мая 2012 г.

И вовсе не странные. =)))

Мариша: блин, программисты все такие странные? Муж читает книгу "Совершенный код" и периодически ржёт.
(c) bor

понедельник, 23 апреля 2012 г.

Обход запроса по нескольким группировкам

Хочу поделиться с вами небольшой "зарисовкой", которая помогает мне обходить выборку запроса, как бы пропуская некоторые группировки.
Что я имею в виду. Предположим, у нас есть запрос, который выбирает из регистра движения по номенклатуре в разрезе склада, номенклатуры, характеристики номенклатуры и документа движения. Вот как выглядит "плоская" выгрузка результата этого запроса:

Если в запросе указать итоги по складу, номенклатуре и характеристике номенклатуры и написать следующий код:
то обход будет производиться следующим образом:
Т.е. по первой группировке "Склад" внешний цикл (голубой) совершит одну итерацию, по второй группировке "Номенклатура" ("розовый" цикл) четыре итерации, в каждой из итераций "розового" цикла будет разное количество итераций "зеленого" цикла по группировке "ХарактеристикаНоменклатуры", и в конечном итоге будут выбраны все детальные записи ("серый" цикл), которые на рисунке я отмечать не стал, ибо лениво.

Но иногда хочется выбрать записи вот таким образом:
Т.е. так, чтобы внешний (голубой) цикл выбирал, как и положено, по группировке "Склад", а внутренний (зеленый) выбирал по некой "агрегатной" группировке "Номенклатура+ХарактеристикаНоменклатуры". Ну и дальше по необходимости детальные записи. Это было бы удобно, если бы вы, например, создавали документы по группировке "Склад", а второй "метагруппировкой" заполняли табличную часть каким-либо образом. Конечно, код, который приведен выше, справляется с этой задачей, но лично моя печаль в том, что там есть один вложенный цикл (розовый), который делается совершенно ненужным с точки зрения "изящества кода" как минимум. К тому же, когда таких группировок становится больше, например девять, мы видим совершенно "потрясающую" картину из девяти вложенных циклов.
Еще можно просто пропустить группировку "Номенклатура" и обходить результат запроса по группировкам "Склад - ХарактеристикаНоменклатуры - ДетальныеЗаписи". Но вот беда, в этом случае на уровне характеристики нет самой номенклатуры. Смотрите сами:

Получается, что на уровне выборки по складу номенклатуры еще нет, а на уровне выборки по характеристике ее... все еще нет. Бида.

Я точно знаю, что я не один такой, но у меня и у других коллег по несчастью как-то сам собой напрашивается вот такой код:

Код прекрасен всем, кроме того... что он не работает. Если когда-нибудь разгадаю это тайное послание фирмы 1С о "списке группировок", я обязательно с вами поделюсь. Сейчас же я знаю только то, что этот код мне не удалось заставить работать ни под каким соусом.

Но мы не ждем милости от природы и от 1С. А берем и сами делаем. Вот такой код работает нормально вполне:

Пара слов о функциях.
Функция "зфВыбратьПоГруппировкам" применяется вместо "ВыборкаЛалала.Выбрать()". Ей передается выборка, из которой нужно выбирать, и перечень группировок через запятую. При этом она возвращает некую "метавыборку". Ничего военного, просто соответствие с необходимыми данными.
Функция "зфСледующийПоГруппировкам" применяется вместо "ВыборкаОлоло.Следующий()". Ей передается та самая, открытая на предыдущем шаге "метавыборка" и возвращает она истину или ложь, как и штатный метод "Следующий".
Да. Внутри цикла вы можете смело получать родную 1С-овскую выборку нижнего уровня группировок, обратившись к элементу соответствия "Выборка". Вот так:

РоднаяВыборка1С = МетаВыборка["Выборка"];

Естественно, дальше родную выборку 1С можно хоть снова перебирать этими функциями, хоть выбирать штатными средствами.

Также не могу не сказать, что, в принципе, в функциях нет ничего нового и я тут не претендую на оригинальность или что-нибудь в таком духе. Думаю, что многие писали такие же функции, просто хотелось поделиться с уважаемым сообществом.
Они также не убирают вложенные циклы, просто немного иначе их организуют и скрывают. Т.е. в действительности все "лишние" циклы есть, но из кода это не очевидно.
Еще вполне понятно, что их использование будет менее производительным в смысле быстродействия, нежели использование вороха вложенных циклов. Я, конечно, старался написать пооптимальнее, но сами понимаете, накладные расходы будут.
Да, одна функция рекурсивная. По идее глубина рекурсии будет небольшой и равна количеству пропускаемых группировок плюс один, однако рекурсия есть рекурсия.
Ну и конечно, не исключен вариант, что я где-то накосячил. Если обнаружите - пишите, поправим.

Наконец сами функции:

Функция зфВыбратьПоГруппировкам(Выборка, Группировки, СИерархией = Ложь)

       МетаВыборка = Новый Соответствие;

       врОбходРезультата = ОбходРезультатаЗапроса.ПоГруппировкам;
       Если СИерархией Тогда
               врОбходРезультата = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;
       КонецЕсли;
       МетаВыборка.Вставить("ОбходРезультата", врОбходРезультата);

       МассивГруппировок = Новый Массив;
       врСтрГруппировки = Группировки;
       Пока Истина Цикл
               Поз = Найти( врСтрГруппировки, "," );
               Если Поз = 0 Тогда
                       МассивГруппировок.Добавить(СокрЛП(врСтрГруппировки));
                       Прервать;
               КонецЕсли;
               МассивГруппировок.Добавить( СокрЛП( Лев(врСтрГруппировки,Поз-1) ) );
               врСтрГруппировки = Сред( врСтрГруппировки, Поз+1 );
       КонецЦикла;

       МетаВыборка.Вставить("Группировки", МассивГруппировок);

       врВыборка = Выборка;
       Для пц=0 По МассивГруппировок.Количество()-2 Цикл
               врВыборкаУровня = врВыборка.Выбрать(врОбходРезультата, МассивГруппировок[пц]);
               МетаВыборка.Вставить("_Выборка"+Строка(пц), врВыборкаУровня);
               Если не врВыборкаУровня.Следующий() Тогда
                       Прервать;
               КонецЕсли;
               врВыборка = врВыборкаУровня;
       КонецЦикла;
       врВыборкаУровня = врВыборка.Выбрать(врОбходРезультата, МассивГруппировок[пц]);
       МетаВыборка.Вставить("Выборка", врВыборкаУровня);
       МетаВыборка.Вставить("_Выборка"+Строка(пц), врВыборкаУровня);

       Возврат МетаВыборка;

КонецФункции // зфВыбратьПоГруппировкам

Функция зфСледующийПоГруппировкам(МетаВыборка, Уровень = Неопределено)

       Если Уровень = Неопределено Тогда
               Уровень = МетаВыборка["Группировки"].Количество()-1;
       КонецЕсли;

       Если Уровень < 0 Тогда
               Возврат Ложь;
       КонецЕсли;

       врВыборка = МетаВыборка["_Выборка"+Строка(Уровень)];

       Если врВыборка.Следующий() Тогда
               Возврат Истина;
       КонецЕсли;

       Если зфСледующийПоГруппировкам(МетаВыборка, Уровень-1) Тогда
               МассивГруппировок = МетаВыборка["Группировки"];
               врВыборкаРодитель = МетаВыборка["_Выборка"+Строка(Уровень-1)];
               врВыборка = врВыборкаРодитель.Выбрать(МетаВыборка["ОбходРезультата"],МассивГруппировок[Уровень]);
               МетаВыборка["_Выборка"+Строка(Уровень)] = врВыборка;
               Если Уровень = МассивГруппировок.Количество()-1 Тогда
                       МетаВыборка["Выборка"] = врВыборка;
               КонецЕсли;
               Возврат зфСледующийПоГруппировкам(МетаВыборка, Уровень);
       Иначе
               Возврат Ложь;
       КонецЕсли;

КонецФункции // зфСледующийПоГруппировкам

Спасибо за внимание, а я желаю вам хорошего дня и хорошего кода.

Публикация на Инфостарт