Универсальный журнал документов для 8.1




Принцип обмена данными из 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='\

99 Comments

  1. Ish_2

    Честно говоря , не понял зачем это нужно, а в описании — ни слова.

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

    Предложение навскидку : интересно бы выглядел журнал — дерево ,свернутый по видам документов ,например, или по датам.

    Reply
  2. e.kogan

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

    «Дерево» можно построить на основании журнала произвольным отчётом.

    При активизации — посмотрю, что можно оптимизировать. Но там, по-моему, кэшем решать надо, а у меня времени маловато на переделку.

    Reply
  3. e.kogan

    (1) Насчёт ПриАктивизации: а у вас включён показ движений и таб.частей?

    Reply
  4. Ish_2

    Показ движений и табчастей не используется.

    На форме только табЧасть с документами одного вида «ОтражениеЗарплатыВ РегламентированномУчете»( с большими табЧастями , разумеется).

    Активизация каждой строки — медленная.

    Reply
  5. e.kogan

    Очень странно. Посмотрите отладкой, на каком моменте тормозит? У меня всё отрабатывает быстро. Размер ТЧ при отключённом показе ни на что влиять не должен.

    Reply
  6. Ish_2

    Предполагаю , что дело в объектной технике обращения к данным :

    ТекОбъ=ТекущиеДанные.Ссылка.ПолучитьОбъект()

    У Вас грузится весь объект (он может быть достаточно большим, как в моем случае).

    Правильнее , на мой взгляд, использовать запросный метод обращения к данным :

    «Выбрать * из … где Ссылка=&Ссылка»

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

    Reply
  7. e.kogan

    (6) Чуть подправила, перезалила (объект документа получается только если включён показ движений).

    Reply
  8. e.kogan

    (6) Запрос к полной таблице каждого регистра (а ещё метаданные парсить, чтобы понять, по чему вообще м.б. движения…) — точно дольше (именно дольше, вопрос памяти я здесь не поднимаю), чем получение объекта и его движений.

    Reply
  9. Ish_2

    (9) Речь в (6) идет только об осторожном предположении ,

    что запрос по документу

    «Выбрать Номер из … Где Ссылка=&Ссылка»

    отработает гораздо быстрее ,чем

    Номер = Ссылка.ПолучитьОбъект().Номер,

    потому что в последнем случае грузится весь объект.

    Что же касается, обращения к движениям документа ,

    то обращение к ним через свойство «Движения» это и есть неявный запрос к регистру и свойство это придумано для удобства разработчиков.

    Так мне помнится написано у Радченко. Но боюсь соврать.

    Reply
  10. e.kogan

    (10) Реквизиты документа (а также табчасти) действительно проще брать напрямую через ссылку, что и сделано в последней версии обработки.

    Насчёт движений по регистрам: при включённом показе движений стоит задача получить в виде таблиц все движения документа (т.е. таблицы тех регистров, по которым конкретный документ имеет хоть одну запись как регистратор). Для этого есть пять возможностей:

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

    2. Перебор в цикле по Ссылка.Метаданные().Движения и

    2.1. Создание по каждому регистру набора записей с отбором по регистратору, считывание.

    2.2. Обращение к каждому регистру через Выбрать() с отбором по регистратору (полный маразм, потому что ещё и таблицу создавать, и в ней построчно переносить, и вообще, но возможность-то есть).

    2.3. Обращение к каждому регистру через запрос вида «ВЫБРАТЬ * ИЗ Регистр[…] ГДЕ Регистратор=&Ссылка».

    2.4. Обращение к аждому регистру через запрос вида «ВЫБРАТЬ * ИЗ Регистр[…]([…],Регистратор) ГДЕ Регистратор=&Ссылка».

    Что-то мне подсказывает, что наиболее быстрая — первая. Насчёт других ресурсов (память, пессимистичность/оптимистичность устанавливаемых блокировок и т.д.) — отдельный разговор.

    В любом случае спасибо за замечание, полезно оказалось 🙂

    Reply
  11. Ish_2
    2. Перебор в цикле по Ссылка.Метаданные().Движения и

    2.1. Создание по каждому регистру набора записей с отбором по регистратору, считывание.

    Чем плохо ?

    В этом случае не происходит считывание в память всего объекта с его табличными частями как в Вашем варианте.

    Идет обращение только к движениям документа.

    Убиваем двух зайцев : сокращаем время считывания и уменьшаем вероятность невозможности считывания из-за возможной блокировки документа.

    Мне кажется так.

    Reply
  12. MRAK

    Вроде красиво. Тоже делал подобное, только до универсальности не доработал, использую в самописках. Авансом плюсану, на всякий случай 🙂

    Reply
  13. Ish_2

    Странно , но я вижу скрытые Вами записи с пометкой «Запись скрыта».

    Что-то опять с движком …

    Reply
  14. e.kogan

    (12) Возможно, так и быстрее будет. Замерять надо. Есть чем и на чём?

    Reply
  15. Ish_2

    (15) «Есть чем и на чём?» — цокнул языком , почесал в затылке — Нету.

    Reply
  16. e.kogan

    (16) А мне некогда 🙁

    Reply
  17. Ish_2

    (17) Крыть нечем. Ухожу.

    Reply
  18. e.kogan

    (18) Жаль, вдруг бы ещё что полезное сказали…

    Reply
  19. alexk-is

    (0) Если текст процедуры СписокДокументовПриАктивизацииСтроки перенести в другую, например, ЖурналДокументовСписокПриАктивизацииСтроки и написать так

    Процедура СписокДокументовПриАктивизацииСтроки(Элемент=«»)

        ПодключитьОбработчикОжидания(«ЖурналДокументовСписокПриАктивизацииСтроки», 0.1, Истина);

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

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

    Reply
  20. alexk-is

    Возникает ошибка, если название табличной части совпадает с названием регистра.

    Reply
  21. e.kogan

    (20) Спасибо за идею, попробую. (21) Сейчас разберёмся — префикс поставлю.

    Reply
  22. slaviksoft

    Пожелания:

    1. Было бы хорошо что бы сохранялись настройки произвольного отчета.

    2. Пункт «Найти содержащие ссылки на …» — хотелось бы что бы сохранял тип предыдуще выбранного

    3. В печатном реестре чтобы автоматом отображал итоги по колонках с типом «число»

    Reply
  23. alexk-is

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

    Reply
  24. e.kogan

    (23) 1. Настройки произвольного отчёта можно сохранять в файл. Об этом написано в справке соответствующей формы. Мне бы и самой хотелось сохранять их параллельно с прочими настройками, но слишком много проблем пока — как отрабатывать удаление колонки из настройки, например?

    2. Сохраняет по идее. На кнопку выбора из списка нажимали?

    3. В произвольном отчёте отображает. В реестре доп. колонки не выводятся вообще.

    (24) Исправлено, сейчас выложу.

    Reply
  25. alexk-is

    (25) Теперь работает так. 🙂

    Если включен просмотр только движения и при движении по списку попадает непроведенный документ, то панель с движениями прячется. Потом если попадает проведенный документ, то панель с движениями появляется. Потом если попадает непроведенный документ, то панель с движениями прячется и больше не появляется. Хватает на 2 документа.

    Reply
  26. alexk-is

    +26 Немного подправил привязки. Осталось странное промигивание 🙁

    Reply
  27. alexk-is

    Если разработка продолжается, то неплохо было бы где-то писать номер опубликованной версии. Например, как здесь http://www.infostart.ru/public/69189/ или здесь http://www.infostart.ru/public/19363/

    Reply
  28. e.kogan

    (26) Очень странно, пойду проверю ещё разок. У меня такого эффекта нет 🙁

    С привязками исходно пришлось помудрить (никак не хотели вставать как надо), так что любую помощь приму с благодарностью.

    Нумерация версий и правда уже вести пора…

    Reply
  29. e.kogan

    (26) Потестировала. Описанного явления не наблюдалось (

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

    Reply
  30. alexk-is

    (29) Вариант в (27) не вариант?

    Reply
  31. e.kogan

    (31) Упс, только заметила. Подходит за одним маленьким изменением:

    ОтобразитьПанельТабЧастей(МетаданныеДокумента);

    уходит в низ процедуры. Выкладываю как новую версию?

    Reply
  32. alexk-is

    (32) Нет. Это просто пример, там много рабочего мусора.

    Reply
  33. alexk-is

    При пролистывании списка документов в файловой версии тормозит на ОбновитьКнопки();, в SQL версии на ТекОбъ.Движения[НаборДвижений.Имя].Прочитать();

    Reply
  34. e.kogan

    (33) А я уже выложила… машинально 😉

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

    Reply
  35. alexk-is

    (35) Я могу посмотреть варианты оптимизации, так — чисто из спортивного интереса.

    Reply
  36. voler

    Выдает иногда вот такую ошибку

    {Форма.ОсновнаяФорма(1280)}: Значение не является значением объектного типа (Имя)
    ОтборПоТекущейКолонке=ПостроительОтчета.Отбор.Найти(ТекущаяКолонка.Имя);

    Reply
  37. e.kogan

    (36) Буду весьма признательна.

    (37) Лечится элементарно, сейчас выложу поправленное.

    Reply
  38. alexk-is

    (38) Возможно это новая версия. См. вложение.

    1. Определение отображаемых закладок запросом.

    2. Заполнение информации на закладках только при открытии соответствующей закладки.

    Reply
  39. alexk-is

    +39 Чуть прибрался

    Reply
  40. alexk-is

    +40 Что-то я не успеваю. Добавил заплатку как в (37)

    Reply
  41. e.kogan

    (41) И не успеете — я уже у себя всё очередной раз перелопатила 🙂 Сейчас полезу сравнивать версии. Там выигрыш по времени насколько (если не считать показа только по отображению)?

    Reply
  42. e.kogan

    (41) З.Ы. Вау, первый раз вижу такой вариант мРазложитьСтрокуВМассивПодстрок 😉

    Reply
  43. e.kogan

    (41) Ох мы с вами и разойтись успели… Полчаса сидеть придётся 8)

    Reply
  44. e.kogan

    (41) С заполнением ТЧ запросом не согласна абсолютно. Движения — да, есть о чём поспорить, а вот ТЧ выгрузить из ссылки — быстрее всего.

    Reply
  45. alexk-is

    (45) Нет не так. Запросом отределяется только перечень закладок. См. ПЕРВЫЕ 1.

    Т.е. только проведяется факт наличия информации и не более.

    Остальное как было раньше, только не сразу все читается, а по мере обращения. Т.е. если закладку не открывать, то данные для неё не будут прочитаны.

    Reply
  46. alexk-is

    (43) Я ещё крестиком вышивать умею… 🙂

    Reply
  47. e.kogan

    (46) Прошу прощения, нашла. Да, имеет смысл. Сейчас перепричешу с учётом своих изменений и выложу.

    (47) Не вопрос! Вышивайте 😉

    Reply
  48. alexk-is

    (48) Не дождался. Добавил сортировку закладок.

    Reply
  49. e.kogan

    (49) На обед ходила, не всё ж сразу делать. Минут 15 ещё, и усё будет.

    Reply
  50. e.kogan

    (49) Таки вот, готово. Вроде ничего не упустила.

    Reply
  51. alexk-is

    (51) Еще немного подправил код.

    Хотелось бы уточнить про версии. Обычно делаю так:

    1.2.3.4

    1. Координальные изменения функционала

    2. Значительные изменения, расширение функционала

    3. Незначительные изменения функционала, оптимизация

    4. Исправления ошибок — функционал не изменен

    Reply
  52. e.kogan

    (52) Увы, я довольно безалаберна в версификации разработок 😉

    Reply
  53. alexk-is

    Отчет по движениям документа находится в меню Перейти. Мне кажется логичнее его поместить в меню Печать.

    Как насчет вложения в (52) ?

    Reply
  54. alexk-is

    Кажется победил лешние промаргивания при отображении закладок, теперь только прорисовка объекта. См. вложение.

    Reply
  55. Ish_2

    Эстер, я вернулся. Со скромной целью — влезть в вашу дискуссию со своим уставом (читай -вкусом).

    Представленная разработка , возможно , полезна. Но ,на мой вкус, неинтересна.

    Всё как обычно : чего-то к чему-то прикрутили , чего-то подправили.

    Не хватает какой-то идеи , отличия или изюминки.

    В (1) мне показалось , что такой изюминкой может оказаться представление журнала

    в виде дерева , свернутого по какому -то интерактивно настраиваемому параметру (дата, вид документа и т.д.). Не Бог весть что- с точки зрения техники исполнения .

    Но такая бы разработка заинтересовала бы и , думаю, запомнилась.

    Reply
  56. e.kogan

    (54) Я подумаю. В типовых он в меню «Перейти» — тут скорее вопрос, как пользователю удобнее.

    (55) Обновила основной файл, вычистив лишние закомментированные куски.

    (56) А чем в таком случае не устраивает вывод отчёта?

    Reply
  57. e.kogan

    (55), (56) Я вот думаю прикрутить настройку и сохранение позиций колонок (не ту, которая через Настройку списка, а свою похожую.

    Reply
  58. Ish_2

    (57) Отчет , конечно, хорошо.

    Но интересен подход ( только для меня ,конечно ) :

    Табличное поле, содержащее журнал, имеет вид «Дерево».

    Пользователь открывает , добавляет интерактивно документы, т.е. совершает все необходимые действия, из Дерева .

    Пользователь интерактивно сворачивает-разворачивает журнал документов по нужному параметру (например, по дате).

    Такой реализации я еще не встречал.

    Вот такое скромное пожелание.

    Reply
  59. alexk-is

    (59) Для построения дерева данные необходимо группировать. Перестроил запрос. Результата не дождался — убил.

    Reply
  60. alexk-is

    (58) Поправил отображение итогов в списке и привязки на форме. См. вложение.

    Reply
  61. Ish_2

    (60) Ничего не понял. По порядку :

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

    Медленный или быстрый.

    Вопрос :

    чем такой запрос(«плоский») лучше или хуже запроса («с итогами») для выгрузки в дерево , как источника данных для табличного поля «Список документов» ?

    Поэтому фраза «не дождался — убил» относится как к «плоскому» запросу ,

    так и к запросу с итогами , который ничуть не медленнее .

    Reply
  62. alexk-is

    (62) Переписал. Так?

    Reply
  63. e.kogan

    (63) 1. Где в таком случае настраиваются группировки? Или фиксированно — только по дате?

    2. Для дат и чисел надо бы периодическую группировку…

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

    Reply
  64. alexk-is

    (64) Вообще-то отваливается почти всё и перенастраивать придется очень многое. Например, итоги. Чтобы это начало работать пришлось сделать ряд заплаток. Уверен, что для получения полной функциональности придется ещё многое перелопатить. Решение о направлении дальнейшего развития все равно примимать автору.

    Reply
  65. Ish_2

    (65) Не ожидал , что сделаешь. Спасибо.

    Мне-то , разумеется, понравилось. Визуально выглядит — необычно.

    Конечно , перелопатить придется многое. Сейчас много ошибок.

    Насколько это будет удобно для конечного пользователя — сказать трудно.

    И , конечно, решать автору : нужно это или нет.

    Reply
  66. e.kogan

    (65), (66)

    Честно признаюсь: мне — лень. Слишком много проблем возникает. Лучше хранимую нормально настройку колонок напишу. Если многоуважаемый alexk-is решит развивать «деревянную» идею — флаг в руки, выкладывайте отдельно.

    Reply
  67. alexk-is

    В скриншотах нет табличных частей и движений документов.

    Reply
  68. alexk-is

    (66) Сам не ожидал. Первоначальный вариант был очень медленный и глючный

    Reply
  69. Ish_2

    (67) Понимаю.

    (68) Из «дерева» вытекают многия следствия и дополнительный, возможно неожиданный, сервис для пользователя.

    Но каркать не буду.

    Если останется зарубка на память , «что так можно!» — и то хорошо.

    Браво , Алексей !

    Reply
  70. e.kogan

    (68) А стоит? Тогда сейчас сделаю.

    Reply
  71. alexk-is

    (71) Хм. А я думал, что в этом главная изюминка.

    В некоторых конфигурациях есть скрытые табличные части. Без спец. средств их не увидеть.

    Возможно я не до конца проникся. 🙂

    Reply
  72. e.kogan

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

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

    А показ ТЧ и движений — это уже почти по умолчанию для такой разработки. И не задумывалась особо. Мне больше важна СКД на всё это дело — позволяет выдать пользователю всю инфу (ну кроме собсно ТЧ и движений) в любых разрезах. Построить диаграммку — каких документов по какому признаку сколько, рост документооборота во времени и прочие вкусности.

    Reply
  73. alexk-is

    «Следует учитывать, что при первоначальном открытии обработки список документов не заполняется. Данное поведение обусловлено тем, что по умолчанию в настройках обработки в состав отобранных документов не включен ни один документ. Для включения документов в список универсального журнала необходимо произвести первоначальную настройку состава обработки.»

    Может быть сразу открывать форму для настройки списка, если он пустой?

    Reply
  74. alexk-is

    Получил ошибку:

    {ВнешняяОбработка.ИсторияОбъекта(40)}: Ошибка при вызове метода контекста (ВыгрузитьЖурналРегистрации): Ошибка совместного доступа к файлу ‘C:Documents and SettingsКонстантинов.INFORMLocal SettingsTempReg1C.xml’

    ВыгрузитьЖурналРегистрации(ИмяФайлаЖурналаРегистрации, ФильтрЖурнала);

    по причине:

    Ошибка совместного доступа к файлу ‘C:Documents and SettingsКонстантинов.INFORMLocal SettingsTempReg1C.xml’

    Reply
  75. e.kogan

    (74) Хорошая идея, сейчас сделаю.

    (75) Никогда на такую не налетала, видимо, что-то локальное. Появятся идеи по обходу — пишите, пока затычку на попытка-исключение сделаю.

    Reply
  76. e.kogan

    (74), (75) — 76 сделано.

    Reply
  77. alexk-is

    (76) +75 Запустил в двух конфигурациях. Можно исключить ошибку, если использовать не фиксированное имя Reg1C.xml, а уникальные имена файлов. Как это сделано при обращении к вложенным обработкам.

    Reply
  78. e.kogan

    (78) Можно. Уже готово.

    Reply
  79. alexk-is

    (79) Хм. Пропали все изменения от 22.04.2010. Привязки, оптимизация кода и выравнивание итогов в подвале. Выкладываю снова. См. вложение.

    Reply
  80. e.kogan

    (80) Уупс, может, файлом промахнулась. У вас уже с учётом поправленной ИсторииОбъекта?

    Reply
  81. alexk-is

    (81) Да

    Reply
  82. e.kogan

    (82) Тогда я не сравниваю файлы, просто выкладываю оверрайтом. Еще раз спасибо.

    Reply
  83. bulpi

    Аффтор жжот нипадецки!!!!!!!!!!

    Давно хотел сам такое сделать, да лень 🙂

    Жаль, нельзя поставить 10 плюсов.

    Reply
  84. alexk-is

    (84) Можно. Нужно только захотеть… 😉

    Reply
  85. e.kogan

    (84) Ну можно ставить плюсы к комментариям 😉

    Reply
  86. alexk-is

    Вот подумываю продолжить (67), что скажите?

    Reply
  87. e.kogan

    (88) Флаг в руки, однозначно 🙂 Я только за.

    Reply
  88. alexk-is

    (88) Можно посмотреть, что из этого получается. http://www.infostart.ru/public/69707/

    И, конечно, обсудить, прокомментировать, посоветовать. Буду весьма признателен.

    Reply
  89. dimas103

    А можно ли выбрать поле к примеру СуммаДокумента и чтобы все доки у которых такое поле есть выводили значение? Напрягает первый раз настраивать под себя. ❓

    Reply
  90. alexk-is

    (90) В данном случае используется типовой механизм. Порядок действий следующий:

    1. Выбрать виды документов для журнала.

    2. Добавить в списке граф графу для журнала с нужным наименованием. Например, «Сумма документа»

    3. В дереве реквизитов найти реквизит в одном из документов «Сумма документа»

    4. В панели интрументов выбрать «Установить флажки» и «Отметить для всех документов по имени текущего реквизита»

    Собственно таким образом можно заполнить любые графы, например, «Контрагент». Порядок действий будет аналогичным.

    Reply
  91. e.kogan

    (91) Спасибо, абсолютно верно 🙂

    (90) А ещё можно нажать «Заполнить»-«Заполнить автоматически все общие графы». Это если нужная графа есть у всех документов и называется одинаково.

    Reply
  92. v.a.ryag

    У меня не доступна кнопка отмена проведения…=(

    Reply
  93. e.kogan

    а документ точно проведён?

    Reply
  94. Кацубо

    Хорошо. Добавить бы в список графы из табличной части — итого и еще отбор — по проведенным не проведенным документам

    Reply
  95. Кацубо

    Извеняюсь отбор проведен не проведен нашла

    Reply
  96. margo2007

    Интересно, при открытии в конец не переходит…

    Это только у меня?

    Или эта ошибка всех общих журналов?

    Reply
  97. e.kogan

    (97) Если вы внимательно посмотрите на обработку, вы заметите, что это — не журнал документов в терминологии 1С, следовательно, не все общие механизмы настройки журналов документов в нём применимы.

    Если позарез нужна настройка типа «при открытии переходить…» — напишите, время будет — сделаю.

    Reply
  98. margo2007

    (98)

    Спасибо за разъяснение.

    Я думала, что если эта настройка в данной форме есть, то она должна работать.

    Я только изучаю 1с8. Есть повод разобраться и сделать самой.

    Только странно, как им пользуются другие.

    Ведь без этой настройки работать очень неудобно.

    Reply
  99. izz

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

    Reply

Leave a Comment

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