Как разделить в 1с
Задача состояла в том, что нужно было из реквизита документа Сответствие выделить две строки и сделать сортировку по ним. Соответствие счета, такого вида: 779000/004599. Как разбить это значение на два?
У функции ПОДСТРОКА три параметра. В качестве первого указывается исходная строка, из которой требуется выделить часть символов — подстроку. Понятно, что тип значения этого параметра — это Строка. Внимание, это очень важное замечание, если использовать тип первого параметра не строку, функция не будет работать, запрос будет выдавать ошибку! Второй параметр определяет позицию символа в исходной строке, с которого начинается выделение части строки, а третий — это длина выделяемой подстроки. Тип значения для второго и третьего параметров — число.
Перейдём к практике:
Код 1C v 8.х
Результат этого запроса следующий:
Название СчетЗатрат Отдел Март
Платежное поручение исходящее 00000000319 от 01.03.2010 14:42:54 779000 004599 9 000
Платежное поручение исходящее 00000000320 от 02.03.2010 12:07:34 779000 004599 4 721,6
Платежное поручение исходящее 00000000203 от 01.03.2010 12:28:52 786500 004599 987 614,51
Платежное поручение исходящее 00000000227 от 03.03.2010 14:16:00 786500 004599 400 000
Платежное поручение исходящее 00000000238 от 05.03.2010 12:37:57 732000 004600 5 400
Платежное поручение исходящее 00000000197 от 01.03.2010 11:53:11 732500 004600 12 100
Платежное поручение исходящее 00000000198 от 01.03.2010 11:55:39 732500 004600 12 100
Платежное поручение исходящее 00000000279 от 26.03.2010 0:00:00 734100 004600 19 609
Платежное поручение исходящее 00000000287 от 29.03.2010 14:15:36 734100 004600 55 300
Платежное поручение исходящее 00000000291 от 30.03.2010 11:01:10 734100 004600 18 090
Платежное поручение исходящее 00000000268 от 18.03.2010 10:34:25 738000 004600 10 050
Платежное поручение исходящее 00000000276 от 18.03.2010 12:20:20 750400 004600 13 060,98
Платежное поручение исходящее 00000000281 от 29.03.2010 12:33:46 750400 004600 555 645,41
Платежное поручение исходящее 00000000234 от 04.03.2010 12:21:55 754450 004600 24 120
Платежное поручение исходящее 00000000290 от 30.03.2010 10:44:39 754450 004600 100 000
Платежное поручение исходящее 00000000240 от 09.03.2010 10:53:24 786300 004600 20 800
Платежное поручение исходящее 00000000269 от 18.03.2010 10:58:04 786300 004600 61 012
Платежное поручение исходящее 00000000289 от 30.03.2010 9:27:14 786300 004600 6 000
Платежное поручение исходящее 00000000223 от 03.03.2010 12:13:38 786500 004600 36 000
Платежное поручение исходящее 00000000228 от 04.03.2010 9:52:35 786500 004600 378 138,85
Платежное поручение исходящее 00000000229 от 04.03.2010 9:57:50 786503 004600 126 117,75
Платежное поручение исходящее 00000000200 от 01.03.2010 11:58:06 754422 004762 63 000
Платежное поручение исходящее 00000000286 от 29.03.2010 14:10:18 764422 004762 10 000
Платежное поручение исходящее 00000000267 от 17.03.2010 0:00:00 764423 004762 464 370
Платежное поручение исходящее 00000000261 от 15.03.2010 11:16:28 764522 004762 81 357
Итак, если мы берём строку 779000/004599, то ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 1, 6) будет выделять строку "779000". А ПОДСТРОКА(Типовой.Регистратор.Соотв.Наименование, 8, 11) будет выводить "004599".
В этом же запросе, используется выражение:
Код 1C v 8.х
В этой же задаче необходимо было добавить новые колонки с названиями месяцев и с суммами по ним. Как раз это выражение решает эту задачу. Если Вам нужно использовать другие месяца, например январь, то заменим выражение:
Код 1C v 8.х
Приведу пример текста запроса, в котором с помощью цикла формируются поля месяцев (выделено жирным), начиная с марта по февраль.
Код 1C v 8.х
Похожие FAQ
Как запретить изменять документы после 8 часов с момента их создания 3
Обратился ко мне клиент с задачей: Нужно запретить изменение всех видов платежных документов (ПП, РКО, ПКО) спустя 8 часов с момента проведения соответствующего документа Для реализации этого я использовал Подписку на событие: ПередЗаписьюДокуме Как сформировать отчет СКД без проверки прав (в привилегированном режиме)? 21
Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав! Особенно если настроен RLS Есть несколько способов как это сделать: 1. Установить привилегированный режим в модул Порядок заполнения платежных поручений на уплату платежей в бюджет в 1С: УТ 0
В обновлении 10.3.10 типовой конфигурации «Управление торговлей, ред.10.3» порядок заполнения платежных поручений на уплату платежей в бюджет приведен в соответствие с Приказом Минфина РФ №102н от 01.10.2009 «О внесении изменений в приказ Министерст СКД не выводит поле в отчет 3
Если в запросе используется конструкция вида регистратор.дата или получение еще какого-либо реквизита через регистратор и это поле не отображается в полях отчета СКД, то: Допустим Вы сделали запрос по регистру накоплений и через регистратор обратил Посмотреть все результаты поиска похожих
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе? 11
Использовать конструкцию « ВЫРАЗИТЬ »: Запрос.Текст = " … |ГДЕ | (ВЫРАЗИТЬ(ЕдиницыХранения.Владелец.Наименование КАК СТРОКА(4))) Груз" ; Запрос.УстановитьПараметр(" Груз" ," Тонн" ); С целью приведения строк неограниченной длины к строкам Посмотреть все в категории Запросы
В случаях, когда нужно разбить строку на части, чаще всего используется один из методов:
- СтрРазделить() - платформенный метод
- РазложитьСтрокуВМассивПодстрок() - функция общего модуля БСП
Всеми рекомендуется использовать СтрРазделить(), так как это платформенный и более оптимизированный метод. Однако, при этом часто забывают, что он не полностью идентичен второму. И в некоторых случаях применить его не получится.
Разберём нагляднее параметры по-порядку:
Тут всё понятно. Строка, которую нужно разделить.
Вроде тоже ясно. Строка, которая является разделителем.
Однако. Этот параметр оба метода используют по-разному, когда его значение больше, чем один символ.
У СтрРазделить() каждый символ в параметре является отдельным разделителем. В то время как в РазложитьСтрокуВМассивПодстрок() он цельный.
"б1" - цельный разделитель
"б1" - набор из двух несвязанных разделителей. "б" и "1".
Выходит, что когда нам необходимо в качестве разделителя использовать некую строку, то используем метод РазложитьСтрокуВМассивПодстрок(). Ведь платформенный СтрРазделить() сработает иначе.
Так же интересная особенность. Если в этот параметр передать пустую строку, то СтрРазделить() вернёт массив с одним элементов (всей строкой). А РазложитьСтрокуВМассивПодстрок() уйдёт в небытие.
Параметр хоть и схож, но, снова, не полностью идентичен.
Платформенный метод имеет два положения: Ложь или Истина. Либо результат метода будет содержать пустые строки, либо нет.
В то время, как метод БСП имеет чуть более расширенный функционал, а именно:
Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
- для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки включаются в результат.
- если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а при других разделителях результатом функции будет пустой массив.
Получается, если не передать параметр, то БСП сама решит догадаться, нужно ли сохранять пустые элементы или нет. По мне так, если нет необходимости, лучше всегда указывать конкретно логику, чтобы и самому не путаться и не путать других.
Данный параметр есть только в РазложитьСтрокуВМассивПодстрок().
Всё просто - нужно ли к каждому элементу массива применять СокрЛП (избавлять слева и справа всякие пробелы и переносы строк).
СтрРазделить() этого делать не умеет. Однако, замеры скорости показывают, что быстрее будет обойти циклом результат СтрРазделить(), чем использовать РазложитьСтрокуВМассивПодстрок().
Какие выводы?
В большинстве случаев при помощи СтрРазделить() можно сделать тоже самое, что и РазложитьСтрокуВМассивПодстрок(). В таких случаях нужно применять платформенный метод. Но:
- Когда необходимо использовать разделитель, состоящий из строки, а не одного символа, берёмся за РазложитьСтрокуВМассивПодстрок()
- Когда необходимо, чтобы элементы результата были обработаны СокрЛП(), делаем это сами постобработкой. Так будет быстрее.
Понять особенности методов будет полезно на практике. Но помнить не обязательно. Можно вместо этого использовать обёртку на подобии:
Возникла необходимость организовать учет по двум организациям в одной ИБ. Ситуация не уникальная, но так сложилось, что наша сильно не типовая 250 гигобайтная УППшка работала довольно медленно, поэтому вместо RLS решили попробовать разделение данных. Что это такое, описано, например,
Простые смертные работают только со своей ООО, а главбух иногда смотрит данные по двум юрлицам. В режиме доступа к обеим ООО можно только читать данные, поэтому главбух должен иметь возможность интерактивно переключаться между режимами "все читать"/"писать только по одной организации" и выбирать ООО (т.е. устанавливать значение общего реквизита) для проведения, например, расчета себестоимости.
2. Реализация
Платформа 8.2.19.90, без режима совместимости. СУБД - MSSQL Server 2008 R2 Standart.
Создали общий реквизит ОрганизацияРазделитель типа "число", согласились с предложением создать параметры сеанса, заполнили состав реквизита (включили несколько справочников, все документы, регистры накопления, бухгалтерии и расчета). Разделение данных - "Независимо и совместно". Значение параметра сеанса устанавливается из стандартных настроек пользователя в процедуре УстановкаПараметровСеанса в модуле сеанса:
В интерфейсе главбуха сделали формочку с возможностью переключения между организациями и включения/выключения режима разделения:
При отключенном разделении, когда ПараметрыСеанса.ОрганизацияРазделительИспользование = Ложь, платформа отказывается записывать документы, вываливаясь с ошибками типа "ОшибкаSDBL: ожидается выражение (pos=12)", поэтому давать пользователю записывать документы в таком варианте нельзя. Для надежности, создали подписки на событие "Перед записью" для объектов, входящих в состав общего реквизита:
План действий у нас был такой: готовим конфигурацию-приемник ИБ №1, проставляем значения общего реквизита = 1, загружаем данные из ИБ №2, после загрузки для всех объектов с пустым (равным 0) значением разделителя устанавливаем ОрганизацияРазделитель = 2.
Конфигурацию подготовили, возник вопрос, как установить значение общего реквизита для документов и их движений в закрытых периодах, причем быстро и без риска того, что полетят цифры в балансе? Через объектную модель 1С записывать разделитель отдельно от объекта невозможно, поэтому пришлось нарушить лицензионное соглашение выкручиваться и писать запрос для MS SQL. Поскольку в составе общего реквизита много объектов, а таблиц в скуле по этим объектам еще больше, написали обработку, генерирующую запрос для SQL (для каждого объекта метаданных, входящего в состав разделителя, писали "update " + Имя_БД + ".dbo._" + ИмяТаблицы + " set _" + ПолеОбщийРеквизит + " = 1";)
Значение проставили, перенесли часть данных из ИБ №2, начали тестировать.
Результат разочаровал. Во-первых, проблемы с регистром бухгалтерии. При включенном разделении не видно аналитику:
Хорошо, проставляем значение разделителя через MS SQL, аналитику видим. Теперь не работают отчеты. Оказывается, проблемы с запросами к виртуальным таблицам регистра бухгалтерии "Обороты" и "ОборотыДтКт":
(Fld27033 - это как раз общий реквизит в таблице регистра бухгалтерии)
Разделитель установлен во всех таблицах, это видно на уровне СУБД, в чем может быть ошибка, не понятно. Разворачиваем типовую пустую УПП, делаем описанные выше изменения в конфигурации, вводим пару документов (в этом варианте платформа сама проставляет значение разделителя во всех таблицах регистра бухгалтерии), но ошибки воспроизводятся. Плохо, но исключаем регистры бухгалтерии из состава общего реквизита, продолжаем тестирование.
Далее, выясняется что перестал работать механизм вытеснения у регистров расчета. Планы видов расчета мы не разделяли, пробуем искать проблему в таблицах регистра расчетов и в перерасчетах. Проверяем, проставляем значение основного реквизита, делаем ТиИ - безрезультатно.
Попутно, диагностируем проблему при записи в независимые регистры сведений из формы списка. При этом данные записываются, их можно увидеть после перезапуска. Проблема воспроизводится и на тестовой базе:
Регистры сведений "починить" путем манипуляций с SQL не получилось (значение разделителя во всех таблицах установлено), поэтому просто исключили их из состава общего реквизита. После нескольких дней экспериментов, неудачными оказываются и попытки восстановить работоспособность вытеснения.
На этот момент принимаем решение выключить разделение данных и использовать-таки RLS. При установке разделения в "не использовать" натыкаемся на ошибки "Microsoft OLE DB Provider forSQL Server: CREATE UNIQUE INDEX terminated because a duplicate keywas found for index. ". Т.е., вернуться в состояние до разделения так запросто не получается. Проблема с индексами таблиц перерасчетов, настроек хранения итогов и других. Дело в том, что в таблицах хранятся идентичные строки, отличающиеся только значением общего реквизита. При удалении общего реквизита появляются неуникальные записи. Придется удалить ненужные записи напрямую в MS SQL, примерно так (для таблицы перерасчетов):
И только после чистки нескольких десятков таблиц удается выключить разделение данных. После выключения разделения никаких проблем нет.
Теплилась надежда, что на 8.3 проблемы решены. Не поленились, проверили на 8.3.4.482 (с отключенным режимом совместимости). Смотрели на практически типовой УПП-шке, с изменениями в конфигурации только по общему реквизиту. На этой тестовой базе разделение включили до ввода информации, т.е. платформа должна была корректно записывать значение разделителя во все таблицы, самостоятельно напрямую в MS SQL ничего не писали.
Проблема с запросами к виртуальным таблицам "Обороты" и "ОборотыДтКт" воспроизводится.
Проблема с вытеснением воспроизводится.
Проблема с записью в независимые регистры сведений воспроизводится.
+ проблема с выключением разделения - одним нажатием кнопки от него избавится не получится!
Таким образом, заменить RLS новым механизмом у нас не получилось. Задумывался этот механизм, по всей видимости, для облачных сервисов, и в варианте использования разделяемых данных "независимо", может быть, разделение заработает, но нам нужна общая НСИ. Остается ждать, когда 1С исправит ошибки , а еще лучше, реализует типовой механизм разделения по организациям в типовых конфигурациях.
На практике может возникнуть ситуация, когда основное средство принято к учету как единый объект, а потом возникла необходимость его разделить. В данной статье пошагово на примере изучим, как в программе 1С 8.3 Бухгалтерия 3.0 разделить один объект основного средства на два основных средства.
Как разделить основное средство на два в 1С 8.3
Организация ООО “Агро-Комплекс” приобрела 27.03.2015г. трактор Агромаш 85ТК и дисковую борону-первоначальная стоимость 1 520 000 руб., срок полезного использования 120 месяцев. По приказу руководителя организации объект ОС нужно перерегистрировать как два основных средства: объект 1 – трактор Агромаш 85ТК, объект 2 – дисковая борона, для дальнейшей реализации объекта 2.
Шаг 1
Создадим документ по списанию основных средств в 1С 8.3: Трактор Агромаш 85ТК и Дисковая борона в разделе ОС и НМА – Выбытие основных средств – Списание ОС.
Заполним шапку верхней части документа:
- Указываем дату списания ОС;
- В строчке Организация – указываем наименование организации, которая списывает ОС;
- В строчке Местонахождение ОС – указываем место эксплуатации ОС;
- В строчке Событие ОС – указываем Списание;
- В строчке Счет списания – указываем сч.91.02;
- В строчке расходов – указываем Ликвидация основных средств.
В табличной части введем основное средство, которое списываем:
Примечание: Если в 1С 8.3 в справочнике Прочие доходы и расходы нет нужной статьи, то статью создаем:
- В строчке Наименование – указываем Ликвидация основных средств;
- В строчке Вид статьи – указываем Ликвидация основных средств:
После проведения документа получим проводки по доначислению амортизации за месяц и списанию остаточной стоимости ОС на счет прочих доходов и расходов:
Шаг 2
Определим остаточную стоимость и сумму накопленных амортизационных отчислений основного средства: Трактор Агромаш 85ТК и Дисковая борона в разделе ОС и НМА – Отчеты – Ведомость амортизации ОС:
Шаг 3
Стоимость ОС – 1 520 000,00 руб. и накопленную амортизацию ОС – 190 000,05 руб. разделим между двумя объектами основных средств. Допустим,
- Трактор Агромаш 85ТК стоит 1 086 800 руб., накопленная амортизация – 136 800,00 руб.;
- Дисковая борона стоит 433 200,00 руб., накопленная амортизация – 53 200,05 руб.
Шаг 4
Для корректного ввода данных по новым объектам в 1С 8.3, создадим документ Ввод начальных остатков: раздел Операции – Бухгалтерский учет – Журнал операций – Создать – Ввод остатков – Основные средства.
Заполним верхнюю часть документа:
- Указываем дату разъединения ОС;
- В строчке Организация – указываем наименование организации;
- В строчке Местонахождение ОС – указываем место эксплуатации ОС.
В табличной части указываем созданные объекты:
Для каждого объекта создадим карточку с данными для дальнейшего учета в 1С 8.3:
- Новая карточка для ОС Трактор Агромаш 85 ТК. Заполним последовательно все закладки как показано на рисунках:
- Новая карточка для ОС Дисковая борона. Заполним все закладки последовательно как в первой карточке:
После проведения документа в 1С 8.3 будут сформированы проводки по счету учета первоначальной стоимости новых объектов основных средств и накопленной амортизации. Так же в 1С 8.3 автоматически заполнятся все регистры сведений:
Шаг 5
Закроем сумму остатка по вспомогательному счету 000 в 1С 8.3. Для этого нужно отредактировать проводки, полученные в документе Списание ОС:
- Устанавливаем режим ручной корректировки;
- Накопительные счета по определению остаточной стоимости и накопленной амортизации меняем на счет 000:
Шаг 6
Сформировав ОСВ, видим, что счет 000 закрыт:
Шаг 7
Сформировав ОСВ по счету 01, видим, что суммы первоначальной стоимости отражены по двум новым объектам ОС. По объекту ОС, которое было списано в 1С 8.3, сумма закрыта:
Шаг 8
Начислим ежемесячную амортизацию: раздел Операции – Закрытие периода – Закрытие месяца – Амортизация и износ основных средств.
Сформировав проводки, видим, что в 1С 8.3 амортизация начислялась по каждому объекту отдельно:
Особенности отражения операций, связанных с приобретением, принятием к учету, реализацией ОС, а так же начислением амортизации в 1С 8.3, можно изучить на нашем курсе по работе в 1С 8.3 в модуле Приобретение и движение ОС. Подробнее о курсе смотрите в следующем видео:
Бывает необходимо разделить текстовый файл большого размера на несколько маленьких файлов. Ниже представлены функции при помощи которых можно разделить файл:
Разделяет указанный файл на несколько частей (файлов) заданного размера. Имя каждой части образуется из имени исходного файла с прибавлением ему расширения в виде порядкового номера, включая лидирующие нули.
В результате получим несколько файлов:
А для объединения файлов в один используйте:
При объединении файлов по маске необходимо задать маску поиска файлов и имя файла, который требуется создать.
Например, в каталоге "C:\MySplittedData\" содержатся файлы:
Выполнение кода вида:
приведет к объединению вышеперечисленных файлов в файл с заданным именем.
Похожие FAQ
1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Автоматическая архивация баз 1С с использованием Cobian Backup и VBS скриптов 8
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом настроим автоматическую архивац Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 3
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обработать файлы с разделителями, изменив их структуру и сохранив в кодировке UTF8 без BOM 0
Частенько при разработке сайтов приходится обрабатывать тысячи однотипных файлов. чтобы оптимизировать эту рутинную работу я набросал небольшую обработку, которая перебирает в указанном каталоге все файлы с расширением w1c и полностью меняет стру Посмотреть все в категории Текстовый документ
Читайте также: