1C Разработчик
639 subscribers
64 photos
167 videos
47 links
Download Telegram
Ошибка в 1С 8.3: Файл базы данных поврежден

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

1. Файл 1CD
Чаще всего бывает поврежден файл 1CD. Это файл базы данных непосредственно. Эта ошибка базы 1С говорит о том, что повреждена какая-то часть базы или таблицы, или сами данные. Поэтому любая попытка починить базу, скорее всего, будет сопровождаться частичной потерей данных. Самый лучший вариант – восстановить базу из резервной копии, если она есть. Если копии нет, тогда база чинится только утилитой chdbfl. Утилита эта входит в поставку программы и находится в папке bin вашей платформы 1С 8.3. Вот примерный путь:

Запускаете утилиту, указываете путь к базе данных. Путь к базе данных можно найти в окне запуска снизу или по кнопке Изменить в поле «Каталог информационной базы» 1С.

Обязательно ставите галку «Исправлять обнаруженные ошибки». Затем нажимаете кнопку «Выполнить».

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

Далее после проведения тестирования утилитой chdbfl имеет смысл провести Тестирование и исправление. Для этого нужно запустить базу в режиме конфигуратора и пройти Администрирование-Тестирование и исправление. Расставляем галки и точки как на картинке.

Чуть более подробно про тестирование и исправление. Много споров о том, как правильно заполнять 2 последних пункта – «При наличии ссылок на несуществующие объекты» и «При частичной потере данных объектов». Я ставлю «Очищать ссылки» и «Удалять объекты», потому что при выборе пункта «Создавать объекты» база попытается создать объект, данных для которого у нее нет. То есть это будет пустой объект с кодом вида F000000001, в котором не будут заполнены даже стандартные реквизиты.

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

2. Повреждение файлов кеша
Второй случай ошибки «Файл базы данных поврежден» встречается реже, но решается проще. Когда ошибка указывает на поврежденный файл 1С в папке AppData с непроизносимым цифро-буквенным названием, это говорит о повреждении файлов кеша. Как правило ошибка вылетает только у одного пользователя. Чтобы исправить ошибку нужно пройти по указанному пути и удалить папку с цифро-буквенным названием. Вот пример расположения файла.

✍️@razrab_1C
👍5🔥21
Media is too big
VIEW IN TELEGRAM
Рекомендации по улучшению хорошего кода на 1С

00:00 - Программный интерфейс
01:53 - Получить в именах Функций
03:00 - Использование глаголов в именах функций
04:03 - Где объявлять переменные
05:09 - Лишняя абстракция
06:23 - Функция-конструктор
06:52 - Внедрение зависимостей
07:43 - Адаптеры
08:27 - Побочный эффект метода
09:05 - Связность метода
10:00 - Выделение внешнего формата
10:50 - Хороший пример объявления выходного значения
11:45 - Метод должен либо обрабатывать данные, либо возвращать
13:05 - Дата провайдеры пишем в модуле менеджера
14:00 - Паттерн фасад
14:35 - Блокировки
16:35 - ОбменДанными.Загрузка = Истина
17:30 - Общий модуль не должен много знать об объектах
18:55 - Презентер
20:00 - ad-hoc полиморфизм
20:37 - Использование Знач
22:37 - Детали и бизнес-логика
23:37 - ВызватьИсключение — это хорошо
25:10 - Комментарии
26:14 - Метод делает два действия и это плохо
27:40 - Лучше использовать метод Заполнить

источник

✍️@razrab_1C
👍3🔥1
Зависшие сеансы 1С

1. Приложение «Диспетчер задач»
Чаще всего такая проблема встречается при клиент-серверном варианте работы, а причиной является некорректное завершение сеанса.
В файловом варианте работы для ОС Windows обычно достаточно через «Диспетчер задач» (Task Manager) завершить процесс Windows с рабочего места пользователя (ориентируясь, например, по заголовку окна):

В ОС семейства Linux привычного для пользователей ОС Windows приложения «Диспетчер задач» нет. Вместо этого используются консольные утилиты и команды, но в ряде дистрибутивов (например, Ubuntuи др.) имеется «Системный монитор» (SystemMonitor):


2. Администрирование серверов 1С
В случае использования клиент-серверного варианта работы управление сеансами осуществляется через оснастку «Администрирование серверов 1С:Предприятие». Для завершения сеанса необходимо обладать полномочиями администратора кластера серверов. Список сеансов может быть отображен двумя способами:
· для всего кластера в целом;
· отдельной информационной базы 1С.

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

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

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

К использованию данного средства следует подходить с осторожностью, так как завершение сеанса пользователя, активно работающего с информационной базой, может привести к потере данных.
Стоит также упомянуть о новом «явлении» для платформы 8.3 по сравнению с 8.2, введенном для повышения устойчивости работы клиентских приложений (для поддержания сеанса тонкий клиент и веб-клиент обеспечивают обращение к кластеру не реже 1 раза в 10 минут), при котором платформа выполняет удержание сеансов при продолжительном их бездействии (по умолчанию 20 минут). При этом у таких сеансов отсутствуют активные соединения и рабочий процесс:

Завершение «спящих» сеансов платформой выполняется автоматически по истечении заданного времени – по умолчанию 24 часа. При необходимости параметры засыпания и завершения спящих сеансов можно менять для конкретной информационной базы через конфигуратор (Администрирование → Параметры информационной базы):

Более подробно об этих и других параметрах информационной базы можно узнать в документации по платформе, доступной на портале ИТС.

✍️@razrab_1C
👍31🔥1
Media is too big
VIEW IN TELEGRAM
В видео рассмотрим 8 наиболее типовых ошибок при разработке запросов 1С
Евгений Гилев

• Запросы в цикле
• Необоснованное использование вложенных запросов
• Не корректное использование условий в запросах
• Использование таблиц значений
• «Бомба», заложенная в разыменовании полей
• Непопадание в индекс в условиях и соединениях
• Создание динамических запросов
• Получение ссылочных полей в запросе

источник

✍️@razrab_1C
👍4🔥3
Хранилище значений в 1С

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

Хранилище значений – это определенный объект языка в конфигурации, который может хранить информацию любого типа: файлы программ Word, Excel, PDF или объемы графической информации. То есть этот объект может хранить любую необходимую информацию.

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

Хочу обратить внимание, что вся работа справочников, имена которых носят частично имя владельца справочника, а частично «Присоединенные файлы», построена на реквизите с типом «ХранилищеЗначений».

1. Пример с изображением товара
Давайте разберем на примере. У нас есть изображение товара, и нам необходимо автоматически при загрузке номенклатуры загружать и изображение. Для этого необходимо, чтобы был справочник «НоменклатураПрисоединенныеФайлы» с одним реквизитом с нужным нам типом. После этого мы выбираем нужный нам файл с изображением и грузим его. Все легко и просто. Конечно, при загрузке множества файлов могут возникнуть проблемы, но только в моментах, которые Вы можете не знать или где-то ошиблись.

Настройки = Новый Структура () ;
Настройки.Вставить ("ПоУмолчанию", Истина);
Настройки. Вставить ("Наименование", "Наименование1") ;

Хранилище = Новый ХранилищеЗначения(Настроики, Новый СжатиеДанных(9);


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

Чтоб очистить значение этого объекта, достаточно только установить ему значение «Неопределено».

2. Копии базы
Кстати, чуть не забыл про один немаловажный факт про этот объект.

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

✍️@razrab_1C
🔥4👍2
Вставить объект в буфер обмена средствами 1С

Платформа 1С 8.3 позволяет работать с буфером обмена с помощью внешней компоненты COMОбъект("HtmlFile").
Внимание! Структура базы приёмника и структура база источника должно быть 100% идентичной!

Вставить объект в буфер обмена с помощью внешней компоненты в 1С 8.3:


&НаКлиенте
Процедура Вставить_объект_В_буфер_обмена(Команда)

COM_Объект = Новый COMОбъект("htmlfile");
Вставить_объект_НаСервере(COM_Объект.ParentWindow.ClipboardData.Getdata("Text"));

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

&НаСервере
Процедура Вставить_объект_Сервере(ТекСтрока)

Новая_запись=Новый ЧтениеXML;
Новая_запись.УстановитьСтроку(ТекСтрока);
Новая_запись.Прочитать(); // элемент Root
Новая_запись.Прочитать(); // элемент с документом

Если ВозможностьЧтенияXML(Новая_запись) Тогда // получаем тип данных XML из Новая_запись
СсылкаНаОбъект=ПрочитатьXML(Новая_запись);
СсылкаНаОбъект.Ссылка.УникальныйИдентификатор();
Пользователю = Новый СообщениеПользователю;
Если СсылкаНаОбъект.Ссылка.Пустая() Тогда
СсылкаНаОбъект.Записать();
Пользователю.Текст = "Загружен "+СсылкаНаОбъект.Ссылка;
Иначе
СсылкаНаОбъект = СсылкаНаОбъект.Ссылка.ПолучитьОбъект();
ЗаполнитьЗначенияСвойств(СсылкаНаОбъект, Новая_запись);
Пользователю.Текст = "Изменен "+СсылкаНаОбъект.Ссылка;
КонецЕсли;
Пользователю.Сообщить();
КонецЕсли;

Новая_запись.Закрыть();

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


✍️@razrab_1C
👍2🔥1
Работа со строками в 1С

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

Язык программирования 1С - полноценный функционал для разработки собственных решений, и он является главным инструментом разработки.


1. Три основных типа данных в языке программирования 1С 8.3

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

Основными типами данных в языке программирования 1С являются:

·Строка. Отличный пример таких данных - цитата из стихотворения «Мой дядя самых честных правил,». Обратите внимание, что данные типа Строка всегда заключается в кавычки.

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

·Дата. Примером данных данного типа можно считать дату Нового Года – 31.12.2019. На языке компьютера эти данные будут выглядеть так: ‘20191231’. Дата всегда заключается в одинарные кавычки.

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


2. Функции работы со строками в 1С
2.1 Строка

Функция Строка() позволяет получить текстовое представление переменных других типов.
Примеры:
Строка(ТекущаяДата()) //"20.11.2019 14:10:33"
Строка(Истина) // Да
Строка(2019) // "2 019"



2.2 СтрДлина
Функция позволяет получить количество символов в строке 1C, включая пробелы и незначащие символы.
Например:
СтрДлина("Тестовая строка") // 15

2.3 ВРег, НРег, ТРег
Функции для управления регистром строки.

ВРег — преобразует строку в верхний регистр. НРег — в нижний. ТРег — у каждого нового слова первая буква преобразуется в верхний регистр, остальные в нижний.

Примеры:

ВРег("Тестовая строка") // "ТЕСТОВАЯ СТРОКА"
НРег("Тестовая строка") // "тестовая строка"
ТРег("Тестовая строка") // "Тестовая Строка"



2.4 ПустаяСтрока
Функция, позволяющая сравнить исходную строку с пустой строкой. Проверяется наличие незначащих символов.
Пример:
ПустаяСтрока("Тест") //ложь
ПустаяСтрока(" ") // истина


Аналогично можно проверить строку на пустое значение следующим образом:
СокрЛП(" ") = "" // истина


2.5 СтрЗаменить
Функция СтрЗаменить позволяет массово заменить искомое значение на нужное нам. Синтаксис:
Например:
СтрЗаменить("Произвольная Строка", " " , "") //"ПроизвольнаяСтрока"

✍️@razrab_1C
👍31🔥1
Работа с объектами в 1С

1. Что дает доступ к метаданным конфигурации

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

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

В документации не приводятся свойства метаданных и коллекций подчиненных ей объектов. Для знакомства со структурой и составом свойств, необходимо использовать отчет метаданным конфигурации (в режиме Конфигуратор меню Конфигурация – Отчет по конфигурации). Имена, показанные в отчете, соответствуют именам свойств и коллекций объектов.

Метаданные в отчетах и в программных моделях не содержат ранее упомянутой ветки "Общие". Ветка “Общие” используется только в дереве метаданных для дополнительного удобства и редактирования. Данная возможность требуется в отчете и в программной модели все объекты, входящие в ветку "Общие", подчиняются “корневому” объекту.


2. Для чего нужен доступ к структуре метаданных

Доступ к структуре метаданных осуществляется через Метаданные глобального контекста. Данное свойство предоставляет доступ непосредственно к корневому объекту конфигурации и коллекциям объектов. Каждый объект метаданных 1С предоставляет доступ к своим свойствам и подчиненным объектам. Так данная возможность требуется для получить доступ к множеству объектов.

Например:
Сообщить(Метаданные.Документы.Счет.Реквизиты.Контрагент);

Кроме того, у некоторых типов, предназначенных для работы с прикладными объектами, имеется метод Метаданные(), предназначенный для получения объекта метаданных 1С, отвечающего за их конкретный тип.

Например:
Док = Документы.Счет.СоздатьДокумент();
Сообщить(Док.Метаданные().ПолноеИмя());


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

Например:
Выборка = Документы.Счет.Выбрать();
Сообщить(Метаданные.НайтиПоТипу(ТипЗнч(Выборка)));


Объекты метаданных 1С можно сравнивать на равенство. При этом проверяется схожесть объектов, а не совпадение значений свойств. То есть проверяется то, что сравнивается конкретно – один и тот же объект метаданных конфигурации.


Например:
Сообщить(Метаданные.ОсновнаяФормаКонстант = Метаданные.ОбщиеФормы.Основная);

С помощью метода Родитель() можно получить вышестоящий объект метаданных 1С.

Например:
Сообщить(Метаданные.Документы.Счет.Реквизиты.Контрагент.Родитель());

Для представления объекта метаданных 1С пользователю нужно использовать преобразование значения к строке или метод Представление().

Например:
Сообщить(Метаданные.Справочники.РасчетныеСчета);
Сообщить(Метаданные.Справочники.РасчетныеСчета.Представление());


Объекты метаданных не могут быть сериализованы. Для получения строкового значения, соответствующему объекту метаданных, независимого от языка интерфейса пользователя нужно использовать метод ПолноеИмя().

Например:
Сообщить(Метаданные.ОбщиеФормы.Основная.ПолноеИмя());

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

Некоторые свойства объектов метаданных имеют перечислительный тип. Это специальные перечисления. Доступ к ним в языке выполняется через коллекцию Свойства Объектов, предоставляемую “корневым” объектом метаданных. Состав этих перечислений описан в документации, в разделе, описывающем работу с объектами метаданных.

Например:
Сообщить(Метаданные.Документы.Счет.ПериодичностьНомера =
Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год);


Некоторые свойства объектов метаданных являются коллекциями значений и представляются типом КоллекцияЗначенийСвойстваОбъектаМетаданных.

Например:
Сообщить(Метаданные.Документы.Счет.ВводитсяНаОсновании.Количество());
Сообщить(Метаданные.Документы.Счет.ВводитсяНаОсновании.Содержит(Метаданные.Справочники.Контрагенты));


Продолжение в комментариях ➡️

✍️@razrab_1C
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
Регистры накопления в 1С 8.3, с чем их едят?

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

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

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

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

https://telegra.ph/Registry-nakopleniya-v-1S-83-s-chem-ih-edyat-01-04

✍️@razrab_1C
🔥3