Баг или фича? Неожиданное поведение платформы

18.02.19

Разработка - Механизмы платформы 1С

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?]
Баг или фича? Неожиданное поведение платформы:
.cf 50,97Kb
29
29 Скачать бесплатно

Баг или фича?

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

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

По каждому примеру Вам и только Вам решать баг это или фича.

Сталкивались с другими странностями или есть что сказать по текущему материалу? Добро пожаловать в комментарии!

Отличная математика

Начнем с простого случая - округлением дробных чисел при работе с ними во временных таблицах. Звучит странно. Меньше слов - больше кода!

	Число1 = 0.000102410434234235348573456378465353465;
	Число2 = 0.564004435745654732352330006506040060406;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	&Число1 КАК Число1,
		|	&Число2 КАК Число2
		|ПОМЕСТИТЬ ВТ
		|;
		|
		|ВЫБРАТЬ
		|	ВТ.Число1 КАК Число1,
		|	ВТ.Число2 КАК Число2
		|ИЗ
		|	ВТ КАК ВТ";	
	Запрос.УстановитьПараметр("Число1", Число1);
	Запрос.УстановитьПараметр("Число2", Число2);	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	
	Число1Корректное = Выборка.Число1 = Число1;
	Сообщить("Проверка числа 1: " + Число1Корректное);
	Число2Корректное = Выборка.Число2 = Число2;
	Сообщить("Проверка числа 2: " + Число2Корректное);

Как думаете, какой результат мы получим? Хотя что спрашивать, если бы числа после передачи их в запрос не изменились бы, то в примеры бы это не попало. В обоих случаях результат проверки будет отрицательным. Так происходит потому что при создании временных таблиц платформа (Внимание!) почти всегда создает числовое поле с типом "NUMERIC(37, 37)" для чисел. Вот так это выглядит на стороне SQL-сервера.

CREATE TABLE #tt1 (
	_Q_000_F_000 NUMERIC(37, 37), 
	_Q_000_F_001 NUMERIC(37, 37)
)

INSERT INTO #tt1 WITH(TABLOCK) 
	(_Q_000_F_000, _Q_000_F_001) 
SELECT
	0.0001024104342342353485734563784653534,
	0.5640044357456547323523300065060400604
;

SELECT 
	T1._Q_000_F_000, 
	T1._Q_000_F_001 
FROM #tt1 T1 WITH(NOLOCK)

Это математикаВ нашем случае количество цифр в дробной части - 39, то есть число "обрезается" до 37 цифр в дробной части. В более ранних версиях платформы, например 8.3.6, количество цифр в дробной части было вообще 8 и можно было очень долго разбираться, почему запрос отрабатывает не так как надо. Подобное поведение также замечено и в файловом режиме работы. На PostgreSQL не пробовал.

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

Обходные решения тут также простые:

  1. Если нужна высокая точность в расчете, то эту бизнес-логику придется перенести на сторону платформы, а не использовать для этого сервер СУБД.
  2. Если задача позволяет, то можно попытаться перенести часть цифр из дробной части в целую, умножив к примеру на 100000.

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

Дата с миллисекундами

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

	ТекДата = ТекущаяДата();
	НачалоСледующегоМесяца = КонецМесяца(ТекДата) + 1;
	Сообщить("Начало следующего месяца: " + НачалоСледующегоМесяца);

Отлично, но что будет если мы прибавим дробное число к дате. Вот интересный пример.

	ДатаОбычная = Дата(2019,2,1);
	ДатаСтранная = ДатаОбычная + 0.001;
	СравнениеДат1 = ДатаСтранная = ДатаОбычная;
	Сообщить("Вариант с датами 1: " + СравнениеДат1);
	
	ДатаСтранная = ДатаСтранная - 0.001;
	СравнениеДат2 = ДатаСтранная = ДатаОбычная;
	Сообщить("Вариант с датами 2: " + СравнениеДат2);

В первом случае даты будут не равны, а во втором равны. То есть фактически даты в 1С поддерживают миллисекунды! Если оперировать не миллисекундами, а микросекундами, то мы сразу увидим, что даты их не поддерживают.

	ДатаОбычная = Дата(2019,2,1);
	ДатаСтранная = ДатаОбычная + 0.000001;
	СравнениеДат1 = ДатаСтранная = ДатаОбычная;
	Сообщить("Вариант с датами 1: " + СравнениеДат1);
	
	ДатаСтранная = ДатаСтранная - 0.000001;
	СравнениеДат2 = ДатаСтранная = ДатаОбычная;
	Сообщить("Вариант с датами 2: " + СравнениеДат2);	

В обоих случаях результат сравнения будет Истина.

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

Поэтому, берегите время. И будьте с ним осторожны!

P.S. Определить имеются ли в дате миллисекунды все же можно, но способ не очевидный. Можно из даты вычесть в точности такую же новую дату. Там можно получить дробное число, которое покажет наличие миллисекунд.

Регистр не имеет значения

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

Только представьте, служба безопасности требует по регламенту установки сложных паролей вида "aQfxFA352Ga", а по факту регистр букв в нем не будет иметь значение. Пароль "1ABC" эквивалентен паролям "1AbC", "1abc" и т.д.

На Инфостарте об этом уже ни раз говорилось:

Исправить эту ситуацию просто, нужно лишь поставить проверку сложности паролей через конфигуратор: "Администрирование" -> "Параметры информационной базы" ->  "Проверка сложности паролей пользователей". В этом случае будет задействована регистрозависимая проверка паролей.

Невидимая команда

Еще одно очень интересное поведение платформы - это выполнение глобальной команды без параметров, даже если связанный с ней элемент формы невидим. На Инфостарте его уже даже использовали, причем очень полезным способом. В статье "Открывашка ячеек таблиц" Сергей Старых использует это поведение для открытия значений в любых таблицах, ну или почти.

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

