Баги платформы 7.7




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

    Подробнее про ТаблицаЗначений.Сортировать() …

    Reply
  2. IsiKosta

    Плохо что нет возможности добавлять в блоги файлы, можно было бы демонстрировать… Может кидать файлы в какой-нибудь файлообменник?

    Reply
  3. artbear

    КонтФормыДокумента.НоваяСтрока — решено в ВК 1С++ и ФормЕкс — достаточно их просто загрузить, и эта фича уже работает, чем и пользуюсь уже давно, порядка 6 лет 🙂

    Reply
  4. layman

    Если открыть отчеты—>Регламентированные.

    Затем зайти в Сервис—>Параметры—>Интерфейс и там поменять шрифт, размер шрифта

    то 1С выдаст ошибку и закроется

    Reply
  5. Vitek

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

    Reply
  6. layman

    Просто к концу года должна выйти 28 платформа, по статистики. А в январе-феврале 29

    Reply
  7. Vitek

    (6)Не выйдет.

    Reply
  8. CheBurator

    я фигею… а что, ПРИ СОРТИРОВКЕ изменяется количество строк…? а мужики-то и не знают! Побегу расскажу…

    Reply
  9. CheBurator

    и не баг и не фича, а так, наблюдение…

    а=а;

    не вызовет исключительной ситуации…

    Reply
  10. vasilykushnir

    >-некорректно работает функция Сортировать()

    Если после сортировки ТЗ применить метод КоличествоСтрок(), результат будет такой же, как если бы сортировки не было.

    А каким он должен быть? Ты же не сворачиваешь ТЗ…

    Reply
  11. vasilykushnir

    (4) Есть такое дело. Не часто, но вываливается.

    Reply
  12. vasilykushnir

    (9) А вот сейчас проверю… Самому интересно стало.

    Reply
  13. vasilykushnir

    (9) Че, а вот так не пробовал 🙂 ?

    а=а/0;

    Reply
  14. ssp_

    2 бага, с которыми сталкиваюсь постоянно:

    1. Бухучет + УРИБ: Меняем конфигурацию в ЦИБ, затрагивая план счетов. После получения новой конфигурации в ПИБ запускается пересчет итогов, после которого получаем жутко кривые бухитоги. Лечится удалением индексов и запуском пересчета итогов вручную.

    2. Синтаксический контроль для внешнего отчета после «Сохранить как» ссылается на старый файл.

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

    Reply
  15. vasilykushnir

    + к (13)

    Код
               Попытка
          С  &nb
    Reply
  16. vasilykushnir

    Блин, и я ошибку впилял, надо

    с = 5/0;

    Reply
  17. Vitek
  18. O-Planet

    Упал, читая первый пример. Писал явный ламер и нуб. Вот так все работает:

    Код
    Процедура Сформировать()
            ТЗ =СоздатьОбЪект("ТаблицаЗначений");
            ТЗ.НоваяКолонка ("Колонка","Число" );
            ТЗ.НоваяСтрока (); ТЗ .Колонка =0;
            ТЗ.НоваяСтрока (); ТЗ .Колонка =0;
            ТЗ.НоваяСтрока (); ТЗ .Колонка =1;
            ТЗ.Сортировать ("+Колонка");
            П=0;
            Сообщить(ТЗ .НайтиЗначение(1 ,П,"Колонка" ));
    КонецПроцедуры
    

    Показать полностью

    Reply
  19. ssp_

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

    Reply
  20. Pari

    Столкнулся с таким фактом (может так и должно быть, хотя не понятно, почему). Потребовалась служебная обработка, к-я должна была запускаться только из форм документов. Поскольку никакого диалога не планировалось, на форму обработки не положил ни одного элемента (ни кнопок, ни текста и т.п.). ОткрытьФорму() не сработало. Попробовал запустить «на прямую» — нулевой результат. Процедура ПриОткрытии() срабатывает, если есть хотя-бы один элемент диалога.

    Reply
  21. Pari

    + (20) Уточнение. Не открывается не только форма внешней обработки, но и встроенной в конфигурацию. И не только программно, но и напрямую (через «Файл» — «Открыть» для внешней, или через «Операции» — «Обработки» для встроенной).

    Reply
  22. poppy

    Лажа какая-то.

    Максимальное количество группиповок = 5.

    С чего бы это? Нет такого ограничения, поэтому и в документации по языку — ни слова.

    Функция Формат()

    Формат(1.2, «Ч.0») = 1.2

    Формат(’12/01/2002′, «ДДДММММГГ») = «12.01.02»


    Форматные строки написаны с ошибками, поэтому результат вполне предсказуемый. При чем здесь баги платформы?

    Reply
  23. O-Planet

    Вообще, да. Больше некоторого числа группировок семерка не позволяет делать запрос. Вроде, после 5-и, действительно. Поэтому в ТиС на всех отчетах стоит такое ограничение.

    А вот у меня реально несколько раз получался странный бак, то внешний отчет ругался на попытку выполнить метод ИсходнаяТаблица(), хотя и таблица присутствовала, и ошибок никаких не было. Странно, что оно работало сперва, а через какое-то время слетало. Восстанавливалось удалением таблицы и созданием новой, абсолютно такой же.

    Reply
  24. Vitek

    (23)А до этого было проведение документа?

    потеря контекста скорее всего.

    Reply
  25. MikStyle

    У одного из клиентов была следующая проблема на ТиС типовой. Открывался справочник «Номенклатура» из него далее форма любого товара в нем кнопка справочники — Цены. Далее это все оставлялось БЕЗ ДВИЖЕНИЯ МЫШИ ИЛИ КЛАВИАТУРЫ. Через несколько минут цены начинали сами собой изменяться, причем интервалы разные, а через какое-то время опять возвращались к исходным. Причем в это время мог никто не работать. Мне сняли это на сотовый. Проблема наверное решилась (точно не могу сказать сейчас с ним не работаю) после исправления модуля формы списка справочника «Цены»: При октрытии, Владельца сразу в переменную и потом используем именно ее, а создание «таблицы расчетных цен» в процедуру «СформироватьТаблицуРасчЦен()». Такое ощущение было, что все время менялся владелец справочника… Повторюсь одна копия базы открыта одним пользователем через терминал, и 100% никто по удаленке не прикалывается…

    Reply
  26. script

    Баг-нибаг.

    В любой версии платформы нельзя получить перечень (список, выборку) групп из справочника запросом (ТОЛЬКО ГРУПП и ИМЕННО ЗАПРОСОМ).

    Reply
  27. CheBurator

    (26)

    Код
    //*******************************************
    Процедура Сформировать()
       НеГруппа=ПолучитьПустоеЗначение("Справочник.Номенклатура");
       ТекстЗапроса="
       |Родитель = Справочник.Номенклатура.ТекущийЭлемент.Родитель;
       |Группировка Родитель упорядочить по Родитель.Наименование Все;
       |Условие(НЕ(Родитель=НеГруппа));
       |";
       
       Запрос = СоздатьОбъект("Запрос");
       Запрос.Выполнить(ТекстЗапроса);
       ТЗ = СоздатьОбъект("ТаблицаЗначений");
       Запрос.Выгрузить(ТЗ,1,0);
       ТЗ.ВыбратьСТроку(,"тест");
    КонецПроцедуры
    

    Показать полностью

    .

    устроит?

    Reply
  28. CheBurator

    (23) подтверждаю… и на данный момент есть такой отчет…

    Reply
  29. CheBurator

    (25) стопудово шаловливые ручки или алгоритмобяки

    Reply
  30. CheBurator

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

    Reply
  31. IsiKosta

    к 31

    Просто кусок кода выносят иногда во внешнюю обработку и в ПриОткрытии() выполняют необходимое. Реквизиты на форме удаляют (я вот думал размер файла уменьшу). Сейчас оставлляю на форме кнопку «Закрыть».

    Reply
  32. Pari

    (31) <Сейчас оставляю на форме кнопку «Закрыть»

    Достаточно элемента «Текст», без заголовка и идентификатора.

    Reply
  33. Pari

    (31) <кусок кода выносят иногда во внешнюю обработку и в ПриОткрытии() выполняют необходимое

    Получается, что из внешней обработки можно сделать «хранилище» процедур. Можно ли как-то это использовать?

    Reply
  34. vasilykushnir

    (33) Хранилище процедур можно сделать в дополнительном глобальном модуле или внескольких модулях (что с успехом использую) — кури Формекс от Альфа.

    Reply
  35. JohnyDeath

    (33),(34) Пусть человек сразу к хорошему привыкает! Кури 1с++ http://www.1cpp.ru/ и используй свои классы.

    Reply
  36. poppy

    (23)

    > Вообще, да. Больше некоторого числа группировок семерка не позволяет

    > делать запрос. Вроде, после 5-и, действительно. Поэтому в ТиС на всех

    > отчетах стоит такое ограничение.

    Оооо, блин, чЮдо-прогаммер.

    Ограничения в отчетах ТиС не связаны с ограничениями платформы и(или) объекта «Запрос».

    Смторим тут http://infostart.ru/projects/1154/

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

    Reply
  37. O-Planet

    (36) Ну значит, сейчас можно. Я помню точно, что пару раз вылетало сообщение, что в запросе больше пяти группировок…

    Reply
  38. poppy

    (37)

    В отчетах ТиС и сейчас вылетает такое сообщение:

    Код
       Если КоличествоГруппировок > 5 Тогда
          Предупреждение("Нельзя сделать больше 5 группировок!",60);
          Возврат;
       КонецЕсли;            
    

    Показать полностью

    Это особенность конкретных отчетов конкретной (хотя и типовой) конфигурации… 🙂

    Почему об этом ограничении должно быть сказано в документации по языку?

    Reply
  39. vip

    (38) Срезала чЮдо ;))

    Это шоб не обзывался.

    Reply
  40. O-Planet

    А я тоже всю жизнь ограничения ставил и сильно от этого страдал, хоть и не догадывался… :(((((((

    Reply
  41. O-Planet

    Ладно! На затравку — супер глюк, о котором почему-то ни кто ни где не пишет…

    Сколько раз замечал, чо если конкретно загрузить семерку чем-то вроже загрузки или восстановления данных, переиндексировкой, пересчетом итогов или регистров, но в конфигураторе, то имеет место следующее явление. Если в процессе этого действа просто увести мышь хотя бы на кнопку Пуск (о хранителях экрана, Alt+Tab я даже не говорю), то семерка подвисает навечно! Возможно, прослеживается не на всех компах, а с некоторым дефицитом памяти.

    Reply
  42. O-Planet

    А что ни кто не спит-то? 0_о

    Reply
  43. vasilykushnir

    (41) Ты сам почти ответил на свой вопросс:

    1. Чем больше база тем больше мозгов для подобных действий.

    2. На хрюшке, а особенно хомке — это сплошь и рядом. У хомки диспетчер памяти ни в дугу, ни в красную армию. На сервере 2003 ни разу подобного не замечал даже на более слабом компе.

    Вывод — неча на 1С кивать, если железо — дерьмо.

    Reply
  44. Bobak

    (41)Подвисает только на компьютерах с процессорами с «гипертрейдингом», так кажется это называется. Т.е. процессор с эмуляцией двухпроцессорности.

    И вроде даже не подвисает навечно, а просто оооочень медленно работает.

    Решается проблема отключением «гипертрейдинга» в биосе.

    Reply
  45. Светлячок

    (43) <<На сервере 2003 ни разу подобного не замечал даже на более слабом компе — а вот у меня подвисает, ну или, как говорит (44) — «оооочень медленно работает», что делать-то? Нервно покуривать? 🙂

    Reply
  46. polzovatel

    В 7.7 есть еще такой глюк: когда пишешь Сообщить(«текст»+переменная) — то все работает, а когда Сообщить(переменная) — не выводится в табло и все тут! пользуюсь для быстрой проверки работы модуля. Такой

    Reply
  47. vip

    (43)(44)(45) «Подвисает» на любом компе и на любой ОС.

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

    Ничего в этом страшного нет, просто малоприятно.

    Чтобы обновлялась хотя бы строка состояния во время выполнения тяжелого задания, можно установить режим совместимости с Windows 2000.

    Reply
  48. polzovatel

    +(46) такой глюк происходит не всегда, но он есть и как-то я потратила часа 4 на то чтобы пнять что не так 🙂

    Reply
  49. v_dog

    Проблема большая очень если файл регистра в опер учете достигает объема 1,2 Gb тогда перевод точки актуальности из месяца в месяц происходит очень долго притом что чем больше месяцев за раз пытаешся перенести то больше приходится ждать если первый месяц проходит за 7 минут то 2 уже за 15 и т.д. в геометрической прогрессий.

    Reply
  50. IsiKosta

    на 46

    Из описания процедуры Сообщить() видно, что как параметр передается строковое выражение, поэтому надо переменную (не тип «Строка») преобразовать в тип «строка». Например «» + переменная или Строка(переменная). Так что это не баг и не глюк.

    Reply
  51. Bobak

    (47)Речь не об этом, по крайней мере я не об этом. Эта проблема решается http://infostart.ru/profile/1329/projects/798/

    А в случае (44) именно «подвисает».

    Reply
  52. vasilykushnir

    (46) Дык конструкцией Сообщить(«текст»+переменная) ты явно указываешь, что «переменная» должна преобразоватся к текстовому виду. Без Сообщить(» «+переменная), Например Сообщить(переменная), 1С-ка почему-то не может «сообразить» что ей делать с типом переменной и какой он у нее….

    (47)+5

    Reply
  53. vasilykushnir

    (51) Выйдет Абадонна с больницы — попрошу, чтобы восстановил приблуду по ссылке. Очень часто выручала в подобных ситуациях.

    Reply
  54. slawa

    (25)

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

    Окошко с ценами может быть только одно — вот оно и переключалось между ценами этих товаров.

    Reply
  55. polzovatel

    (50) я не написала, но переменная заранее либо число, либо строка. Но действительно понаблюдаю, может и я накосячила 🙂 но в том случае когда 4 часа потратила было Строка(переменная), исправила на Строка(«»+переменная) и все заработало…это точно, я проверяла 0_0

    Reply
  56. Ёпрст

    (27) Меня — нет. В выборке не будут Группы Без Элементов….

    Так что низачОт.

    Reply
  57. Светлячок

    (47), (51), (53) — Спасибо!

    Reply
  58. Ёпрст

    Вот, очередной [:]||||||||||||||||[:] от Рупора Абсурда

    Процедура Сформировать()

    тз = СоздатьОбъект(«ТаблицаЗначений»);

    тз.НоваяКолонка(«Тест»);

    Для Номер=1 По 10 Цикл

    тз.НоваяСтрока();

    тз.Тест = Формат(Номер, «ЧП»);

    КонецЦикла;

    тз.Сортировать(«Тест»);

    тз.КоличествоСтрок(8);

    тз.КоличествоСтрок(4);

    тз.КоличествоСтрок(2);

    тз.КоличествоСтрок(1);

    тз.ВыбратьСтроку();

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

    Reply
  59. alexqc

    Счас попробую пройтись по багам с объяснениями:

    1. Сортировка и КоличествоСтрок():

    Читаем документацию:

    КоличествоСтрок(<Колич>)

    Назначение:

    Устанавливает/возвращает количество строк в таблице значений.

    Параметры:

    <Колич> — необязательный параметр. Новое количество строк в таблице значений.

    Заметьте, НИГДЕ не сказано, оставшиеся строки начинаются с 1-й строки. Это лишь ожидаемое поведение, ожидаемое, но не прописанное.

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

    По поводу формата: с числом действительно глюк. А с датой — опять-таки домыслы. Если прочитать документацию :), то обнаружим, что формата ДДММММГГ попросту нет! Есть ДДММММГГГГ, есть ДДММГГГГ, но нет ни ДДММММГГ, ни указания что части ММ/ММММ и ГГ/ГГГГ можно использовать произвольно (мне бы, к примеру подошел бы еще формат ГГГГ-ММ-ДД, но я ж не возмущаюсь что так не выдает!). А для неясного формата 1Ска выдает результат «как есть». не удивлюсь, что если установить режим показа дат «4 цифры года», то ДДММММГГ выдаст 12.01.2002 :).

    Reply
  60. sml

    странно, что никто не написал о глюке отладчика 1С.

    Если запущен отладчик, то нельзя запустить другую базу 1С в режиме предприятия — висяк получается с ней.

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

    Reply
  61. alexqc

    Ветка длинная, оказывается, про формат оказывается уже сказали :).

    По поводу а=а/0:

    Если перед это строкой вставить а=1 — то будет вполне ожидаемая ошибка :). Суть в том, что при выполнении а=а/0 «самой по себе» в А в момент выполнения деления содержится пустое значение (ТипЗначения=0). Согласно документации, выполнение выражения определяется первым типом его операнда. Т.е. выражение должно будет обрабатываться как выражение «пустого типа». Работа с пустым типом в доке не описано, но вероятно действует правило, что «любое выражение пустого типа дает пустой тип» (в этом можно убедиться, выполнив что-то вроде ПустоеЗначение()+123). Так что тут скорее не глюк, а «неопределенное поведение».

    Reply
  62. vasilykushnir

    (61) Очень даже логично. Плюсик за красивую логику.

    Reply
  63. alexqc

    (17), (18) и http://www.klerk.ru/soft/1c/?1069

    А это между прочим действительно глюк.

    Читаем доку:

    НайтиЗначение(<Знач>,<Строка>,<Колонка>)



    Параметры:

    <Знач> — значение для поиска.

    <Строка> — идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке.

    <Колонка> — … Если при вызове метода передать в этот параметр номер или идентификатор колонки, то поиск будет осуществляться только по указанной колонке

    Что с того, что мы передали и номер строки, и идентификатор колонки? Должен быть поиск в указанной (строке,колонке), т.е. в одиночной ячейке! И т.к. значения нет — вернуть 0!

    Ну а для тех кто говорит, что таки низзя задавать и то и то, предлагаю выполнить в том же примере

    Сообщить(ТЗ .НайтиЗначение(1 ,1, 0 )); — тут явно поиск по колонкам в 1-й строке, но почему-то возвращает 1 (а должен 0).

    И даже более того:

    Код
    Процедура Сформировать()
            ТЗ =СоздатьОбъект("ТаблицаЗначений");
            ТЗ.НоваяКолонка ("ППП","Строка" );
            ТЗ.НоваяКолонка ("Колонка","Число" );
            ТЗ.НоваяСтрока (); ТЗ .Колонка =0;
           ТЗ.НоваяСтрока (); ТЗ .Колонка =0;
             ТЗ.НоваяСтрока (); ТЗ .Колонка =1;
            ТЗ.Сортировать ("+Колонка");
            Сообщить(ТЗ .НайтиЗначение(1 ,1,"Колонка" ));
       КК=0;
            Сообщить(ТЗ .НайтиЗначение(1 ,1,КК));
       Сообщить(КК);
    КонецПроцедуры
    

    Показать полностью

    получим КК=2, т.е. вполне себе находит, в нужной колонке, тока не в той строке.

    И чего интересно (18) автора нубом обозвал?

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

    Reply
  64. alexqc

    По поводу макс. кол-ва группировок: у меня есть отчет, в котором фильтрация/группировка по куче признаков товара, самих признаков 5+собственно товар, +еще сколько-то вышестоящих группировок, + группировка по документу движения. С полным набором включенных группировок тестировалось, и работает. Так что на счет макс. количество группировок — деза, если оно и есть — то достаточно большое, чтобы этого ограничения не ощущать. А макс. значение которое в некоторых отчетах стоит — это действительно связано только с отчетами. Это отчеты, в которых состав и кол-во группировок меняются; в самой таблице отчета для группировок заданы секции, допустим, «Строка1″,»Строка2″,…,»Строка5». Вывод секции сделан наподобие Таб.ВывестиСекцию(«Строка»+номерГруппировки). Естественно, в таком случае НомерГруппировки=6 вызовет ошибку — такой секции попросту нет. Вот для того и поставили ограничения :).

    Reply
  65. alexqc

    (41) Мож таки не глюк, а «необновление»? Этим именно ХР и иже с ним грешат. Если включить режим совместимости с 2000, то тогда хоть в статусной строке что-то видно…

    Reply
  66. valerasv

    некорректно работает функция Сортировать()

    А каким образом сортировка (перестановка по определенному порядку) строк может повлиять на их количество? Или я чего то недопонимаю?

    Reply
  67. alexqc

    про группы справочника запросом

    Только что проверил запрос

    «род = Справочник.Контрагенты.Родитель;Группировка род;»

    Все работает 🙂 (27й релиз, SQL).

    Кстати, вот такой запрос

    » //{{ЗАПРОС(ККК)

    |ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент;

    |Код = Справочник.Контрагенты.Родитель.Код;

    |род = Справочник.Контрагенты.Родитель;

    |Группировка Код;



    Почему-то группирует не по кодам родителей, а по кодам самих элементов :).

    Reply
  68. alexqc

    (66) Хоть и говорилось, но всеж повторю.

    КоличествоСтрок(КС) — оно УСТАНАВЛИВАЕТ количество строк. Соответственно глюк такой: создаем таблицу, добавляем строки, сортируем так, чтобы новый порядок отличался от начального, потом устанавливает количество строк < текущего к-ва. Строки удаляются не с конца, а «с конца в старом порядке».

    Reply
  69. Ёпрст

    (67) См. (56)… НизачОт..

    Reply
  70. Dolly_EV

    (60) <Еще глюкаво работает с ОЛЕ-сессией. Например, если открываешь какую-нить 1Сину ч/з ОЛЕ, а в ней выскакивает модальное окно (например, не рассчитаны итоги и пр.), то 1С виснет. Приходится срубать оба процесса диспетчером задач. >

    При открытии окна (модального или не модального) в ОЛЕ, база не виснет, просто на ОЛЕ-базе НЕТ ВИДИМОГО ОКНА ВИНДЫ, решается след. образом:

    1). попробовать пощелкать Alt+Tab

    2). вытянуть окно наверх в диспетчере задач

    Reply
  71. Ёпрст

    (70) Гораздо проще открыть базу запущенную по Оле сторонней приблудой и посмотреть что там происходит в натуре…

    Reply
  72. O-Planet

    (47) >> Никакое это не подвисание, просто перестает обновляться экран.

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

    Reply
  73. vip

    (72) Ты не пишешь, какая тяжелая работа в этот момент выполнялась.

    Через 2 часа подвисание только тремя пальцами и можно исправить (гм…).

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

    Reply
  74. O-Planet

    Речь идет о восстановлении из архива выгруженных данных. При повторе я их все снес, чтобы не путались.

    Reply
  75. vip

    (74) Сегодняшней ночью я именно этим и занимался в разных позах.

    Никакой разницы по времени не заметил.

    Может у тебя доки были с пустой датой или ТА на начало 23 века стояла.

    Reply
  76. pfa

    (23) тотже глюк решился переносом команды создания объекта таблица в начало процедуры

    Reply
  77. Fisherru

    «Если после сортировки ТЗ применить метод КоличествоСтрок(), результат будет такой же, как если бы сортировки не было.

    »

    Честно, не понимаю как сортировка таблицы может привести к изменению количества строк?

    «4) Невозможно сохранить большую таблицу в формате Excel. Программа зависает (или долго думает). »

    Уже есть замечательные разработки ЧеБурашки и в теме 1C + Excel [MXL to XLS] от 10.03.2008 ака Ужас бухгалтера !

    Причём вторая, в отличие от первой, более корректно сохраняет формат 1С-ки и позволяет в бесплатной версии задать имя файла 😉

    Не в укор ЧеБурашке. А плюсы обоим!

    Reply
  78. Pari

    (77) 2 Fisherru

    Это нужно читать между строк.

    А пояснения в (58) и (59)

    Reply
  79. Fisherru

    Сорри.

    Спешил домой и не прочитал всю ветку…

    Reply
  80. dima_gsv

    Ошибки найденные мной в 1С Предприятии 7.7.

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

    Ошибка проявляется при попытке установить точку актуальности на конец дня в котором нет ни одного документа. Некорректность заключается в том, что время ТА становится равным 26:01. Если у вас релиз 21, то после этого документы перестают проводиться, пока вручную не переместить ТА на какой-нибудь документ. В 23 релизе всё проводится нормально и 26 часов в сутках уже особо не мешают. Хотя, всё равно, как-то не по себе.

    Пример:

    Код
    Процедура ПриНачалеРаботыСистемы()
       ...
       УстановитьТАПо(ПолучитьДатуТА()+1);
       ...
    КонецПроцедуры

    Показать полностью

    2. Не работает обратный порядок выборки элементов справочника по реквизиту с учётом иерархии.

    Проверено в 21 и 23 релизе.

    Пример:

    Код
    Процедура Сформировать()
       // Справочник Партии подчинён справочнику Товары
       // Справочник Партии содержит реквизит Отдел с признаком Сортировка
       Партия=СоздатьОбъект("Справочник.Партии");
       Партия.ИспользоватьВладельца(Товар);
       Партия.ОбратныйПорядок(1);
       Партия.ВыбратьЭлементыПоРеквизиту("Отдел",Константа.ОснОтдел,1,0);
       Пока Партия.ПолучитьЭлемент(1)=1 Цикл
          // Ни одна строка не будет выведена, если Партия.ОбратныйПорядок()=1
          Сообщить(Строка(Партия));
       КонецЦикла;
    КонецПроцедуры

    Показать полностью

    Стоит только поменять

    Партия.ОбратныйПорядок(1);

    на

    Партия.ОбратныйПорядок(0);

    как в выборке появляются элементы.

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

    Следующие строки запроса дают одинаковый результат:

    Код
    |ВидТовара=Регистр.ОстаткиПартийТоваров.Товар.Родитель.Родитель.ВидТовара;
    |ВидТовара=Регистр.ОстаткиПартийТоваров.Товар.Родитель.ВидТовара;

    Показать полностью

    Даже если вписать .Родитель десять раз, это будет считаться как один. Проверено на 21 и 23 релизе на DBF базе.

    Reply
  81. dima_gsv

    В предыдущем посте проглотилось пару строк «КонецПроцедуры» в коде. Вобщем, исходник с картинками тут: http://dima-gsv.pisem.net/1cv77errors.html

    Reply
  82. Shaman100M

    Попробуйте в форме списка справочнике 7.7 создать кнопочку с перепозиционированием текущего элемента (например, по введенному в диалоге коду или наименованию)

    а затем нажать ее находясь в режиме редактирования текущего элемента «в списке». На «боевой» базе экспериментировать не советую!!!

    Reply
  83. Shaman100M

    (77) Речь идет, скорее всего о том, метод КоличествоСтрок() выдает то же количество строк что и до сортировки, однако, таблица значений после этого становится неотсортированной. Так?

    Reply
  84. Shaman100M

    + (83) прочитал все комменты.

    (56) (27) (26) можно сделать не с помощью запроса, но с пом. метода ВыбратьЭлемен

    Reply
  85. IsiKosta

    Давайте все же про текущий 27 релиз писать

    Reply
  86. nikresh

    релиз 27

    в диалоге формы реквизит — справочник (форма списка справочника с закладками)

    если форма открыта модально, то при выборе элемента справочника — открывается форма списка справочника БЕЗ закладок,

    а если НЕ модально — С закладками

    Reply
  87. lhfrjy

    Если после сортировки ТЗ применить метод КоличествоСтрок(), результат будет такой же, как если бы сортировки не было.»

    Чел очевидно имел в виду Функцию Свернуть(), но если в ней указать правильно все параметры то количество строк

    в ТЗ уменьшается.

    Reply
  88. begemot

    22. «Лажа какая-то.

    Максимальное количество группиповок = 5.

    С чего бы это? Нет такого ограничения, поэтому и в документации по языку — ни слова.»

    При выполнении запроса стоится индекс. Его длина = Длина поля группировки 1 + Длина поля группировки 2 + Длина поля группировки 3….

    Так вот, если длина этого индекса составит больше 255, то в запросе будет ошибка.

    Reply
  89. vasilykushnir

    (85) про 27-й, так про 27-й…

    НЕ ПРОБОВАТЬ ПОВТОРИТЬ НА РАБОЧЕЙ БАЗЕ!!!!!!!

    Итак: 1Cv77 дебилд 027, база скульная (довольно большая — МДФ 28 гиг).

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

    А вот теперь самое интересное: при закрытии конфигуратора жутко матерится, что память не может быть reed. Фиг с тобой! Кое-как позакрывал всплывающие окна с ошибкой. Открытие ЛЮБОЙ базы в конфигураторе и последующее закрытие вызывает ту же ошибку (перегрузка компа — до лампочки).

    Полечил переустановкой 1С. Все базы стали нормально открыватся. Почему так — не спрашивайте, сам не знаю. По идее на экзэшный файл не должно было повлиять, но все-таки…

    Вывод: кривые ручки и не на такое способны…. Так что неча кивать на глюки платформы.

    Reply
  90. bambula

    Все эти баги почти полный отстой по сравнению с тем, что напишу:

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

    Reply
  91. sks

    90: Нужно провести этот документ вручную.

    Причём предварительно придётся на первом доке этого дня установить ТА(через контекстное меню)

    Reply
  92. Рамзес

    Метод НомерДняГода для пустой даты возвращает 2:

    НомерДняГода(‘ ‘)=2

    Reply
  93. леша

    (92) Учитывая то, 01.01.1980 г. был вторник, думаю, что НомерДняГода(‘ ‘)=2 вполне нормальный результат. Пустая дата — это же как ‘01.01.80’.

    Кстати, НомерДняГода(‘ ‘ + 1) = 3!

    Reply
  94. zaic

    Неисправляемые Баги со временем становятся Фичами.

    Reply
  95. Strange Device

    Досадный глюк, который так и не починили: если для числового реквизита в табличной части установлена галочка «неотрицательный», то после выгрузки табличной части в ТЗ, в колонку соответствующую этому реквизиту не удается установить отрицательные значения

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

    Reply
  96. alyuev

    А с такой ошибкой никто не встречался? ❓ —

    в печатной таблице,

    Если

    объединить ячейки отметив галочку «По выделенным столбцам» в закладке «Положение» в свойствах ячейки,

    ТО

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

    ИначеЕсли

    ячейки объединить обычным образом — кнопкой «Объединить/Разъединить» —

    ТО

    поиск работает нормально.

    КонецЕсли

    Reply
  97. Собеседник

    п. 1,2 — не согласен что это баг. лечить не нуно

    3 — не мешает

    4 — вылечено уже

    5 — а в снеговике тоже так и че?

    По поводу «Режим «Отладчик» и «Конфигуратор»» — конструктивные особенности. не мешает

    Reply
  98. Jokester

    // не понял на счет сортировки. вот простой пример.. создаем обработку с ТЗ (ид «ТЗ») заливаем..

    ТЗ.НоваяКолонка(«Н»);ТЗ.НоваяКолонка(«Н_Знач»,»Число»);

    Для Сч=1 по 5 Цикл

    ТЗ.НоваяСтрока();

    ТЗ.Н=»Элемент № «+Сч;

    ТЗ.Н_Знач=Сч;

    КонецЦикла;

    ТЗ.Сортировать(«-Н»); Сообщить(«= «+ТЗ.КоличествоСтрок());

    // ну и где тут изчезает сортировка сортировка? 7.70 027

    (80)

    |Родитель = Справочник.Товары.Родитель;

    |РодительРодителя = Справочник.Товары.Родитель.Родитель;// Родитель = РодительРодителя — это не баг, а так и должно быть.

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

    Reply
  99. Leja

    (99) читайте внимательнее! «Если после сортировки ТЗ применить метод КоличествоСтрок() для уменьшения количества строк…»

    означает, что если после сортировки пишем:

    ИсхКолво = ТЗ.КоличествоСтрок();

    ТЗ.КоличествоСтрок(ИсхКолво-1);

    то получаем… ОПА!

    Reply

Leave a Comment

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