Для чего нужен флаг "Автозаполнение" в СКД и каких проблем без него можно избежать

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

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

скд запрос конфигурирование НаборДанных компоновка автозаполнение

Речь пойдет о флаге «Автозаполнение» в наборе данных Запрос Системы компоновки данных (СКД). Сразу хочу отметить, что флаг «Автозаполнение» доступен только в наборе данных - Запрос.

Что делает автозаполнение

Флаг «Автозаполнение» добавляет все выбранные поля последнего пакета запроса, а также поля измерений виртуальных таблиц из всех пакетов запроса. Всегда создает параметры периода в СКД для всех виртуальных таблиц(Обороты и ОстаткиИОбороты - &НачалоПериода, &КонецПериода, Остатки, СрезПервый, СрезПоследних - &Период). Другими словами эта настройка облегчает процесс составления схемы.


В чем подвох?

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

Пример 1

Создадим схему, выбирающую объединением двух запросов обороты за текущий и за прошлый период:

ВЫБРАТЬ
    "Этот период" КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДвиженияДенежныхСредствОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Прошлый период",
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПрошлогоПериода, &КонецПрошлогоПериода, , ) КАК ДвиженияДенежныхСредствОбороты

«Автозаполнение» создаст параметры &НачалоПериода, &КонецПериода для виртуальной таблицы ДвиженияДенежныхСредств.Обороты

Настройка схемы будет выглядеть следующим образом:

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

Разобраться в причинах не составит особого труда, если взглянуть на запрос, который был сформирован компоновщиком макета СКД — одни и те же параметры были подставлены в оба запроса объединения:

ВЫБРАТЬ
    "Этот период" КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход КАК ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот КАК СуммаОборот,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.Порядок КАК ПриходРасходПорядок
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , ) КАК ДвиженияДенежныхСредствОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Прошлый период",
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.Порядок
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , ) КАК ДвиженияДенежныхСредствОбороты

Решить можно двумя способами:

  • Не использовать параметры с именами &НачалоПериода, &КонецПериода
  • Отключить «Автозаполнение» и прописать все поля и параметры вручную

В случае с отключенным флагом «Автозаполнение» запрос в СКД будет выглядеть следующим образом:

ВЫБРАТЬ
    "Этот период" КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход КАК ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот КАК СуммаОборот
{ВЫБРАТЬ
    Раздел,
    ПриходРасход.*,
    СуммаОборот}
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ДвиженияДенежныхСредствОбороты
{ГДЕ
    ("Этот период") КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.*,
    ДвиженияДенежныхСредствОбороты.СуммаОборот}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Прошлый период",
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПрошлогоПериода, &КонецПрошлогоПериода, , ) КАК ДвиженияДенежныхСредствОбороты
{ГДЕ
    ("Прошлый период") КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.*,
    ДвиженияДенежныхСредствОбороты.СуммаОборот}

 

Пример 2

Нам нужно получить обороты по определенным счетам и остатки по всем счетам. Создаем набор данных запрос с флагом «Автозаполнение»:

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    ДДС.СуммаОборот КАК СуммаОборот,
    NULL КАК СуммаОстаток
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(, , , ) КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    "Общий остаток",
    NULL,
    NULL,
    ДенежныеСредстваОстатки.СуммаОстаток
ИЗ
    РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) КАК ДенежныеСредстваОстатки

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

Что подтверждает запрос из компоновщика макета:

ВЫБРАТЬ
    ДДС.Счет КАК Счет,
    ДДС.СуммаОборот КАК СуммаОборот,
    NULL КАК СуммаОстаток,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДДС.Счет) КАК СчетПредставление
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, , , Счет В(&П2)) КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Общий остаток",
    NULL,
    ДенежныеСредстваОстатки.СуммаОстаток,
    NULL
ИЗ
    РегистрНакопления.ДенежныеСредства.Остатки(, Счет В(&П2)) КАК ДенежныеСредстваОстатки

Решить данный кейс можно двумя способами:

  • В расширении языка запросов для поля Счет указать поле отбора, например СчетОтбор (пример описан в публикации)
  • Отключить флаг «Автозаполнение» и расставить поля отборов вручную.

