Типовые операции в 1С: БГУ 2. Часть 4. Заключение

14.09.21

Разработка - Механизмы типовых конфигураций

В данной статье автор расскажет, что такое типовые операции в конфигурации бухгалтерии для госсектора, установит стандарты качества написания типовых операций. Часть 4 "Заключение". Завершаем типовую операцию из ТЗ, изучаем простые условия, немного касаемся сложных условий, прикасаемся к булевой алгебре, изучаем функцию ЗНАЧЕНИЕ() и прочие прикладные функции как примеры, задаем стандарты типовой операции.

Хотелось бы начать с того, чтобы мы вместе с вами реализовали пример типовой операции, который начали в самом начале, и уже перешли к описанию функций. 

 

 

Те, кто уже реализовывал подобные типовые - наверняка уже это знают, но для тех, кто только разбирается, я бы хотел подчеркнуть один узкий момент. Обратите внимание, что в списке операций уже есть 2 операции по денежным обязательствам. Значит ли это, что они будут дублироваться? Где программа возьмет данные для их формирования?

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

Ранее, действительно, денежные обязательства формировались автоматически. Бралась сумма начисления, кое-как вычитался аванс, и все эти операции мы не видели, и любые корректировки лепились самым отвратным способом, а именно правились проводки вручную в документе (снималась позиция сформировано автоматически и правились руками). Так как разработчики все-же иногда думают о тех, кто на местах, они реализовали табличную часть в самом документе (можете посмотреть в поступлении, есть вкладка "Денежные обязательства", которая выглядит подозрительно недоделанной. В табличной части мы можем с вами проставить КФО, КПС, КОСГУ, Сумму и насладиться полем под названием "Заглушка", которое сделано из-за определенной специфики кривизны самой платформы 1С. Так вот, это и есть новая табличная часть, которая стала частью документа, то-бишь теперь источник не является дополнительным (формирующимся во внешней среде). И благодаря данному источнику (чтобы не грохнуть старые операции, появилась новая операция без пометки (устарела). Она полностью берется из данной табличной части, что позволяет нам контролировать КПС, КОСГУ и КЭК. Но в ряд не профессионализма методологов 1С, мы не можем выбирать в данной таблице раздел лицевого счета под определенные КФО, реализацией чего мы собственно сейчас и займемся.

 

 

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

Итак, для начала определимся с логикой. В данном случае, мне нужно найти необходимую операцию, через которую я буду ее реализовывать. Мне очень нравится операция "РазделЛицевогоСчетаПоКФО", которая даст мне необходимый раздел л/с по КФО (логично, верно?). У меня были учреждения, в которых был 1 лицевой с двумя разделами под каждый КФО, для чего данная операция отлично подходит. Также бухгалтера немного нервничают, когда видят приписки к разделам лицевых счетов в виде (06), (02) и т.п. И если 02 - хоть как то похоже на предпринимательскую деятельность, то 06 как средства юридических лиц - слабо похожа на КФО 4 (коим и является по методологии). Делая операцию через лицевой счет в доп реквизитах мы очень хорошо экономим и на времени и на свободном месте в интерфейсе.

Так как я изначально хотел делать через данную операцию, я и создал 2 реквизита лицевых счетов (Помните, я сказал, что в дальнейшем объясню? Вот так все хитро).

 


Операция "РазделЛицевогоСчетаПоКФО" принимает 2 аргумента. Для тех, кто плохо понимает программирование, объясняю. мы должны предоставить этой функции что она хочет, чтобы она автоматически нам отдала, что нам нужно. В данном случае это "(<ЛицевойСчет>, <КФО>)". Сразу хочу вам сказать, что такое символы <>. На самом деле это своего рода программистские кавычки, чтобы вы понимали, что ей нужно скормить. В данном случае мы должны разместить наш лицевой счет до первой запятой, и КФО после нее. Сейчас остановились и перестали переключать окна и пробовать писать текстом номера ваших лицевых и КФО. Программа не хочет вашего текста (если вы до сих пор так думаете, вернитесь, в конце третьей части написано, что вам нужно прочитать), она хочет объекты (а если нас читают программисты, то вы уже поняли, что в <> пишется тип объекта, который программа хочет на вход). В данном случае нам нужно будет где-то найти КФО и лицевой счет.

 

 

Вот и они. Теперь, когда мы их нашли, просто перетащим их в поле формулы. И теперь вроде как все хорошо, но мы использовали только один вариант, в данном случае, он может быть универсальным. Какой бы вы лицевой не поставили в реквизит, программа найдет в нем раздел и покажет вам. Но как сделать так, чтобы программа сама ВЫБИРАЛА и ставила нам то, что требуется? Верно, использовать конструкцию выборы (если вы читали то, что я просил прочесть в статье 3 в самом низу, вы наверняка ее видели, но могли не понять, как это работает. Разберем на примере ниже (аналог if-then-else).

 

ВЫБОР
    КОГДА СтрокаТаблицы.КФО = ЗНАЧЕНИЕ(Перечисление.КВД.Внебюджет)
        ТОГДА БухгалтерскиеОперации.РазделЛицевогоСчетаПоКФО(
            ДополнительныеРеквизиты.ЛицевойСчетДляКфо2#ЗначениеЗаполнено/Прервать, 
            СтрокаТаблицы.КФО) 
    ИНАЧЕ БухгалтерскиеОперации.РазделЛицевогоСчетаПоКФО(
            ДополнительныеРеквизиты.ЛицевойСчетДляКфо4#ЗначениеЗаполнено/Прервать, 
            СтрокаТаблицы.КФО) 
КОНЕЦ

 

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

Далее, поанализируем. После слова КОГДА у нас идет условие. То бишь, когда условие будет исполняться - будет происходить то, что идет после ключевого слова ТОГДА. Слово ИНАЧЕ указывает на то, что будет происходить в случае, когда не выполнится то условие, которое написано после слова КОГДА. В данном случае мы можем с вами это представить на чистом русском языке (хозрасчетники, КЫШ отсюда! вашего мнения по поводу наших страшных аббревиатур никто не спрашивал! мы мы любим наши КОСГУ, КПС, КФО, правда же? ведь правда любим? ;) ) 

На русском языке это звучит так:

В поле формула раздела лицевого счета мы просим нашу программу осуществить выбор. КОГДА в строке таблицы "Денежные обязательства" (поскольку она сейчас источник) КФО будет 2, ТОГДА программа вычислит раздел лицевого счета по КФО взяв наш дополнительный реквизит и просканирует его используя КФО из строки таблицы. ИНАЧЕ, если КФО не будет 2, тогда программа вычислит его, взяв лицевой счет из другого дополнительного реквизита, и вычислит из него. КОНЕЦ выбора программы.

В принципе, уже все понятно, но данная операция может быть не совсем емкой, потому что у нас с вами могут быть разные КФО, разные реквизиты лицевых счетов (которые мы можем добавлять до бесконечности), как же нам быть в таких ситуациях? Все очень просто, мы немного иначе интерпретируем эту же конструкцию (сделаем аналог switch case):

 

 

Все то же самое, только мы можем напихивать бесконечные КОГДА-ТОГДА, не ставя ИНАЧЕ вовсе. Давайте скопируем эту же формулу без изменений в кредит и посмотрим на результат. Чтобы увидеть результат, нам необходимо ЗАПИСАТЬ операцию, после чего ЗАПИСАТЬ типовую операцию. После этого можете перепровести документ. Отслеживать, записали вы или нет ваши объекты, можно по звездочке у его наименования вверху страницы. Не забывайте делать это каждый раз перед проверкой проведения.

 

 

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

Начну с того, что в конструкции выше, вы видели, как я определяю КФО через функцию ЗНАЧЕНИЕ. Как и написано в помощнике языка СКД, вы можете доставать с помощью этой функции любой ПРЕДОПРЕДЕЛЕННЫЙ объект или ПЕРЕЧИСЛЕНИЕ в программе. Для этого достаточно будет открыть вашу конфигурацию в конфигураторе и посмотреть, есть ли такое там. Самые простые примеры реализации:

 

 

Пример по зарплатным проводкам вы можете посмотреть в операции "Отражение з/п в учете" в своей конфигурации. То-есть, синтаксис использования функции ЗНАЧЕНИЕ() - написать внутри полный путь до элемента ПЕРЕЧИСЛЕНИЯ или ПРЕДОПРЕДЕЛЕННОГО элемента справочника. 

 

 

Примеры:

Для перечислений это будет ЗНАЧЕНИЕ(Перечисление.КВД.Внебюджет)

Для справочников это будет ЗНАЧЕНИЕ(Справочник.ВидыОперацийОтраженияЗарплаты.ЗП_Начисление_Зарплата)

С этим разобрались. Далее, мы должны понимать что такое Булево. Понятно, что это либо 1 - либо 0, либо ИСТИНА - либо ЛОЖЬ. Понимание механизма действия данных Булево, даст нам возможность писать красивые логические конструкции не усложняя интерфейс. Где может использоваться Булево? Ну например в конструкции ВЫБОР-КОГДА-ТОГДА, именно Булево используется в ключевом слове КОГДА, то-есть, когда мы сравниваем с вами равно ли КФО из табличной части нашему значению, оно возвращает либо ИСТИНА либо ЛОЖЬ. Таким образом программа понимает когда условие исполняется, а когда нет. Например, если мы создадим реквизит булево в дополнительных реквизитах и назовем его "Принимать бюджетные обязательства" и поставим в Условие проводки: 

 

 

Тогда пока галочка не будет ИСТИНА (то-бишь не будет поставлена) операция не будет сделана. Это актуально например в тех случаях, когда бухгалтера просят вас навешивать лишний функционал на проводки (которые формируются всегда одинаково но с мелкими отличиями). Например для того, чтобы у многих учреждений схлопывались счета расчетов, мы делали галочки, которые при нажатии позволяли менять контрагент и договор (то-бишь учреждение как отправляло в банк - так и отправляет, а в проводке это заменяется на субконто "Сотрудники"). Таким образом мы всегда видим чистое сальдо в разрезе и не схлопываем пересортицу как сумасшедшие. Методологическое решение данного вопроса - бить бешеное количество лицевых счетов - что по мне так сомнительно.

Давайте в продолжении темы про Булево поговорим о логических операторах. Рассмотрим простые И, ИЛИ, НЕ. Заниматься булевой алгеброй не будем. Опишу в кратце. Эти операторы дают возможность строить сложные условия. Сложные не потому что трудно, а потому что в них будет больше одного значения ИСТИНА ИЛИ ЛОЖЬ. Опишу вам мини табличку с этими операторами:

ИСТИНА И ИСТИНА = ИСТИНА
ИСТИНА И ЛОЖЬ = ЛОЖЬ
ЛОЖЬ И ИСТИНА = ЛОЖЬ
ЛОЖЬ И ЛОЖЬ = ЛОЖЬ

Для чего нужен этот оператор? Например для конструкции когда должно одновременно соблюдаться 2 условия. Например:

ВЫБОР
    КОГДА БухгалтерскиеОперации.СчетПоКоду("502.11") = ДополнительныеРеквизиты.СчетДО И ДополнительныеРеквизиты.ПринятьБО
        ТОГДА....

        
И так далее. То есть если одно из условий не выполняется в нашем сложном условии - сложное условие не выполняется полностью

ИСТИНА ИЛИ ИСТИНА = ИСТИНА
ИСТИНА ИЛИ ЛОЖЬ = ИСТИНА
ЛОЖЬ ИЛИ ИСТИНА = ИСТИНА
ЛОЖЬ ИЛИ ЛОЖЬ = ЛОЖЬ

Этот оператор нужен как раз наоборот, если какое -либо из условий в сложном условии выполняется - выполняется все сложное условие. Пример рисовать не буду, должно быть понятно. И последнее

НЕ ИСТИНА = ЛОЖЬ
НЕ ЛОЖЬ = ИСТИНА

Инвертирует наше с вами значение. А вот здесь приведу пример. Представьте, если у нас есть галочка на форме, которая называется "Не формировать проводки налогового учета". То-бишь обычно, этот документ ВСЕГДА формирует эти проводки, но у нас появились новые вводные, когда (образно говоря, ситуация фантастическая) Иван Иванович не покупает огурцы, а с огорода приносит. И это происходит раз в неделю-месяц-год (придумайте период). В следствии этого, мы с вами переписали для бухгалтера типовую и сделали галку "Не формировать налоговые проводки". Это значит, что пока она не стоит - проводки формируются, когда нажата уже нет. Как это реализовать? Очень просто. Написать в условии проводки

НЕ ДополнительныеРеквизиты.НеФормироватьПроводкиНалоговогоУчета

Когда галочка будет отжата (давать ЛОЖЬ) программа будет инвертировать значение и давать ИСТИНУ (проводка будет формироваться).

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

(БухгалтерскиеОперации.СчетПоКоду("502.11") = ДополнительныеРеквизиты.СчетДО 
И ДополнительныеРеквизиты.ПринятьБО) 
ИЛИ НЕ ДополнительныеРеквизиты.НеФормироватьПроводкиНалоговогоУчета

То есть либо то, что в скобках исполнится, либо то, что не в скобках.

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

Поговорим теперь о строках. Как и в обычном программировании, мы можем складывать (соединять строки). Для чего нам это может понадобиться? Например, давайте сделаем 2 операции, которые формируют КОСГУ из счета и наоборот. Если что, для этого есть отдельные функции, но это в рамках примера:

БухгалтерскиеОперации.СчетПоКоду("302." + ПОДСТРОКА(СтрокаТаблицы.КЭК.Код, 2, 2))

Подобная строка даст нам счет расчетов по КОСГУ. Например 302.11 из 211, то-есть "302." + "11". Заметьте, что я подставил не сам объект КЭК, а поле код. В некоторых случаях может быть наименование. О функции подстрока почитаете в мануале.

БухгалтерскиеОперации.КЭКПоКоду("2" + ПОДСТРОКА(СтрокаТаблицы.СчетУчета.Код, 5, 2))

Операция наоборот. Даст КОСГУ 211 из 302.11. Из данных "2" + "11".

Аналоги данных операций:

 

 

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

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

Стандарт написания типовых операций

1) Не по каждому чиху бухгалтерского учета стоит делать типовую. Если вы собрались писать типовую операцию - проверьте функционал конфигурации (очень часто, она вас приятно удивит)

2) Планируйте написание своей типовой операции. Если вы себе плохо представляете процесс и вам сложно определиться - выпишите для начала на бумаге все входные данные, найдите объекты, которые позволят вам реализовать задуманное, и только после этого занимайтесь написанием.

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

4) Не добавляйте лишние табличные части (возможно, об этом напишу статью). Да, такой функционал есть, но помните, что данные табличные части вы сможете удалить только если в них не будет никаких данных. Скрыть вы их также не сможете. Если через неделю-месяц-год ваши бухгалтера скажут "УБЕРИТЕ УДАЛИТЕ НАМ МЕШАЕТ" вам придется им объяснять, что с этой красотой им сидеть до обрезки базы точно. И все ваши благие намерения будут огрызками свисать с и так перегруженных форм документов.

5) Не добавляйте дополнительные реквизиты без необходимости. Изучите функции типовых операций, реквизиты документа. Возможно, вы что-то упустили? Если вы считаете, что вы нашли супер лазейку, и вы сможете сделать "СУПЕР НАСТРАИВАЕМУЮ ОПЕРАЦИЮ С МИЛЛИОНОМ ДОП РЕКВИЗИТОВ НА КАЖДЫЙ СЛУЧАЙ, ОЙ МАРИВАННА, ВАМ РЕКВИЗИТ ПОД КРУЖКУ ЧАЯ НАДО? ЩА ЗАБУБЕНИМ!" - забудьте. Лучше делать емкие тематические операции с минимумом функционала бухгалтера, чем давать ему 100 реквизитов и 200 галочек, рассказывая, какой вы гениальный программист и ей больше не нужна ни одна операция из списка. Задача типовой - не показать, какой вы гениальный, а упростить труд бухгалтера.

6) Я понимаю, что вы скорее всего очень занятые люди, которые разрываются на работе. Пожалуйста, выделите время, изучите то, как написаны операции в программе. Посмотрите на условное форматирование и емкость операций. Даже если вы нашли кривые операции - напишите себе об этом в послужной список и продолжайте изучать. Спецы 1С, разработавшие конфигурацию, очень красиво писали типовые операции и рисовали их интерфейсы. У них есть чему поучиться.

7) Если вы все-таки решили нарисовать дополнительные реквизиты - распихайте их по группам и сделайте максимально емкий интерфейс. Старайтесь, чтобы даже в ситуации, когда у каждого вашего бухгалтера монитор 52 дюйма и разрешением миллион на триллион пикселей, даже в такой ситуации ваш интерфейс должен быть очень компактным и сжатым в уголке. Таким образом, когда у вас появится необходимость подключить кого-то через браузер из дома (где таких мониторов нет) или подключить нового человека со старым монитором с лучевой трубкой - человек мог работать спокойно и эффективно.

8) Если вы добавляете новые операции - подумайте, может, их нужно формировать блоками-группами. Распределите операции по порядку. Если у вас вперемешку идут операции обязательств и материальных запасов - вам стоит задуматься о группировке.

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

10) Не создавайте реквизитов под объекты, значение которых вы можете вытянуть из конфигурации функцией (ЗНАЧЕНИЕ). Изучите конфигуратор. Вдруг там есть то, что вы ищете.

11) В операциях, все реквизиты должны получаться из формулы или дополнительных реквизитов. Заклинаю вас никогда не выбирать значения реквизитов вручную в типовой операции. Исключение может составлять только типовая операция, написанная для документа "Операция бухгалтерская", и то, при должном мастерстве вы сможете этого избежать.

12) Старайтесь использовать все разделы Операндов формул, которые мы с вами рассмотрели. Чем осознаннее вы творите - тем более отказоустойчивые операции у вас появляются.

13) Не забывайте про условия и функционалы галочек булево. Попробуйте потренироваться и сделать пару операций из этой статьи. Получилось? Измените пару реквизитов на свои. Попробуйте изменить другие типовые операции из конфигурации. Вспомните, что было для вас самым сложным, и попытайтесь повторить по правилам, данным здесь. 

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

15) Если вы копируете типовые, рисуете им аналоги в других документах, не знаете, что такое характеристика движения - ОЧЕНЬ ТЩАТЕЛЬНО изучайте те проводки, которые уже есть в программе. Не проставив характеристику движения в определенных проводках, вы рискуете не собрать отчетность в конце периода. Виноватым будете вы, даже если ваши бухгалтера не поймут и вы отшутитесь, мол "Ой ета 1С тупая, разрабы идиоты". Пожалуйста, проверяйте любые аналогичные проводки, которые уже есть в конфигурации.

16) После того, как вы написали проводку - обязательно проверяйте ее, проверяйте реквизиты, проверяйте проведение. Каждая ячеечка субконто счета - должна быть заполнена в соответствии с планом счетов. Проверяйте КОСГУ, КПС. Соответствие КРБ и КДБ. Наличие корректной суммы и обязательно количество в проводках (постоянно вылетает из головы, потому что сумма одна на проводку, а количество разное и в ДТ и в КТ).

17) Не забывайте заполнять первичные документы и описание проводки. Помните, вы сбежите, а бухгалтер будет печатать журналы операций с пустыми графами.

18) Не забывайте писать комментарии к типовой операции, если вы хотите отметить что-то важное в самой операции - используйте также поле условие с такой же формой заполнения, как и в условии типовой. Оставляйте комментарии себе и тем, кто будет после вас.

19) Никогда не снимайте с поддержки оригинальные типовые операции (это ваша точка отсчета и точка сравнения при обновлении). Лучше сделайте свою рядом, даже если там минимальные изменения. Это поможет вам держать вашу типовую в актуальном состоянии, ссылаясь на постоянно обновляемый оригинал. Нет причин редактировать ее, и не будет.

20) Пишите простые и емкие наименования типовой операции (не забудьте проставить теги) и наименования операций внутри. Не пишите "Тыр-пыр 8 дыр 401.20 бюджет". Спросите у бухгалтера что это за операция, поищите, что она делает. Хорошим тоном написать, к примеру, не "205.31 - 401.10 2", а "Начисление дохода". Ведь ваша операция может быть универсальной и начислять не только на 205.31. Также, безликие операции с описанием корреспонденцией счетов непонятны многим бухгалтерам. Будьте ближе к себе и народу. Думаю, сейчас появились читающие, которые про себя мне отвечают, что они уже ~n лет пишут так и все ок. Я объясню. Обычно, когда мои коллеги пишут подобные наименования - это прямой путь к такому диалогу: на свой логичный вопрос, что делает операция, я получаю "Привет, а там же написано, что непонятно?". И чаще всего непонятно, для чего это сделано, так как, например, операция может формироваться по обоим КФО (просто быть универсальной), после определенных пертурбаций тот же отвечающий по телефону перекорежил операцию, и теперь она дает вообще другие проводки. А еще он мог в ней заменять ряд субконто, которые он выцепляет из мест совершенно неочевидных. В общем, баста, карапузики. Все должны писать емкие и понятные наименования. Не знаете, как написать - спросите у бухгалтера, что вы вообще делаете. Сформулируйте. Залезьте в гугл и прочтите. Не творите хаоса, его и без вас хватает.

21) Если вы нарисовали доп. реквизиты - вы уже четко понимаете, куда они пойдут. Если вы нашли спустя какое-то время более эффективный вариант работы типовой операции (алгоритм, функцию) и хотите ее переписать - сделайте сначала копию операции, а старую сделайте неактивной. Пусть она хранится и будет в старых документах. Ничего страшного не будет.

22) Вспомнил, пока писал свой любимый пункт. НЕ СОЗДАВАЙТЕ НА СЧЕТАХ УЧЕТА СУБКОНТО, КОТОРЫЕ ВЫ НЕ УМЕЕТЕ ИСПОЛЬЗОВАТЬ. На моей памяти, был консультант, который сейчас достиг очень больших высот, но ~n лет назад написал операцию для своей корректировки в плане счетов. Там он добавил субконто номенклатура и заставил туда перебить весь справочник контрагентов, заведя номенклатурную группу контрагенты. Почему? Потому что на счете было субконто контрагенты. Помните, что вы можете отдельно создать новое субконто и добавить его на счет. Хотя, если честно, в его случае даже это не понадобилось бы. Для тех, кто считает, что эта история - просто лютый сюрр, у меня таких историй наберется на 2 ивента инфостарта.

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

 
 Проза, никак не относящаяся к статье

P.S. Я работаю в бюджетной сфере не так давно, и вообще в сфере айти прикладной к бухгалтерии и первичным документам, но меня крайне удивляет, что многие зарабатывают на отсутствии какой-либо информации в руках людей. Своими статьями я бы хотел передать все то, что у меня есть вам. Поэтому, если вы не согласны с чем то - напишите. Если я был груб - необессудьте. Так или иначе, я бы хотел, чтобы каждый из вас, кто будет читать мои статьи никогда не попал в те ситуации, в которые попадал я. Когда не у кого спросить, и когда никто, в том числе даже разработчики не могут тебе помочь потому, что на незнании и невежестве построен бизнес.

Статью объявляю законченной. Если далее буду писать какие то дополнения - уже не буду навешивать цифры продолжения. Ссылки на новые смежные статьи обязательно напишу по мере выхода (если они будут)

 

 

Хорошего вам дня. 

Типовые операции в 1С: БГУ 2. Часть 1

Типовые операции в 1С: БГУ 2. Часть 2

Типовые операции в 1С: БГУ 2. Часть 3

См. также

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

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

20.08.2024    1738    PROSTO-1C    0    

18

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Эта ошибка была обнаружена мной в типовой конфигурации 1С:Комплексная автоматизация 2 (2.5.16.115), БСП версия 3.1.9.302. Возникает она после того, как вы добавляете в расширение бизнес-процесс или задачу, выполняете обновление идентификаторов метаданных расширений, но ошибка при записи любого элемента справочника "Профили групп доступа" всё равно остаётся.

01.07.2024    1747    Vidz    0    

11

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Очень часто в написании кода требуется обращаться к предопределённым значениям. Если идёт обращение к типовым предопределённым значениям, то проблем не возникает.

24.06.2024    1106    olja-ljaaa    0    

3

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    4891    Serg2000mr    32    

108

Механизмы типовых конфигураций Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    1058    tango    5    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mifka186 9 14.09.21 10:12 Сейчас в теме
Спасибо за цикл статей.
Очень жаль, что их не было полгода назад. Пришлось разбираться методом "тыка".
2. adeich 203 16.09.21 16:49 Сейчас в теме
Спасибо за статьи!
Интересно и поучительно! хотя многое уже и используется.
Хотелось бы статью - почему вы "противник" дополнительных табличных частей?
3. ldmonster 99 16.09.21 17:26 Сейчас в теме
(2)
Дак уже описал. Сегодня бухи хотят, завтра не хотят. В результате, пока в них так или иначе какие то данные хранятся - они так и будут мешаться до обрезки.

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

На самом деле по поводу типовых можно писать бесконечно. Здесь я описал базовые механизмы. Думаю потихоньку собирать интересные решения и выкладывать. Пока на вскидку тяжело вспомнить что то такое заковыристое, чтобы написать. Из такого, на скорую руку, могу например написать решения через ЗначениеЗаполнено(), условие через КВР выдернутое из КПС, как раз таки пакостное (но на деле единственное) решение по нормальному вводу реквизита "Мероприятие" не через тип "Все типы". Были у меня еще бухи, которые просили сделать автоматическую разбивку сумм в процентном соотношении. 20 к 80, 10 к 90 итп (там конечно те еще потуги были, но реализовали в зависимости от булевых галок).

Можете написать свои какие то запросы - вместе что-нибудь придумаем. Пока я тут немного завис на программинге в с++, поэтому не пишу ничего. Как вдохновение попрет - обязательно сделаю. Если написал что то интересное для вас в этом посте - напишите об этом.
4. adeich 203 21.09.21 10:09 Сейчас в теме
(3),
Чаще всего бухи просят "детализировать" обязательства (принятое и денежное), особенно по коммуналке, т.е. разбивают, например, водоснабжение, газоснабжение, энергоснабжение, когда они заключаются одним договором с генерирующей компанией. А вышестоящая просит (требует :) ) разбивку, хотя в регламентированной отчетности все идет сводом
Тут и приходит мысля вести их отдельно в доп.таблице и на отдельном управленческом счете
5. ldmonster 99 21.09.21 10:21 Сейчас в теме
(4)
Вариант интересный, но так и не нашел применения доп таблице. В данном случае, предложил бы сделать галку в типовой "Учет коммунальных услуг" и дублировал бы их на забалансовом аналитическом вспомогательном счете с субконто контрагент-договор-номенклатура, либо договор-номенклатура (из договора можно вытащить контрагента) - третье субконто на выбор.

Единственная проблема заключается в том, что многие коммунальные контрагенты (не скажем какие, вы знаете) ведут кривой учет из-за чего там прут какие-то нелепые авансы и их зачёты вручную. В общем, не все наверное так однозначно как я описал в этом посте, но постарался бы сделать без доп таблиц всеравно. Лишние действия бухгалтеру ни к чему.
6. adeich 203 21.09.21 11:09 Сейчас в теме
(5)
дублировал бы их на забалансовом аналитическом вспомогательном счете

примерно так и сделано. Только 3-е субконто Доп.классификация (можно Мероприятия, Направления деятельности) и в таблице разбивка суммы. Скрин быстро накидал для примера, направления деятельности используются для 109 счета
Прикрепленные файлы:
7. ldmonster 99 21.09.21 11:37 Сейчас в теме
(6)
Мы через номенклатуру делали такое. Просто били папку "доп аналитика" и ее использовали. С мероприятиями отдельная песня, их так неудобно выбирать просто ужас.

В данном случае присутствие доп табличной части считаю обоснованным, но можно было и без нее. Потом если перестанет быть необходимой сложно будет удалить.
8. adeich 203 21.09.21 14:22 Сейчас в теме
(7)
их так неудобно выбирать просто ужас

с допклассификацией косгу аналогично, пришлось заплатку делать чтобы по коду сортировал при выборе
9. user1717894 21.12.21 07:33 Сейчас в теме
Доброго времени суток! Подскажите пож, как можно типовую операцию, свою, не предопределенную, вызывать для заполнения в документе?
У меня обработка, которая создает документ Кассовое поступление и заполняет его программно. Типовая операция своя. Предопределенную могу выбрать программно. А как обратиться к своей операции? Или нужно делать ее предопределенной?
10. ldmonster 99 21.12.21 10:22 Сейчас в теме
(9)
Ищите по наименованию. Быстро, бюджетно, эффективно.
Если боитесь, что ее будут изменять есть 2 пути. Либо предопределенность, либо скрыть как неиспользуемую.
11. user1717894 22.12.21 09:43 Сейчас в теме
17. sodrk 01.08.22 14:33 Сейчас в теме
(9)Добрый день.
По идее, достаточно получить ссылку на вашу типовую операцию.
Делал так:

БухгалтерскиеОперацииСервер.ДобавитьДанныеДляПроведения(НовыйДокумент, БухОперация, ДополнительныеРеквизиты);	
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
БухгалтерскиеОперацииСервер.ЗаписатьДанныеТиповойОперацииОбъекта(НовыйДокумент, БухОперация,  ДополнительныеРеквизиты,,НовыйДокумент.Проведен);

// Процедура добавляет переданные в структуре ДанныеПроведения данные в ДополнительныеСвойства объекта,
// для обработки в процедуре записи или проведения.
// Параметры:
// Объект - ДокументОбъект - записываемый документ.
// ТиповаяОперация - СправочникСсылка.ТиповыеОперации.
// ДополнительныеРеквизиты - Структура - содержит дополнительные реквизиты типовой операции. 
//							Ключ - ИмяДляФормулы соотвествующего реквизита, Значение - Значение реквизита.
//
Процедура ДобавитьДанныеДляПроведения(Объект, ТиповаяОперация,
		ДополнительныеРеквизиты, ФормироватьПроводки = Ложь) Экспорт

	Если Не ДокументПроводитсяПоРегиструБухгалтерии(Объект) Тогда
		Возврат;
	КонецЕсли;

	ИнициализироватьБухгалтерскиеОперации(Объект);

	Объект.ДополнительныеСвойства.ДанныеАвтоПроведения.ТиповаяОперация = ТиповаяОперация;
	Объект.ДополнительныеСвойства.ДанныеАвтоПроведения.ДополнительныеРеквизиты = ДополнительныеРеквизиты;
	Объект.ДополнительныеСвойства.ДанныеАвтоПроведения.ФормироватьПроводки = ФормироватьПроводки;
	Объект.ДополнительныеСвойства.ДанныеАвтоПроведения.ПрограммноеСоздание = Истина;

КонецПроцедуры
Показать
12. user1602816 11.02.22 23:14 Сейчас в теме
Здравствуйте! А можно ли прописать формулу для даты в документе?
Поясню. Есть документ, в нём 2 проводки. Первая проводка ставится по дате документа, а вот вторая, нужно чтобы она ставилась по формуле "ДатаДокумента + 10 дней".
13. ldmonster 99 12.02.22 08:44 Сейчас в теме
(12)
Здравствуйте.
Хочу вам сказать, что если у вас возникают такие вопросы - скорее всего у вас нарушены процессы в учреждении. Бухгалтерский учет ведется от документов, соответственно, если документ прошел - он должен отметиться в программе именно во время поступления, если нет - то нет.

И ответ - нет, нельзя разбросать по датам по причине, которую описал выше. Но вы всегда можете дописать конфигурацию и тогда наверняка сможете (но еще раз повторюсь, что это неправильно, с точки зрения бухгалтерского учёта)
14. user1602816 12.02.22 11:56 Сейчас в теме
(13) Проводка необходима для постановлений по штрафам. Постановление начинает действовать через 10 дней, отсюда и такой промежуток по времени.
205.45 - 401.40 - 1 февраля
401.40 - 401.10 - 10 февраля
Учредитель одобрил такой подход, поэтому бухгалтеры сейчас в одном документе делают две проводки разными датами.
Да, можно создать реквизит типа "Дата второй проводки" со значением "дата", где бухгалтер и проставляет нужную дату, но для ещё большей автоматизации и саморазвития меня интересует, можно ли прописать какую-то формулу чтобы автоматом +10 дней ставилось.
15. ldmonster 99 14.02.22 09:33 Сейчас в теме
(14)
Еще раз повторюсь, что бухгалтерский учет ведется только по первичным документам и только на дату проведения документа. То что учредители в бгу принимают решения, которые противоречат принципам бухгалтерского учета - известная штука.
На момент моей работы в системе, и это видно по скриншотам, у документа было единое поле дата, которое отвечала за все проводки. Если сейчас что то поменялось и действительно в рф начали вести учет в будущем времени одним документом (тогда я вовремя вышел из бизнеса), то я бы искал формулы прибавления времени аналогичные скд.
Но вообще звучит конечно как жуткий маразм. Я бы сделал иначе. Написал бы обработку с кнопкой, которая создаст отдельный документ, автоматом заполнит и проведет на 10 дней вперед. Так и с проводками путаницы не будет и первичка будет в порядке.

К слову говоря, если вы работаете в облаке каком нибудь типа УАИС - у вас великолепно принимают обработки написанные по правилам 1с фреша.
user1602816; +1 Ответить
16. malkova_j 09.05.22 17:03 Сейчас в теме
Добрый день!
Изменяю типовую проводку по отражению зарплаты
Подскажите пож-та как написать условия проверки СтрокаТаблицы.ВидОперацииПоЗарплате значению НачисленоДоход
Если ввожу условия
СтрокаТаблицы.ВидОперацииПоЗарплате = ЗНАЧЕНИЕ(Перечисления.ВидыОперацийПоЗарплате.НачисленоДоход)
выходит сообщение об ошибке
18. ixijixi 1913 17.08.22 09:52 Сейчас в теме
(16) ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоЗарплате.НачисленоДоход)
19. ixijixi 1913 17.08.22 09:56 Сейчас в теме
Решали примерно такую же задачу, но с использованием доп. табличных частей (да-да, прочитал, что Вы их противник!). Реквизиты ДТЧ хоть и были доступны при конструировании проводок, но вытащить их не получилось. Скажите, все-таки реально использовать реквизиты ДТЧ в проводках, и мы что-то делали не так, или их в самом деле не вытащить?

Под "вытащить" я имею в виду не "вытащить в формулу", а реальное формирование проводки.
20. ldmonster 99 17.08.22 10:38 Сейчас в теме
(19)
Не смотря на то, что волею судеб уже не работаю в этой отрасли - отвечу.

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

А вот если мы с вами говорим о табличных частях, которые вы добавляете через конфигуратор - там отдельная песня вообще. Как-то приходилось допиливать определенные поля, которые невозможно было прописать через дополнительные табличные части (например код цели), вот там мы попрыгали конечно, чтобы заработал алгоритм.

Может повторюсь, но если вы считаете, что вам нужны дополнительные табличные части в документе - скорее всего ушли не туда (тем более, если вы не обслуживаете каких нибудь ЦБ или УФК, а клиента вроде мелкой школы спорта, не в обиду школам спорта естественно). Грамотное и красивое ведение учета будет идти от документов, соответствующих своим КФО и статьям. Просто сам понимаю, всегда пытался сделать максимально удобно для клиента, но по факту, весь этот функционал являлся медвежьей услугой, с которой потом ты сам сражаешься во время отчетности.

P.S. Кажись понял про что вы, вы имеете ввиду конфигурации, где проводки не формируются как в БГУ и ЗКГУ через специальный конструктор. Странно, что там есть функционал дополнительных табличных частей, потому что не понимаю, для чего он тогда нужен. По сути в конфигурациях, которые не имеют возможностей конструктора проводок - мой вариант был бы единственным - расширение. Запиливаем расширение с необходимыми полями и ставим на поддержку (что вы понимаете, очевидно - чревато)
21. ixijixi 1913 17.08.22 10:44 Сейчас в теме
(20)
Если мы с вами говорим про дополнительные табличные части (а это есть не в каждой конфигурации, если я правильно помню) - то да, мы цепляли к ним формулы и проводки. Не понимаю почему вы разделяете формулы и проводки, ведь из формулы, формируются проводки для документа.

Да, речь именно о них.

Я не разделяю формулы и проводки. я говорю о том, что несмотря на то, что в формулу реквизит ДТЧ я смог легко вытащить, в формировании проводки его все равно не удалось заставить участвовать.
22. ldmonster 99 17.08.22 10:53 Сейчас в теме
(21)
Очень странно. Сразу скажу, что когда я работал, у нас было множество сотрудников, которых я к своему сожалению научил работать с дополнительными табличными частями и они мне там навертели конечно проблем. Но точно могу сказать - они работают, вытягиваются в формулы, формулы считаются и на основании формул делаются проводки.

Давайте попробую описать какую штуку я реализовывал:
У меня была проблема, связанная с тем, что приходила одно платежное поручение (на ноунейма), которое потом должно было без лишних проводок лечь по аналитике Контрагент-Договор на определенный счет (если что, это внутренняя аналитика была, никаких нарушений). В общем, мы добавили прям отдельную табличную часть с полями
* Контрагент
* Договор
* Сумма
И соответственно я их тянул в проводку. Нюанс был в том, что пришлось переписать стандартную операцию, которая тянула всю сумму и заставить ее проходиться по строкам дополнительной табличной части, а также написать агрегатную проводку для забалансовых счетов, чтобы сумма бралась из всех строк.
Это было крайне удобно.
Соответственно списание подобных принятых на учет денег происходило аналогично.

Если опишите, в кратце, что у вас не получилось, может предметно обсудим
23. ixijixi 1913 17.08.22 10:56 Сейчас в теме
(22) Спасибо. Мы добавляли не целую ДТЧ, а реквизит существующей ТЧ. И он, хотя и фигурировал в конструкторе проводок, в саму проводку попадать упорно не хотел. За давностью лет подробностей не вспомню (но это было точно с разделами лицевых счетов, зависящими от КФО, прям как у Вас)))
24. ldmonster 99 17.08.22 11:06 Сейчас в теме
(23)
Да, там была функция, что можно было добавить дополнительную табличную часть, как поле к уже определенной табличной части. Это вроде как даже проще, потому что оно рассматривается сразу как поле той табличной части, к которой вы прикрепляете.

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

У меня все работало, однако ж оторвал бы руки себе за такие дополнения (в большинстве своем клепал их в самом начале знакомства с типовыми. чем лучше понимаешь учет, тем более ловко жонглируешь инструментарием, тем меньше тебя задевают слова бухгалтеров). Лучше написать расширение генерирующее 200 первичных документов чем собирать все в одном.

Я начинал лепить видеоуроки на youtube по теме типовых, но из-за смены деятельности забросил к сожалению. Так бы накидал парочку с дополнительными табличными частями, чтобы звучать убедительнее. Однако-ж, даже на обучающих видео с комментариями уже нашлись люди, которые накидали дизлайков, за что им отдельное спасибо, хоть не забываешь для кого трудился.
25. ixijixi 1913 17.08.22 11:16 Сейчас в теме
(24) Спасибо, будем разбираться, возможно что-то делали не так)
26. FidelCom 25.01.23 10:06 Сейчас в теме
Может я чего-то не понимаю, но по моему это какая-то дичь с этими операциями. При добавлении субконто к счету, нужно переписывать(создавать) все типовые операции в которых он учавствует
27. ldmonster 99 25.01.23 10:52 Сейчас в теме
(26)
А куда деваться, надо Федя©

Это вы еще про расширения и обработки задумайтесь, там чуть ли не свой модуль надстроек надо писать, если захотите добавлять то, что будет менять учет.

По сравнению с любыми доработками конфигурации - типовые операции выигрывают, но проблемы очевидны, вы правы.
28. FidelCom 25.01.23 11:08 Сейчас в теме
(27) Добавление дополнительного субконто трудно назвать доработкой. Конфигурирование здесь не требовалось. В БГУ1 все просто было. А здесь опа полная. Особенно с учётом того, что за "вредность" не доплачивают
29. ldmonster 99 25.01.23 11:36 Сейчас в теме
(28)
Да быстро привыкаешь на самом деле. Самый кайф, когда у тебя и доступа ни к каким конфигураторам нет, все что у тебя есть это фреш (к которому все планомерно идет).

Ну и дело привычки, конечно. Мне например было крайне сложно крутить БГУ1, реализуя функционал, который через типовые операции реализуется на раз-два.

Да и вредность - не такая вредность, когда есть где почитать, что посмотреть. Уж больно все эти компании любят скрывать информацию, чтобы их специалистов нанимали.
30. FidelCom 27.01.23 14:25 Сейчас в теме
(29) Вопрос: Как отслеживать изменения в типовых операциях, на основе которых (копированием) сделано 10-20-30-40 других операций. Если базовая типовая изменилась после обновления, получается надо пересоздавать свою?
31. ldmonster 99 28.01.23 08:19 Сейчас в теме
(30)
Чтобы обновить
1)Нужно восстановить связь с родительской типовой, если у вас ее нет.
2)После этого зайти в дополнительные источники внутри каждой типовой и сбросить настройки там.

Отслеживать можно только вручную. Никаких автоматизированных средств не было, на момент моей работы. Да и думаю до сих пор не появилось.
Это я имею ввиду оповещения, если нужно просто сравнить что появилось новое и вы уже знаете что оно появилось - кнопка сравнить операцию уже есть, там же где связь настраиваете. Покажет все различия между вашей и типовой на поддержке.
FidelCom; +1 Ответить
32. FidelCom 30.01.23 11:48 Сейчас в теме
(31) Благодарю, не совсем понятно по пункту 2. Что за "сброс настроек"
33. ldmonster 99 30.01.23 13:06 Сейчас в теме
(32)
У меня нет 1с под рукой, но по скриншотами нашел, что вы должны прощелкать дополнительные источники в разделе источники данных и нажать кнопки "обновить параметры из функции" в обеих колонках.

Раньше этот способ работал. Не думаю, что что-то изменилось сейчас.
FidelCom; +1 Ответить
34. пользователь 25.06.23 19:33
Сообщение было скрыто модератором.
...
35. as7bs 294 05.08.23 14:27 Сейчас в теме
Добрый день. Возникло несколько вопросов:
1. Как округлить число в формуле? Через Выразить(СтрокаТаблицы.Сумма КАК Число(15,0)) выдает ошибку.
Разобрался сам, может кому пригодится: Выразить(СтрокаТаблицы.Сумма, "Число(15,0)")
2. Что дает связь с типовой операцией? Только возможность сравнения? Нет возможности сравнить объединить со связанной? И как вообще найти что было исправлено руками, а что поменялось при обновлении. Идеальный вариант был бы чтобы не измененные объекты сами из типовой обновлялись.
3. Как-то можно установить созданную операцию основной(по умолчанию), чтобы при синхронизации с базой зарплаты сразу устанавливалась новая, а не предопределенная?
36. user861072 01.12.23 00:12 Сейчас в теме
(35) по 2 пункту - да, только возможность сравнения. Тоже мечтаю, чтобы мои ТО сами обновлялись))) Может сделают когда-нибудь как в форматах обмена пользовательский вариант поля.
3. Я предопределенную ставлю недоступной и свою прописываю использовать по умолчанию через Ещё в документе. вроде помогает
Оставьте свое сообщение