1С:Предприятие 8 – Telegram
1С:Предприятие 8
865 subscribers
91 photos
200 videos
67 links
🔥 Разработка в 1С — просто и понятно! 🔥

Полезные фишки и лайфхаки для разработчиков
Объяснение сложных тем простыми словами
Готовые решения, сниппеты и примеры кода
Разбор ошибок и способов их устранения
Новости и тренды в мире 1С
Download Telegram
Media is too big
VIEW IN TELEGRAM
Помогаторы разработчика 1С

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

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

источник

👉@DevLab1C
👍5🔥2
Пустая дата в 1С

1. Понятие пустой даты на платформе 1С 8 Предприятие

В технологической платформе «1С:Предприятие 8» не существует понятия "пустая" переменная. Любая переменная всегда имеет определенное значение. Для многих типов данных в 1С:Предприятии 8 существуют значения переменной по умолчанию. Эти значения используются системой в тех случаях, когда нет явного указания на устанавливаемое значение.

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

Инициализировать переменную даты как пустую в 1С, можно, задав для такого типа данных только значение по умолчанию. Значение даты по умолчанию это дата начала отсчёта (01 января 0001 года), то есть самая первая дата по григорианскому календарю.

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

2. Пустая дата 1С в текстах модулей обработчиков

Существует несколько вариантов инициализации пустой даты в 1С 8.3 для текстов модулей:

1. ЕслиДата= '00010101'Тогда
2. ЕслиДата= '00010101000000'Тогда
3. ЕслиДата= '0001-01-01'Тогда
4. Если Дата = Дата(1, 1, 1) Тогда
5. Если Дата = Дата(1, 1, 1, 0, 0, 0) Тогда
6. Если Не ЗначениеЗаполнено(Дата) Тогда


В последнее время набирает популярность конструкция:
Если Не ЗначениеЗаполнено(Дата) Тогда

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

А в случае использования конструкции
'00010101000000'

возникает проблема с символом «'». Его не так просто отыскать на клавиатуре. Особенно для начинающих разработчиков.

3. Пустая дата в запросе 1С

Значение пустой даты в запросе в 1С 8.3—когда дата не выбрана, можно получить в запросе через функцию ДАТАВРЕМЯ() или передать в качестве параметра запроса.


1. ГДЕДата= ДАТАВРЕМЯ(0001,01,01,0,0,0)
2. ГДЕДата= ДАТАВРЕМЯ(1,1,1)
3. ГДЕДата= &ПустаяДата
Запрос.УстановитьПараметр("ПустаяДата", '00010101');


👉@DevLab1C
🔥3👍1
Как в запросе задать константу типа дата в 1с 8.3, 8.2


Процедура КонстантаТипаДатаВЗапросе()
Запрос = Новый Запрос(
"
| ВЫБРАТЬ
| ДАТАВРЕМЯ(2013, 12, 31) КАК НовыйГод
|"
);

Результат = Запрос.Выполнить();
ОткрытьЗначение(Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой));
КонецПроцедуры


👉@DevLab1C
🔥3👍1
Мутабельные значения в 1С

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

1. Что собой представляет мутабельные значения в 1С?

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

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

К мутабельным типам в языке программирования 1С относятся:
· объект;
· форма;
· список значений;
· таблица значений.

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

Простые (примитивные) типы:
· строка;
· число;
· дата;
· булево.


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

Предопределенным типом является цвет.

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

2. Как проверить заполненные мутабельные значения в 1С?

При переходе со старой версии платформы 1С:Предприятие (до 8.2) на актуальную нередко в момент тестирования или эксплуатации возникают ошибки проверки мутабельного значения на заполненность. Это связано с особенностью глобальной функции ЗначениеЗаполнено(). Ранее использовалась гл. функция НеЗаполнено(), которая проверяла, хоть и медленнее, но более эффективно. То есть в новых версиях платформы 1С Предприятие подобная проблема может возникнуть в тот момент, когда проверяем значение, не зная его типа.

Зачастую ошибки подобного толка касаются таких типов как формы и элементы форм, списки значений (таблица, список, дерево), COM- объекты и т.д.

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

Для проверки типа данных 1С мы можем использовать конструкцию типа:

Если ТипЗнч(«Наша переменная» <>Тип("Объект") и ЗначениеЗаполнено(«Наша переменная»\<>
Тогда
//Тут выполняем нужные действия с переменной
КонецЕсли;


В данном случае 1С проанализирует первое условие, и если типы совпадут, дальнейшее условие отработано не будет.

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

МассивПримитивныхТипов=Новый Массив;
МассивПримитивныхТипов.Добавить(Тип("Число"));
МассивПримитивныхТипов.Добавить(Тип("Строка"));
МассивПримитивныхТипов. Добавить(Тип("Дата"));
МассивПримитивныхТипов. Добавить(Тип("Булево"));


Далее последует проверка:

Если не МассивПримитивныхТипов.Найти(Тип3нч(«Наша переменная») ) = 0 и
ЗначениеЗаполнено(«Наша переменная» <> Тогда
//Тут выполняем нужные действия с переменной
КонецЕсли;


👉@DevLab1C
🔥4👍3
Как в 1С прибавить к дате 1 день?

1. Дата в программе 1С

Дата в программе 1С – примитивный тип данных.
Дату можно задать прямо в коде программы 1С, в одинарных кавычках: первые 4 цифры — это год, затем 2 цифры — это месяц, и последние – день.
ПеременнаяДата ='20200801';
Сообщить («Первое августа»);


Дату можно задать командой Дата () и указать параметры этой команды в скобках, из которых будет сформирована дата.
ПеременнаяДата =Дата (2020,08,01);

Чтобы присвоить переменной «Дата» какое-либо значение, мы сначала определяем переменную, где будет храниться дата и присваиваем ей начальное значение 01.01.0001 00:00:00 – представление пустой даты.
В команде «Ввести Дату ()» указываем переменную, в которую будет помещено введенное значение.
ПеременнаяДата = «00010101»;
ВвестиДату(ПеременнаяДата);
ОткрытьЗначение(ПеременнаяДата);


Начальное или «Пустое» значение даты 1С можно вводить и так:
ПеременнаяДата = «0001-01-01»;
Переменная_ата = Дата (1,1,1);


Дата () имеет формат год – месяц – день – час – минута – секунда, то есть дата содержит не только дату, но и время.
Текущую дату и время в системе можно получить следующим образом:
ПеременнаяДата = ТекущаяДата0);
Сообщить(«Сегодня»);


Явно указать нужную дату можно с помощью литералов встроенного языка запросов 1С «ГГГГММДДЧЧММСС», «20200825000012» – получим 25.08.2020 00:00:12
Либо через функцию Дата () или ДатаВремя ()\
ДатаВремя(2020,08,25,00,00,12); // получим 25.08.2020 00:00:12
Дата(2020,08,25);
// получим 25.08.2020 00:00:00


Кроме того, в программах 1С возможно сложить две даты. Делается это следующим образом:
ПустаяДата = «00010101000000»;
ПеременнаяДата = ПустаяДата + ( ПеременнаяДата 1 - ПустаяДата ) + ( ПеременнаяДата 2 - ПустаяДата):



2. Прибавить к дате день в 1С – решение задачи

Выше мы перечислили основные манипуляции с типом данных Дата, изначально предусмотренные в 1С. Однако нет специальной встроенной функции, которая бы прибавляла к дате день в 1С, хотя у пользователей иногда возникает такая потребность. Далее попробуем разобраться, как реализовать подобное.
Итак, есть несколько вариантов решения этой задачи. Первый – прибавить к дате день в 1С при помощи оператора «+» секунды. Например, используя функцию КонецДня() :
НоваяДата КонецДня(ПеременнаяДата)+1;

Мы прибавляем секунду к 25.08.2020 23:59:59 и получаем следующий день 26.08.2020 00:00:00
Для прибавления целого дня, нужно прибавить количество секунд в одном дне.
Количество секунд в сутках 60*60*24 = 86400 секунд.
НоваяДата=Дата+86400;
// прибавить несколько («Количество») дней
Новая Дата Дата+86400 Количество
// прибавить час
НоваяДата=Дата+60*60;


Второй способ – используя запрос:

Процедура РасчетДать(Дата,ИтоговаяДата)
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&Дата, ДЕНЬ, 1) КАК Поле1";
Запрос.УстановитьПараметр("Дата", Дата);
РезультатЗапроса = Запрос. Выполнить);
ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ИтоговаяДата=ВыборкаДетальныеЗаписи.Поле1;
КонецЦикла;
КонецПроцедуры


Функция «ДобавитьКДате(<ИсходнаяДата>, <ЕдиницаИзмерения>, <Количество>)» – встроенная функция языка запросов 1С.
Функция позволяет добавить и вычесть из даты нужное количество времени в произвольном количестве. ЕдиницаИзмерения – определяет единицу времени (год, месяц, день, час, минута, секунда).
/Прибавить несколько дней
ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, Количество)
//Прибавить час
ДОБАВИТЬДАТЕ (Дата, ЧАС, 1)


👉@DevLab1C
🔥2👍1
Как выгрузить CF-файл или файл базы данных 1С 8.3
Файлы к посту в комментах

Наверное, одна из самых частых задач, которую выполняют молодые программисты 1С – это обновление баз на платформе 1С. Думаю, они знают, как выгрузить копию базы, как создать файл конфигурации, как загрузить конфигурацию и как решаются другие подобные задачи. Эта статья – скорее «памятка» для пользователей, которым пришлось самостоятельно зайти в конфигуратор и сделать выгрузку из 1С.


1. Отличие CF-файла и файла базы данных 1С 8.3

Нужно понимать отличие CF-файла и файла базы данных 1С 8,3 (dt-файл).
Сf-файл, это файл конфигурации баз 1С. Он нужен для хранения структуры и кода (выполняемых алгоритмов) базы.
Файл dt – это файл, который хранит сжатые данные всей базы вместе с файлом cf.
Следовательно, файл базы будет весить значительно больше, чем файл конфигурации. И учетные данные есть только в файле dt.

2. Как выгрузить файл CF

Чтобы выгрузить файл из базы данных 1С 8,3, нужно зайти в базу в режиме конфигуратора. Для этого при входе в базу нужно выбрать «Конфигуратор».

Если конфигурация не открыта, то выгрузить файл не получится. Сначала нужно открыть конфигурацию.
Для этого нужно в режиме конфигуратор нажать кнопку «Открыть конфигурацию 1С».

После открытия нужно зайти в меню «Конфигурация» - «Сохранить конфигурацию в файл».

После сохранения файл cf в указанном месте можно передать его программисту. Но стоит учитывать, что конфигурации могут довольно много весить (бывает 1 Гб и более), поэтому не стоит отправлять их почтой. Лучше воспользоваться каким-нибудь файловым веб-сервером.
Если же требуется загрузить конфигурацию 1С, то можно воспользоваться тем же меню «Конфигурация» - «Загрузить конфигурацию 1С из файла». Но стоит быть внимательным с загрузкой файла конфигурации. Файл должен соответствовать текущей базе.

3. Выгрузка файла базы данных 1С 8.3

Выгрузить файл dt (базы данных) можно через меню «Администрирование» - «Выгрузить информационную базу». Далее нужно указать место, куда нужно выгрузить копию базы.
Не забывайте, что этот файл содержит все учетные данные вашей базы (в отличие от cf-файла). Потому не стоит передавать его всем подряд или хранить без необходимости в общем доступе.

👉@DevLab1C
🔥2👍1
Настройка получения данных при использовании Планов Видов Характеристик

№ 1. Выборка запросом с явной связью
№ 2. Использование настроек характеристик в СКД
№ 3. Описание связи в настройках самого объекта

источник

👉@DevLab1C
🔥4👍1
Как посчитать количество дней между датами в 1С

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

1. В коде модулей
В частном случае в коде модулей требуется вычислить разность между датами, приведенными к началу дня. Результат будет вычислен в секундах, следовательно, его потребуется перевести в дни:
РазницаВДнях = (НачалоДня (ДатаОкончания) - НачалоДня (Датаначала) ) / (60 * 60 * 24);
Пример использования в коде модуля

2. В тексте запросов 1С 8.3
Язык запросов 1С 8.3 также поддерживает ряд специализированных функций для операций с датами, среди которых имеется РАЗНОСТЬДАТ, предназначенная как раз для того, чтобы определить разность между датами, переданными ей, с указанием основной единицей измерения времени:
РАЗНОСТЬДАТ (<Выражение>,«Выражение>, Секунда | Минута | Час | День | Месяц | Квартал | Год)
Синтаксис функции в языке запросов

Следует отметить, что при вычислении результата действия игнорируются параметры, единицы измерения которых меньше, чем переданная в третьем параметре, что позволяет предварительно не приводить в соответствие даты к началу дня.
ВЫБРАТЬ
РАЗНОСТЬДАТ (ДАТАВРЕМЯ (2019, 4, 20, 15, 22, 5), ДАТАВРЕМЯ (2020,5), LAJABELMA (2020,4, 20, 15, 22,5), ДЕНЬ) КАК Вариант1, //366
РАЗНОСТЬДАТ (ДАТАВРЕМЯ (2020, 1,1,0,0, 0), ДАТАВРЕМЯ (2020, 12, 31, 23, 59, 59), ДЕНЬ) КАК Вариант2//365

Пример использования в языке запросов

3. В системе компоновки данных (СКД) 1С
Язык выражений 1С СКД также поддерживает специализированные функции для работы с датами и временем, как и язык запросов 1С 8.3, среди которых имеется функция РазностьДат, но ее синтаксис имеет некоторые отличия: третий параметр, определяющий тип разности, имеет значение типа Строка.
ВЫБРАТЬ
ДАТАВРЕМЯ (2019, 4, 20, 15, 22, 5) Дата1,
ДАТАВРЕМЯ (2020,4, 20, 15, 22, 5) Дата2,
ДАТАВРЕМЯ (2020, 1, 1, 0, 0, 0) Дата3,
ДАТАВРЕМЯ (2020, 12, 31, 23, 59, 59) Дата4


👉@DevLab1C
🔥3👍2
Ошибка в 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 с непроизносимым цифро-буквенным названием, это говорит о повреждении файлов кеша. Как правило ошибка вылетает только у одного пользователя. Чтобы исправить ошибку нужно пройти по указанному пути и удалить папку с цифро-буквенным названием. Вот пример расположения файла.

👉@DevLab1C
👍1🔥1