Демонстрацию такой возможности Вы можете посмотреть в публикации "Открывашка ячеек таблиц", либо в прикрепленной к статье конфигурации со всеми примерами из статьи.

Рекурсивный беспредел

Еще одна особенность - это контроль рекурсивного вызова процедур и функций. Например, попытайтесь выполнить такой код на сервере.

&НаКлиенте
Процедура НачатьРекурсиюНаСервере(Команда)
	
	// Вызываем сервер
	НачатьРекурсиюНаСервереНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура НачатьРекурсиюНаСервереНаСервере()
	
	// И начинаем рекурсию
	НачатьРекурсиюНаСервереНаСервере();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НачатьРекурсию(Команда)
	
	// Точка входа в рекунсию
	НачатьРекурсиюНаКлиенте();
	
КонецПроцедуры

&НаКлиенте
Процедура НачатьРекурсиюНаКлиенте()
	
	// И продолжаем вызов, еще и еще
	НачатьРекурсиюНаКлиенте();
	
КонецПроцедуры

То получите аварийное завершение работы клиентского приложения без объяснения причины.

Не берусь судить нормально ли это, но было бы удобнее получить более внятную информацию.

P.S. В технологическом журнале можно найти более подробную информацию, но это не всегда можно сделать быстро на клиентских машинах.

Внезапная пропажа колонок

Занимательная ситуация - Вы обновляете модифицированную конфигурацию, все прошло хорошо. На Ваш взгляд ошибок быть не может, конфигурацию знаете как свои пять пальцев, а релиз от поставщика изменил всего несколько объектов в базе и они никак не связаны с доработками. Применяете изменения и идете спать (ну, базу же обновляют обычно в нерабочее время).

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

После более подробного анализа выяснилось следующее:

  • В документе была выведена колонка "Артикул" от другого реквизита "Объект" по ссылке, как это возможно сделать в управляемой форме.
  • До обновления тип реквизита "Объект" был "СправочникСсылка.Номенклатура".
  • После обновления тип стал составным, т.к. к нему добавился тип "СправочникСсылка.ГруппаНоменклатуры".

И вот в этом то и проблема, что от составных типов данных вывод реквизитов через ссылку недоступен. Причем сравнение в конфигураторе такое не покажет, т.к. этот объект вообще может быть без изменений, а если открыть форму в конфигураторе, то тоже не сразу будет заметно, что эта колонка уже не рабочая. Среди элементов формы она присутствует, и идентифицировать ошибку можно только посмотреть ее свойства - там не будет связи с данными.

Но кто будет проверять все колонки вручную, да еще и в не измененных при обновлении объектах. И вот приходится искать альтернативные решения, делать костыли, ведь пропавшая колонка так важна...

Индексированный ад

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

Во многих конфигурациях есть справочник "Контрагенты" и подчиненный владельцу "ДоговорыКонтрагентов". У обоих справочников включена иерархия. Проблема заключается в том, что при такой комбинации настроек платформа создает множество избыточных индексов. Далее пример.

Справочник "ДоговорыКонтрагентов" подчиненный справочнику "Контрагенты", имеет множество реквизитов, 4 из которых проиндексированы:

  1. Организация - индексирован с доп. упорядочиванием для списков.
  2. ДатаНачалаДействия - индексирован
  3. ДатаОкончанияДействия - индексирован
  4. Менеджер - индексирован с доп. упорядочиванием для списков.

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

Имя индекса Состав полей
_Reference27_ByPredefinedIDNotUniq ИмяПредопределенныхДанных
_Reference27_OwnerCode Владелец + Код + Ссылка
_Reference27_OwnerDescr Владелец + Наименование + Ссылка
_Reference27_ParentCode Родитель + ЭтоГруппа + Код + Ссылка + Владелец
_Reference27_ParentDescr Родитель + Владелец + ЭтоГруппа + Наименование + Ссылка
_Reference27_Code Код + Ссылка
_Reference27_Descr Наименование + Ссылка
_Reference27_ByOwnerFieldFld28 Владелец + Организация + Наименование + Ссылка + ПометкаУдаления + Менеджер
_Reference27_ByParentFieldFld28 Владелец + Родитель + ЭтоГруппа + Организация + Наименование + Ссылка + ПометкаУдаления + Менеджер
_Reference27_ByFieldFld28 Организация + Наименование + Ссылка + ПометкаУдаления + Менеджер
_Reference27_ByOwnerFieldFld55 Владелец + ДатаНачалаДействия + Ссылка
_Reference27_ByParentFieldFld55 Владелец + Родитель + ЭтоГруппа + ДатаНачалаДействия + Ссылка
_Reference27_ByFieldFld55 ДатаНачалаДействия + Ссылка
_Reference27_ByOwnerFieldFld56 Владелец + ДатаОкончанияДействия + Ссылка
_Reference27_ByParentFieldFld56 Владелец + Родитель + ЭтоГруппа + ДатаОкончанияДействия + Ссылка
_Reference27_ByFieldFld56 ДатаОкончанияДействия + Ссылка
_Reference27_ByOwnerFieldFld57 Владелец + Менеджер + Наименование + Ссылка + ПометкаУдаления + Организация
_Reference27_ByParentFieldFld57 Владелец + Родитель + ЭтоГруппа + Менеджер + Наименование + Ссылка + ПометкаУдаления + Организация
_Reference27_ByFieldFld57 Менеджер + Наименование + Ссылка + ПометкаУдаления + Организация
PK___Referen__AC8ED0C46C28FEE5 Ссылка

Вот тут то и начинается самое интересное. Индексы очень тяжелые, а большинство из них избыточно. Например, индексы "_Reference27_ByOwnerFieldFld28", "_Reference27_ByParentFieldFld28" избыточны. В большинстве случаев достаточно индекса только по полю "Владелец", которое ускорит поиск договоров по конкретному контрагенту. Конечно, бывает у одно контрагента огромное количество договоров, но это отдельная ситуация.  То же самое можно сказать про индексы "_Reference27_ByOwnerFieldFld56", "_Reference27_ByParentFieldFld56" и некоторых других. Все усугубляется еще и тем, что поля с индексированием с доп. упорядочиванием добавляются в другие индексы, что во многих случаях тоже избыточно. В идеале было бы не плохо иметь возможность настраивать необходимость индексов для таких ситуаций, но пока эта возможность отсутствует.

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

Есть случаи, когда на проектах приходилось либо удалять избыточные индексы бессовестным нерекомендуемым фирмой "1С" способом через SQL, чтобы производительность работы со справочником находилась на приемлемом уровне. Вы можете также взглянуть на современные конфигурации, например ERP - справочник "ДоговорыКонтрагентов" больше не подчинен справочнику "Контрагенты" через владельца, вместо этого в справочнике есть реквизит "Контрагент" с ссылкой на владельца. Иерархия у справочника также отключена.

NULL или Неопределено или ПустаяСсылка

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

Вот немного информации:

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

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

Процедура ПривестиПустыеЗначенияСубконтоСоставногоТипа(Проводки)
	
	КэшВидыСоставныхСубконто = Новый Соответствие;
	
	Для Каждого Проводка Из Проводки Цикл
		
		Для Каждого Субконто Из Проводка.СубконтоДт Цикл
			
			Если НЕ ЗначениеЗаполнено(Субконто.Значение) 
				И Субконто.Значение <> Неопределено 
				И СоставнойТипСубконто(Субконто.Ключ, КэшВидыСоставныхСубконто) Тогда
				Проводка.СубконтоДт.Вставить(Субконто.Ключ, Неопределено);
			КонецЕсли;
			
		КонецЦикла;
		
		Для Каждого Субконто Из Проводка.СубконтоКт Цикл
			
			Если НЕ ЗначениеЗаполнено(Субконто.Значение) 
				И Субконто.Значение <> Неопределено 
				И СоставнойТипСубконто(Субконто.Ключ, КэшВидыСоставныхСубконто) Тогда
				Проводка.СубконтоКт.Вставить(Субконто.Ключ, Неопределено);
			КонецЕсли;
			
		КонецЦикла;
				
	КонецЦикла;
	
КонецПроцедуры

Все пустые значения приводятся к Неопределено. Поэтому если Вы не записываете набор в режиме "ОбменДанными.Загрузка", то ошибиться теперь в аналитике будет сложнее. С другой стороны есть еще обмены данными, которые до сих пор создают очень интересные ошибки при заполнении субконто. А про кастомные обработки с инфостарта вообще молчу :)

Что касается значения NULL - то это интересный случай, когда у счетов "на лету" меняют состав субконто. Например, добавляя субконто к счету, по которому учет ведется уже много лет, платформа заполняет значение этого субконто для проводок прошлых периодов значением NULL. Это нужно учитывать при проведении таких опасных операций.

Баланс не сходится

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

Это норма

На этом все. Многие подобные пасхалки давно известны сообществу, а многие и вовсе задокументированы на ИТС. Но если баг / фича задокументированы, это не значит что они перестали ими быть.

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

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

Есть что добавить? Отлично! Пишите в комментариях. Чем больше пасхалок, тем интересней!

P.S. К публикации прикреплена простая конфигурация с примерами из статьи.

платформа баг фича неожиданное поведение ошибка

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    5927    bayselonarrend    19    

151

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5256    dsdred    16    

79

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    14248    YA_418728146    26    

71

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    10324    dsdred    44    

127

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    22646    SeiOkami    46    

133

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    17344    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    13426    YA_418728146    7    

165
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. comol 5074 18.02.19 02:35 Сейчас в теме
Зачотная статья. Must read. Автору респект. Некоторые "особенности" стали новостью. Тема с датами просто феерична :)
dolkin; user1878860; bondaleksey; Nowa; trickster; for_questions; gigapevt; Sergynia; user774630; Devi; WellMaster; Famza; NeviD; h00k; lefthander; tsukanov; bulpi; *Stellar; Aggressorak; Natain14; nbondarenko; axelerleo; Shmell; wowik; CyberCerber; Dach; frkbvfnjh; link_l; user700035_6550355; YPermitin; Артано; +31 Ответить
4. пользователь 18.02.19 06:19
2. Dementor 1032 18.02.19 03:02 Сейчас в теме
Спасибо, интересная подборка.

Из похожего могу только вспомнить падение тонкого клиента при открытии формы с условным оформлением, где используются переименованные/удаленные реквизиты. Уже прямо условный рефлекс - каждый раз когда мне говорят про падение при заходе лишь на определенную форму, которую не "лечит" чистка кеша (передобавление базы), то уже каждый раз сразу проверяю именно условное оформления самой формы и ее динамических списков.
user774630; Астиг; serg_gres; Boulala; RustIG; +5 Ответить
5. пользователь 18.02.19 06:20
(2) интересно, надо попробовать воспроизвести.
79. Бубузяка 62 27.02.19 09:24 Сейчас в теме
(2) Поэтому "Стандарты разработки" рекомендуют условное оформление реализовывать в коде.https://its.1c.ru/db/v8std#content:2149184359:hdoc см. п. 2.1
Цитата, на случай, если нет доступа к ИТС.

"2.1. Настройку условного оформления форм и динамических списков рекомендуется делать в коде формы. Такой подход имеет ряд преимуществ перед заданием настроек условного оформления в свойствах формы:

настройки однотипного условного оформления можно вынести в общие модули. Например, есть 80 форм, имеющих условное оформление:
"если НЕ ХарактеристикиИспользуются, то в поле "Характеристика" вывести текст <характеристики не используются>",
то можно вынести эту настройку в код процедуры общего модуля;
при объединении конфигураций есть возможность объединять условное оформление (особенно это актуально при разветвленной разработке конфигураций);
при изменении в метаданных (например, переименовании значения перечисления) условное оформление может перестать работать. Если условное оформление настраивается в коде конфигурации, то при синтаксическом контроле модулей эта ошибка будет выявлена. Так ошибки в настройках условного оформления будут выявляться средствами автоматизированной проверки (например, АПК), т.к. будет диагностироваться ошибка при попытке получения формы."
80. Dementor 1032 28.02.19 00:13 Сейчас в теме
(79) спасибо. У меня доступ к ИТС есть, но другим будет полезно.
3. TrinitronOTV 16 18.02.19 05:32 Сейчас в теме
Спасибо, весьма познавательно было
YPermitin; +1 Ответить
6. Casey1984 3 18.02.19 06:39 Сейчас в теме
Про точность чисел в запросе: это не баг это фича ;-) Косвенно тут https://its.1c.ru/db/metod8dev#content:2665:hdoc и тут https://its.1c.ru/db/v8std#content:2149184184:hdoc
YPermitin; Бубузяка; Shaldryn; RustIG; +4 Ответить
81. nvv1970 03.03.19 00:55 Сейчас в теме
(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 такой информации нету. Если кто найдет - киньте ссылкой. Есть подозрение, что методика - чистая математика, т.е. одинаковая для всех СУБД. Разница может быть лишь в максимальной длине.
ghostaz; YPermitin; +2 Ответить
82. пользователь 03.03.19 08:04
(81)
Все читают советы от 1С


Спасибо за отличный комментарий и ссылки.
Все правильно говорите, сейчас это фича, а не баг.

А раньше это все же был баг. Если есть версии 8.3.6 в доступе от конца 2015 года, то можете проверить - ранее округлялось на до 37 цифр в дробной части, а до 8. Это было весело :)
83. nvv1970 03.03.19 11:51 Сейчас в теме
(82) в доступе есть все версии.
Раскурил эту тему ещё на 8.2
Собственно к 1с это не имеет практически никакого отношения.
Единственное отличие было в 8.3.12.1412, когда разработчики платформы допустили ошибку, которая вызвала переполнение разрядности cast.
Если знаете ещё изменения - приведите пример (только не в виде результата, а в виде самих запросов)
84. пользователь 03.03.19 11:53
(83)
Если знаете ещё изменения - приведите пример

Будет время - поставлю старую версию платформы и прогуляюсь в Profiler :)
7. Casey1984 3 18.02.19 06:45 Сейчас в теме
Про отсутствие субконто: такая же фигня бывает если при переносе данных с использованием КД 2 не все субконто передать.
acanta; RustIG; YPermitin; +3 Ответить
8. пользователь 18.02.19 07:30
(7) да, с обменами очень интересное происходит.

В том числе и с типовыми :)
9. Dach 380 18.02.19 08:38 Сейчас в теме
В копилку:

А) Выполнение вот такого запроса:

ВЫБРАТЬ
	ТЗ.Номенклатура КАК Номенклатура,
	Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры
ПОМЕСТИТЬ ВТ
ИЗ
	&ТЗ КАК ТЗ
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
		ПО ТЗ.Номенклатура = Номенклатура.Ссылка


вызовет вполне ожидаемую ошибку, так как явный джойн к ТЗ, передаваемой в ВТ - запрещен

Б) А выполнение вот такого запроса:

ВЫБРАТЬ
	ТЗ.Номенклатура КАК Номенклатура,
	ВЫРАЗИТЬ(ТЗ.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры КАК ВидНоменклатуры
ПОМЕСТИТЬ ВТ
ИЗ
	&ТЗ КАК ТЗ


никаких ошибок при выполнении не вызовет, но в поле ВидНоменклатуры платформа вернет "битую" ссылку вида "объект не найден", так как джойна к физической таблице справочника "Номенклатура" по прежнему не будет.
AlisultanovZakir; klinval; user774630; sevushka; Devi; IgorS; A_Max; tsukanov; bulpi; comol; Shmell; Boulala; YPermitin; +13 Ответить
10. пользователь 18.02.19 08:43
(9) интересные фичи! Спасибо.
11. Dach 380 18.02.19 09:03 Сейчас в теме
(10) вот еще прикольчик:

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

Связь между списками организована так:

ЭлементыФормы.ДокументСписок.ТекущиеДанные.Товары

где ДокументСписок - наш верхний список
то есть, указанная строка связи прописана у нижнего списка в поле "Данные"

Так вот, казалось бы - все хорошо, все работает и все сделано штатным способом.

Но! Как только пользователь откроет такую форму и начнет в ней искать поиском по строке (не отбором, а именно поиском, что юзеры очень любят делать на обычных формах) или к примеру попробует такой список отсортировать по возрастанию по колонке "Номер" - что произойдет? Сеанс клиента начнет дичайшим образом тормозить. На СУБД возникает нагрузка. Фактически запросы в цикле - по каждой строке документа начинается получение табличной части. То есть то, что должно выполняться только при активации строки - выполняется не только лишь при ней, а мало когда (ВСЕГДА) вообще ))))

Далее клиентский сеанс зависает, пользователь завершает его через диспетчер. Но, в консоли он по прежнему висит и даже если там его "убить" - соединение остается. И что самое "прикольное" - растет папка temp на сервере приложений, связанная с учетной записью службы. В ней появляется файл v8_blablabla.tmp, который растет примерно на 25-30 Мб в секунду. Причем, сколько сеансов "положили" таким образом форму - столько и будет файлов. Читать и копировать файл нельзя, так как его держит рпхост. Пока руками не убить этот рпхост, на котором был проблемный сеанс - файл не исчезнет.
user1878860; AlisultanovZakir; Nelli_A86; ansonat; gigapevt; cj512; Amara; sevushka; Devi; DeD MustDie; WellMaster; Famza; PLAstic; serg_gres; tsukanov; bulpi; comol; Aggressorak; Boulala; Shmell; ixijixi; YPermitin; +22 Ответить
12. пользователь 18.02.19 09:06
(11) Парам парам пам, тунц!

Это прямо невообразимо :)
Прикрепленные файлы:
13. Dach 380 18.02.19 09:10 Сейчас в теме
(12) не представляете, какое масштабное расследование пришлось провести, чтобы это все выяснить. Увидеть гигантский файл, найти рпхост, который пишет в этот файл. Посмотреть сеансы, которые на этом рпхост, примерно прикинуть - чей же сеанс мог вызывать такое поведение (причем, кстати, сам рпхост память не расходовал). Найти этот сеанс, позвонить юзеру с вопросами "что же ты там делаешь, мил человек", юзер говорит "да ничего такого, сижу работаю, документы смотрю, кнопки жму".... Ну и т.д. Почти 2 недели разбирались...

Так что, может кому пригодится )))
ЧерныйКот; h00k; for-elenak; YPermitin; +4 Ответить
14. пользователь 18.02.19 09:15
(13) что-то подобное было в практике. Пользователи иногда запускали тяжелый отчет и...забывпли указывать отборы адекватные.

В итоге увеличивался размер сеансовых данных в каталоге сервера "sncctx*" до 100 ГБ и выше.

В итоге с помощью ТЖ и мониторинга удалось выяснить виновника и добавить защиту.

Но изначально проблема звучала как "Закончилось место на диске".
17. RustIG 1728 18.02.19 09:50 Сейчас в теме
(11) специально для проверки создал видео - включил в свою публикацию - https://infostart.ru/public/933060/
база файловая - работа со списком происходит быстро и без ошибок
конечно, сталкивался с тем, что в при использовании remote app 1с - переставали работать разделители на форме - форма открывалась криво - приходилось убирать разделители вовсе; при работе в локальной сети в файловой базе, начиная с 5 человек начинаются еле заметные подвисания формы списка (несущественные), при увеличении кол-ва пользователей одновременной работы с реализациями - форма подтормаживает - но это известная проблема блокировок файловой базы - решения есть - переходить на терминальный сервер или СУБД.
18. пользователь 18.02.19 09:52
(17)
файловая - работа со списком происходит быстро и без ошибок


Может тут комбинация - поведение платформы + код в обработчиках. Но это не точно.
19. Dach 380 18.02.19 10:01 Сейчас в теме
(18)

Нет-нет, друзья. Никакого кода, никаких обработчиков. Дело именно в ЭлементыФормы.ДокументСписок.ТекущиеДанные.Товары

Еще раз: база в клиент-серверном режиме, количество документов - более 200 тыс. Открывается форма, без отборов и без ограничения по периоду, пользователь сортирует по номеру. Спустя 20 минут появляется файл в папке temp, растет очень быстро. На субд бесконечные запросы вида: "select ... from VTTabDoc where id_ref = &id_ref"

Так что, вполне вероятно, на маленькой базе, да еще и в файловом режиме такое не проявится никогда
20. пользователь 18.02.19 10:04
64. tormozit 7218 20.02.19 10:55 Сейчас в теме
"Прикольчик" отправлен в 1С?
73. СергейК 51 24.02.19 08:49 Сейчас в теме
(64) Почему-то есть ощущение что ошибки платформы по обычным формам уже не интересны разработчику...
74. tormozit 7218 24.02.19 09:10 Сейчас в теме
(73) Ну он их туда активно добавляет. Привнесенные ошибки исправляются без трений. Старые ошибки в обычных формах исправляются только критического плана. Прикольчик вполне может тянуть на критическую.
15. ixijixi 1904 18.02.19 09:37 Сейчас в теме
Изредка при отладке по шагам видно, что выполняется какой-то другой код. Ну то есть отладка шагает по модулю, но как-то странно, рывками и скачками, и вычисление переменных результата не дает (переменная не определена). Так вот - это выполняется код из кэша. Базу обновили, а программный кэш остался старый. Пару раз сталкивался, и по-моему это ни фига не фича.
AlisultanovZakir; Nelli_A86; mai_k; dabu-dabu; kuzyara; serg_gres; bulpi; SerVer1C; Darklight; Boulala; Teut_Vlad; RustIG; YPermitin; +13 Ответить
16. пользователь 18.02.19 09:38
(15) спасибо.

Да тоже сталкивался в разных вариациях. Иногда было очень больно :)
44. lunjio 67 18.02.19 18:29 Сейчас в теме
(15)
Пару раз сталкивался, и по-моему это ни фига не фича.