Без использования «Автозаполнения» запрос в наборе данных будет выглядеть следующим образом:

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    ДДС.СуммаОборот КАК СуммаОборот,
    NULL КАК СуммаОстаток
{ВЫБРАТЬ
    Раздел,
    Счет.*,
    СтатьяДвиженияДенежныхСредств.*,
    СуммаОборот,
    СуммаОстаток}
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты({(&НачалоПериода)}, {(&КонецПериода)}, , {(Счет).*}) КАК ДДС
{ГДЕ
    ДДС.СуммаОборот}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    "Общий остаток",
    NULL,
    NULL,
    ДенежныеСредстваОстатки.СуммаОстаток
ИЗ
    РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) КАК ДенежныеСредстваОстатки
{ГДЕ
    ДенежныеСредстваОстатки.СуммаОстаток}

А результат:

 

Плохие новости

В платформе 8.3.13 были проведены следующие доработки поведения СКД:

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

Источник: http://downloads.v8.1c.ru/content//Platform/8_3_13_1513/1cv8upd_8_3_13_1513.htm#11b285ec-7857-11e8-a3f7-0050569f678a

Таким образом, если мы создаем объединение запросов по двум регистрам, в одном из которых нет определенных полей 

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    ДДС.СуммаОборот КАК СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    ДС.Счет,
    NULL,
    ДС.СуммаОборот
ИЗ
    РегистрНакопления.ДенежныеСредства.Обороты КАК ДС

...и накладываем отбор по такому полю (СтатьяДвиженияДенежныхСредств), то компоновщик макета нам добавит условие Null = &П4, которые мы ну никак не ожидали

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СуммаОборот КАК СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДДС.Счет) КАК СчетПредставление,
    ДДС.Счет.Наименование КАК СчетНаименование
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , ) КАК ДДС
ГДЕ
    ДДС.Счет = &П3
    И ДДС.СтатьяДвиженияДенежныхСредств = &П4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    ДС.Счет,
    ДС.СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДС.Счет),
    ДС.Счет.Наименование
ИЗ
    РегистрНакопления.ДенежныеСредства.Обороты(&П, &П2, , ) КАК ДС
ГДЕ
    ДС.Счет = &П3
    И NULL = &П4

Как побороть данную проблему? В статье //infostart.ru/public/936863/ освещена проблема, но предложенное решение мне не удалось повторить. Пока не нашёл решение. Судя по всему данную особенность исправили в версии платформы 8.3.14

При добавлении отбора в запрос набора данных схемы компоновки данных, содержащего объединения, отбор обязательно добавляется во все части объединения, если у набора данных включено автоматическое заполнение доступных полей или поле, к которому применяется отбор, получается через точку от поля, доступного для отбора.
Кроме того, если группа элементов отбора содержала поле, которое было недоступно в одном из объединений, и другое поле, которое было доступно и при этом в другой части объединения все поля были доступными, то такой отбор будет применен и в той части, в которой он был недоступен, с заменой недоступных полей на NULL.
Если в отчете или динамическом списке используется запрос, содержащий объединения и нужно, чтобы отбор на некоторое поле помещался только в определенные части объединения, то рекомендуется отключить для набора данных автоматическое заполнение доступных полей и добавить требуемое поле только в нужные части объединения.
В режиме совместимости с версией 8.3.13 поведение не изменилось.

Источник: https://dl04.1c.ru/content/Platform/8_3_14_1779/1cv8upd_8_3_14_1779.htm#c2e40243-2915-11e9-a3f7-0050569f678a

И действительно, если отключить «Автозаполнение» и расставить поля отборов вручную, то компоновщик макета строит следующий запрос:

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СуммаОборот КАК СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДДС.Счет) КАК СчетПредставление,
    ДДС.Счет.Наименование КАК СчетНаименование,
    ВЫБОР
        КОГДА ДДС.Счет.Ссылка ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК СчетПолеУпорядочивания1
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , (Счет = &П3) И СтатьяДвиженияДенежныхСредств = &П4) КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    ДС.Счет,
    ДС.СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДС.Счет),
    ДС.Счет.Наименование,
    ВЫБОР
        КОГДА ДС.Счет.Ссылка ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ
ИЗ
    РегистрНакопления.ДенежныеСредства.Обороты(&П, &П2, , Счет = &П3) КАК ДС

УПОРЯДОЧИТЬ ПО
    Раздел,
    СчетПолеУпорядочивания1,
    СчетНаименование,
    Счет

 

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Vladimir Litvinenko 2397 26.02.20 16:41 Сейчас в теме
РегистрНакопления.ДвиженияДенежныхСредств.Обороты({(&НачалоПериода)}, {(&КонецПериода)}
ОБЪЕДИНИТЬ ВСЕ
РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) 

Как всегда при определении остатков не учитываете последнюю секунду. Потом программисты тотально методом копирования-вставки разносят это по всем конфигурациям. Не придирался бы, если бы не массовость явления. И тяжесть последствий... не для разработчиков, которые так пишут на подряде, а для тех, кто потом иголку в стоге сена ищет, исправляя результаты расчетов ;))
Rustig; purgin; Yashazz; Lapitskiy; Danil.Potapov; +5 Ответить
2. echo77 1164 26.02.20 17:04 Сейчас в теме
(1) Владимир, привет! :-)
Дельное замечание - согласен здесь надо быть внимательнее
Vladimir Litvinenko; +1 Ответить
3. Vladimir Litvinenko 2397 26.02.20 17:15 Сейчас в теме
(2) Тут разработчики платформы, конечно, свинью подложили + не дали в СКД границу использовать. Но исправлять очевидно уже не будут. А ошибка частая и больная, особенно при применении стандартного периода. Допустив её почти всегда можно сдать отчет заказчику, так как она плавающая, но почти всегда она потом проявляется. А если СКД используется для заполнения документов, а не просто отчетности.... Ох.
4. sapervodichka 3844 26.02.20 17:33 Сейчас в теме
(1) компоновка по-моему сама границу захватывает для виртуальных таблиц остатков, это уже в запросах в коде нужно ставить параметр = Граница(&КонецПериода, ВидГраницы.Включая), вроде автор про компоновку пишет, и текст РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) должно в компоновке нормально прокатывать или нет?
5. Vladimir Litvinenko 2397 26.02.20 18:15 Сейчас в теме
(4) Если поставите в качестве &КонецПериода начало следующего дня, то остатки за предыдущий день зацепятся. Но это не отменяет того факта, что обороты при этом начнут включать в себя и движения за первую секунду следующего для. То есть в целом запрос останется ошибочным.

СКД не оперирует типом "Граница". "Стандартный период" помогает устанавливать последнюю секунду периода в качестве верхней границы, но тип этого значения всё равно будет "Дата", а не "Граница".

Проверьте, это же дело пяти минут. Может быть это хороший повод, чтобы переписать старые отчёты? ;)) Хотя, если клиенты не заметили, то лучше не палиться. Вдруг они у себя сейчас одну сплошную выручку видят в отчёте по продажам без учета себестоимости и радуются, зачем людей радости лишать? ;))

Есть ещё таблица ОстаткиИОбороты. Вот она себя более адекватно ведёт. Но это больше к бухгалтерии или к разным ведомостям. В оперативном учёте и при заполнении документов она почти не используется, особенно в последних конфигурациях семейства УТ/ERP, ввиду отсутствия подходящей физической таблицы у регистров накопления и необходимости в оптимизации запросов.
sapervodichka; +1 Ответить
6. leosoft 147 26.02.20 19:51 Сейчас в теме
(5) Я так и не понял - как же тогда корректно "захватить" последнюю секунду?
7. Danil.Potapov 446 26.02.20 19:59 Сейчас в теме
(6)
1. сделать скрытый параметр КонецПериодаДляОстатков и из стандартного периода конец периода брать с плюс секундой.
2. заменить &КонецПериода на ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1)
PowerBoy; Vladimir Litvinenko; +2 Ответить
8. leosoft 147 26.02.20 21:00 Сейчас в теме
(7) А это не будет начало следующего дня? И как написано в (5) "обороты при этом начнут включать в себя и движения за первую секунду следующего дня".
9. Vladimir Litvinenko 2397 26.02.20 21:05 Сейчас в теме
(8) Для оборотов нужно использовать прежний параметр. Для остатков - отдельный вычисляемый параметр. Они должны быть разными. Среди вариантов, которые привёл выше Данил лучше выбрать вариант №1, так как это позволит гарантировано задействовать индекс по периоду в таблице итогов и движений. Вариант №2 может привести скану по таблицам. На MS SQL вроде бы не должен приводить, но всё таки лучше избегать вычислений над параметрами виртуальных таблиц, которые для работы с индексами заточены.
23. Yashazz 3410 27.02.20 18:14 Сейчас в теме
(9)
Вариант №2 может привести скану по таблицам

