<?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='\
Зачотная статья. Must read. Автору респект. Некоторые «особенности» стали новостью. Тема с датами просто феерична 🙂
Спасибо, интересная подборка.
Из похожего могу только вспомнить падение тонкого клиента при открытии формы с условным оформлением, где используются переименованные/удаленные реквизиты. Уже прямо условный рефлекс — каждый раз когда мне говорят про падение при заходе лишь на определенную форму, которую не «лечит» чистка кеша (передобавление базы), то уже каждый раз сразу проверяю именно условное оформления самой формы и ее динамических списков.
Спасибо, весьма познавательно было
(1) спасибо! 🙂
(2) интересно, надо попробовать воспроизвести.
Про точность чисел в запросе: это не баг это фича 😉 Косвенно тутhttps://its.1c.ru/db/metod8dev#content:2665:hdoc и тут https://its.1c.ru/db/v8std#content:2149184184:hdoc
Про отсутствие субконто: такая же фигня бывает если при переносе данных с использованием КД 2 не все субконто передать.
(7) да, с обменами очень интересное происходит.
В том числе и с типовыми 🙂
В копилку:
А) Выполнение вот такого запроса:
вызовет вполне ожидаемую ошибку, так как явный джойн к ТЗ, передаваемой в ВТ — запрещен
Б) А выполнение вот такого запроса:
никаких ошибок при выполнении не вызовет, но в поле ВидНоменклатуры платформа вернет «битую» ссылку вида «объект не найден», так как джойна к физической таблице справочника «Номенклатура» по прежнему не будет.
(9) интересные фичи! Спасибо.
(10) вот еще прикольчик:
Обычные формы, 2 списка (именно табличное поле списка, а не табличное поле таблицы значений) — сверху список конкретного документа, снизу — список табличной части этого документа. Реализовано довольно часто встречающееся поведение: при активации строки верхнего списка — в нижнем отображается связанная информация, в данном случае табличная часть.
Связь между списками организована так:
ЭлементыФормы.ДокументСписок.ТекущиеДанные.Товары
где ДокументСписок — наш верхний список
то есть, указанная строка связи прописана у нижнего списка в поле «Данные»
Так вот, казалось бы — все хорошо, все работает и все сделано штатным способом.
Но! Как только пользователь откроет такую форму и начнет в ней искать поиском по строке (не отбором, а именно поиском, что юзеры очень любят делать на обычных формах) или к примеру попробует такой список отсортировать по возрастанию по колонке «Номер» — что произойдет? Сеанс клиента начнет дичайшим образом тормозить. На СУБД возникает нагрузка. Фактически запросы в цикле — по каждой строке документа начинается получение табличной части. То есть то, что должно выполняться только при активации строки — выполняется не только лишь при ней, а мало когда (ВСЕГДА) вообще ))))
Далее клиентский сеанс зависает, пользователь завершает его через диспетчер. Но, в консоли он по прежнему висит и даже если там его «убить» — соединение остается. И что самое «прикольное» — растет папка temp на сервере приложений, связанная с учетной записью службы. В ней появляется файл v8_blablabla.tmp, который растет примерно на 25-30 Мб в секунду. Причем, сколько сеансов «положили» таким образом форму — столько и будет файлов. Читать и копировать файл нельзя, так как его держит рпхост. Пока руками не убить этот рпхост, на котором был проблемный сеанс — файл не исчезнет.
(11) Парам парам пам, тунц!
Это прямо невообразимо 🙂
(12) не представляете, какое масштабное расследование пришлось провести, чтобы это все выяснить. Увидеть гигантский файл, найти рпхост, который пишет в этот файл. Посмотреть сеансы, которые на этом рпхост, примерно прикинуть — чей же сеанс мог вызывать такое поведение (причем, кстати, сам рпхост память не расходовал). Найти этот сеанс, позвонить юзеру с вопросами «что же ты там делаешь, мил человек», юзер говорит «да ничего такого, сижу работаю, документы смотрю, кнопки жму»…. Ну и т.д. Почти 2 недели разбирались…
Так что, может кому пригодится )))
(13) что-то подобное было в практике. Пользователи иногда запускали тяжелый отчет и…забывпли указывать отборы адекватные.
В итоге увеличивался размер сеансовых данных в каталоге сервера «sncctx*» до 100 ГБ и выше.
В итоге с помощью ТЖ и мониторинга удалось выяснить виновника и добавить защиту.
Но изначально проблема звучала как «Закончилось место на диске».
Изредка при отладке по шагам видно, что выполняется какой-то другой код. Ну то есть отладка шагает по модулю, но как-то странно, рывками и скачками, и вычисление переменных результата не дает (переменная не определена). Так вот — это выполняется код из кэша. Базу обновили, а программный кэш остался старый. Пару раз сталкивался, и по-моему это ни фига не фича.
(15) спасибо.
Да тоже сталкивался в разных вариациях. Иногда было очень больно 🙂
(11) специально для проверки создал видео — включил в свою публикацию —https://infostart.ru/public/933060/
база файловая — работа со списком происходит быстро и без ошибок
конечно, сталкивался с тем, что в при использовании remote app 1с — переставали работать разделители на форме — форма открывалась криво — приходилось убирать разделители вовсе; при работе в локальной сети в файловой базе, начиная с 5 человек начинаются еле заметные подвисания формы списка (несущественные), при увеличении кол-ва пользователей одновременной работы с реализациями — форма подтормаживает — но это известная проблема блокировок файловой базы — решения есть — переходить на терминальный сервер или СУБД.
(17)
Может тут комбинация — поведение платформы + код в обработчиках. Но это не точно.
(18)
Нет-нет, друзья. Никакого кода, никаких обработчиков. Дело именно в ЭлементыФормы.ДокументСписок.ТекущиеДанные.Товары
Еще раз: база в клиент-серверном режиме, количество документов — более 200 тыс. Открывается форма, без отборов и без ограничения по периоду, пользователь сортирует по номеру. Спустя 20 минут появляется файл в папке temp, растет очень быстро. На субд бесконечные запросы вида: «select … from VTTabDoc where id_ref = &id_ref»
Так что, вполне вероятно, на маленькой базе, да еще и в файловом режиме такое не проявится никогда
(19) принято)))
Было два случая в практике, иначе как магия не назвать.
1)Связан с кэшем и суть такова, можно написать какой то код. Вроде все работает. А через какое то время открываешь конфигуратор а там, как будто ничего не изменено. При то что, можно вносить изменения несколько раз, а там чистота. Может отрабатывать старый код, а может новый. Помогает либо просто закрыть конфигуратор и открыть, либо чистка кэша.
2) Более интересный случай, не встречал на просторах интернета такого. Суть такова, добавляется в конфигуратор реквизит, все хорошо, работаем и база заполняется. Но через какое то время, раз и нет этого реквизита и кода, который его заполняет. Хотя он был и через клиентское приложение видно было. Такая ситуация повторилась 2-3 раза, во всех случаях общее одно, пропадали куски кода и реквизиты, которые недавно добавили. Чистка кэша пользователя, перезагрузки сервера и прочее не помогало. Но подсказали про такую вещь как кэш сервера 1С, опять же, поиском такую информацию не найти было тогда, подсказали ссылку, но в итоге после чистки, все стало хорошо, магия пропала.
С миллисекундами в датах столкнулся, когда записывал данные через ADO в скуль. Могу ошибаться, но раньше дата хранилась в MS SQL как тип datetime, где возможно было указывать миллисекунды, а с какой-то версии платформы дата стала храниться как datetime2(0), и тут уже дробные части секунды невозможно указать.
(21) подтверждаю. Такая магия тоже была, помогла очистка сеансовых данных на сервере, которые еще называют кэшем.
Считается фичей следующая проблема (но она нигде не документирована):
Алгоритмы, размещённые Клиентском глобальный общем модуле — не видят алгоритмы, размещённые в модуле приложения (соотвествуюещего клиентского контекста: обычный/управляемый/внешнее соединение).
То есть, например, из глобального общего модуля с флагом «Клиент (управляемое приложение)» нельзя обратиться к экспортным функция и переменным «Модуля управляемого приложения» — будет ошибка на стадии сохранения/проверки синтаксиса (для модулей внешнего соединения — будет ошибка на стадии создания подключения) — что, не вижу данных элементов, к которым идёт обращение. Если проигнорировать ошибку проверки конфигурации — то она всё-равно выскачет в runtime — при компиляции такого общего модуля.
Но!
Если выполнить обращение к содержимому модуля приложения через посредник — не глобальный общий модуль того же контекста (в для приведённого выше пример — через какую-то экспортную функцию неглобального общего модуля с флагом «Клиент (управляемое приложение)»), то никаких ошибок не будет — такой вызов будет корректно работать! То есть, технической проблемы недоступности контекста нет — это просто завышенное требование синтаксической проверки.
Говорят, это ограничение введено из-за того, что глобальные модули компилируются и инициализируются раньше, чем модули приложений, и поэтому, из них нельзя обратиться к ещё не инициализированному модулю приложений. Но реально — это невозможно так сделать, т.к. у общих модулей нет программной секции инициализации, где можно было бы выполнить свой алгоритм — для клиентского контекста первым таки местом как раз будет секция инициализации модуля приложения (внешнего соединения). То есть, обратиться к клиентскому глобальному модуль ранее, чем будет инициализирован модуль приложения — никак нельзя! Так что, данное ограничение — избыточно и нигде не документировано!
Столкнулся с этим, когда разместил в клиентском управляемом глобальном общем модуле периодический обработчик ожидания (а глобальный обработчик ожидания можно разместить только там или в модуле приложения) и из него не смог обратиться к переменной модуля управляемого приложения (а глобальные переменные, доступные в клиентском контексте для управляемого приложения могут быть только там).
Обошёл выносом алгоритма обработчика ожидания в клиентский неглобальный общий модуль — в глобальном оставил только переадресацию вызова на неглобальный общий модуль.
В модуле приложения обработчик не стал размещать, чтобы не вносить в него изменения — ведь такой модуль только один, свой такой сделать, увы, нельзя!
(21)
1 пункт бывает часто при динамическом обновлении конфигурации.
Если сначала вносишь изменения после этого динамическое обновление, после этого опять вносишь изменения, код который был в первом динамическом обновлении пропадает. Если перезайти в конфигуратор после динамического обновления то все ок.
(25) В данном случае там не только динамическое обновление, так как делалось это на тестовой базе (клиент-сервер), в которой всего один пользователь работал и ни каких динамических обновлений не делалось.
Кстати, такие траблы не только с конифгурацие были, но и с внешними обработками в процессе разработки. Приходилось её закрывать, конфигуратор закрывать и заного все открывать.
Платформа 8.3.14.1565. Управляемые формы.
На основной форме внешней обработки при нажатии кнопки выбора поля ввода программно вызывается другая форма, подчинённая этому полю.
В открывшейся форме выбираем (двойным кликом) строку дерева значений. В событии «Выбор» таблицы происходит оповещение владельца формы о выборе.
После выхода из события «Выбор» приложение закрывается с ошибкой.
Если выбор строки делать нажатием кнопки Enter, ошибка не происходит.
(24)
Очень интересно. На практике не сталкивался, но объяснение выглядит логичным.
(28) Вы уже свежие версии платформы пробуйте? 🙂
Вложение с примерами сделано бесплатным, стартмани для скачивания не нужны.
Если кому-нибудь нужно 🙂
(31) Как удалось сделать вложение бесплатным? Раньше интересовался в поддержке, сказали, что такое возможно только для платных публикаций.
Спасибо. Кто-нибудь сможет погонять эти примеры на постгри и файловых базах и отписаться о результатах.
(32) Надо к модератору обратиться
С миллисекундами столкнулись сами, подумали что какой то глюк платформы, не стали разбираться и переделали)
Ну а что поделаешь? Думаю, будут править. Хотя довольно сложно будет, учитывая 4 официально поддерживаемые СУБД (MS, PG, DB2 и Oracle), каждая из которых в отельных случаях ведет себя по своему
(33)
1. Отличная математика — актуально для файловых и клиент-серверных баз (смотрел только под SQL Server). Может на PostgreSQL что-то по другому.
2. Дата с миллисекундами — для всех баз и СУБД
3. Регистр не имеет значения — для всех баз и СУБД
4. Невидимая команда — для всех баз и СУБД
5. Рекурсивный беспредел — для всех баз и СУБД
6. Внезапная пропажа колонок — для всех баз и СУБД
7. Индексированный ад — для всех баз и СУБД
8. NULL или Неопределено или ПустаяСсылка — для всех баз и СУБД
Проверить все это дело еще и на Linux не предлагать 🙂
(36) теоретически 5 субд (файловая 1с + 4 сторонних). Практически — 3 (файловая, MS и PG). К сожалению, это предел возможности управления.
(38) а DB2 еще жива?
Мне думается что ее уже почти нет в проде.
(39) Говорят жива, ходят слухи, что 8.4….. не пустили в релиз именно из за этой DB2, что то не срослось.
(30) Да, было бы интересно узнать повторяется ли ошибка на 8.3.13.
(39)
Сейчас в типовой конфигурации смотрю в сторону DB2 Express-C 11. Ведёт себя очень достойно. Даже с ограничениями на 2 ядра и 16 Гб памяти работает где-то даже быстрее Postgres с 12 ядрами и 32 Гб оперативки — быстрее листаются большие динамические списки и делается проведение документов. Заметил для себя пару минусов — довольно непросто по сравнению с Postgres администрировать и долго загружается DT > 10 Гб. Но это для меня не критично
(39)А если хорошо подумать, то 1С 77 живет себе и многих устраивает. И даже конфигурации до сих пор есть на поддержке.
То что работает, не зачем менять 🙂
(15)
Стабильно раз в 3 — 4 месяца прослеживается, если кэш не чистить и производить динамические обновления или работать во время динамики, иногда раз в пол года, как попался один раз так, при обновлении конфигурации один модуль подтянулся старый, после каждые 2-3 ручками чистю кэш, уже на привычке. Причем разнобразные встречал вариации, иногда у пользователя вообще фигню всякую и ошибки выдает, а самое опасное это когда что-то у кого-то старое и ты даже об этом не знаешь ) Для этого есть всякие чистилки кэша при входе в домен и т.п.
(37)
На PostgreSQL 9.2.4 в точности такое же поведение. Те же 37 знаков
(45)
Ок, спасибо за информацию.
Не пора ли уже бить линейкой по пальцам одноэсовских программистов?
(47) Эффективно бить получается только рублем. Но не в случае фактической монополии
У меня при каждом обновлении показывает изменения в основной конфигурации, которые мы не делали.
Я ставлю галочку для безусловного обновления, но в следующий раз снова рисуется карандашик «изменен» слева.
(49) о да. Пытался с этим бороться, даже побеждал иногда, но различия все равно появляются при обновлении.
В итоге «забил», смирился, простил и живу дальше.
Если у кого-то есть решение данной проблемы, но поделитесь 🙂
(0)
В этой статье как раз написано, что нужно указывать пустую ссылку вместо Неопределено, читаем:
Поэтому разработчики типовых перестарались. Может для составного типа Неопределено и хорошо, но для обычного типа нужна пустая ссылка.
Вот это на платформе 8.2.18.109 не подтвердилось. При добавлении новых субконто в старых движения значение субконто устанавливается как «пустая ссылка», а при добавлении новых субконто составного типа значение устанавливается в Неопределено.
(51)
Возможно так и есть, на 8.2 глюки с NULL встречал в основном после обменов.
А то что написано на ИТС — это да, это я больше для контраста вставил 🙂
глюк с округлением словил впервые в 2011-м году, делайте через выразить, будьте внимательны к делению, и будет вам счастье.
остальные глюки тоже ловил. актуально для новичков.
(50) посмотрите в сторону статей про «справочная информация». Там оф. «фича» есть. И вроде как в 8.3.13.каком-то там починили.
(53) ВЫРАЗИТЬ не поможет, потому что платформа все равно во временной таблице приводит к указанному в статье типу, чтобы там не пытались сделать в запросе. По крайней мере так было раньше, может в новой версии что-то и поменялось.
(55) Взял на заметку на будущее 🙂
(48)В том-то и дело, что монополисты.
(58) Кто сказал, что монополисты? Может просто, другие решения не устраивают по деньгам или функционалу?
Я знаю несколько контор, в которых об 1С даже в бухгалтерии ничего не знаю 🙂
(54)
Увы, но не починили.
(59)
Я знаю несколько контор, в которых об 1С даже в бухгалтерии ни
Это удивительная ситуация 🙂
Ну а так можно «радоваться», импортзамещение в действии 🙂
Кто знает, если бы не монополия, то вот таких бы новостей не было бы:
https://infostart.ru/journal/news/mir-1s/1s-zakrepila-razdelenie-platformennykh-litsenziy-na-prof-i-korp_1002294/
(60) нашел ту ветку:https://forum.infostart.ru/forum33/topic175327/
Там вроде написали что в 8.3.14 все ок
(62) Ура товарищи! Надо потестировать.
«Прикольчик» отправлен в 1С?
(42)1С хочет отказаться от поддержки DB2 — говорят слишком мало у кого используется да и с ней свои трудности есть. Вот и хотят себе жизнь упростить и больше ее не поддерживать. Тем более сейчас 1С идёт курсом плавного продвижения СУБД PosgreeSQL (и Posgress Pro), как альтернативы для MS SQL Server (хорошо хоть пока на Oracle не замахиваются — хотя там тоже много своих нюансов в поддержке).
Так что, вероятно в 8.4 уже не будет поддержки DB2, вероятно поэтому выход 8.4 так задерживается именно из-за желания выпустить уже без DB2, но по так выпустить не могут:
1C на коммерческой DB2 используют весьма крупные клиенты (у них DB2 стояла и использовалась ещё до появления
на нейдля неё 1С). Так что, хоть установок на коммерческой DB2 и не много, зато они весьма солидные — в общем тут, скорее не технические трудности, а, скажем так, «юридические». Но технические трудности я бы тоже списывать не стал.Но, от DB2 1С рано или поздно откажется!
Хе, возможно, даже, когда-нибудь заключат партнёрское соглашение с компанией Posgress Professional и будут поддерживать только СУБД линейки Posgress Pro (Standart (будут поставлять вместе с платформой) и Enterprise (будет продаваться через магазин 1С со скидкой, особенно с хорошей скидкой в бандлах с платформой, а сама 1С будет иметь большую маржу от таких продаж) — для лицензий 1С ПРОФ (другие СУБД — только по лицензии КОРП) — хотя, это, конечно, мало вероятно, ведь это будет мешать продвижению на иностранным рынках.
(61)Это не причём. Не будь монополии — это разделение могло бы случиться ещё раньше. Ну или КОРП вообще не появился бы ни как отдельная лицензия ни как более продвинутый функционал!
Хотя монополия — это не совсем хороший термин — скорее доминирование при наличии слабой конкуренции — ведь продукты 1С никто не заставляет ставить, они нигде не требуются для ведения бизнеса.
Просто в стране так сложилось, что конкурирующим продуктам не удалось так эффективно развиться. Это их проблемы. Им никто не мешал, и особых условий компании 1С не создавал. Но сейчас да — конкурировать с продуктами фирмы 1С в России очень сложно — у 1С существенные преимущества, которые они в стране себе создавали десятилетия.
(66) Согласен. Но все же отсутствие конкуренции это не хорошо.
Время покажет)
(28) В 1С отправил?
(68) Нет, на testplatform@1c.ru отклонили, так как версия не тестовая, а для v8@1c.ru у меня нет подписки ИТС.
(28) Попробовал на 8.3.13.1801. Не воспроизвелось. На 8.3.14.1592 воспроизвелось. В 1С отправил.
Ну из моего опыта проблемы я испытываю следующие при обновлении релиза (УПП обычные формы).
1. На версиях 8.3.10.Х — слетают привязки с форм при нестандартном DPI, абсолютно на всех существующих релизах.
2. На версиях 8.3.11.Х — проблемы с электронной почтой при использовании метода ПолучитьЗаголовки. Крашится клиент, аналогично были протестированы абсолютно все релизы, причем крашится оно только при использовании экча, на других почтовых серверах не крашится.
3. На версиях 8.3.12.Х, 8.3.13.Х:
— Были некоторые проблемы с SSL сертификатами, вопрос решился немного переписанием кода.
— У нас есть некий функционал под названием «Карта клиента», обычная форма с размещенным табличным полем в которой забита номенклатура и количество которое клиент хочет заказать. Операторы колл — центра привыкли очень быстро забивать номенклатурные позиции.
Для примера:
Поведение на 8.3.9.Х пользователь быстро жмет кнопки 1 + Enter + вниз:
Номенклатура А — 1
Номенклатура Б — 1
Номенклатура В — 1
Номенклатура Г — 1
Номенклатура Д — 1
Поведение на 8.3.12.Х и 8.3.13.Х пользователь быстро жмет кнопки 1 + Enter + вниз:
Номенклатура А — 1
Номенклатура Б — 0 (строка проскакивается)
Номенклатура В — 0 (строка проскакивается)
Номенклатура Г — 0 (строка проскакивается)
Номенклатура Д — 4 (все что проскачило, схлопнулось в конце).
Может быть на 8.3.14 поведение изменится. Когда прижмет обновлять платформу, проверю )
(71) спасибо за хороший список.
С обычными формами давно не работаю плотно, но похоже их поддерживать становится все интереснее 🙂
(64) Почему-то есть ощущение что ошибки платформы по обычным формам уже не интересны разработчику…
(73) Ну он их туда активно добавляет. Привнесенные ошибки исправляются без трений. Старые ошибки в обычных формах исправляются только критического плана. Прикольчик вполне может тянуть на критическую.
(25) у меня было на одном сервере так, при первом динамическом обновлении код сохранялся, при дальнейших нет, хотя под сеансом из которого все далаю вижу код есть, но на сервере проскакивает
Сейчас обнаружил, что функция запроса ДАТАВРЕМЯ() не принимает в качестве параметров ничего, кроме явно указанных чисел. Т.е. ДАТАВРЕМЯ(2019, 2, 26) работает, а ДАТАВРЕМЯ(ГОД(&ТекущаяДата), 2, 26) — нет. Вывернулся через НАЧАЛОПЕРИОДА и ДОБАВИТЬКДАТЕ.
Подозреваю, что объяснение простое: функция ГОД (как и МЕСЯЦ, ДЕНЬ) возвращает смешанный тип число+NULL
(76) да, это давно уже стало фичей для меня))) Хотя очень непривычно.
Я некоторое время назад заметил, что в работе совершенно обычных форм в толстом клиенте обычного приложения появилась эдакая частичная асинхронность. Теперь можно, запустив нечто с формы (в т.ч. совсем-совсем клиентское, или напротив, люто серверное) взять, да переключиться с этой формы, или поиграть с ней, или запустить это нечто ещё эн раз, или закрыть форму. При закрытии, чсх, запущенный процесс живёт и отлаживается. Степень этой асинхронной свободы «гуляет» от релиза к релизу.
(2) Поэтому «Стандарты разработки» рекомендуют условное оформление реализовывать в коде.https://its.1c.ru/db/v8std#content:2149184359:hdoc см. п. 2.1
Цитата, на случай, если нет доступа к ИТС.
«2.1. Настройку условного оформления форм и динамических списков рекомендуется делать в коде формы. Такой подход имеет ряд преимуществ перед заданием настроек условного оформления в свойствах формы:
настройки однотипного условного оформления можно вынести в общие модули. Например, есть 80 форм, имеющих условное оформление:
«если НЕ ХарактеристикиИспользуются, то в поле «Характеристика» вывести текст <характеристики не используются>»,
то можно вынести эту настройку в код процедуры общего модуля;
при объединении конфигураций есть возможность объединять условное оформление (особенно это актуально при разветвленной разработке конфигураций);
при изменении в метаданных (например, переименовании значения перечисления) условное оформление может перестать работать. Если условное оформление настраивается в коде конфигурации, то при синтаксическом контроле модулей эта ошибка будет выявлена. Так ошибки в настройках условного оформления будут выявляться средствами автоматизированной проверки (например, АПК), т.к. будет диагностироваться ошибка при попытке получения формы.»
(79) спасибо. У меня доступ к ИТС есть, но другим будет полезно.
(6) Все читают советы от 1С как нужно костылить, но никто не доходит до первоисточника и не понимают почему все так странно работаетhttps://docs.microsoft.com/ru-ru/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-2017
https://habr.com/ru/post/205938/
Тут простое и наглядное объяснение
К слову, в документации по PG такой информации нету. Если кто найдет — киньте ссылкой. Есть подозрение, что методика — чистая математика, т.е. одинаковая для всех СУБД. Разница может быть лишь в максимальной длине.
(81)
Спасибо за отличный комментарий и ссылки.
Все правильно говорите, сейчас это фича, а не баг.
А раньше это все же был баг. Если есть версии 8.3.6 в доступе от конца 2015 года, то можете проверить — ранее округлялось на до 37 цифр в дробной части, а до 8. Это было весело 🙂
(82) в доступе есть все версии.
Раскурил эту тему ещё на 8.2
Собственно к 1с это не имеет практически никакого отношения.
Единственное отличие было в 8.3.12.1412, когда разработчики платформы допустили ошибку, которая вызвала переполнение разрядности cast.
Если знаете ещё изменения — приведите пример (только не в виде результата, а в виде самих запросов)
(83)
Будет время — поставлю старую версию платформы и прогуляюсь в Profiler 🙂
(76) ДатаВремя() — литерал функционального типа, т.е. внутри него не поддерживается вычисление выражений, а допустимы строго заданные значения. Другие подобные литералы языка запросов: ЗНАЧЕНИЕ(), ТИП(). Кстати в консоли запросов ИР по нажатию CTRL+F1 на любой функции выдается контекстная справка, где можно узнать в частности и том, является ли функция литералом.
(78) Не замечал такого. Можешь сделать пример для воспроизведения?
(85) Все еще проще, чем я предположил )))
Достаточно интересная статья.