Стабильно раз в 3 - 4 месяца прослеживается, если кэш не чистить и производить динамические обновления или работать во время динамики, иногда раз в пол года, как попался один раз так, при обновлении конфигурации один модуль подтянулся старый, после каждые 2-3 ручками чистю кэш, уже на привычке. Причем разнобразные встречал вариации, иногда у пользователя вообще фигню всякую и ошибки выдает, а самое опасное это когда что-то у кого-то старое и ты даже об этом не знаешь ) Для этого есть всякие чистилки кэша при входе в домен и т.п.
TerveRus; +1 Ответить
21. oleg-x 22 18.02.19 10:41 Сейчас в теме
Было два случая в практике, иначе как магия не назвать.
1)Связан с кэшем и суть такова, можно написать какой то код. Вроде все работает. А через какое то время открываешь конфигуратор а там, как будто ничего не изменено. При то что, можно вносить изменения несколько раз, а там чистота. Может отрабатывать старый код, а может новый. Помогает либо просто закрыть конфигуратор и открыть, либо чистка кэша.
2) Более интересный случай, не встречал на просторах интернета такого. Суть такова, добавляется в конфигуратор реквизит, все хорошо, работаем и база заполняется. Но через какое то время, раз и нет этого реквизита и кода, который его заполняет. Хотя он был и через клиентское приложение видно было. Такая ситуация повторилась 2-3 раза, во всех случаях общее одно, пропадали куски кода и реквизиты, которые недавно добавили. Чистка кэша пользователя, перезагрузки сервера и прочее не помогало. Но подсказали про такую вещь как кэш сервера 1С, опять же, поиском такую информацию не найти было тогда, подсказали ссылку, но в итоге после чистки, все стало хорошо, магия пропала.
Nelli_A86; serg_gres; YPermitin; acanta; +4 Ответить
23. пользователь 18.02.19 10:51
(21) подтверждаю. Такая магия тоже была, помогла очистка сеансовых данных на сервере, которые еще называют кэшем.
25. AlexZhukov 18.02.19 11:10 Сейчас в теме
(21)
1 пункт бывает часто при динамическом обновлении конфигурации.
Если сначала вносишь изменения после этого динамическое обновление, после этого опять вносишь изменения, код который был в первом динамическом обновлении пропадает. Если перезайти в конфигуратор после динамического обновления то все ок.
26. oleg-x 22 18.02.19 11:22 Сейчас в теме
(25) В данном случае там не только динамическое обновление, так как делалось это на тестовой базе (клиент-сервер), в которой всего один пользователь работал и ни каких динамических обновлений не делалось.
75. artfa 58 25.02.19 04:54 Сейчас в теме
(25) у меня было на одном сервере так, при первом динамическом обновлении код сохранялся, при дальнейших нет, хотя под сеансом из которого все далаю вижу код есть, но на сервере проскакивает
22. SerVer1C 794 18.02.19 10:42 Сейчас в теме
С миллисекундами в датах столкнулся, когда записывал данные через ADO в скуль. Могу ошибаться, но раньше дата хранилась в MS SQL как тип datetime, где возможно было указывать миллисекунды, а с какой-то версии платформы дата стала храниться как datetime2(0), и тут уже дробные части секунды невозможно указать.
YPermitin; acanta; +2 Ответить
24. Darklight 32 18.02.19 10:56 Сейчас в теме
Считается фичей следующая проблема (но она нигде не документирована):
Алгоритмы, размещённые Клиентском глобальный общем модуле - не видят алгоритмы, размещённые в модуле приложения (соотвествуюещего клиентского контекста: обычный/управляемый/внешнее соединение).
То есть, например, из глобального общего модуля с флагом "Клиент (управляемое приложение)" нельзя обратиться к экспортным функция и переменным "Модуля управляемого приложения" - будет ошибка на стадии сохранения/проверки синтаксиса (для модулей внешнего соединения - будет ошибка на стадии создания подключения) - что, не вижу данных элементов, к которым идёт обращение. Если проигнорировать ошибку проверки конфигурации - то она всё-равно выскачет в runtime - при компиляции такого общего модуля.

Но!

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

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

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

Обошёл выносом алгоритма обработчика ожидания в клиентский неглобальный общий модуль - в глобальном оставил только переадресацию вызова на неглобальный общий модуль.

В модуле приложения обработчик не стал размещать, чтобы не вносить в него изменения - ведь такой модуль только один, свой такой сделать, увы, нельзя!
AlisultanovZakir; bulpi; YPermitin; +3 Ответить
29. пользователь 18.02.19 12:07
(24)
но из-за того, что глобальные модули компилируются и инициализируются раньше, чем модули приложений, и поэтому, из ни


Очень интересно. На практике не сталкивался, но объяснение выглядит логичным.
27. oleg-x 22 18.02.19 11:31 Сейчас в теме
Кстати, такие траблы не только с конифгурацие были, но и с внешними обработками в процессе разработки. Приходилось её закрывать, конфигуратор закрывать и заного все открывать.
AlexandrN; YPermitin; +2 Ответить
28. SlavaKron 18.02.19 11:44 Сейчас в теме
Платформа 8.3.14.1565. Управляемые формы.
На основной форме внешней обработки при нажатии кнопки выбора поля ввода программно вызывается другая форма, подчинённая этому полю.
В открывшейся форме выбираем (двойным кликом) строку дерева значений. В событии «Выбор» таблицы происходит оповещение владельца формы о выборе.
После выхода из события «Выбор» приложение закрывается с ошибкой.
Если выбор строки делать нажатием кнопки Enter, ошибка не происходит.
Прикрепленные файлы:
ВнешняяОбработка1.epf
TerveRus; YPermitin; +2 Ответить
30. пользователь 18.02.19 12:13
(28) Вы уже свежие версии платформы пробуйте? :)
41. SlavaKron 18.02.19 15:45 Сейчас в теме
(30) Да, было бы интересно узнать повторяется ли ошибка на 8.3.13.
68. tormozit 7218 20.02.19 12:56 Сейчас в теме
69. SlavaKron 20.02.19 14:10 Сейчас в теме
(68) Нет, на testplatform@1c.ru отклонили, так как версия не тестовая, а для v8@1c.ru у меня нет подписки ИТС.
70. tormozit 7218 23.02.19 13:06 Сейчас в теме
(28) Попробовал на 8.3.13.1801. Не воспроизвелось. На 8.3.14.1592 воспроизвелось. В 1С отправил.
31. пользователь 18.02.19 12:15
Вложение с примерами сделано бесплатным, стартмани для скачивания не нужны.
Если кому-нибудь нужно :)
32. Гость 18.02.19 13:19
(31) Как удалось сделать вложение бесплатным? Раньше интересовался в поддержке, сказали, что такое возможно только для платных публикаций.
34. ixijixi 1904 18.02.19 13:39 Сейчас в теме
(32) Надо к модератору обратиться
YPermitin; +1 Ответить
33. acanta 18.02.19 13:22 Сейчас в теме
Спасибо. Кто-нибудь сможет погонять эти примеры на постгри и файловых базах и отписаться о результатах.
37. пользователь 18.02.19 13:46
(33)
огонят


1. Отличная математика - актуально для файловых и клиент-серверных баз (смотрел только под SQL Server). Может на PostgreSQL что-то по другому.
2. Дата с миллисекундами - для всех баз и СУБД
3. Регистр не имеет значения - для всех баз и СУБД
4. Невидимая команда - для всех баз и СУБД
5. Рекурсивный беспредел - для всех баз и СУБД
6. Внезапная пропажа колонок - для всех баз и СУБД
7. Индексированный ад - для всех баз и СУБД
8. NULL или Неопределено или ПустаяСсылка - для всех баз и СУБД

Проверить все это дело еще и на Linux не предлагать :)
TerveRus; acanta; +2 Ответить
45. Octopus 338 19.02.19 08:18 Сейчас в теме
(37)
1. Отличная математика - актуально для файловых и клиент-серверных баз (смотрел только под SQL Server). Может на PostgreSQL что-то по другому.

На PostgreSQL 9.2.4 в точности такое же поведение. Те же 37 знаков
YPermitin; +1 Ответить
46. пользователь 19.02.19 09:10
(45)
Те же 37 з

Ок, спасибо за информацию.
35. UtSpar 136 18.02.19 13:42 Сейчас в теме
С миллисекундами столкнулись сами, подумали что какой то глюк платформы, не стали разбираться и переделали)
36. w.r. 650 18.02.19 13:44 Сейчас в теме
Ну а что поделаешь? Думаю, будут править. Хотя довольно сложно будет, учитывая 4 официально поддерживаемые СУБД (MS, PG, DB2 и Oracle), каждая из которых в отельных случаях ведет себя по своему
38. acanta 18.02.19 13:54 Сейчас в теме
(36) теоретически 5 субд (файловая 1с + 4 сторонних). Практически - 3 (файловая, MS и PG). К сожалению, это предел возможности управления.
39. пользователь 18.02.19 14:00
(38) а DB2 еще жива?

Мне думается что ее уже почти нет в проде.
42. w.r. 650 18.02.19 15:47 Сейчас в теме
(39)

Сейчас в типовой конфигурации смотрю в сторону DB2 Express-C 11. Ведёт себя очень достойно. Даже с ограничениями на 2 ядра и 16 Гб памяти работает где-то даже быстрее Postgres с 12 ядрами и 32 Гб оперативки - быстрее листаются большие динамические списки и делается проведение документов. Заметил для себя пару минусов - довольно непросто по сравнению с Postgres администрировать и долго загружается DT > 10 Гб. Но это для меня не критично
65. Darklight 32 20.02.19 11:45 Сейчас в теме
(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С ПРОФ (другие СУБД - только по лицензии КОРП) - хотя, это, конечно, мало вероятно, ведь это будет мешать продвижению на иностранным рынках.
43. oleg-x 22 18.02.19 16:49 Сейчас в теме
(39)А если хорошо подумать, то 1С 77 живет себе и многих устраивает. И даже конфигурации до сих пор есть на поддержке.
То что работает, не зачем менять :-)
YPermitin; +1 Ответить
40. oleg-x 22 18.02.19 14:45 Сейчас в теме
(39) Говорят жива, ходят слухи, что 8.4..... не пустили в релиз именно из за этой DB2, что то не срослось.
47. 3vs 19.02.19 09:45 Сейчас в теме
Не пора ли уже бить линейкой по пальцам одноэсовских программистов?
48. Octopus 338 19.02.19 09:54 Сейчас в теме
(47) Эффективно бить получается только рублем. Но не в случае фактической монополии
58. 3vs 19.02.19 14:51 Сейчас в теме
(48)В том-то и дело, что монополисты.
59. oleg-x 22 19.02.19 15:04 Сейчас в теме
(58) Кто сказал, что монополисты? Может просто, другие решения не устраивают по деньгам или функционалу?
Я знаю несколько контор, в которых об 1С даже в бухгалтерии ничего не знаю :-)
61. пользователь 19.02.19 15:10
(59)
ют по деньгам или функционалу?
Я знаю несколько контор, в которых об 1С даже в бухгалтерии ни


Это удивительная ситуация :)
Ну а так можно "радоваться", импортзамещение в действии :)

Кто знает, если бы не монополия, то вот таких бы новостей не было бы:
https://infostart.ru/journal/news/mir-1s/1s-zakrepila-razdelenie-platformennykh-litsenziy-na-prof-i-korp_1002294/
66. Darklight 32 20.02.19 11:57 Сейчас в теме
(61)Это не причём. Не будь монополии - это разделение могло бы случиться ещё раньше. Ну или КОРП вообще не появился бы ни как отдельная лицензия ни как более продвинутый функционал!
Хотя монополия - это не совсем хороший термин - скорее доминирование при наличии слабой конкуренции - ведь продукты 1С никто не заставляет ставить, они нигде не требуются для ведения бизнеса.
Просто в стране так сложилось, что конкурирующим продуктам не удалось так эффективно развиться. Это их проблемы. Им никто не мешал, и особых условий компании 1С не создавал. Но сейчас да - конкурировать с продуктами фирмы 1С в России очень сложно - у 1С существенные преимущества, которые они в стране себе создавали десятилетия.
YPermitin; +1 Ответить
67. пользователь 20.02.19 12:27
(66) Согласен. Но все же отсутствие конкуренции это не хорошо.

Время покажет)
49. Painted 49 19.02.19 10:25 Сейчас в теме
У меня при каждом обновлении показывает изменения в основной конфигурации, которые мы не делали.
Я ставлю галочку для безусловного обновления, но в следующий раз снова рисуется карандашик "изменен" слева.
YPermitin; +1 Ответить
50. пользователь 19.02.19 10:27
(49) о да. Пытался с этим бороться, даже побеждал иногда, но различия все равно появляются при обновлении.
В итоге "забил", смирился, простил и живу дальше.

Если у кого-то есть решение данной проблемы, но поделитесь :)
54. Дмитрий74Чел 238 19.02.19 14:11 Сейчас в теме
(50) посмотрите в сторону статей про "справочная информация". Там оф. "фича" есть. И вроде как в 8.3.13.каком-то там починили.
60. пользователь 19.02.19 15:08
(54)
Там оф. "фича" есть. И вроде как в 8.3.13.каком-то там починили.


Увы, но не починили.
62. Дмитрий74Чел 238 19.02.19 17:54 Сейчас в теме
(60) нашел ту ветку: https://forum.infostart.ru/forum33/topic175327/
Там вроде написали что в 8.3.14 все ок
proonec; YPermitin; +2 Ответить
63. пользователь 19.02.19 17:58
(62) Ура товарищи! Надо потестировать.
51. gubanoff 63 19.02.19 10:47 Сейчас в теме
(0)
Особенности заполнения субконто регистра бухгалтерии на ИТС


В этой статье как раз написано, что нужно указывать пустую ссылку вместо Неопределено, читаем:

Чтобы обеспечить единообразное представление "пустых" субконто в базе, необходимо в качестве значения субконто ссылочного типа (например, СправочникСсылка.Контрагенты, ДокументСсылка.ПриходнаяНакладная и т.д.) записывать пустую ссылку.


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

Что касается значения NULL - то это интересный случай, когда у счетов "на лету" меняют состав субконто. Например, добавляя субконто к счету, по которому учет ведется уже много лет, платформа заполняет значение этого субконто для проводок прошлых периодов значением NULL. Это нужно учитывать при проведении таких опасных операций.


Вот это на платформе 8.2.18.109 не подтвердилось. При добавлении новых субконто в старых движения значение субконто устанавливается как "пустая ссылка", а при добавлении новых субконто составного типа значение устанавливается в Неопределено.
Прикрепленные файлы:
YPermitin; +1 Ответить
52. пользователь 19.02.19 10:49
(51)
Вот это на платформе 8.2.18.109 не подтвердилось. При добавлении новых субконто в старых движения значение субконто устанавливается как "пустая ссылка", а при добавлении новых субконто составного типа значение устанавливается в Неопределен


Возможно так и есть, на 8.2 глюки с NULL встречал в основном после обменов.

А то что написано на ИТС - это да, это я больше для контраста вставил :)
53. rabid_otter 134 19.02.19 13:18 Сейчас в теме
глюк с округлением словил впервые в 2011-м году, делайте через выразить, будьте внимательны к делению, и будет вам счастье.
остальные глюки тоже ловил. актуально для новичков.
56. пользователь 19.02.19 14:18
(53) ВЫРАЗИТЬ не поможет, потому что платформа все равно во временной таблице приводит к указанному в статье типу, чтобы там не пытались сделать в запросе. По крайней мере так было раньше, может в новой версии что-то и поменялось.
55. Дмитрий74Чел 238 19.02.19 14:18 Сейчас в теме
off
PLAstic; YPermitin; +2 Ответить
57. пользователь 19.02.19 14:19
(55) Взял на заметку на будущее :)
71. user612295_death4321 23.02.19 19:58 Сейчас в теме
Ну из моего опыта проблемы я испытываю следующие при обновлении релиза (УПП обычные формы).

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 поведение изменится. Когда прижмет обновлять платформу, проверю )
YPermitin; +1 Ответить
72. пользователь 23.02.19 20:07
(71) спасибо за хороший список.

С обычными формами давно не работаю плотно, но похоже их поддерживать становится все интереснее :)
76. Octopus 338 26.02.19 08:57 Сейчас в теме
Сейчас обнаружил, что функция запроса ДАТАВРЕМЯ() не принимает в качестве параметров ничего, кроме явно указанных чисел. Т.е. ДАТАВРЕМЯ(2019, 2, 26) работает, а ДАТАВРЕМЯ(ГОД(&ТекущаяДата), 2, 26) - нет. Вывернулся через НАЧАЛОПЕРИОДА и ДОБАВИТЬКДАТЕ.

Подозреваю, что объяснение простое: функция ГОД (как и МЕСЯЦ, ДЕНЬ) возвращает смешанный тип число+NULL
YPermitin; +1 Ответить
77. пользователь 26.02.19 08:59
(76) да, это давно уже стало фичей для меня))) Хотя очень непривычно.
85. tormozit 7218 03.03.19 19:27 Сейчас в теме
(76) ДатаВремя() - литерал функционального типа, т.е. внутри него не поддерживается вычисление выражений, а допустимы строго заданные значения. Другие подобные литералы языка запросов: ЗНАЧЕНИЕ(), ТИП(). Кстати в консоли запросов ИР по нажатию CTRL+F1 на любой функции выдается контекстная справка, где можно узнать в частности и том, является ли функция литералом.
Octopus; YPermitin; +2 Ответить
87. Octopus 338 04.03.19 07:30 Сейчас в теме
(85) Все еще проще, чем я предположил )))
YPermitin; +1 Ответить
78. Yashazz 4779 26.02.19 22:29 Сейчас в теме
Я некоторое время назад заметил, что в работе совершенно обычных форм в толстом клиенте обычного приложения появилась эдакая частичная асинхронность. Теперь можно, запустив нечто с формы (в т.ч. совсем-совсем клиентское, или напротив, люто серверное) взять, да переключиться с этой формы, или поиграть с ней, или запустить это нечто ещё эн раз, или закрыть форму. При закрытии, чсх, запущенный процесс живёт и отлаживается. Степень этой асинхронной свободы "гуляет" от релиза к релизу.
YPermitin; +1 Ответить
86. tormozit 7218 03.03.19 19:35 Сейчас в теме
(78) Не замечал такого. Можешь сделать пример для воспроизведения?
YPermitin; +1 Ответить
88. Sergynia 4 11.06.19 09:05 Сейчас в теме
Достаточно интересная статья.