Впервые задумался об этом, как-то всегда на автопилоте писал ДобавитьКДате, а вот вы навели на раздумья. Да, хз, может и правда так быть. Спасибо, учту.
31. login1020 68 28.02.20 16:15 Сейчас в теме
(9) т.е. Для таблиц Вида Остатки задавать параметр Конца периода следует вот так?
Прикрепленные файлы:
38. Terve!R 09.03.20 18:34 Сейчас в теме
(31) предпочитаю
КОНЕЦПЕРИОДА(&СтандартныйПериод.ДатаОкончания, ДЕНЬ)
37. Terve!R 09.03.20 18:31 Сейчас в теме
(6) Я всегда устанавливаю &КонецПериода в
КОНЕЦПЕРИОДА(&СтандартныйПериод.ДатаОкончания, ДЕНЬ)

Это же аналог
Запрос.УстановитьПараметр("КонецПериода", КонецДня(&ДатаОкончания));

Не понимаю, зачем эти заморочки с секундой?
10. sapervodichka 3844 27.02.20 00:16 Сейчас в теме
(5) я "Стандартный период" использую везде, вероятно, меня это и спасает в СКД (спасибо за ответ)
11. rpgshnik 2332 27.02.20 03:21 Сейчас в теме
(10) тоже его стараюсь использовать всегда, ещё с базового курса по разработке в 1С от 1С именно так и учат, заводить стандартный период, но не объясняя зачем, говоря - так удобнее :)
17. gelotus 27.02.20 12:34 Сейчас в теме
По идее если вы используете начало следующего дня, то движения за первую секунду следующего дня НЕ захватит.
так как период будет установлен на начало секунды. а все движения будут после начала секунды.
33. Rustig 1556 04.03.20 07:38 Сейчас в теме
(5) обходил этот косяк СКД так - в документе при проведении явно ставил дату на одну секунду меньше конца периода. По задаче требовалось раз в месяц проводить управленческие расходы. Сажал их на конец месяца за минусом одной секунды, не зависимо от указанной даты в документе. В СКД далее собирал информацию по всем периодам.
Без этой дописки СКД некорректно брала итоги.
13. Nikola23 514 27.02.20 09:38 Сейчас в теме
(1) за 11 лет работы ни разу не встретил описанной проблемы.
Если но так серьезно, набросайте статью с примерами, поделитесь с сообщестом.
ИМХО, использование стандартного периода решает вопрос.
У меня решает.
rmarkovych; awk; +2 Ответить
14. awk 718 27.02.20 11:35 Сейчас в теме
(13) Эээ... А за что минус? За то что человек не видел? За предложение написать статью?
15. Nikola23 514 27.02.20 11:55 Сейчас в теме
16. Vladimir Litvinenko 2397 27.02.20 12:12 Сейчас в теме
(14) Ок. Только ради Вас, пускай лучше плюс будет )) Я тут чуть материться не стал вот за это

за 11 лет работы ни разу не встретил описанной проблемы
ИМХО, использование стандартного периода решает вопрос.
У меня решает.

Вместо того, чтобы пойти и исправить косячный код. Хотел спросить где человек работает, чтобы к ним на собеседование ненароком не попасть. Это всё равно что бэкапы не делать, если за 11 лет сервер ни разу не летел и рекомендовать написать статью, что бэкапы нужны ))

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

Вот врачу напиши - "работа без дезинфекции инструментов может привести к заражению пациента болезнью с инкубационным периодом в 11 лет". А он тебе в ответ "я за 11 лет ни разу не встретил описанной проблемы", ИМХО поплевать на руки - решает описанную проблему, у меня решает" ))

Проблема в том, что он то не встретил. А за ним исправляли. Или не исправляли, потому что поздно было. Или он 11 лет в одной компании работает? И пользователи данные не проверяют при приемке работ и программисты наивными глазами смотрят "Ну а чо, оно же работает!" ))

P.S. Статьи пишу если что, с ленью в этом плане не дружу )) Но вопрос уже разжёван выше в комментариях. Извините, если слишком резко, но слишком часто подтирать прходилось... и убеждать что надо ошибки исправлять... иногда безуспешно. Иногда кажется, что проще забить на это и продолжать подтирать.
Yashazz; acanta; +2 Ответить
18. awk 718 27.02.20 15:09 Сейчас в теме
(16) Спасибо.


1. Косячный код - это код который косячит. Если в базе код не косячит, то код не косячный. Работает - не трогай. Аналогия с серверами - ложна, как любая аналогия.
2. Если вам не нравиться 1С сообщество - не пишите на инфостарт, пишите на хабре.
3. Если посмотрите историю создания антисептиков. То одного уважаемого пришибли в психушке, то же что и вы говорил. https://ru.wikipedia.org/wiki/Земмельвейс,_Игнац_Филипп
4. Ошибки надо исправлять спокойно, всегда помня, что кто-то исправляет за вами.
19. Vladimir Litvinenko 2397 27.02.20 15:21 Сейчас в теме
(18)
Косячный код - это код который косячит. Если в базе код не косячит, то код не косячный.

Так он и косячит. Халатность принимающего задачу помноженная на халатность разработчика не избавляет от факта ошибки. Писал уже выше - за те же 11 лет работы в 1С мне пришлось много раз исправлять эту ошибку. В реальных базах, на реальных суммах. Вот коллега тоже 11 лет как раз в 1С работает )) "Совпадение? Не думаю".

Если вам не нравиться 1С сообщество

Зря вы делаете такой вывод. Мне не нравится только та его часть, которая халатно относится к своей работе или оправдывает халатное отношение к работе и предпочитает прикрываясь "бизнес-программированием" и "решением реальных проблем" заваливать базы ошибками.

Ошибки надо исправлять спокойно

Согласен, об этом и речь. В то же время не отмахиваться от них.

всегда помня, что кто-то исправляет за вами

Помню. У каждого врача своё кладбище. И благодарен тем, кто исправляет за мной косяки. Стараюсь зафиксировать их причину и не считаю, что имею при этом право писать "а у меня работает".

Ладно, согласен, слишком сильно пригорело ))
20. awk 718 27.02.20 16:42 Сейчас в теме
(19)

Вопрос) Можно ли исправить все ошибки?
Ответ) Нет.
Вопрос) Если нельзя исправить все ошибки, то какие надо исправлять.
Ответ) Зависит от области. Поскольку мы живем при капитализме, то исправление ошибки = деньги. На что готовы потратить деньги, то и следует исправлять.
Пример:
Ошибка: Документ с позицией 2019-02-02 23.59:59.005 не попадает в отчет.
Метод обхода: Изменить позицию документа на 2019-02-02 23.59:58.ХХХ

Время исправления пользователем: 1 мин. умножить на количество документов, позиционированных после 23.59:59.
Время исправления программистов: 2+ часа (создать копию, исправить, проверить, обновить).

Стоимость 1 часа пользователя 100 р.
Стоимость 1 часа программиста 500 р.

Цена исправления ошибки 1000р. = 10 часов работы пользователя = 600 минут работы пользователя => количество документов, позиционированных после 23.59:59, должно быть больше 600 или штраф за неправильный документ (для фирмы!!!) больше 1000 рублей.

Если учесть:
1. Есть групповое изменение реквизитов (снижает время пользователя)
2. Отчет может быть не один (увеличивает время программиста)
То можно сделать вывод: в большинстве ситуаций исправление данной ошибки экономически не целесообразно!!!
21. acanta 27.02.20 16:51 Сейчас в теме
(20) а если в программе при записи документа время автоматически устанавливать на 0:00:00?
В зуп же так делается?
28. awk 718 28.02.20 09:46 Сейчас в теме
(21) Вопрос не в варианте исправления.
39. arimefu 10.03.20 07:12 Сейчас в теме
(20) Есть еще один нюанс: пользователь должен потратить время при таком сравнении не только на то, чтобы сформировать отчет, но еще и проверить все данные, потом разобраться, почему же документ не попал, исправить это. Хотя причина банальна - отчет составлен неправильно. Думаю, при ежедневном (да и просто частом) использовании такого отчета его в любом случае необходимо исправлять, а не мириться с тем, что данные могут быть некорректными.
41. awk 718 10.03.20 13:45 Сейчас в теме
(39) Да.. Полностью согласен... Исправлять надо. Вопрос в приоритетах...
26. Nikola23 514 28.02.20 00:23 Сейчас в теме
(16) Владимир, ох как вас зацепило.
Серьезно "улыбает" то, что не зная меня вы написали несколько абацев обо мне.

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

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

П,С, как пишет коллега ниже в (18)
"всегда помни, что кто-то исправляет за вами"

Код в студию (до проверки ванессой и сонаром). Код ревью проведу, посмеемся всем сообществом.
27. Vladimir Litvinenko 2397 28.02.20 02:02 Сейчас в теме
(26) Да будет Вам. Всё нормально и я принял мысль, что наличием капитализма в России (а до этого наличием коммунизма) и наличием ошибок в типовых всё можно оправдать. Приму этот аргумент на вооружение ))


Хорошо только, что в той типовой с которой я работаю такого пока не встречалось (за исключением бета версий времён ERP 2.0.x) и даже более того, написаны общие алгоритмы, которые позволяют решить задачу. Странно да? Ведь типовая:

12. zqzq 21 27.02.20 08:45 Сейчас в теме
Решить можно двумя способами:

Не использовать параметры с именами &НачалоПериода, &КонецПериода
Отключить «Автозаполнение» и прописать все поля и параметры вручную
Есть ещё 3-й вариант, не отключать автозаполнение и добавить подсказку для компоновки (можно через конструктор или вручную -- т.е. параметры в фигурных скобках):
РегистрНакопления.ДвиженияДенежныхСредств.Обороты({&НачалоПрошлогоПериода}, {&КонецПрошлогоПериода}, , ) 
СергейК; bulpi; CSiER; ktb; awk; Vladimir Litvinenko; Batman; +7 Ответить
22. Yashazz 3410 27.02.20 18:13 Сейчас в теме
Дельная, толковая статья, и интересные комменты. Спасибо!
24. bulpi 175 27.02.20 23:29 Сейчас в теме
Решить можно двумя способами:

Не использовать параметры с именами &НачалоПериода, &КонецПериода

Как ? У меня не получилось. Они сами появляются и не удаляются.
40. arimefu 10.03.20 07:22 Сейчас в теме
(20) В статье как раз написано, сами они появляются только при включенной галочке "Автозаполнение". Но в этом нет ничего плохого, главное понимать, что и как должно применяться.
В статье немного подробнее, наверное, стоило бы написать про "жесткие" и "мягкие" параметры виртуальных таблиц. На самом деле, все довольно просто, есть 3 варианта:
РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, )
РегистрНакопления.ДенежныеСредства.Остатки(&КонецПериодаЖесткий {(&КонецПериода)}, )
РегистрНакопления.ДенежныеСредства.Остатки(&КонецПериодаЖесткий , )


В первом варианте указан "мягкий параметр". Именно он будет использоваться в схеме СКД, если он задан. Можно его вообще не указывать, с галочкой "Автозаполнение" он автоматически добавится с таким же именем.
Во втором варианте указаны и "жесткий", и "мягкий" параметры. В случае не заданного "мягкого", будет использован "жесткий", а иначе - "мягкий".
В третьем случае уже интереснее: если стоит галочка автозаполнения, то эта строка преобразуется во вторую автоматически, соответственно при указании параметра &КонецПериода именно он будет использоваться, хотя его даже нет явно в самом тексте запроса. А вот при снятой галочке автозаполнения будет использоваться &КонецПериодаЖесткий из текста запроса.
25. bulpi 175 27.02.20 23:38 Сейчас в теме
По времени :
При нормальной работе каким образом может получиться время 23:59:59, если рабочий день до 20-00 ? Тут разобраться надо. И причину устранить, возможно ?
29. awk 718 28.02.20 09:48 Сейчас в теме
(25) Операция закрытия месяца, квартала, года...
30. bulpi 175 28.02.20 15:09 Сейчас в теме
(29)
Ну, я бы сделал подписку на событие перед записью всех документов, и менял 23:59:59 на 23:59:58 , вместо того, чтобы заморачиваться в каждом отчете.
32. awk 718 28.02.20 17:02 Сейчас в теме
(30) Это не правильно (не говоря о том, что это костыль). Время 23:59:59 - законно.

Как только у вас будет фирма 24/7 с хорошей нагрузкой, то вы получите проблему. Поступление в 23:59:58.020, а отгрузку 23:59:58.011 и ошибку нет остатка.
34. Rustig 1556 04.03.20 07:49 Сейчас в теме
(32) все поступления проводить датой, которая указана в документе, но если дата больше или равна 23:59:58.00, проводить датой равной 23:59.58.00.
Все отгрузки проводить датой, указанной в документе, но если дата больше или равна 23:59:58.00 и меньше 23:59:59.99, то проводить датой равной 23:59.58.01.

ПС. Любая платформа имеет ограничения, любые механизмы имеют ограничения, не нужно пытаться в СКД решать все ситуации из жизни, и делать из СКД универсальный всерешающий инструмент.
35. awk 718 04.03.20 09:06 Сейчас в теме
(34) Вы лечите симптомы, а не болезнь.
36. Rustig 1556 04.03.20 13:18 Сейчас в теме
(35) согласен, что проблемы СКД я не решаю.
решаю задачи клиента. :)
Оставьте свое сообщение

См. также

Использование программных перечислений, ч.1: строковые константы Промо

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

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    37241    unichkin    74    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    25578    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    23046    John_d    22    

Последовательности событий. Шпаргалка

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    17605    kuzyara    33    

Вспомогательные инструкции в коде 1С Промо

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

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    30100    tormozit    100    

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    16877    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

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

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    8274    Sibars    19    

Таблица значений. Нюансы

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

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    32550    Yashazz    50    

Оформление и рефакторинг сложных логических выражений Промо

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

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

20.09.2012    77861    tormozit    131    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    20837    YPermitin    37    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

18.09.2019    19195    YPermitin    36    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    48568    rpgshnik    63    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    48205    tormozit    41    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    48485    ids79    54    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    27930    YPermitin    24    

Три костыля. Сказ про фокусы в коде

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

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    25336    YPermitin    80    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

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

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    44640    tormozit    74    

Отслеживание выполнения фонового задания

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

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    31175    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    79855    ids79    49    

Фоновое выполнение кода в 1С - это просто

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

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

02.08.2019    34479    avalakh    22    

Выгрузка документа по условию Промо

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

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16013    m-rv    2    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    23315    json    13    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    58322    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    35436    ids79    27    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    20143    m-rv    17    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    25867    YPermitin    14    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19554    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    45564    ids79    17    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    30488    m-rv    21    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    51764    ids79    25    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    24840    dmurk    145    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    42476    YPermitin    30    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

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

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

05.12.2017    28206    itriot11    34    

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    35152    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    27299    ellavs    89    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    31157    YPermitin    53    

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

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

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

27.01.2016    76210    Serginio    108    

Добавление отчетов в типовые конфигурации 1С

Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем) v8::УФ v8::СКД 1cv8.cf Бесплатно (free)

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

07.03.2019    53291    ids79    46    

Ошибки при работе с хранилищем конфигурации и способы их решения

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

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    38674    Смешной 1С    28    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    21788    Vladimir Litvinenko    27    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    34532    ids79    40    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    38942    ids79    9    

Тестер: частые вопросы Промо

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

Ошибкам бой - тесты норма жизни!

25.07.2018    29177    grumagargler    28    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    26617    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

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

14.12.2018    41102    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    36768    ids79    42    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

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

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

04.09.2017    52498    m-rv    61    

Программное заполнение пользовательских параметров и отборов СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

13.11.2018    46904    Unk92    25