- Основные объекты – изучали назначение объектов конфигурации 1С: Предприятия и тонкости при работе с ними.
1) В случае прерывания соединения между веб-сервером и веб-клиентом, платформа дает 20 минут на восстановление соединения. В противном случае соединение разрывается.
2) Запомнить сколько стоит серверные ключи 1С очень легко. На 32-х битный процессор цена – 32 тысячи, на 64-х битный – 64 тысячи.
3) Тип «Неопределено» означает что это пустое значение неопредленного типа.
4) Тип «NULL» означает НИЧЕГО ВООБЩЕ. Даже нет пустой ссылки.
5) Структура(Ключ, Значение) от Соответствие(Ключ, Значение) отличается тем, что структура может хранить ключ только в строковом типе, а соответствие – в произвольном.
6) Чтобы выбрать определенный реквизит в цикле, нельзя обращаться так: Наим = Спр.Наименование + МояПеременная. Зато можно обращаться так Наим = Спр[“Наименование” + МояПеременная].
7) Если использовать двойную (или больше) конструкцию, в которой получается один объект за другим, от этого 1С тормозить не будет. Не нужно для этого создавать дополнительных промежуточных переменных. Пример использования: Док.Контрагенты.ПолучитьОбъект().ПечатьКарточкиКлиента();
8) Если в управляемой форме у какого-либо реквизита тип данных написан в скобочках, это означает что этот тип преобразован с данных сервера. Обычно это тип «ДанныеФормыСтруктура». В этих случаях для чтения и записи необходимо использовать встроенные функции «ДанныеФормыВЗначение(,)», «ЗначениеВДанныеФормы(,)», РеквизитФормыВЗначение(,)», «ЗначениеВРеквизитФормы(,)».
9) В свойстве «Параметры выбора» любого реквизита можно задавать множество параметров, которые будут наложены
10) Объект «План видов характеристик» нужен для того, чтобы если пользователь указал определенную характеристику (например Вес), он не смог выбрать значение типа, отличного от выбираемого (например ДатаИзготовления).
11) В реквизите типа «ХранилищеЗначения» можно хранить что угодно. Даже образы DVD дисков с фильмами.
12) В СКД источники данных работают только в 14 релизе платформы.
13) В СКД можно сделать несколько вариантов отчетов с разными макетами. Просто нужно на одном и том же макете разместить несколько видов отчетов один под другим, а потом присвоить разные имена разным областям группировок, полей и т.п. в левом окне вкладки «Макеты» схемы компоновки данных.
- Решение оперативных задач – решали задачи складского учета и вывода оперативных отчетов с помощью системы компоновки данных (СКД).
1) СКД в 1С – это 3-е поколение конструкторов отчетов.
2) Прежде чем реализовывать какую-либо систему в 1С, правильнее (подход практически всех профессиональных разработчиков) идти по схеме разработки сверху вниз. Т.е.:
Выясняем каких целей хотим достичь. Затем выясняем какие показатели должны учитываться. Затем выясняем какие нужно будет выводить отчеты. Затем определяем структуру регистров, после чего структуру документов, а затем структуру справочников.
3) В любом документе на вкладке «Движения» в свойстве «Удаление движений» штатное положение «Удалять автоматически при отмене проведения». В зависимости от потребности необходимо использовать «Удалять автоматически» (чтобы движения автоматически перезаписывались) или «Не удалять».
4) У каждого документа есть свойство «Движения». Оно позволяет обращаться через точку к наборам записей регистров, подчиненых данному документу как на чтение, так и на запись.
5) Определение типа движения регистра накопления (Приход-Расход) легче выполнять согласно правилу «нулевой позиции». Рассмотрим это на примере регистра накопления «ЗадолженностиКонтрагентов». Мысленно представляем себе точку с нулем (состояние когда никто никому ничего не должен). Если было 0 долгов, то документ «Расходная накладная» должен долг повышать - тип движения Приход. А документ «Приходный кассовый ордер» должен наоборот уменьшать долг (деньги-то нам вернули!) и тут тип движения – расход.
6) Решали задачу по бронированию товаров от продажи другими клерками
7) У любого регистра накопления и у регистра сведений с режимом записи «Подчинение регистратору», когда программно записываем движение, обязательно надо добавить отбор по регистратору:
НаборЗаписей = РегистрыНакопления.бронированиеТоваров.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ТекДок);
8) Чтобы добавить общую команду, которая будет доступна в нескольких формах одного и того же документа, можно создать подчиненный документу объект типа «Команда.
9) Также в платформе есть возможность добавлять произвольные «Группы команд», которые затем можно отображать на формах. Например группа команд «Печать».
10) В критерии отбора в запросе можно писать такое условие:
(Номенклатура, Склад) В (ВЫБРАТЬ Номенклатура, Склад ИЗ Справочники.Номенклатура ГДЕ ….)
Т.е. по сути проверять вхождение нескольких полей в выборку.
11) Рассмотрели как правильно использовать временные таблицы в запросах с помощью конструктора запроса, без принудительного использования менеджера запросов.
12) Решить задачу устранения дублей строк на экзамене 1С: Специалист можно с помощью примерно следующего запроса:
ВЫБРАТЬ
ПродажаТоваровТовары.Номенклатура КАК Номенклатура,
СУММА(ПродажаТоваровТовары.Количество) КАК Количество,
ПродажаТоваровТовары.Ссылка.Склад КАК СКЛАД
ИЗ
Документы.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
ПродажаТоваровТовары.Номенклатура
ПродажаТоваровТовары.Склад
13) Обеспечить высокую скорость выполнения запроса можно с помощью использования отбора в виртуальных таблицах, применении индексирования, неиспользования упорядочивания там где оно не нужно.
14) В отборе виртуальных таблиц нельзя использовать отбор по дате документы. Нужно использовать метод документа МоментВремени().
15) Проблема копеек (когда рассчитывается средняя себестоимость, товара на складе осталось 5 шт на сумму 100,56 руб., а при списании заново рассчитывается средняя и в итоге может получиться что на складе осталось товаров 0 шт на сумму 0,03 руб.) при проверке остатков решается следующим образом:
Если КоличествоСписываемого = КоличествоНаСкладе Тогда
СуммаСписания = СуммаНаСкладе
КонецЕсли
16) Новая методика проведения заключается в том, что проверка остатков выполняется после записи движений в регистр в транзакции. После того как движения записаны, в коде проверяем – не стало ли остатков меньше нуля, и если стало, то откатываем транзакцию и выдаем пользователю сообщение об ошибке.
17) У каждого документа в его модуле можно использовать свойство «Ссылка», которое хранит в себе ссылку на текущий документ
18) Установить отбор в условии запроса на только проведенные документы можно следующим образом (в условиях запроса, произвольное условие):
ПродажаТоваровТовары.Ссылка.Проведен
19) В консоли запросов, в параметрах запроса «В» означает Выражение и практически никогда не используется.
20) Отладчик сам спихивает точку останова с комментария на ту, где можно остановиться.
21) Подчищать временные таблицы надо не всегда. А только если используется 7-этажный запрос и первая временная таблица не нужна. Иначе особого прироста скорости не заметишь.
22) Сообщение пользователю можно выводить возле поля(свойство «Поле» у объекта СообщениеПользователю).
- Решение расчетных задач – решали сложный сквозной пример (2,5 дня) по расчету заработной платы с формированием документов о начислениях, отчислениях, перерасчетах. В том числе кадровые документы приема и увольнения сотрудников.
1) Зависимость по периоду регистрации используется для удержаний (например алиментов)
2) Не зависит – то что не имеет зависимости от базы (расчет премии суммой)
3) По периоду действия – любые начисления, зависящие от базы.
4) Чтобы проверить какое-то поле на NULL, нужно написать:
ГДЕ ИмяПоля ЕСТЬ NULL
5) У Николая Больсунова есть программа «Менеджер по сворачиванию в трей», в которую встроена программка, приводящая примерный блок текста:
НоваяСтрока.Наименование = ПолноеНаименованиеВерсии;
НоваяСтрока.ПолныйПуть = АдресВременногоХранилища;
НоваяСтрока.Картинка = ПолучитьПиктограмму(ДанныеФайла);
НоваяСтрока.ДобавленИзШаблона = Истина;
В следующий (т.е. расставить равно по масимальной позиции)
НоваяСтрока.Наименование = ПолноеНаименованиеВерсии;
НоваяСтрока.ПолныйПуть = АдресВременногоХранилища;
НоваяСтрока.Картинка = ПолучитьПиктограмму(ДанныеФайла);
НоваяСтрока.ДобавленИзШаблона = Истина;
Работает она с буфером обмена (копируем текст, нажимаем Alt =, вставляем текст)
- Решение бухгалтерских задач – решали задачи от новичка к специалисту по реализации синтетического учета, консолидированного учета, аналитического учета, количественного учета, валютного учета. Сначала на примере простых проводок, потом на забалансовых измерениях, с учетом дополнительной аналитики в субконто и измерениях регистра бухгалтерии.
1) Дебет – приход, а кредит – расход (для организации)
"Страшная правда" состоит в том, что дебет не всегда "плюс", соответственно кредит не всегда "минус". Это справедливо только для активных счетов (грубо говоря, то, что можно потрогать руками), для пассивных (наши обязательства) все наоборот, их сальдо увеличивается по кредиту, а уменьшается по дебету. Получается, что, например, в проводке Дт 70 - Кт - 50 - 20000 руб., сальдо уменьшится у обоих счетов, хотя один из них стоит в дебете.
(Спасибо Филину за это)
2) Актив – это имущество предприятия. Пассив – это то, что бухгалтерия кому-либо должна (в т.ч. хозяину предприятия)
3) Забалансовые счета – это те, у которых нет корреспондирующих счетов
4) В условиях запроса чтобы включить «опциональное условие», пишем:
&Параметр ИЛИ НЕ КакоеТоСвойство
Таким образом сработает или левая или правая часть условия.
5) Во всех отчетах рекомендуется добавлять поле «Период» типа «СтандартныйПериод». А у стандартного поля «НачалоПериода» в поле «Выражение» прописать «&Период.ДатаНачала». А у стандартного поля «КонецПериода» в поле «Выражение» прописать «&Период.ДатаОкончания»
6) В СКД «Группировка заголовок» – это строка с данными, а «Заголовок группировки» - это HEAD таблицы.
7) В СКД, в схеме компоновки данных можно добавлять Папки, а в полях прописывать что они находятся в какой-то папке (не очень удобно, но работает): ИмяПапки.НазваниеПоля
8) Один отчет с несколькими макетами в СКД делается так:
Во вкладку «Макеты» закидываем все возможноые макеты (один под другим в таблице)
Добавляем варианты отчетов. В них именуем поля как В1_ИмяПоля, В2_ИмяПоля и т.п.
Потом в макете добавляем группировки по полям В1_ИмяПоля, В2_ИмяПоля и т.п.
Так можно было решить мою задачу при создании планов работ с фиксированным макетом в одном отчете но с разными вариантами на СКД в 1С: Документообороте.
9) Использование в запросе ВЫРАЗИТЬ(Поле КАК Тип) позволяет убрать лишние таблицы из соединения с полем составного типа данных. Тем самым ускорить выполнение запроса.
10) Козырев Дмитрий посоветовал прочитать статью с диска ИТС->Методическая поддержка-> Технологические вопросы -> «Технологические вопросы крупных внедрений». В ней описываются различные подходы для ускорения работы системы.
11) В условиях виртуальной таблицы по регистру бухгалтерии в условие «Субконто» нужно передавать список необходимых субконто в параметре вида &ВидыСубконтоНС. Где буква Н – означает номенклатура, С – склады. Таким образом платформа автоматически переупорядочит виды субконто по тому списку значений, который мы передали в параметре. Причем в реальной таблице один и тот же субконто мог бы находится в любом субконто (1,2,3).
12) Копирование сохраненных настроек отчетов для всех пользователей можно взять из БСП. А так во всех типовых конфигурациях сейчас настройки будут хранится в справочнике НастройкиПользователей или ПользовательскиеНастройки.
13) Актив баланса – нам должны. Пассив баланса – мы должны.
14) В СКД поле «Роль» в схеме комп-ки данных: флажок «Обязательное» позволяет в любом случае выводить в результате запроса указанное поле. Причем в сам отчет это поле может не попадать. Это можно использовать для различных соединений и объединений таблиц БД.
15) А поле «Игнорировать значения NULL» будет отсекать записи, в которых указанное поле содержит NULL. При этом настоятельно рекомендуется в запросе всегда использовать функцию ЕСТЬNULL()
16) Если в ресурсе отчета СКД, в поле «Рассчитывать по…» ничего не указано, это значит что ресурсы (Итоги) будут рассчитываться по всем полям.
17) Проверку деления на 0 в СКД не обязательно писать, т.к. СКД напишет текст в ячейке: «Деление на 0».
18) Автоупорядочивание в запросе сильно тормозит процесс. Если сортировка не нужна, лучше вообще ее не использовать.
19) Все запросы к остаткам правильно делат ьне на Дату документа, а на его МоментВремени().
20) Чтобы было меньше заморочек при создании пакетного запроса, можно создать новый пакетный запрос и переместить его перед созданным ранее на закладке «Пакет запросов» с помощью стрелок.
21) Поля по которым будет производится соединение в запросе, рекомендуется индексировать (ИНДЕКСИРОВАТЬ ПО). Запрос будет выполняться гораздо быстрее.
22) В автоматической блокировке все те поля, к которым мы обращались во время транзакции автоматом заблокируются от изменения.
23) В запросах конструкция «ДЛЯ ИЗМЕНЕНИЯ» используется чтобы установить автоматическую блокировку и на запись и на чтение (аналог режима Исключительный в управляемых блокировках).
24) Режимы управляемой блокировки данных: Разделяемый – не блокирует на чтение др. пользователям. Исключительный – напрочь блокирует и от записи и от чтения.
25) Козырев Дмитрий рекомендует изучать типовые конфигурации, чтобы понять как пишут конфигурации настоящие специалисты.
26) При файловом режиме работы БД, во время транзакции автоматически блокируется вся таблица. Управляемые блокировки ставь-не ставь, не действуют вообще.
27) Чтобы узнать какой сейчас используется режим работы:
Если Найти(СтрокаСоединенияИнформационнойБазы(), “Srvr=”) > 0 Тогда
// Это означает что сейчас мы находимся в клиент-серверном режиме
КонецЕсли;
28) Движения.Проводки.БлокироватьДляИзменения – накладывает управляемую блокировку.
29) Новый механизм проведения документов заключается в следующем – списание себестоимости выполняется регламентным заданием.
30) Тонкий клиент (программа 1С) может работать и через Web-соединение к серверу.
31) CTRL + “–“ на символьной клавиатуре – возврат к объявляемому методу, от которого мы переходили к его описанию по кнопке F12.
32) Модуль набора записей используется для каждой проводки документа (записи движения).
33) Лучше всего (для людей) в книге «Руководство разработчика 1С: 8.2» описана глава по работе с Запросами. Козырев Дмитрий советует ее прочитать.
34) ALT + “–” используется для закрытия окна в конфигураторе (и некоторых других действий)
Гончаров Дмитрий постоянно приводил смешные аналогии из жизни автоматизаторов:
1) По поводу профессии 1С разработчика:
Есть такая профессия – Родину Автоматизировать!
2) По поводу вызова серверных процедур с контекстом или без контекста:
Без контекста: Звонок в бухгалтерию. Деньги есть? – Есть. – Принесите мне их пожалуйста.
С контекстом: Тот же звонок. Деньги есть? – Есть. Положил трубку, поднял весь свой контекст с кресла и пошел в бухгалтерию за деньгами.
3) По поводу сложных для усвоение материалов по разработке в 1С:
С этой мыслью надо переспать. И желательно не одну ночь.
4) По поводу того, как конструктор запроса постоянно делает ЛЕВОЕ соединение таблиц (и меняет их местами), как бы мы не указывали ПРАВОЕ:
1С:Предприятие любит «налево».
На курсе получил огромный багаж знаний разработчика 1С. Увидел множество подводных камней при разработке. Думаю благодаря курсу разработка на 1С станет гораздо быстрее для меня, т.к. теперь я знаю множество нюансов, из-за которых на отладку кода уходило очень много времени.
На курсе каждому выдали комплект методичек (4 книги) с общим количеством страниц 800. Рекомендую пройти этот курс всем программистам 1С.
По окончании курса получил свидетельство № 2110063533815 от 21.10.2011.
Также во время командировки я выполнил свою цель – успешно сдал сертификационный экзамен «1С:Профессионал на знание основных механизмов платформы 1С: Предприятие 8.2».