Найти в Дзене
Владимир Жирицкий

Вопросы с собеседования на 1с разработчика и мои ответы

Вопрос: Что такое CF файл и DT файл? В чем их различие? Ответ: CF и DT – это форматы файлов с базой данных платформы 1С. Разница между ними в том, что CF файл – база данных, которая содержит результаты работы разработчика: код и прочие настройки конфигуратора. А DT файл – это база с результатом работы разработчика (т.е. CF) + результаты работы пользователя, которую он вел в пользовательском режиме платформы. Вопрос: Чем отличается справочник от документа? Каково их назначение в хозяйственной деятельности предприятия? Ответ: Вопрос этот появился от того, что и справочник, и документ являются объектами дерева метаданных в конфигураторе 1С. Понимая это, можно легко найти первые отличия в свойствах объектов: 1. Разные стандартные реквизиты. Это большой пункт различия, ведь реквизиты отражают назначение объекта и его свойства. Например, справочник предназначен для хранения однотипных данных, которые, в отличие от перечисления, мы хотели бы по возможности менять и даже структурировать (сдела
Оглавление

Вопросы 1-й категории сложности (базовые вопросы).

Вопрос: Что такое CF файл и DT файл? В чем их различие?

Ответ: CF и DT – это форматы файлов с базой данных платформы 1С. Разница между ними в том, что CF файл – база данных, которая содержит результаты работы разработчика: код и прочие настройки конфигуратора. А DT файл – это база с результатом работы разработчика (т.е. CF) + результаты работы пользователя, которую он вел в пользовательском режиме платформы.

Вопрос: Чем отличается справочник от документа? Каково их назначение в хозяйственной деятельности предприятия?

Ответ: Вопрос этот появился от того, что и справочник, и документ являются объектами дерева метаданных в конфигураторе 1С. Понимая это, можно легко найти первые отличия в свойствах объектов:

1. Разные стандартные реквизиты. Это большой пункт различия, ведь реквизиты отражают назначение объекта и его свойства. Например, справочник предназначен для хранения однотипных данных, которые, в отличие от перечисления, мы хотели бы по возможности менять и даже структурировать (сделать справочник иерархическим). Отсюда справочник имеет реквизиты: «Владелец», «Родитель», «ЭтоГруппа».

В то же время документы нам нужны для отражения операций, которые осуществляются объектом (предприятием), использующим 1С для автоматизации своих задач. Это все привело к появлению таких реквизитов как: («Номер», «Проведен»).

2. Разное назначение объектов. Как было сказано справочник отражает структуру однотипных данных, а документ отражает проведение операций предприятия. Это есть их назначение в хозяйственной деятельности предприятия. Стоит отметить, что для отражения движений документа, т.е. проведение и запись необходимым данных, существуют регистры, куда записываются эти движения. А сам документ является регистратором для этих регистров.

Вопрос: Может ли справочник быть регистратором в регистрах?

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

Вопрос: Какие модули конфигурации вы знаете?

Ответ: модули приложения, сеанса и внешнего соединения. Это модули для запуска приложения, com соединения и установки параметром для них.

Так же отдельно можно выделить общие модули, которые используют для работы с повторяющимися функциями и процедурами.

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

Вопрос: Что такое управляемые формы? Зачем придумали управляемые формы?

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

Вопрос: Как выполнить экспортную процедуру из модуля объекта? Приведите пример кода.

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

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

Пример кода:

&НаКлиенте

ПроцедураПересчитатьЦеныДокумента(Команда)

ПересчитатьЦеныНаСервере();

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

&НаСервере

Процедура ПересчитатьЦеныНаСервере()

ОбъектДокумента = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.Накладная"));

ОбъектДокумента.НачислитьСкидку(10);

ЗначениеВРеквизитФормы(ОбъектДокумента, "Объект");

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

В этом примере Экспортируемая процедура «НачислитьСкидку(Параметр)».

Вопрос: В какой процедуре лучше заполнять реквизиты формы "ПриСозданииНаСервере" или "ПриОткрытии"?

Ответ: Лучше заполнять реквизиты в "ПриСозданииНаСервере". В процедуре "ПриОткрытии" обычно пишут сообщения пользователю и предупреждения.

Вопрос: Как задать вопрос пользователю на клиенте? Приведите пример кода.

Ответ: Вопрос требует уточнения. Нужен ли нам режим диалога. И хотя я не могу придумать пример вопроса, для которого не нужен будет ответ от пользователя, теоретически такое могло бы быть, потому что конфигурации постоянно улучшаются уже не один десяток лет и старые практики могут быть неактуальны. Например, в самописных конфигурациях запросы с использованием «или», модальные окна, которые имеют проблемы в веб и мобильных режимах. Ну или какой -нибудь умелец пишет ошибку в виде вопроса, например, «А где заполнение склада?». Этот вопрос, пожалуй, риторический. Он мог бы вызываться методом «Сообщить()»

Однако ответ, который от меня требуется в этом вопросе – это задать вопрос пользователю на клиенте можно через Оповещение (ОписаниеОповещения) и метода «ПоказатьВопрос». Пример кода:

&НаКлиенте

Процедура ЗадатьВопрос(Команда)

Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос",

ЭтотОбъект); // Прописываем название процедуры-обработчика.

ПоказатьВопрос(Оповещение, "Сегодня хорошая погода?", // вместо привычного "Вопрос", теперь "ПоказатьВопрос"

РежимДиалогаВопрос.ДаНетОтмена,

0, // задержка (секунды). необязательно

КодВозвратаДиалога.Да, // задает кнопку по умолчанию. необязательно

"Демонстрируем немодальные окна." // устанавливаем заголовок. необязательно

);

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

&НаКлиенте

Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт // здесь, думаю, комментировать нечего

Если Результат = КодВозвратаДиалога.Да Тогда

Сообщить("Приятного отдыха на свежем воздухе!");

Иначе

Сообщить("Оставайтесь дома!");

КонецЕсли;

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

В общем название процедур говорят сами за себя.

Вопрос: Чем "модуль объекта" отличается от "модуля менеджера"?

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

Вопрос: Что такое мутабельные значения? Примеры.

Ответ: С английского слово mutable переводится как изменчивый. Соответственно это значение, которое можно поменять после его создания. В 1С это: объект, список значений, таблица значений.

Вопрос: Какие директивы компиляции в модулях знаете?

Ответ: &НаКлиенте – доступ к элементам и параметрам формы, &НаСервере – данные формы + обращение к базе данных (Запросы выполняются на сервере). &НаКлиентеНаСервере – для вызова клиентских и серверных процедур общих модулей. &НаСервереБезКонтекста – контекст это имеется ввиду данные формы. Соответственно если нужен запрос, но данные формы мы не используем – эта директива в самый раз. &НаКлиентеНаСервереБезКонтекста – если не нужен контекст, но нужно выполнение на клиенте и на сервере. Где контекст – данные формы. Хотя и доступ к базе с помощью запроса тоже ограничен.

Вопрос: Директива по умолчанию (если явно не указать перед процедурой или функцией)?

Ответ: &НаСервере

Вопрос: Для чего используют директиву "НаКлиентеНаСервереБезКонтекста"? Какие у нее особенности?

Ответ: Как я писал выше эта директива для выполнения процедур и функций на клиенте и на сервере без контекста формы. И ограничен доступ к базе данных. Источник данных для процедур под этой директивой – переданные параметры.

Вопрос: Чем структура отличается от соответствия?

Ответ: в первую очередь типом данных ключа. В структуре это всегда «Строка». В соответствии, любой. Из этого вытекает гибкость соответствия. Также они отличаются методами. У соответствия метод «Получить()», а у структуры «Свойство()» . Методы, которыми они отличаются.

Вопрос: В какой момент отрабатывают подписки на события?

Ответ: Подписки на события отрабатывают после обработчика из модуля объекта.

Вопрос: Имеет ли значение порядок измерений в регистрах?

Ответ: Имеет, т.к. в регистрах измерения индексируются по порядку. И в первую очередь надо ставить то измерение, поиск по которому выполняют чаще.

Вопрос: Что означает флаг "Вызов сервера" у общего модуля?

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

Вопрос: Что такое запрос? Для чего нужны запросы?

Ответ: Запрос- это обращение к базе данных с помощью языка запроса 1с, который схож с sql. Различие в том, что в 1С данные запрашивают, но не меняют. Собственно, запрос нужен чтобы получать необходимые данные.

Вопрос: Чем отличаются соединения левое, правое, внутреннее, полное?

Ответ: Речь идет об условиях в запросе. Когда мы из 2 таблиц хотим одну и добавляем условия:

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

2.Право соединение. По аналогии с левым, только данные берут из 2 таблицы, а из первой совпадения. Не забываем про ЕстьNULL().Относится к внешнему соединению

3.Полное. Относится к внешнему соединению. Берут все данные из обеих таблиц. Там, где нет совпадений опять появляется NULL.

4.Внутреннее. Собственно, название говорящее. Соединяются только совпадающие данные. Поэтому никакого NULL быть не может.

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

Вопросы 2-й категории сложности (продвинутый уровень).

Вопрос: Разница директивы «&НаСервере» и «&НаСервереБезКонтекста»?

Ответ: как писал ранее, разница в возможностях использования контекста формы. &НаСервереБезКонтекста данные формы использовать нельзя.

Вопрос: Как передать значение реквизита формы в фильтр формы выбора?

Ответ: Через параметр «Отбор» - структура. Ключ – имя поля по которым происходит отбор, а значение – значение отбора. Выглядит это так:

ПараметрыОтбора = Новый Структура("Поставщик", Истина);

ПараметрыФормы = Новый Структура("Отбор", ПараметрыОтбора);

ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы)

ПараметрыОтбора с полем и значением. ПараметрыФормы с названием параметра и значением. Ну и далее открываем формы с параметрами.

Вопрос: В чём разница между web-сервисами и http-сервисами?

Ответ: в web используется строгая структура и поддержка стандартов. Использует формат XML, JSON. А http использует: XML, текст, JSON для гибкой интеграции с веб приложениями.

Вопрос: Используется ли в web-сервисах json? А в http-сервисах?

Ответ: используется и там и там. Разница в том, что веб- сервисы используют POST-запросы(Отправка данных на сервер), а http – GET-запросы(получение данных).

Вопрос: Зачем нужен XDTO? Что такое схема xml? xsd? XPass преобразование?

Ответ: XDTO – механизм для обмена данными на основе схем xml. Нужен для организации работы с веб-сервисами. Схемы xml и xsd – это языки описания структуры XML документа.

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

Вопрос: Синхронный и асинхронный вызов в новых версиях платформы. Как они работают и в чем их различие? Пример кода приветствуется.

Ответ: синхронный вызов останавливает работу кода, который вызывает метод, до тех пор, пока метод не завершит свою работу. А асинхронный вызов продолжает работу кода, где вызывался метод.

В новых версиях:
&НаКлиенте

Асинх Процедура АсинхВызов(Команда)

Ответы = Новый СписокЗначений;

Ответы.Добавить("Ответ1");

Ответы.Добавить("Ответ2");

ОтветАсинх = ВопросАсинх("Ваш ответ?", Ответы);

ОбщегоНазначенияКлиент.СообщитьПользователю("Ждем ответа");

Ответ = Ждать ОтветАсинх;

Если Ответ = "Ответ2" Тогда

ОбщегоНазначенияКлиент.СообщитьПользователю("Верно");

Иначе

ОбщегоНазначенияКлиент.СообщитьПользователю("Не верно");

КонецЕсли;

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

ВопросАсинх() возвращает тип «обещание». Выводит на экран окно вопроса, не дожидаясь ответа пользователя.

Вопрос: Что такое СКД? Какие наборы данных вы знаете?

Ответ: СКД – система компоновки данных. Куда входит схема компоновки данных, где мы делаем отчеты. Наборы данных :

1.Запрос (Делаем запрос и настройки в конструкторе)

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

3.Объединение(объединение наборов)

Вопрос: Какие встроенные функции группировки ресурсов вам известны? Поясните их различие.

Ответ: Сумма (суммирует значение столбца), Среднее (среднее арифметическое столбца), Максимум (возвращает максимальное значение), Минимум (минимальное), Количество (возвращает количество значений. NULL в расчет не берется), Количество различные(Возвращает количество различных значений. NULL в расчет не берется)

Вопрос: Для чего нужны вычисляемые поля в запросах?

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

Вопрос: Чем отличаются временные и виртуальные таблицы?

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

Вопросы 3-й категории сложности (уровень профессионала).

Вопрос: Что такое механизм расширений в 1С?

Ответ: инструмент доработки конфигурации, без снятия конфигурации с поддержки.

Вопрос: Какие виды расширений существуют, в чем их различия по назначению?

Ответ: Исправление для корректировки ошибок. Адаптация – доработка под нужды пользователя. Дополнение – внедрение нового функционала.

Вопрос: Что такое индексы в таблицах данных 1С? Как они влияют на производительность?

Ответ: Объект базы данных, который делают для быстрого поиска. Однако процесс изменения и обновления может замедлится.

Вопрос: Нужно ли использовать индексы и в каких случаях?

Ответ: Нужно использовать индексы для данных, которые часто ищут.

Вопрос: Будет ли использоваться индекс, если в запросе есть условие по третьему измерению регистра, все измерения в котором проиндексированы?

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

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

Ответ: Для получения точных данных необходимо использовать момент времени. Момент времени это ссылка и дата в одном флаконе и даст правильную информацию при запросе.

Вопрос: Почему возникает ошибка "В данной транзакции уже происходили ошибки!"? Как её избежать?

Ответ: В конструкции попытка-исключение произошло «Исключение» > код продолжил работу, а транзакция не сохранилась. Чтобы избежать надо:

1.В блоке «попытка-исключение» не располагать метод НачатьТранзакцию()

2.Если действия выполняются после метода НачатьТранзакцию() – они должны выполняться в блоке «Попытка».

3. Метод «ЗафиксироватьТранзакцию» перед оператором «Исключение»

4. В блоке исключение вызвать метод «ОтменитьТранзакцию»

Вопрос: Стандарты 1С по организации проведения документа. Где подготавливаются данные для проведения?

Ответ: Подготовка данных для проведения документа в 1С происходит в несколько этапов:

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

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

3. Инициализация данных документа. Выполняется запрос, который выгружает таблицы значений для движений и вставляет их в свойство «ТаблицыДляДвижений» свойства «ДополнительныеСвойства» документа.

Вопрос: Как обратиться к определенному типу составного поля в запросе?

Ответ: С помощью оператора ССЫЛКА Например :

ВЫБОР

КОГДА РасчетыСКлиентамиОбороты.Регистратор ССЫЛКА Документ.ОперацияПоПлатежнойКарте

ТОГДА РасчетыСКлиентамиОбороты.Регистратор

ИНАЧЕ NULL

КОНЕЦ КАК Эквайринг