Введение в механизм представлений в ЗУП ред. 3




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

82 Comments

  1. NoRazum

    ЗУП 3 — кактус

    хоть много полезных механизмов. которые «ВСЕМ» нужны

    Reply
  2. Lapitskiy

    Правильнее было бы назвать статью «Как писать запросы для ЗУП»

    А то «представления»…. что это? Я бы растерялся, спроси меня вот так по телефону с утра 🙂

    Хотя опыта в Зиках и Зупах у меня лет 15 примерно..

    Reply
  3. haereticus
    Не используйте для проверки релиз 3.1.6.54 — ребята в нём что-то сломали(

    Эти ребята теперь постоянно чего-то ломают в ЗУП, уже всем боязно ставить новые обновления. Я так понимаю, они начали путаться в собственном говнокоде, что как видно из статьи теперь не мудрено.

    Reply
  4. TODD22
    В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое «Представления».

    И если он не знает про «представления» то его не возьмут на работу?

    Reply
  5. SmArtist

    пришлось с этим разобраться и использовать, ибо при очередном обновлении баз ЗУП перестали работать мои отчеты на скд. Причина — разработчики поменяли структуру хранения кадровых данных сотрудников. Советую это применять.

    Reply
  6. TODD22
    Об использовании представлений в СКД больше расскажет конфигурация. Так что смотрите в ПолучитьЗапросПоПредставлению и пользуйтесь глобальным поиском, не забывая ставить флажок в Макеты.

    Релиз 3.1.6.6 пробую поискать глобальным поиском. Поставил галочки искать в «модулях» и «макетах», но находит только общие модули. Макетов в выдаче поиска нет. Что я делаю не так?

    Где ещё можно посмотреть как работает этот механизм?

    Reply
  7. jONES1979

    …и это может даже будет к лучшему

    Reply
  8. ADirks

    Глядишь, так и нормальные SQL-представления (т.е. view) когда-нибудь изобретут.

    А так, приём полезный. Громадная простыня запроса режется на логически цельные куски, что для восприятия радикально проще.

    например, первое попавшееся

    |FROM

    | («+оЗапрос.Отступ(тзп_ЗаявкиСвернуто(оЗапрос), 2)+»

    | ) Заявки

    |

    | «+оДопРекв.тзп_Джойн(«СклПрог», «Заявки.Заявка», «СкладскаяПрограмма»)+»

    |

    | LEFT JOIN («+тзп_КомментарийПроизводства(оЗапрос)+») Коммент ON Коммент.идДок13 = Заявки.идЗадание13

    |

    | LEFT JOIN спрКонтрагенты Контрагенты ON Контрагенты.ID = Заявки.Контрагент

    |

    | LEFT JOIN («+тзп_РезервПоЗаявке()+») Резерв ON Резерв.идЗаявка13 = Заявки.Заявка

    | LEFT JOIN («+тзп_СводныеЗадания()+») СвЗадания ON СвЗадания.идЗадание13 = Заявки.идЗадание13

    может развернуться строк на сто в итоге, а так вот глядишь — и понятно более-менее

    Reply
  9. Serj1C

    (6) тут смотрели https://infostart.ru/public/836840/ ?

    Reply
  10. TODD22

    (9)Да, но уже после того как комментарий написал 🙂

    Reply
  11. xrrg

    (2) я и говорю: название условное. но те, с кем я общался и кто в теме, когда речь идет о вышеизложенном, первым делом произносят слово «представления».

    Reply
  12. xrrg

    (3) мне кажется, я возвёл поклёп на релиз. на работе в этом релизе работает, дома — нет.

    Reply
  13. xrrg

    (4) вполне возможно возьмут, но это повлияет на зарплатные притязания претендента. я пока не видел зарплатчиков, которые знают исключително ЗУП 3. все имеют какой-то багаж знаний из 2.5 считается, что такие люди быстрее освоят новую конфу. вот и я такой.

    Reply
  14. xrrg

    (6) в макетах ищите «Представления_»

    Reply
  15. el-gamberro

    (13) Я работаю и знаю исключительно ЗУП 3.1

    Если 1С родили такие Представления, то с ужасом ожидаю что они родят для секционирования (partition) регистров накопления :))

    Reply
  16. sergathome

    (3) +1. Ребята вместо того, чтобы научить платформу не формировать говнозапросы, понаписали обходного говнокода, в котором и потонули нафик. Моща !

    Reply
  17. sergathome

    (5) конечно, деваться-то некуда с подводной лодки. я вообще забил на собственные запросы в этом Г, пользуюсь «программными интерфейсами». медленно, неудобно, но есть надежда, что годок они эти «интерфейсы» не тронут…

    Reply
  18. qus-qus

    Спасибо за проделанную работу!

    Но что-то мне подсказывает, что проблемы бы не было, если бы у продукта была четкая изначально продуманная линия развития, я не так давно посчитал, текущая типовая версия конфигурации ЗУП содержит около 1000 объектов и реквизитов с припиской «Удалить»! Продукту уже лет 5, а функционал так и не стабилизировался, снова имеем две параллельные ветки (к слову, выбрать из которых невозможно, т.к. нет информации о том какой функционал будет пилиться в «продвинутой» версии по сравнению с консервативной). Мы, конечно, привыкли к роли бета-тестеров у 1С, но не так же, блин, долго оставаться в бете…

    Еще это решение негативно влияет на производительность, разработка и так отвязанная от структуры СУБД еще и будет «отвязана от структуры конфигурации»… это до добра не доводит, что я думаю многие заметили.

    Извините, надо было выговориться.

    Reply
  19. xrrg

    (18) не знаешь сам — научи другого)

    Reply
  20. oleganatolievich

    спасибо за проделанную работу.

    превратилось все в какую-то дичь. в ЗУП 2.5 было проще, а сейчас — сколько времени надо тратить чтобы разобраться как получить список сотрудников на дату? я разобрался, но на элементарные вещи уходит по 2 часа.

    Reply
  21. nicxxx

    Есть сомнения относительно среза последних. Время почти одинаковое. Выигрыш всего 12%, да и то, еще надо уточнять — я только 1 раз запускал замеры.

    Reply
  22. nicxxx

    Внезапно 🙂

    Reply
  23. xrrg

    (20) см. СКД в Отчет.ОтчетыПоСотрудникам с учетом отбора

    Reply
  24. dmitryO

    вся проблема называется так: разработчики платформы не смогли(не захотели / не поняли зачем это) реализовать хранимые процедуры в запросах.

    а в ЗУП вот этим всем как-раз и делается попытка на высоком уровне добавить то, чего нет на низком.

    скверно, конечно

    Reply
  25. ADirks

    (24) примерно так же, как в БСП полиморфизм запилен

    аж смотреть страшно

    Reply
  26. zqzq

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

    Другое дело, во всём мире для этого применяются View (уже десятки лет), а тут какие-то костыли 1С-ные как всегда… Если подумать, вполне можно на уровне платформы добавить ветку метаданных view и там описывать ВТ, по аналогии с внешними источниками данных.

    Reply
  27. ccserg

    не хватает простого примера как это использовать , слишком отрывистый код

    Reply
  28. Lukich66

    ЗиУПом пользуюсь, но считаю ошибочным решение о прекращении поддержки 2.5 и безвыборным принуждением к переходу на 3х б/учета полного отсутствия взаимодействия 3х с бух 2.0, упп и т.д. и т.п. Первые 3х попытки вообще не «привлекали» ,а последние только подтверждают тендеции восприятия первых

    Добавлю,что в последних версиях ЗиУП 2.5(126,127) изменен текст запроса по формированию РасчетаПоказателей_РСВ_2017_кв1 в общем модуле РегламентированнаяОтчетность, что привело к возникновению

    ошибки по задвоению сумм выплат по ФСС (р.1прил.3 РСВ)у работников, которые имели кадровое перемещение и б/л в одном отчетном периоде.

    И вот как с этим жить?

    Reply
  29. Трактор
    одно из них все еще называется ФизЛицо вместо принятого ныне ФизическоеЛицо

    Автор, ты, я смотрю, в теме. Открой секрет. Зачем?!! Зачем переименовывают реквизиты, измерения?

    Как говорят в армии «Лучше безобразно, но однообразно.» Ну назвали ФизЛицо, ну пусть так и живёт. Или 1С так создаёт работу программистам? Я что-то написал, клиент пользует, и после обновления мои наработки перестают работать. Потому что вместо ФизЛицо теперь надо писать ФизическоеЛицо. Кому от этого лучше? Точно не мне и не клиенту. Да и 1С тоже не лучше.

    Накипело.

    Reply
  30. Vovan1975

    не расстраивайтесь,в бухии 3.0 это тоже есть

    Reply
  31. xrrg

    (20) появилась идея поинтереснее. это представление еще не используется в СКД, но, видимо, будет

    ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник
    ПОМЕСТИТЬ Представления_СотрудникиОрганизации
    ГДЕ
    «Организация» = &Организация
    И «ОкончаниеПериода» = &Период
    ;
    
    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Представления_СотрудникиОрганизации.Сотрудник КАК Сотрудник
    ИЗ
    Представления_СотрудникиОрганизации КАК Представления_СотрудникиОрганизации
    

    Показать

    еще есть параметры Подразделение, ОтбиратьПоГоловнойОрганизации, НачалоПериода и отобрать по списку физических лиц

    Reply
  32. oleganatolievich

    (31) а чем их не устроила схема запроса или тот же построитель запроса? зачем программно лепить текст запроса? насколько я помню, сами же разработчики платформы написали, что схемазапроса для того и создана была, чтобы программно сделать конструирование запроса красиво.

    Reply
  33. xrrg

    (32) не знаю. вот сделают красиво, а мы-то даже об этом не узнаем.

    Reply
  34. mixsture

    Имхо, должно быть так:

    Есть версия 3.1.6 — вот как в ней первоначально назвали реквизиты — так они теперь и живут. Срок поддержки конфы условно 3 года.

    Все изменения реквизитов (т.е. несовместимость на уровне хранения данных) — только при переходе к 3.1.7.

    И после этого все понимают, что написанные доработки живут 3 года, потом требуют корректировки и живут еще 3 года.

    ——

    P.S. Если 1с так небрежно относится к переименованию реквизитов, т.е. к обратной совместимости, то кто гарантирует, что завтра 1с также не изменит «представления»?

    Reply
  35. Vovan1975

    (34) так они и сделаны чтобы безбашенно менять потроха, а разработчику, используя их, будет фиолетово что там как называется и в какой таблице живет.

    Reply
  36. xrrg

    (29) ФизЛицо — это против их же (1С) стандартов наименования переменных/реквизитов и т.п.

    а в целом знаю, что ЗУП 3 разрабатывался без оглядки на ЗУП 2.5

    хотя, что касается, к примеру, структуры регистров по НДФЛ доходы и расчеты, в ЗУП 3 по сравнению с ЗУП 2.5 изменились как раз только наименования)

    Reply
  37. DmitrySinichnikov

    (16) И самое главное, что «представления» теперь не работают. Точнее работают, но частично, то одно поле не дадут, то другое, а в итоге возникает необходимость либо переписывать полностью запрос, что бы вытащить необходимые данные либо строить запрос сбоку, в конце получения данных по представлению. Как итог — все минусы нафиг ушли, к конце привязан, запросы строить надо, учитывая кучу обходов и достроение сбоку производительность тоже утонула… Молодцы! Все в стиле 1С)))

    Reply
  38. firma111

    Жесть … И без того в типовых портянках черт ногу сломит, теперь еще труднее будет разбираться, где, что, откуда..

    Reply
  39. VZyryanov

    Голословные и, возможно, неверные утверждения:

    «Этот запрос точно не будет эффективным при наличии в регистре 1 млн записей», «платформа генерирует заведомо неэффективный запрос».

    Reply
  40. gendal

    Почему заявили о прекращении поддержки ЗУП 2.5? ЗУП 3 еще достаточно сырая, в которой постоянно что-то правят, 2.5 в этом отношении гораздо лучше, что подтверждают и пользователи, воротящие нос от ЗУП 3

    Reply
  41. mixsture

    (35)

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

    Это решение:

    1) тяжелое (куча кода, сложно даже описать это в статье. Поэтому автор пишет «не буду описывать как переименовать поля в выборке, иначе статья бесконечная выйдет»)

    2) отключает конструктор запроса

    3) не гарантирует, что и эти функции представлений не поменяются.

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

    Тут, имхо, проблема в головах у 1с — в жизненном цикле как самого продукта, так и сторонних доработок к ним. Это больше управленческая проблема и такие проблемы плохо решаются одной лишь автоматизацией. Выходит навороченно, дорого и неудобно. Хотя достаточно было определиться с периодами заморозки изменений в хранении данных.

    Reply
  42. xrrg

    (21)

    (39)

    не знаю насколько «чистыми» будут данные эксперимента на обычном, несколько устаревшем, локальном компе с Win 7 и MS SQL Server 2008 R2. в пустую базу перетащил общий модуль ЗарплатаКадрыОбщиеНаборыДанных (+39 причастных модулей, 1 справочник и 2 регистра сведений).

    имеем справочник 100 тыс элементов. эти элементы имеют статусы в регистре сведений ~600 тыс штук. эксперимент проводил обработкой, которая формирует выборочно какое-то количество элементов справочника, помещает их в таблицу значений, добавляя произвольный период. далее запускаем запрос среза как в платформе (не сам СрезПоследних, а то, как он платформа формирует его на SQL) и ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних. итого: разница ~100 мс против ~200 мс в пользу СоздатьВТИмяРегистраСрезПоследних.

    Reply
  43. xrrg

    (42)

    какое-то количество = 1000. с увеличением выборки элементов разница становится заметнее.

    и да, я сам так же отнёсся к этой информации, оттого и проверял.

    Reply
  44. xrrg

    (41)

    1. я уже столько новшеств пережил, что это всего лишь еще одно.

    2. да, отлаживать запросы стало сложнее.

    3. в 3.0.25.65 были, и сейчас есть. на курсах об этом учат, а на экзамене спрашивают.

    мда, обновляю 3.1.3 на последний релиз и вижу, что ребята «ушли» ВТПозицииШтатногоРасписания. bastards!

    Reply
  45. nofear

    Коллеги, хотелось бы задать вопрос, насколько плотно рассматривается данная тема на курсе от 1С «Конфигурирование подсистем расчета зарплаты и управления персоналом в прикладных решениях для «1С:Предприятия 8» ? Есть ли там хорошие, правильные примеры?

    Reply
  46. Vyatcheslav

    перешли за зуп 2.5 корп с профа в 1кв. и радуемся жизни. Есть одна база небольшая на 3.1, все подтвержается, тормоза, глюки и т.д., видно, что сырая. Может к 2019-ому допилят более-менее, когда народ с ЗиК 7.7 будет перелазить на 3.1

    Reply
  47. xrrg

    (46) а вы, напр, запустите отчет о среднесписочной численности в 2.5 и 3.1

    Reply
  48. Brawler

    (32) нечитаемо вообще все будет тогда и неосмысливаемо

    Reply
  49. Rustig

    (37) «фасад на фасаде»

    …тут на ИС поднималась недавно околонаучная «фасадная» тема — так вот очень похожий фасад соорудили в ЗУПе

    Reply
  50. Rustig

    (4) и ему повезет, что не возьмут…

    идти в организацию, где за годы работы станешь магистром зуповских представлений — та еще перспектива

    Reply
  51. Rustig

    (0) тема интересная, только вот акцент вы сделали на исключительности ваших компетенций ЗУПа некорректно для кандидатов — мол, не знаешь представления, ты не с нами…

    Reply
  52. Rustig

    (31) в УТ 10.3 для механизма RLS используются Шаблоны — что-то очень похожее на концепцию представлений — костыль на собственные механизмы платформы и конфигурации.

    Не прижилось….. то же самое будущее ждет ваши представления — нагромождения-нагромождения

    Reply
  53. Rustig

    (28) жаловаться, придумать решение (обойти проблему и заработать на этом), информировать других — главное не мириться и не сдаваться 🙂

    Reply
  54. Rustig

    (29) согласен, что иногда качество типовых ЦФшников огорчает — встречал к примеру назовут реквизит документа так «Основание», тип Строковый…. а в обработчике ОбработкаЗаполнения() служебный параметр как раз так и называется….

    Reply
  55. Rustig

    (34) у каждой доработки есть свой начальник… это как во всех бедах России винить президента, так же в проблемах ЗУПа ссылаться на фирму 1С…. знать бы кому жаловаться…

    Reply
  56. Rustig

    (44) они на нас и зарабатывают — курсы проводят — добровольно-принудительно

    Reply
  57. Rustig

    (47) как-то не убедительно парируете… он вам про всю конфу, а вы про один отчет… в целом-то что лучше?

    Reply
  58. xrrg

    (53) не знаком с УТ. речь идет о шаблонах ограничений в ролях или это какие-то объекты конкретно конфигурации УТ?

    Reply
  59. xrrg

    (58) отчеты быстрее формируются в 3.1

    я на это намекал

    Reply
  60. Rustig

    (59) да, я имел в виду шаблоны ограничений в ролях

    Reply
  61. eashabalin

    А может кто подсказать КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников() есть параметр ФормироватьСПериодичностьДень, как мне подготовить таблицу сотрудников чтобы охватить период с по ? Интересует момент смены графика за период. Спасибо.

    Reply
  62. xrrg

    (62)

    вряд ли КадровыеДанныеСотрудников помогут. в описателе ВТ можно только период (среза) указать. данные о графиках собираются в КадровыйУчетРасширенный.ЗапросВТСведенияОГрафикахРаботы и там можно увидеть получение среза последних.

    если интересует именно смена графика за период, то надо пользоваться либо получением записей СоздатьВТИмяРегистра, либо получением «периодов»:

    ОписаниеФильтраПолученияГрафиков = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра(«ВТСотрудники», «Сотрудник»);
    
    ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды(
    «ГрафикРаботыСотрудников»,
    Запрос.МенеджерВременныхТаблиц,
    Истина,
    ОписаниеФильтраПолученияГрафиков);

    в Запрос.МенеджерВременныхТаблиц должна содержаться ВТСотрудники с полями Сотрудник, ДатаНачала, ДатаОкончания.

    Reply
  63. eashabalin

    (63) Я пока единственное сделал то, что в ВТСотрудники добавил все даты периода. Но просела скорость выполнения. Как вернусь попробую посмотреть. Денис, а кроме как самому шишки набивать, есть где подробнее узнать про ВТСоздать и в целом методологию работы со всем этим? Ещё раз спасибо за статью.

    Reply
  64. xrrg

    (64)

    наверно, я неправильно понял то, что требуется

    ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра(«ВТСотрудники», «Сотрудник»);
    ЗапросГрафиков = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(«ГрафикРаботыСотрудников», Истина, ОписаниеФильтра);
    
    ЗарплатаКадрыОбщиеНаборыДанных.ОбъединитьЗапросы(Запрос, ЗапросГрафиков);
    
    ЗапросПериоды = ЗарплатаКадрыОбщиеНаборыДанных.ЗапросВТПериоды(
    ДатаМин,
    ДатаМакс,
    «ДЕНЬ»,
    ,
    «ВТПериоды»);
    
    ЗарплатаКадрыОбщиеНаборыДанных.ОбъединитьЗапросы(Запрос, ЗапросПериоды);
    
    ЗапросСоединение = Новый Запрос(
    «ВЫБРАТЬ
    | ВТГрафикРаботыСотрудниковПериоды.Сотрудник,
    | ВТГрафикРаботыСотрудниковПериоды.ГрафикРаботы КАК ГрафикРаботы,
    | ВТПериоды.Период КАК Период
    |ПОМЕСТИТЬ ВТДействиеГрафиков
    |ИЗ
    | ВТГрафикРаботыСотрудниковПериоды КАК ВТГрафикРаботыСотрудниковПериоды
    |  ЛЕВОЕ СОЕДИНЕНИЕ ВТПериоды КАК ВТПериоды
    |  ПО (ВТПериоды.Период МЕЖДУ ВТГрафикРаботыСотрудниковПериоды.НачалоПериода И ВТГрафикРаботыСотрудниковПериоды.КонецПериода)»);
    
    ЗарплатаКадрыОбщиеНаборыДанных.ОбъединитьЗапросы(Запрос, ЗапросСоединение);

    Показать

    а про методологию приходится писать самому 🙂

    Reply
  65. eashabalin

    (65) Так и есть мой вариант в лоб просаживает систему при больших табелях. Поэтому возвращаюсь к вопросу и к вашему ответу. Как будет результат, отпишусь здесь. @Денис ещё раз спасибо!

    Reply
  66. Brawler

    (40) Ну как бы ЗУП 3.Х давно более или менее стабильно работает, а вот то обстоятельство, что эта конфигурация развивается, вносит некие ошибки в ее код.

    Все привыкли работать на ЗУП 2.5, к ошибкам и нюансам в которой привыкли, ведь ничего не менялось много лет! Стабильность, а тут ЗУП 3.Х 1С пилит и пилит, всякие плюшки новые и глюки, что-то чинит, что-то ломает.

    Все это движение и идет оно в лучшую сторону я думаю!!!

    Reply
  67. bestsader

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

    Reply
  68. triviumfan

    Сколько негодующих… на на вопрос, зачем вообще снимать ЗУП с полной поддержки кто-нибудь задавался?

    Ломают они его уже много лет, ведь ни для кого не секрет. Тогда зачем, собственно, это? Доработки по ЗУП давно сводятся «на нет».

    Reply
  69. strange2007

    (3) Всё прекрасно работает и даже сложный учёт ложится нормально. Зачем уж так обзываетесь то?

    Reply
  70. strange2007

    (20) Это оно?

    КадровыйУчет.ФизическиеЛицаРаботавшиеВОрганизации

    или это?

    КадровыйУчет.СотрудникиОрганизации(Истина, СтруктураПараметров);

    Reply
  71. strange2007

    А разве в ЗУПе данные не при помощи универсальных методов надо получать? Разрабы меняют структуры, а методы как работали так и работают без изменений. Зачем какие-то запросы сложные писать?

    Reply
  72. strange2007

    (69) Есть. Когда конфигурацию дорабатывается без изменений, то лучше снимать полностью, чтобы в памяти 2 копии конфы не хранилось

    Reply
  73. nofear

    Статья очень полезная!

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

    Вот такой есть вариант:

    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛи­ц();

    ПараметрыПолученияСотрудников.Организация = Организация;

    ПараметрыПолученияСотрудников.НачалоПериода = НачалоПериода;

    ПараметрыПолученияСотрудников.ОкончаниеПериода = КонецПериода;

    Не подходит тем, что у меня есть ТЗ с колонкой физ.лиц и начало периода у всех сотрудников может быть разным.

    Reply
  74. xrrg

    (74)

    Попробуйте КадровыйУчет.ОсновныеСотрудникиФизическихЛиц(…). Существует соответствующий регистр РС.ОсновныеСотрудникиФизическихЛиц

    Reply
  75. nofear

    Спасибо! Попробую!

    Reply
  76. nofear

    Попытался сделать так:

    ОписаниеФильтра = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра(«ВТ_ДанныеДокументов», «ФизическоеЛицо, Организация»);

    ТолькоРазрешенные = Истина;

    ЗапросСреза = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТИмяРегистра(«ОсновныеСотрудникиФизическихЛиц», ТолькоРазрешенные, ОписаниеФильтра,,»ВТСотрудникиФизическихЛиц»);

    ЗарплатаКадрыОбщиеНаборыДанных.ОбъединитьЗапросы(Запрос, ЗапросСреза);

    Запрос.Выполнить();

    Не получилось, регистр ОсновныеСотрудникиФизическихЛиц — непериодический.

    Reply
  77. nofear

    Можно, конечно, вытащить сам запрос и не учитывать период. Но хотелось бы правильный способ.

    Reply
  78. xrrg

    (78)

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

    Reply
  79. nofear

    Спасибо, попробую!

    Reply
  80. freemaestro

    Прочитал статью. Интересно, полезная методика.

    Проанализировал процедуры и функции из примеров, приведенных в статье.

    Из них, только 2 метода:

    ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра

    ЗарплатаКадрыПериодическиеРегистры.ЗапросВТИмяРегистр

    находятся в области

    #Область ПрограммныйИнтерфейс.

    Остальные методы:

    ЗарплатаКадрыОбщиеНаборыДанных.ОбъединитьЗапросы

    ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних

    ЗарплатаКадрыОбщиеНаборыДанных.ПараметрыПостроенияДляСоздатьВТИмяРегистраСрез

    ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор

    ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета

    ЗарплатаКадрыОбщиеНаборыДанныхБазовый.ПолучитьЗапросПоПредставлению.

    ЗарплатаКадрыОбщиеНаборыДанныхРасширенный.ПолучитьЗапросПоПредставлению

    УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников

    УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников

    КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотруднико­в

    КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников

    УправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписаниеПоТаблицеФильтра

    УправлениеШтатнымРасписанием.СоздатьВТПозицииШтатногоРасписанияПоВременнойТаблице

    находятся в так называемых служебных областях общих модулей.

    Фирма 1С дает некую гарантию, что в следующих релизах не поменяются только методы,

    расположенные в областях #Область ПрограммныйИнтерфейс.

    Всё, что находится в других секциях — при обновлении может быть изменено фирмой 1С.

    Так что если пользоваться этими методами — их надо постоянно держать на контроле,

    быть готовым переделать свой код.

    Reply
  81. xrrg

    (81)

    Согласен, придется следить. Меня, как я писал, сильно волнует корректное получение данных с т.з. функционала ЗУПа.

    Вызов из программного интерфейса

    ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолучения.Организация = Организация;
    ПараметрыПолучения.НачалоПериода = НачалоМесяца(Период);
    ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(Период);
    ПараметрыПолучения.Вставить(«КадровыеДанные», «Подразделение»);
    ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
    Reply
  82. garik79

    Добрый день.

    Не было у кого-нибудь задачи получить данные об изменениях графиков и должностей вместе за заданный период. Сотрудник в течении месяца через Кадровые переводы меняют графики работы, подразделения (должности). Необходимо в один отчет все это получить. Отдельно ВТ с графиками работ и кадровые данные по периодам получаю, может есть типовая функция, которая все вместе позволит получить? Заранее всем спасибо.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *