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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *