Работа с периодическими реквизитами 1С версии 7.7 при помощи прямых запросов.

Публикация № 63125

Разработка - Практика программирования

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

             Пытливые умы экономистов как-то раз разродились идеей, построить отчет, в котором по каждой номенклатурной позиции вычислялись бы три последние цены одного типа цен и последнее значение другого типа цен. Все это приводилось бы к единой валюте (по курсам на дату установки цены) и неким образом далее анализировалось. Для реализации этого алгоритм средствами 1С требовалась бы активная работа с объектом «Периодический» и время формирования такого отчета по тысяче-двум номенклатурных позиции затянулось бы на неопределенное время. Как хорошо, что база на SQL сервере, да еще и 2005-ом. Реализация этого отчета на прямых запросах и побудила меня поделиться знаниями.

            При описании буду рассчитывать на то, что читателю знакомы основы языка SQL. Большинство примеров, приведенных здесь, работают на 2000-ом сервере. Для некоторых примеров будет приведено два решения с пояснениями: для 2000-ого сервера и для 2005-ого. Для работы с прямыми запросами я предпочитаю внешнюю компоненту 1С++ и все примеры будут приведены для нее. Думаю, что переписать код для работы с другими компонентами особого труда составить не должно. Все примеры буду приводить для стандартной конфигурации «Торговля и склад 9.2», т.к. она большинству должна быть хорошо знакома.

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

            Для начала давайте рассмотрим то, как 1С хранит периодические реквизиты. Все значения всех реквизитов хранятся в одной таблице _1SCONST. Если заглянуть в 1Cv7.dds, то там можно найти описание полей таблицы и ее индексов. Рассмотрим интересующие нас и самые важные.

ROW_ID

Автоинкрементное поле типа INT. Служит для поддержки уникальности

OBJID

ID элемента справочника, для которого установлено периодическое значение. Если равно «     0   », то это константа.

ID

Числовое ID реквизита справочника, для которого установлено периодическое значение.

DATE

Дата установки периодического значения. Тип: DATETIME

VALUE

Собственно, само значение периодического реквизита. Обратим внимание на тип. Это строка переменной длины, максимальная длина 255.

DOCID

ID документа, установившего значение периодического реквизита. При ручной установке значений равен «     0   ».

TIME

Числовое представление времени документа. Если посмотреть в таблицу журналов _1sjourn, то в поле DATE_TIME_IDDOC между датой и первым пробелом то же самое время, только в 36-ричной системе. Для перевода числа из поля TIME в формат «ЧЧ:ММ:СС» можно воспользоваться следующей конструкцией:

cast(floor(time/36000000.0) as varchar)+':'

+cast(floor((time%36000000)/600000.0) as varchar)+':'

+cast((time%36000000)%600000/10000 as varchar)

TVALUE

Строка длиной 3 символа. Заполняется в случае, если периодический реквизит неопределенного типа. В нем хранится ID типа значения из поля VALUE.

 

Теперь про индексы. Их три.

  1. PK__1SCONST. Индекс по ключевому полю ROW_ID.
  2. IDD. Самый для нас интересный индекс. Используется для сортировки периодических реквизитов в хронологическом порядке. Состав: ID, OBJID, DATE, TIME, DOCID, ROW_ID. Т.е. внутри одной даты периодические реквизиты сортируются сначала по времени, потом ID документа.
  3. DOC. Служит для отбора значений периодических реквизитов, установленных документом. Состав: DOCID, ACTNO, ROW_ID.

 

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

       спрЦены=СоздатьОбъект("Справочник.Цены");

       спрЦены.ИспользоватьВладельца(ТекНоменклатура);

       спрЦены.НайтиПоРеквизиту("ТипЦен",Константа.РозничныйТипЦен,0);

Ссылка на элемент справочника, ID которого должно стоять в поле OBJID таблицы _1SCONST у нас, можно сказать, есть. Значение для поля ID можно получить использую объект «MetaDataWork». Например, вот так:

мд=СоздатьОбъект("MetaDataWork");

ИДРеквизита=мд.ИДОбъекта(метаданные.Справочник("Цены").Реквизит("Цена"));

Теперь процедура для выборки всей истории розничной цены для товара ТекНоменклатура будет выглядеть так:

Процедура Сформировать()

       ЗагрузитьВнешнююКомпоненту("1cpp.dll");

       спрЦены=СоздатьОбъект("Справочник.Цены");

       спрЦены.ИспользоватьВладельца(ТекНоменклатура);

       спрЦены.НайтиПоРеквизиту("ТипЦен",Константа.РозничныйТипЦен,0);

 

       мд=СоздатьОбъект("MetaDataWork");

       рс=СоздатьОбъект("ODBCRecordSet");

       текст="

       |select * from _1sconst (nolock)

       |where objid=:ТекЦена

       |      and id=:ИДЦена";

 

       рс.УстановитьТекстовыйПараметр("ТекЦена",спрЦены.ТекущийЭлемент());

       рс.УстановитьТекстовыйПараметр("ИДЦена",мд.ИДОбъекта(метаданные.Справочник("Цены").Реквизит("Цена")));

       тз=рс.ВыполнитьИнструкцию(текст);

       тз.выбратьстроку();

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

 

В этом примере мы выбрали все поля из таблицы _1SCONST. Вид не очень удобный. Чуть изменим текст запроса, чтобы выводилась цена и дата ее установки.

       текст="

       |select cast(value as numeric(14,2)) Цена

|      ,date Дата

|from _1sconst (nolock)

       |where objid=:ТекЦена

       |      and id=:ИДЦена";

Преобразование типов при работе с полем value – важный момент. Т.к. поле строковое, а в нем может храниться число, то лучше, если есть возможность, явно указывать преобразование типов для того, чтобы избежать проблем.

Теперь перейдем к наиболее распространенной задаче. Определение значения периодического реквизита на указанную дату. Как не сложно догадаться, периодическое значение в базе скорее всего не хранится на интересующую нас дату. Поэтому придется фильтровать выборку не по равенству даты, а по неравенству. Значения даты должны быть меньше либо равно интересующего нас. Из полученной выборки нужно отобрать значение, соответствующее максимальной дате. Для этого удобнее всего воспользоваться конструкцией «Select top 1 … order by …» с сортировкой в обратном хронологическом порядке, не забывая, что значения могут устанавливаться документами внутри одного дня. Примерно так:

select top 1 cast(value as numeric(14,2)) Цена

from _1sconst (nolock)

where objid=:ТекЦена

       and id=:ИДЦена

and date<=:ЗначениеНаДату

order by date desc, time desc, iddoc desc, row_id desc

Зачем все это писать, если 1С++ поддерживает виртуальное значение «$ПоследнееЗначение»? Например, выше приведенный запрос можно переписать примерно так:

       select $ПоследнееЗначение.Цены.Цена(:ТекЦена,:ЗначениеНаДату) Цена

результат тот же. Если выполнять этот запрос с включенной отладкой, то будет видно, что он развернется в практически точную копию приведенного мной. Да, виртуальные значения – это наглядно, удобно. Но не всегда позволяет решить поставленные задачи. А если надо, например, знать дату установки последней цены? Тогда «плюшки» 1С++ уже не помогают, надо писать вручную, например, так:

select top 1 cast(value as numeric(14,2)) Цена

       ,date Дата

from _1sconst (nolock)

where objid=:ТекЦена

       and id=:ИДЦена

and date<=:ЗначениеНаДату

order by date desc, time desc, iddoc desc, row_id desc

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

1.      Выбрать все товары, у которых когда-либо какая-либо из цен была установлена равной нулю. Вывести товар, тип цен.

                Select СпрЦ.parentext [Тов $Справочник.Номенклатура]

             ,$СпрЦ.типЦен [ТипЦен $Справочник.ТипыЦен]

       from

       (

             select distinct objid

             from _1sconst (nolock)

             where id=:ИДЦена

                    and cast(value as numeric(14,2))=0

       ) const

       inner join $Справочник.Цены СпрЦ (nolock) on СпрЦ.id=const.objid

 

2.      Удалить из истории цен все нулевые цены.

delete from _1sconst where id=:ИДЦена and cast(value as numeric(14,2))=0

 

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

delete from _1sconst where date<:НаДату and objid<>$ПустойИД

 

4.      Удалить из истории все цены и единицы измерения по типу цен «Розничные», значения которых были установлены вручную.

delete

from _1sconst

inner join $Справочник.Цены СпрЦ (nolocok) on СпрЦ.id=_1sconst.objid

and $СпрЦ.типЦен=:ПоТипуЦен

       and _1sconst.id in (:ИДЦена, :ИДЕдиница)

       and docid=$ПустойИД

 

Напомню, что

ИДЦена=мд.ИДОбъекта(метаданные.Справочник("Цены").Реквизит("Цена"))

ИДЕдиница =мд.ИДОбъекта(метаданные.Справочник("Цены").Реквизит("Единица"))

 

5.      Рассчитать все значения всех цен и единиц измерения всех ТМЦ на дату. Полезно при чистке истории и удалении устаревших значений. Тут несколько вариантов запросов может быть.

5.1.   select b.objid, b.id, b.value, b.tvalue

       from

       (

             select objid,id

,max(substring(convert(varchar,date,120),1,10)

+right('0000000000'+cast(time as varchar),10)

+docid

+right('0000000000'+cast(row_id as varchar),10)) md

             from _1sconst (nolock)

             where objid<>$ПустойИД and id in (:ИДЦена, :ИДЕдиница) and date<:НаДату

             group by objid,id

       ) a

       inner join

       (

             select objid,id

,substring(convert(varchar,date,120),1,10)

+right('0000000000'+cast(time as varchar),10)

+docid

+ right('0000000000'+cast(row_id as varchar),10) d

, value, tvalue

             from _1sconst (nolock)

             where objid<>$ПустойИД and id in (:ИДЦена, :ИДЕдиница) and date<:НаДату

       ) b

   on a.objid=b.objid and a.id=b.id and a.md=b.d

Здесь использован метод «склеивания» нескольких полей для нахождения максимума. Т.е. поля DATE, TIME, DOCID и ROW_ID собраны в одну строку. Последнее в алфавитном порядке значение этой строки будет соответствовать последнему значению. Если пойти дальше, то можно переписать этот запрос со всего одним проходом по таблице констант.

5.2.

       select objid, id

             ,reverse(substring(reverse(md),4,charindex(char(3),reverse(md))-4)) value

             ,reverse(substring(reverse(md),1,3)) tvalue

       from

       (

             select objid,id,

   max(substring(convert(varchar,date,120),1,10)

       +right('0000000000'+cast(time as varchar),10)+docid

+right('0000000000'+cast(row_id as varchar),10)

+char(3)+value+tvalue) md

             from _1sconst (nolock)

             where objid<>$ПустойИД and id in (:ИДЦена, :ИДЕдиница) and date<:НаДату

             group by objid,id

       ) a

Идея – к строковому полю «приклеить» нужные нам значения через символ-разделитель (в данном случае – char(3)), а после нахождения максимума из полученной строки вырезать значения value и tvalue.

5.3. Для тех, кто работает с 2005-ым сервером все упрощается.

       select objid, id, value, tvalue from

       (

             select objid,id,value,tvalue

,row_number() over(partition by id,objid

order by date desc, time desc

, docid desc, row_id desc) rn

             from _1sconst (nolock)

             where objid<>$ПустойИД and id in (:ИДЦена, :ИДЕдиница) and date<:НаДату

       ) a

       where rn=1

 

6.      Удаление дублирующих значений реквизитов. Например, история реквизита выглядит так:

10

10 <- ненужная запись

20

20 <- ненужная запись

30

20

Т.е. запись, value которой равно value предыдущей записи, не нужна. Предыдущая запись – это запись с максимальной датой меньше текущей. Поиск предыдущей записи в реализации для 2000-ого сервера не эффективный, медленный. Готовый запрос:

delete from _1sconst where row_id in

(

select row_id from

(

     select *,

        (

               select top 1 value+tvalue

               from

               (

                    select row_id, objid, id, value, tvalue,

substring(convert(varchar,date,120),1,10)

+right('000000000'+cast(time as varchar),10)+docid

+right('000000000'+cast(row_id as varchar),10) ind

                    from _1sconst (nolock)

               ) c

               where c.objid=a.objid

                      and c.id=a.id

                      and c.ind<a.ind

               order by c.ind desc

        ) pred

     from

      (

        select row_id, objid, id, value, tvalue, date,

               substring(convert(varchar,date,120),1,10)

+right('000000000'+cast(time as varchar),10)+docid

               +right('000000000'+cast(row_id as varchar),10) ind

        from _1sconst (nolock)

where objid<>$ПустойИД

     ) a

) a

where pred is not null and value+tvalue=pred

)

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

delete from _1sconst where row_id in

(

select row_id from

(

       select *, rn-rnk razn

, row_number() over(partition by id,objid,value+tvalue,rn-rnk

order by date,time,docid,row_id) por_nomer

from

       (

             select *

                    , dense_rank() over(partition by id,objid,value+tvalue

order by date,time,docid,row_id) rnk

                    , row_number() over(partition by id,objid

order by date,time,docid,row_id) rn

             from _1sconst (nolock)

             where objid<>'     0   '

       ) a

) a

where por_nomer>1

)

7.      Как одним запросом получить розничные цены, единицы измерения на указанную дату и курсы валют цены на дату ее (цены) установки? Приведу реализацию для 2005-ого сервера. Для 2000-ого у меня получается большой и не понятный запрос, хотя вполне работоспособный.

            select тов [тов $Справочник.Номенклатура]

             ,Цена

             ,ДатаУстановкиЦены

             ,Единица [Единица $Справочник.Единицы]

             ,Вал [Валюта $Справочник.Валюты]

             ,Курс

       from

       (

             select a.*, cast(b.value as numeric(10,4)) курс

                    ,row_number() over(partition by a. тов

order by b.date desc, b.time desc, b.docid desc, b.row_id desc) rn2

             from

             (

                    select Тов, Вал

                       ,max(case when id=:ИДЦена then cast(value as numeric(14,2)) end) Цена

                       ,max(case when id=:ИДЦена then date end) ДатаУстановкиЦены

                       ,max(case when id=:ИДЕдиница then left(value,8) end) Единица

                    from

                    (

                       select _1sconst.value, $СпрЦ.валюта Вал

                           , objid, _1sconst.id, date, СпрЦ.parentext Тов

                          ,row_number() over(partition by _1sconst.id, _1sconst.objid

                          order by date desc, time desc, docid desc, _1sconst.row_id desc) rn

                       from _1sconst (nolock)

                       inner join $Справочник.Цены СпрЦ (nolock) on СпрЦ.id=_1sconst.objid

                       where _1sconst.id in (:ИДЦена, : ИДЕдиница)

                          and date<=:ВыбДата

                          and $СпрЦ.ТипЦен=:РозничныйТипЦен

                    ) a

                    where rn=1

                    group by Тов, Вал

             ) a        

             left join _1sconst b (nolock)

             on a. Вал=b.objid and b.date<=a. ДатаУстановкиЦены

             where b.id=:ИДКурс

       ) a

       Where rn2=1

 

Надеюсь, вы найдете здесь что-то новое и интересное. С удовольствием отвечу на ваши вопросы.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2712 23.12.09 14:34 Сейчас в теме
2. highlander 24.12.09 10:30 Сейчас в теме
Почерпнул для себя много нового и интересного - плюс однозначно
3. flo 30.12.09 09:59 Сейчас в теме
(3)согласна тут ооочень много нового...и такооого интересного!еле оторвалась) мозгами не поделитесь?))))
4. waol 274 30.12.09 14:00 Сейчас в теме
есть ли смысле переписать
текст="
|select * from _1sconst (nolock)
|where objid=:ТекЦена
| and id=:ИДЦена";

в таком виде:
текст="
|select * from _1sconst (nolock)
|where id+objid+... остальн.части индекса IDD like :ИДЦена+:ТекЦена+"__________" (кол.прочерков д.быть таким, чтобы привести правую часть к длине индекса)?

нет достаточного опыта работы с sql;
вообще говоря, интересуют запросы к 1sconst в dbf с использованием индекса idd - не могу добиться оптимизации
7. glassman 145 30.12.09 23:43 Сейчас в теме
(4) Так делать не стоит. Запутывание оптимизатора получится. Он не поймет, что отбор по первым полям индекса идет и пойдет его весь сканить. Плюс дополнительные вычисления на формирование строки, плюс оператор like - не быстрая штука. Во-вторых, если юзать like, то подчеркивания не нужны. Достаточно просто поставить %. Что-то типа такого: like :ИДЦена+:ТекЦена+"%"
8. glassman 145 30.12.09 23:55 Сейчас в теме
(4) Хотя для дбф не могу точно сказать. Не делал прямых запросов к дбфной базе.
По поводу индексов еще. Жаль, что IDD не кластерный... Если планы запросов посмотреть, то там постоянно идет дополнительное обращение к РК по row_id. То же самое и для справочников.
5. Gluk_1C 30.12.09 14:20 Сейчас в теме
Гдеж ты раньше то был :) :D, однозначно + автору
6. Gluk_1C 30.12.09 14:21 Сейчас в теме
+ отдельное спасибо за варианты для 2000 и 2005 сервера.
9. waol 274 31.12.09 00:09 Сейчас в теме
да, вы правы, между подчеркиваниями и % действительно нет разницы по скорости, только второе - легче в написании, учту.
вот по поводу поведения дбф такой вариант фильтра

Константы.id+Константы.objid+dtos(Константы.date)+Константы.time+Константы.docid+str(Константы.partno,3) like $ИсторияРеквизита.Цены.Цена+:ВыбФильтр+'%'

выполняется порядка 2-3 мс,
а такой:
Константы.id=$ИсторияРеквизита.Цены.Цена and Константы.objid=:ВыбФильтр

порядка 280 мс.
видимо у Fox Pro своя специфика работы с индексами в сравнении с sql


правда мне никак не добиться, чтобы индекс начал работать, когда есть соединение 1sconst с какой нибудь другой таблицей, с тем же справочником Цены.

но это несколько не по теме, извиняюсь. Буду поднимать тему на 1cpp.ru


10. Myti 86 14.01.10 17:03 Сейчас в теме
Оставьте свое сообщение

См. также

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    79145    Serginio    113    

[ПОЛЕЗНЯШКА 7.7] Как запретить максимизацию формы

Работа с интерфейсом v7.7 1cv7.md Бесплатно (free)

Программный прием запрета максимизации формы

18.04.2021    367    CheBurator    8    

Расчет страховых взносов в 1С 7.7 "Учет и отчетность предпринимателя, ред. 1.2" с апреля 2020

Бухгалтерский учет Практика программирования Зарплата v7.7 1cv7.md Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

В этой статье описано, какие небольшие изменения можно внести в модуль документа Начисление налогов с ФОТ, чтобы правильно рассчитывались страховые взносы с 1 апреля 2020 г.

09.04.2020    12379    Юджин58    39    

Маркировка лекарств - как передать код маркировки при продаже через ККТ Штрих-М

Практика программирования ККМ v7.7 Здравоохранение, медицина, стоматология Фармацевтика, аптеки Россия Бесплатно (free)

Пример программного кода для вывода чеков на ККМ Штрих-М с передачей информации о маркированных товарах (лекарства).

10.02.2020    11437    vovaapril    34    

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция Промо

Практика программирования WEB v7.7 v8 Бесплатно (free)

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    56954    Serginio    33    

Заполнение реквизитов документов из предыдущего документа

Практика программирования Универсальные функции Разработка v7.7 1cv7.md Бесплатно (free)

Функция для автоматического заполнения реквизитов документов.

04.02.2019    5354    drevilo    2    

Как в торговле 7.7 печатать код ТНВЭД в счет-фактуре

Практика программирования Внешнеэкономическая деятельность (ВЭД) Внешнеэкономическая деятельность (ВЭД) v77::ОУ 1С7:ТиС Россия БУ НДС Бесплатно (free)

В данной статье хотел поделиться опытом, как в Торговле 7.7 ( релиз 994) сделать возможность выводить код ТНВЭД в печатную форму счета-фактуры. Сразу скажу, что нужно это только тем, кто осуществляет экспорт в страны таможенного союза. Остальные могут не волноваться.

15.11.2017    10846    AndKovalchuk    0    

Доначисление страховых взносов на обязательное страхование от НС и ПЗ в Бухгалтерии 7.7 и УСН 7.7 для Договора подряда

Практика программирования Зарплата Зарплата v77::БУ 1С7:Бух 1С7:УСН Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Во всех источниках, которые мне встречались, написано, что Страховые взносы НС и ПФ нужно начислять, если это указано в Договоре подряда.

06.09.2017    10419    pentanom    0    

1С:Предприятие 7.7. Оптимизация. Промо

Практика программирования v7.7 1cv7.md Россия Бесплатно (free)

Разгоняем 1С:Предприятие 7.7. Выжимаем последние соки.

31.01.2009    47793    alexk-is    110    

Проверка часового пояса

Практика программирования v7.7 Бесплатно (free)

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    11279    kudenzov    3    

[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом?

Практика программирования v7.7 1cv7.md Бесплатно (free)

Мелкая полезняшка, считает запросом итоговую сумму документов и количество документов.

12.03.2016    19711    CheBurator    18    

.Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д.

Разработка внешних компонент Практика программирования WEB v7.7 v8 Бесплатно (free)

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    32680    Serginio    22    

Как уменьшить количество заблокированных объектов Промо

Практика программирования v7.7 1cv7.md Россия Бесплатно (free)

История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось...

12.01.2012    15681    ShEvOvIcH    18    

Пример HTTP запроса к УТМ ЕГАИС на платформе 1С 7.7

Внешние источники данных Практика программирования Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v7.7 1cv7.md Россия Бесплатно (free)

Запрос реализован на объекте ServerXMLHTTP из встроенной в Windows библиотеки MSXML, результатом запроса является XML объект DOMDocument из той же библиотеки MSXML со встроенным интерфейсом его обработки

16.12.2015    26231    Palmer1976    3    

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм

Загрузка и выгрузка в Excel Практика программирования v7.7 v8 Бесплатно (free)

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    17655    etmarket    14    

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7

Практика программирования Универсальные функции v7.7 1cv7.md Бесплатно (free)

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    18290    Anzhey    14    

Технология обновления нетиповых конфигураций 1С:Предприятия 7.7 Промо

Практика программирования Администрирование данных 1С v7.7 1cv7.md Россия Бесплатно (free)

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

12.12.2008    63544    alexk-is    25    

Универсальный способ сравнения таблиц

Практика программирования v7.7 v8 Бесплатно (free)

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    19376    json    1    

Числа прописью в родительном падеже в 7.7? Легко!

Практика программирования v7.7 1cv7.md Бесплатно (free)

Вывод числительных прописью в родительном падеже штатными средствами в три строчки кода.

20.06.2015    13014    gimalaj    3    

Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним

Загрузка и выгрузка в Excel Практика программирования v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл. Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

16.01.2015    95940    shmellevich    39    

Отправка сообщения посредством почтового клиента Lotus Notes

Практика программирования v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Отправка сообщения посредством почтового клиента Lotus Notes из 1С 7,7 и 1с 8

21.08.2014    14769    iolko    8    

Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены()

Практика программирования v7.7 1С7:Комплекс Россия Бесплатно (free)

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

20.08.2014    8237    hvv2002    0    

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7

Практика программирования v7.7 1cv7.md Бесплатно (free)

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    22382    tomvlad    5    

Контекстный поиск в 7.7

Инструментарий разработчика Практика программирования v7.7 1cv7.md Бесплатно (free)

Процедура контекстного поиска в журнале документов.

18.04.2014    9865    cushe    2    

Подготовка сведений для ПФР ЗиК 339. СЗВ-6-4 две незначительные ошибки.

Практика программирования Зарплата Зарплата v77::Расчет 1С7:ЗиК Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Подготовка сведений для ПФР ЗиК 339. СЗВ-6-4 две незначительные ошибки: 1.При переносе сотрудника из одной пачки в другую у него теряются сведения о выплатах. 2.Неактивна кнопка сортировки сотрудников.

11.10.2013    12914    Cvetic    7    

Реализация Ctrl+Z в 1С 7.7 (ТиС)

Практика программирования v7.7 1С7:ТиС Бесплатно (free)

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

15.07.2013    8168    a.o.popova    10    

Быстрый поиск в справочниках по наименованию, с использованием svcsvc.dll

Поиск данных Универсальные обработки Работа с интерфейсом v7.7 1cv7.md Бесплатно (free)

По аналогии с http://infostart.ru/public/14286/, недавно узнал что в svcsvc.dll несколько обновился функционал, в частности был добавлен метод AddString(). В прилагаемом коде показан запрос, реализованный методами ВК 1SQlite, т.е. только для DBF. Это только пример. Т.е. если например у справочника отсутствует поле "Наименование", то скорее всего будет ошибка. Тем не менее критика приветствуется))) Необходимые ВК: 1SQlite, FORMEX, svcsvc.dll (отсюда: http://www.1cpp.ru/forum/YaBB.pl?num=1373266553). p.s. Спасибо огромное уважаемому ADirks за все эти прекрасные плюшки, и помощь в их освоении)))

12.07.2013    147296    unichkin    10    

Чтение строк файла CSV в список значений с помощью метода ИзСтрокиСРазделителями

Практика программирования Внешние источники данных v7.7 Бесплатно (free)

Чтение строк файла CSV в список значений с помощью метода ИзСтрокиСРазделителями

04.04.2013    19814    ivisor_fil    11    

Ошибка заполнения отчета о движении денежных средств за 2012г (RP12Q4 12q4004)

Практика программирования v77::БУ 1С7:Бух Россия Бесплатно (free)

Ошибка заполнения отчета движения денежных средств за 2012г (RP12Q4 12q4004)

13.03.2013    9424    Famza    5    

Конвертация данных 2.1 (2.1.3.1) 1С 7.7 - 1С 8.Х передача параметра ПКО

Практика программирования Перенос данных из 1С7.7 в 1C8.X v7.7 v8 КД Бесплатно (free)

Передача параметров по умолчанию доступна только для баз 1С 8.х -1С 8.х. Показан пример, как передать параметры из 1С 7.7 - 1С 8.х

10.12.2012    25733    serg_gres    6    

Скрытие помеченных на удаление в справочнике

Практика программирования v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

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

08.08.2012    14525    mikukrnet    7    

Исправление и проведение документов

Практика программирования v77::БУ 1С7:ПУБ Россия Бесплатно (free)

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

23.07.2012    13582    BorisBelov    11    

Динамическая фильтрация в справочнике при вводе наименования

Практика программирования v7.7 1cv7.md Россия Бесплатно (free)

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

02.07.2012    16727    maxpiter    62    

Продажа собственной фирме (интеркомпани) - заполнение отрицательными остатками

Практика программирования Учет ТМЦ Учет ТМЦ v77::ОУ 1С7:Комплекс 1С7:ТиС Россия Бесплатно (free)

В документе "Продажа собственной фирме" приходится добавлять номенклатуру вручную через подбор. А ведь можно сэкономить время и заполнить спецификацию документа на основании отрицательных остатков фирмы. Все просто...

06.05.2012    13502    2sw    4    

Ввод остатков по 76.ВА в 1С ПУБ

Практика программирования v77::ОУ v77::БУ 1С7:ПУБ Россия БУ Бесплатно (free)

Статья посвящена найденному мной недостатку в конфигурации 1С 7.7 "Производство-услуги-бухгалтерия", связанному с вводом начальных остатков по 76.ВА.

29.04.2012    10145    Пользователь 1С    0    

Обновление базы 1с 7.7. с помощью движка 1с 8.х

Практика программирования Администрирование данных 1С v7.7 1cv7.md Россия Бесплатно (free)

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

28.04.2012    18828    Valerich    31    

Ошибка при формировании отчета Авансы по налогу на имущество. В 1С:Предприятие 7.7. Регламентированная отчетность за I квартал 2012 года Обновление 12q1009 от 18.04.2012 г.

Практика программирования v77::ОУ v77::БУ 1cv7.md Россия Бесплатно (free)

При формировании отчета NIMAVP1.ERT Авансы по налогу на имущество (версия 5.03) в разделе № 1-3 не сохраняет номера Страниц при выборе, что ведет к не сохранению и выводу печати двухмерного кода.

24.04.2012    9443    leo072    7    

Ошибка при формировании отчета 4-ФСС для УСН 7,7 12q1007

Практика программирования v77::БУ 1С7:Бух Россия НУ Бесплатно (free)

При формировании таблицы 6,7 раздела 2 возникает ошибка ИтАн.ИспользоватьСубконто(ВидыСубконто.ВидыПлатежейВФонды, Перечисление.ВидыПлатежей.Штраф); {C:\PROGRAM FILES\1CV77\SSTDEMO\EXTFORMS\RP12Q1.GRP\FSS4_1212.ERT(2330)}: Поле агрегатного объекта не обнаружено (ВидыПлатежейВФонды)

11.04.2012    11432    *Zed*    1    

Запуск внешней обработки по расписанию v7.7

Практика программирования Администрирование данных 1С v7.7 1cv7.md Россия Бесплатно (free)

Неоднократно возникали задачи организовать, например ежедневную выгрузку и отправку отчетов по эл.почте, и вот…

20.03.2012    45181    Yury1001    17    

Быстрый отбор в журнале на конкретную дату

Практика программирования v77::ОУ 1cv7.md Россия Бесплатно (free)

Лень - двигатель прогресса. Полезная фича для быстрого отбора документов в любом журнале на конкретную дату.

27.02.2012    11389    avers007    16