1с получить счет по коду
Большинство значений субконто при формировании проводок заполняются значениями элементов справочников (контрагентов, материалов и т. д.) Обычно значения элементов справочников выбираются при вводе документа, однако в некоторых случаях возникает необходимость использовать в алгоритмах формирования проводок конкретные элементы справочников, то есть элементы, имеющие определенный код.
В качестве примера рассмотрим алгоритм формирования проводок документом "Списание материалов", создание которого приводится в книге "Введение в конфигурирование 1С Бухгалтерии 7.7"
В этом документе, оформляющем отпуск материалов для вспомогательного производства, формируются проводки по счету 23, на котором ведется аналитический учет в разрезе затрат вспомогательного производства Список затрат вспомогательного производства представляет собой справочник "Затраты"
Приведем фрагмент алгоритма проведения:
В выделенной шрифтом строке алгоритма субконто дебета формируемой проводки заполняется значением реквизита "Затраты" документа "Списание материалов"
Однако может возникнуть ситуация, когда в алгоритме потребуется вместо значения реквизита документа использовать значение заданного элемента справочника. Например, пусть вместо реквизита "Затраты" документа мы всегда будем использовать элемент справочника "Затраты" с кодом "2" То есть в справочнике "Затраты" мы должны найти элемент с кодом "2", получить его значение и присвоить это значение субконто дебета формируемой проводки.
При решении поставленной задачи мы рассмотрим отдельные приемы работы со справочниками, которые используются в алгоритмах документов, а также отчетов и обработок
Для выполнения действий со справочником нам потребуется специальная переменная, мы создадим ее с помощью функции "СоздатьОбъект"
Эта строка должна располагаться выше строк формирования проводок:
Создав объект, имеющий тип обрабатываемого справочника, мы можем приступить к поиску требуемого элемента справочника
Для позиционирования в справочнике по заданному коду предназначен метод "НайтиПоКоду" Методу "НайтиПоКоду" достаточно указать единственный параметр - код элемента справочника Тогда, чтобы получить элемент справочника "Затраты", имеющий код "2", нужно выполнить следующие действия:
Метод "НайтиПоКоду" осуществляет только поиск объекта с указанным кодом. Для получения значения найденного элемента справочника после метода "НайтиПоКоду" обязательно нужно вызвать метод "ТекущийЭлемент".
Полученное значение справочника мы присваиваем субконто дебета проводки
Итак, мы показали, как значению субконто проводки присвоить значение элемента справочника с заданным кодом.
Однако хотелось бы также обратить ваше внимание на то, что не всегда в обрабатываемом справочнике может оказаться элемент с указанным кодом, в этом случае при формировании значения субконто проводки может возникнуть ошибка. Покажем, как эту ситуацию следует корректно обработать.
Спр=СоздатьОбъект("Справочник.Затраты"); Если Спр.НайтиПоКоду("2")=1 Тогда Операция.НоваяПроводка(); Операция.Дебет.Счет=СчетПоКоду("23"); Операция.Дебет.Затраты=Спр.ТекущийЭлемент(); Операция.Кредит.Счет=СчетПоКоду("10.1"); Операция.Кредит.Материалы=Материалы; Операция.Кредит.МестаХранения=МестаХранения; Операция.Количество=Количество; Операция.Сумма=Сумма; Иначе Сообщить("Искомый элемент не найден!"); КонецЕсли;
Особенности кода счета в 1С:Предприятии 8
Код счета хранится в информационной базе в том виде, в котором был введен. Исключение составляет хранение кода счета в условиях, когда маска кода счета содержит символы “@”. В этом случае группа знаков кода, для которой в маске стоят символы “@”, упаковывается – из нее вырезаются пробелы.
Пример: маска кода "@@@.@@@.@@"
Ввели код "1 .1 .1 "
Сохранится "1.1.1"
При создании нового счета или редактировании уже имеющегося счета в плане счетов код счета редактируется с использованием маски. При вводе ссылки на счета в записях регистров и в других местах код счета вводится без маски.
Перед началом редактирования счета в плане счетов, код счета распаковывается до вида, подходящего под маску. После окончания редактирования код счета упаковывается.
Рассмотрим пример упаковки – распаковки кода счета. Пусть есть некоторый план счетов, для которого указано:
- длина кода счета 10;
- длина наименования счета 30;
- автопорядок по коду – включено;
- длина порядка – 10;
- маска кода счета – “@@@.@@@.@@”.
Выполним следующие действия:
- Введем при создании нового счета код “1 .1 .1 ”, наименование счета и порядок счета.
- Сохраним счет и закроем окно редактирования счета.
- В информационной базе в качестве кода счета сохранится строка “1.1.1”.
- Откроем окно редактирования счета: в качестве кода счета будем видеть строку “1 .1 .1 ”.
Порядок счета
Поскольку с помощью кода счета не всегда можно обеспечить его правильное упорядочивание среди других счетов, введено дополнительное поле - порядок счета (Порядок). Его назначение - хранение данных, обеспечивающих правильное упорядочивание счетов в формах списков и результатах запросов.
В информационной базе порядок счета хранится в том виде, в котором был задан. Задавать порядок счета можно только в том случае, если длина поля Порядок больше нуля.
В форме счета поле Порядок доступно для редактирования, однако по умолчанию в форму не включается, и его содержимое автоматически не заполняется. Если длина поля Порядок больше нуля и значение, записываемое в поле, представляет собой пустую строку, записать объект Счет не удастся, и произойдет соответствующая ошибка времени выполнения.
Если маска кода счета состоит только из символов "@" и ".", можно автоматически сформировать поле Порядок. Это можно сделать в обработчике события ПередЗаписью() с помощью метода ПолучитьПорядокКода():
Процедура ПередЗаписью(Отказ)
Порядок = ПолучитьПорядокКода();
КонецПроцедуры
При формировании порядка счета функция ПолучитьПорядокКода() за основу берет код счета. В пределах групп номера счета символы кода счета сдвигаются вправо, дополняясь слева необходимым количеством пробелов.
Рассмотрим два примера:
1) Код счета: "10.12"
Маска кода счета: "@@@.@@@.@@"
Сформированный прядок счета: " 10. 12"
2) Код счета: "10.5"
Маска кода счета: "@@@.@@@.@@"
Сформированный прядок счета: " 10. 5"
В этих двух примерах, если в форме списка счетов или в запросе будет установлено упорядочивание по полю Порядок, сначала будет идти счет "10.5", а затем - счет "10.12".
Свойство АвтоПорядокПоКоду
Свойство АвтоПорядокПоКоду используется для при упорядочивании по коду в формах списков и в запросах. Его назначение - обеспечить правильный порядок следования счетов в формах списков и результатах запросов.
Свойство АвтоПорядокПоКоду используется для подмены упорядочивания по полю Код упорядочиванием по полю Порядок. Упорядочивание по полю Порядок в этом случае используется как, например, в формах списков счетов, так и в процессе формирования запросов.
Пример использования свойства АвтоПорядокПоКоду в форме списка счетов
На рисунке видно, что в качестве колонки, по которой идет сортировка, отмечена колонка Код. Однако реально для сортировки используются данные из поля Порядок.
- Сменим сортировку: укажем, что сортировать надо по колонке Порядок:
На рисунке видно, что сортировка данных не изменилась. Это действительно так, поскольку свойство АвтоПорядокПоКоду включено.
Если же свойство АвтоПорядокПоКоду выключить, то сортировка будет выполняться иначе:
На рисунке видно, что сортировка выполнена по полю Порядок.
- Сменим сортировку: укажем, что сортировать надо по колонке Код:
На рисунке видно, что порядок следования счетов сменился и упорядочивание происходит по полю Код.
Пример использования свойства АвтоПорядокПоКоду в запросе
Пусть есть следующие счета:
Код Наименование Порядок
3.3.3 Счет 3.3.3 1
2.2.2 Счет 2.2.2 2
1.1.1 Счет 1.1.1 3
Выполним следующий запрос:
ВЫБРАТЬ
ПланСчетов1.Код КАК Код,
ПланСчетов1.Наименование,
ПланСчетов1.Порядок
ИЗ
ПланСчетов.ПланСчетов1 КАК ПланСчетов1
УПОРЯДОЧИТЬ ПО
Код
На этом примере видно, что в случае упорядочивания по полю Код вместо него используется поле Порядок.
План счетов предназначен для хранения списка бухгалтерских счетов.
По своей структуре план счетов напоминает справочник. Можно сказать, что это справочник счетов бухгалтерского учета.
В данной статье будут рассмотрены только специфические для плана счетов свойства.
Чтобы добавить план счетов в конфигурацию нужно в дереве метаданных в узле Планы счетов выбрать команду Добавить:
В одной конфигурации может быть несколько планов счетов, например один для ведения бухгалтерского учета, второй для ведения налогового учета.
В отличии от справочника, план счетов не может быть подчиненным. Но при этом он может выступать в роли владельца для справочников:
Для плана счетов поддерживается только иерархия элементов, при этом ее нельзя отключить. Для каждого счета можно указать ссылку на его родителя. В этом случае подчиненные счета называют субсчета. Количество уровней субсчетов не ограничено.
Как правило счета-группы не участвуют в проводках, а предназначены для сборки итогов по всем своим субсчетам. Платформа автоматически не запрещает выбирать счет-группу в проводках, при необходимости это может сделать разработчик.
В отличии от справочников, для плана счетов по умолчанию устанавливается основное представление по коду. Чаще всего именно оно и используется:
Маска кода
Для плана счетов не поддерживается автонумерация. Код счета нужно заполняться вручную.
При этом для кода на закладке Данные можно указать маску кода:
С помощью маски можно ограничить используемые в коде символы, а также задать иерархию кодов.
В маске можно использовать следующие специальные символы:
Например, если указать маску . то любой введенный символ в поле Код будет преобразован в верхний регистр.
Если указать 99.99, то можно вводить только цифры, при этом на третьем месте всегда будет точка.
Если указать @@.@@, то можно вводить любые буквы и цифры (буквы будут преобразованы в верхний регистр), а также пробел. На третьем месте всегда будет точка.
Если указать \@@.@@, то можно вводить любые буквы и цифры (буквы будут преобразованы в верхний регистр), а также пробел. На первом месте всегда будет @, на третьем месте всегда будет точка.
Если длина кода равна 9 символов, а в маске указано только 5 символов, то фактически можно будет ввести только 5 символов.
Если в маске используется символ @, то при записи в базу данных из кода будут удалены пробелы. Например, если используется маска @@.@@ и ввести код 1 .1, то код будет упакован и в базу данных будет записано 1.1. При открытии формы код будет распакован и приведен к маске. Для других масок код записывается как есть.
Порядок
Если для одного счета ввести десять субсчетов, то они будут неправильно сортироваться по коду:
Субсчет 10 находится выше субсчетов 2, 3 и т.д.
Конечно, можно использовать лидирующие нули:
Но более правильным будет воспользоваться свойством Порядок.
Для этого нужно на закладке Данные указать в свойстве Длина порядка значение больше нуля:
При сохранении конфигурации базы данных в таблицу плана счетов будет добавлена новая колонка Порядок. По умолчанию она не будет заполнена:
Для автоматического заполнения поля Порядок можно воспользоваться функцией ПолучитьПорядокКода. Данная функция преобразует код счета в соответствии с маской счета, и если длина кода меньше маски, то добавляются лидирующие пробелы. Например, для маски @@.@@ и кода 1.1 будет выполнено преобразование в 1. 1.
Номер символа | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
Маска | @ | @ | . | @ | @ |
Введено в поле | 1 | пробел | . | 1 | пробел |
Сохранено в базе | 1 | . | 1 | ||
ПолучитьПорядокКода | пробел | 1 | . | пробел | 1 |
Добавим вызов данной функции в модуле объекта плана счетов в обработчике Перед записью:
Альтернативный перенос остатков между 7.7 и 8.1 (обработкой с ИТС ЗагрузкаДанныхИзТаблДокум) 2
Нашел альтернативный, практически моментальный способ переноса остатков между семерой и восьмерой (так и между восмерками). Не требуется никаких дополнительных усилий, программирования, писания обработок и т.д. и т.п. На ИТС есть обработка под наз Временные таблицы 0
Не помню уже с какого релиза в запросах стало можно использовать временные таблицы. Для этого используется объект «Менеджер временных таблиц». Фактически менеджер временных таблиц описывает пространство имен временных таблиц и отвечает за их создание Временный расчет регистров 0
Временный расчет регистров требуется, если нужно выбрать итоги или движения на определенную дату. По умолчанию итоги регистров выдаются на Точку актуальности. Формулировка 1С - Метод ВременныйРасчет устанавливает флаг участия регистра во временном р Выборка из результата запроса всех вошедших в него значений группировок 4
При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объек Выбрать все движения регистра с остатками 0
Метод ВыбратьДвиженияСОстатками инициирует выбор всех движении регистра в указанном интервале дат. До вызова данной процедуры может быть установлен фильтр (см. УстановитьФильтр), ограничивающий выборку значений из регистра. Если КонецВыборки не ука Посмотреть все результаты поиска похожих
Еще в этой же категории
Формирование проводок в регистре бухгалтерии 4
// Задать выбираемые значения. ВыбранныйОтветственный = Справочники.Пользователи.НайтиПоНаименованию(" Иванцова" ); ВыбранныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(" 00027" ); ВыбранныйДоговор = Справочники.ДоговорыКонтрагентов.Най Как выбрать все счета, в аналитике которых есть вид субконто Контрагент и вид субконто Номенклатура? 3
ВЫБРАТЬ ХозрасчетныйВидыСубконто.Ссылка КАК Счет ИЗ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто1 ПО ХозрасчетныйВидыСубконто. Как программно изменить проводку в Регистре Бухгалтерии? 2
//Необходимо изменить существующие проводки и добавить значение Субконто Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Объект.Ссылка); Набор.Прочитать(); Для каждого Запись из Набор Цикл Если Как установить значение Субконто 2
Процедура УстановитьСубконто(Счет, Субконто, ИмяСубконто, ЗначениеСубконто) Экспорт Если Счет = Неопределено ИЛИ Счет.Пустая() Тогда Возврат; КонецЕсли; Если ТипЗнч(ИмяСубконто) = Тип(" Число" ) Тогда Если ИмяСубконто Счет.ВидыСубконто.Количе Как получить виды субконто счета 2
Пример получения возможных видов субконто у счета НаСервере Процедура ВывестиСубконтоСчета(сч) ТаблицаСубконто = Сч.ВидыСубконто; Для Каждого ТекущаяСтрока Из ТаблицаСубконто Цикл Сообщить(ТекущаяСтрока.ВидСубконто); КонецЦикла; КонецПроцед Посмотреть все в категории Регистры бухгалтерии
Читайте также: