СКД - одна из проблем связи Наборов данных

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

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

СКД Набор Связи

Официальная информация: 1. В схеме компоновки данных нет указания типа связи. Все связи считаются ЛЕВЫМИ внешними соединениями. 2. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается ВНУТРЕННЕЙ. Или как получить все результаты основного набора при отборе в зависимом.

Доброго времени суток.

Вступление

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

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

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

1. Подготовка и демонстрация

НаборДанных1 (основная выборка) с полями Комплектующая, Продукция и КоличествоНа1 (среднее взял, потому что бардак в спецификации) - запрос: 

 
Запрос по спецификации

 

НаборДанных2 (остатки, зависимый) - запрос:

 
Запрос остатков

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

Связи наборов данных: Источник - НаборДанных1 (основной), Приемник - НаборДанных2 (зависимый), Выражения - Комплектующая. 

 
Картинка связи

Ресурсы пока простые: Сумма(КоличествоНа1) и Сумма(ОстатокКомлектующей).

Структура простенькая группировки: Комплектующая - Продукция - Детальные записи. Выбраны все поля.

 
Картинка структуры

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

 
Картинка результата

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

Проблема:

Но вот я задаю отбор "Склад отбора Равно Цех готовой продукции" и результат - только одна комплектующая:

 
Картинка "неправильного" с отбором по складу

Тогда я еще не знал про "замену Левого на Внутреннее, если есть отбор"...

2. Попытка выкрутиться

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

Но вот беда: в отборе по группировке, среди доступных полей, нет поля "СкладОтбора":

 
Картинка - нет поля СкладОтбора

 

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

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

 
 Результат отбора по группировке

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

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

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

3. Хотелки и их исполнение.

Кому интересно решение проблемы - этот пункт можно пропустить.

Хотелка 1 - а почему не добавить показ остатков по Продукции?

Хотелка 2 - как бы сделать отчет более смотребильным, а то складов много и увидеть остатки сразу в строке - значит надо склады в колонки, а тогда отчет получается "разряженным".

Хотелка 3 - если уж добавил остатки продукции, то отбор по складу должен работать и на это.

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

 
 Запрос НабораДанных3

Тут интересный эффект наблюдал, если поле Склад будет иметь одинаковое наименование в обоих подчиненных наборах, то в результате в остатках у продукции будет не правильный склад, потому что значение будет от первого набора. Поэтому - они разные. Одинаковыми могут быть только действительно одинаковые по смыслу поля, например те которые участвуют в связи. Так Номенклатура для НабораДанных2 называется Комплектующая, а в НабореДанных3 - Продукция. Ну а чтобы поле отбора было единым для обоих наборов: появился СкладОтбора - это решило хотелку 3.

Ну и добавляем еще одну связь.

 
 Картинка Связей

Ну и в ресурсах определяем ОстатокПродукции.

Теперь вторая хотелка. Если выводить данные по складам списком - получим умножение строк остатков, например 5 складов по Комплектующей и 3 по Продукции итого 15 строк. Хорошо хоть итоги по группировкам правильные. Да и как "сложить" 2 одинаковых склада по комплектующей и по продукции? Поля называются по разному и как сделать по ним группировку - не придумал.

Тут на помощь пришла вторая статья Агрегатные функции СКД, о которых мало кто знает. Сначала использовал функцию ТаблицаЗначений. Но при простом повторении формирования отчета строки складов прыгают. Тогда добавил Упорядочить в итоге получилось так: 

 
 Выражение в ресурсах

Для ОстаткаКомплектующих: Упорядочить(ТаблицаЗначений(Различные СкладКомплектующей Как Склад, ОстатокКомплектующей Как Остаток), "Склад Автоупорядочивание")

Для ОстаткаПродукции: Упорядочить(ТаблицаЗначений(Различные СкладПродукции Как Склад, ОстатокПродукции Как Остаток), "Склад Автоупорядочивание")

 
 Они же на картинке

 

Дальше немного "причесал" структуру: выключил детальные записи, сгруппировал поля, отключил "Общие Итоги по вертикали".

 
 Вот такая структура

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

 
 Кусок результата

Теперь влючаю отбор по складу и вижу результат, опять исчезли строки (что в прочем уже ожидаемо):

 
 Картинка проблемы
4. Поиск решения

Сразу скажу: на мой взгляд не очень хорошее, но другого не нашел. Вопросы такого плана есть, а ответов увы не много. Потому думал сам и пришел к выводу - если связь вместо ЛЕВОЙ становится ВНУТРЕННЕЙ, значит необходимо сделать так, чтобы для каждой записи основного набора существовала запись зависимого, не взирая на отбор.

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

 
 Запрос остатков связанный с номенклатурой

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

Дальше экспериментировал с настройками. Работало долго. На каком-то этапе вообще получил от сервера отлуп по памяти... Бросил.

Пробовал создать набор типа Объединение, где один набор - остатки, другой - опять же номенклатура. Но там надо было создавать сложные условия с ИЛИ, чтобы запись Номенклатуры выбиралась в любом случае... Не пошло.

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

5. Решение

И начал снова с Левого соединения в запросе. Получился такой запрос (правильный):

 
 Запрос остатков связанный с номенклатурой

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

Сформировал, посмотрел нормальный результат. Включил отбор и увидел это:

 
 Правильный результат

 

Стал сравнивать с предыдущими тестами и понял: {ГДЕ ТоварыНаСкладахОстатки.Склад.* КАК СкладОтбора} отрабатывала после соединения, а потому отсекало номенклатуру. А когда я перенес его в условия таблицы остатков, то и отбор сработал только на регистр остатков не затронув номенклатуру. Потому первый запрос - не правильный и не работает, а второй заработал (так я считаю).

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

 
 Удивительный результат

 

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

Правильный вывод или нет - я не знаю.

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

Конец

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

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

Лучшие комментарии
4. dhurricane 04.03.20 07:37 Сейчас в теме
Еще один способ, как обойти преобразование левого соединения во внутреннее - это добиться появления поля "СкладОтбора" в первом наборе данных.

Попробуйте доработать запрос первого набора данных следующим образом:
ВЫБРАТЬ
	Склады.Ссылка КАК СкладСсылка
ПОМЕСТИТЬ ВтСклады
ИЗ
	Справочник.Склады КАК Склады
{ГДЕ
	Склады.Ссылка.* КАК СкладОтбора}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СпецификацииВыходныеИзделия.Номенклатура КАК Продукция,
	СпецификацииИсходныеКомплектующие.Номенклатура КАК Комплектующая,
	СРЕДНЕЕ(СпецификацииИсходныеКомплектующие.Количество / СпецификацииВыходныеИзделия.Количество) КАК КоличествоНа1
ИЗ
	Справочник.Спецификации.ВыходныеИзделия КАК СпецификацииВыходныеИзделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификации.ИсходныеКомплектующие КАК СпецификацииИсходныеКомплектующие
		ПО СпецификацииВыходныеИзделия.Ссылка = СпецификацииИсходныеКомплектующие.Ссылка

СГРУППИРОВАТЬ ПО
	СпецификацииВыходныеИзделия.Номенклатура,
	СпецификацииИсходныеКомплектующие.Номенклатура
Показать

Здесь я добавил первым запрос к справочнику складов. Т.к. используется секция {ГДЕ}, при установке отбора по полю "СкладОтбор", этот отбор попадет в условия нашей новой временной таблицы. Но при этом само поле "СкладСсылка" в отчете никоим образом не участвует, поэтому оптимизатор СКД просто "выкинет" эту часть запроса (получение временной таблицы).

Т.о. можно немного запутать СКД (а вместе с ней и разработчика, который будет сопровождать отчет), но при этом избавиться от внутреннего соединения в связях наборов данных и не нагрузить базу данных избыточными выборками данных (соединение со справочником номенклатуры во втором наборе можно убрать).
Julia7150; embarcadero; JohnyDeath; purgin; testnv0; toypaul; BelikovSA; +7 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Valerich 1684 04.03.20 04:36 Сейчас в теме
Вместо двух наборов сделать один и в нем явно сделать левое соединение
3. dhurricane 04.03.20 07:18 Сейчас в теме
(1) Тогда "поплывут" количественные показатели. В частности в общем итоге "КоличествоНа1" задвоится, затроится и т.д. Трудности с наборами данных перерастут в трудности с выражениями ресурсов.
5. BelikovSA 36 04.03.20 10:02 Сейчас в теме
(1)
Одна комплектующая для нескольких продукций - итог несколько строк в результате. При левом соединении несколько строк остатков. В результате нельзя использовать данную колонку в Ресурсах (по крайней мере в виде простой суммы), если знаете как - напишите пожалуйста.
2. dhurricane 04.03.20 07:12 Сейчас в теме
Я бы предложил следующее.

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

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

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

4. На закладке параметров СКД для нового параметра "СписокНоменклатуры" установить флажок доступности списка значений и ограничить доступность параметра пользователю.
BelikovSA; +1 Ответить
6. BelikovSA 36 04.03.20 10:12 Сейчас в теме
(2)
Я упростил задачу для написания статьи. Исходно список номенклатуры (продукции ) идет из табличной части Заказа, да и разбор на комплектующие идет глубже одного уровня.
Если для отчета - с п.1 и 2 - согласен полностью.
По п.3 - честно говоря плохо его понимаю. В моем понимании получится, что второй набор данных станет выполнятся "в цикле". Возможно не так понял - посмотрю. Спасибо.
7. dhurricane 04.03.20 10:18 Сейчас в теме
(6) Да, наверняка он будет выполнятся в цикле. Но это не так страшно. Флажок "Список параметров" на закладке связей отвечает как раз за то, чтобы получать данные порциями. Порции, на сколько я помню, должны быть достаточно большими (до 1000 значений в параметре), так что итераций будет немного. И это наверняка дешевле, нежели получить запросом весь справочник номенклатуры целиком.
BelikovSA; +1 Ответить
4. dhurricane 04.03.20 07:37 Сейчас в теме
Еще один способ, как обойти преобразование левого соединения во внутреннее - это добиться появления поля "СкладОтбора" в первом наборе данных.

Попробуйте доработать запрос первого набора данных следующим образом:
ВЫБРАТЬ
	Склады.Ссылка КАК СкладСсылка
ПОМЕСТИТЬ ВтСклады
ИЗ
	Справочник.Склады КАК Склады
{ГДЕ
	Склады.Ссылка.* КАК СкладОтбора}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СпецификацииВыходныеИзделия.Номенклатура КАК Продукция,
	СпецификацииИсходныеКомплектующие.Номенклатура КАК Комплектующая,
	СРЕДНЕЕ(СпецификацииИсходныеКомплектующие.Количество / СпецификацииВыходныеИзделия.Количество) КАК КоличествоНа1
ИЗ
	Справочник.Спецификации.ВыходныеИзделия КАК СпецификацииВыходныеИзделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификации.ИсходныеКомплектующие КАК СпецификацииИсходныеКомплектующие
		ПО СпецификацииВыходныеИзделия.Ссылка = СпецификацииИсходныеКомплектующие.Ссылка

СГРУППИРОВАТЬ ПО
	СпецификацииВыходныеИзделия.Номенклатура,
	СпецификацииИсходныеКомплектующие.Номенклатура
Показать

Здесь я добавил первым запрос к справочнику складов. Т.к. используется секция {ГДЕ}, при установке отбора по полю "СкладОтбор", этот отбор попадет в условия нашей новой временной таблицы. Но при этом само поле "СкладСсылка" в отчете никоим образом не участвует, поэтому оптимизатор СКД просто "выкинет" эту часть запроса (получение временной таблицы).

Т.о. можно немного запутать СКД (а вместе с ней и разработчика, который будет сопровождать отчет), но при этом избавиться от внутреннего соединения в связях наборов данных и не нагрузить базу данных избыточными выборками данных (соединение со справочником номенклатуры во втором наборе можно убрать).
Julia7150; embarcadero; JohnyDeath; purgin; testnv0; toypaul; BelikovSA; +7 Ответить
8. BelikovSA 36 04.03.20 10:51 Сейчас в теме
(4)
Блеск :)
Работает!!! Красивое решение :).
Спасибо большое, а то меня именно "нагрузка избыточными данными" и напрягала. Как я уже писал в какой-то момент вообще получал вылет по памяти. А тут такая красота - складов ограниченное количество в отличии от номенклатуры.
9. dhurricane 04.03.20 13:35 Сейчас в теме
(8)
складов ограниченное количество в отличии от номенклатуры.
В приведенном примере запроса к складам не будет вообще, т.к. поле "СкладСсылка" не используется в настройках компоновки. Оптимизатор запросов СКД просто-напросто "выбросит" этот кусок запроса, останется только запрос к спецификациям.
10. Julia7150 06.05.21 07:06 Сейчас в теме
(4) Изящное решение, а главное рабочее) Спасибо, очень помогли!
Оставьте свое сообщение

См. также

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

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

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

27.01.2016    80730    Serginio    113    

Формирование отчета СКД с расшифровкой из обработки

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

Формирование отчета СКД из обработки немного отличается от формирования из отчета.

27.04.2021    2822    John_d    14    

Нестандартное использование СКД

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

Программист 1С в компании «БКС-технологии» Алексей Шиянов в ходе Infostart Meetup Novosibirsk продемонстрировал необычный способ использования СКД и сравнил результаты заполнения движений документа через СКД с классическим подходом к заполнению движений через запросы и циклы.

14.04.2021    2767    user1127305    11    

Полезные примеры СКД, ч.2

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

Еще несколько примеров решения задач в СКД.

06.04.2021    5664    Neti    7    

Звуковое управление в 1С 8.3 Промо

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

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

16.03.2021    3999    velemir    31    

Пример платежного календаря. СКД. Работает на любой платформе, без привязки к данным. Подробное описание действий

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

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

02.04.2021    835    parshachello    2    

Полезные примеры СКД, ч.1

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

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    7668    Neti    18    

Обзор полезных методов БСП 3.1.4

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

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

25.03.2021    22007    rayastar    49    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    5925    comol    31    

Сравнение данных с февралем високосного года (проблема 29 февраля)

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

Думаю, в практике многим приходится неоднократно сталкиваться с необходимостью разработки отчёта типа LFL (like for like), сравнивающего аналогичные периоды разных лет, например, текущего выбранного периода с аналогичным периодом прошлого года. В новых конфигурациях такой отчёт есть в составе конфигурации (см. "Сравнение продаж аналогичных периодов"), а в старых обычно приходится добавлять. Если не учесть нюанс сравнения с февралём високосного года, данные в отчёте за прошлый период могут быть некорректными.

02.03.2021    347    lolipoka    4    

Отбор на форму (документа, справочника, обработки) с помощью СКД

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

Добавляем удобный отбор на форму документа с помощью СКД

09.02.2021    4703    John_d    15    

Установка нескольких фильтров/отбора СКД в табличной форме, хранение в табличной части для отправки push/email уведомлений (ОтборКомпоновкиДанных, КомпоновщикНастроек, ДинамическийСписок)

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

Рассмотрим, как организовать установку фильтров/отбора СКД (динамического списка) на push/email уведомления в подсистеме EDIbot (WebApp) для 1С в табличной части "События уведомлений".

02.11.2020    1252    SizovE    0    

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

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

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

10.12.2016    39278    unichkin    74    

Вычислить РАЗНОСТЬДАТ в рабочих днях

Практика программирования БСП (Библиотека стандартных подсистем) v8::Запросы v8::СКД ERP2 БП3.0 УТ11 ЗУП3.x Бесплатно (free)

Вычисление количества рабочих днях между двумя датами в запросе.

20.10.2020    3341    antonivan    17    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

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

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

30.08.2020    14927    quazare    34    

Вывод дерева в табличный документ СКД

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

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    3725    Yashazz    7    

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

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

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

15.10.2018    33543    tormozit    105    

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

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

В СКД создан набор данных "Запрос". Запрос выполняется к виртуальной таблице "Остатки и обороты", периодичность регистра "Авто", выбираются все измерения и ресурсы регистра, а так же выбирается Регистратор и ПериодСекунда. Для полей содержащих остатки устанавливается роль "Остатки". Для полей "Регистратор" и "ПериодСекунда" устанавливается роль "Период". Для поля "Регистратор" устанавливается выражение упорядочивания.

24.05.2020    5078    kasper076    17    

Макет оформления в отчете с несколькими СКД

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

Как заставить работать макет оформления в отчёте с несколькими СКД.

14.05.2020    3704    vendim    1    

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    51526    user5300    18    

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

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

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

20.09.2012    80538    tormozit    131    

СКД. Использование Менеджера временных таблиц в системе компоновки

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

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

29.04.2020    9416    the1    39    

Ограничения полей, или как обмануть СКД?

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

Каждое из ограничений полей можно обойти. Рассмотрим варианты обхода и способы обезопасить свой отчет.

15.04.2020    12808    SeiOkami    40    

Работа с запросами в 1С СКД. Отладка СКД

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

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    4252    ProfessionStore    3    

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

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

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

11.07.2007    51559    tormozit    51    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

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

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

13.04.2020    7469    ProfessionStore    4    

СКД: Прозрачная обработка результата

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

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

13.04.2020    4947    starik-2005    16    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

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

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

12.04.2020    5964    ProfessionStore    11    

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

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

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

10.09.2017    48274    tormozit    74    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

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

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

11.04.2020    9145    ProfessionStore    9    

Работа с запросами в 1С СКД. Язык выражений СКД и подмена запросов

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

Хотя эта статья называется «Работа с запросами в 1С СКД», нельзя не упомянуть про язык выражений СКД. Да – у системы компоновки данных есть свой язык! Это не язык платформы 1С, это не язык запросов. Это еще один язык, который используется 1С в СКД для обработки полученного набора (ов) данных.

11.04.2020    8216    ProfessionStore    25    

Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД

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

Все тонкости использования расширения языка запросов 1С для СКД вы можете изучить по ссылкам, которые приведены в предыдущей статье. Здесь мы рассмотрим конкретные кейсы применения данного расширения.

10.04.2020    8218    ProfessionStore    4    

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

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

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

25.04.2019    16860    m-rv    3    

Запросы 1С СКД. Возможности и ограничения

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

В этом цикле статей мы рассмотрим особенности работы системы компоновки данных с запросами в 1С.

10.04.2020    10188    ProfessionStore    14    

Вложенные СКД

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

Возможности, нюансы, заметки.

26.03.2020    8153    Yashazz    19    

Получение значений всех полей в иерархии структуры отчета

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

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

28.02.2020    2406    real_MaxA    1    

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

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

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

16.04.2019    21558    m-rv    17    

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

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

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

26.02.2020    8629    Neti    41    

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

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

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

27.01.2020    49699    ids79    26    

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

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

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

15.01.2020    35543    John_d    22    

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

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

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

01.06.2018    33934    m-rv    22    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

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

30.12.2019    28105    kuzyara    38    

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

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

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

02.12.2019    20711    YPermitin    61    

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

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

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

22.11.2019    10996    Sibars    19    

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

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

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

05.12.2017    29362    itriot11    34    

СКД. Лайфхак №2. Собираем отчет еще удобнее

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

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

20.11.2019    11114    aximo    18    

Простейший пример создания бизнес-процессов

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

Простой пример создания бизнес-процессов в несколько шагов. Может пригодиться при первом знакомстве с ними или для решении задач экзамена 1С:Специалист по платформе.

20.11.2019    28121    YPermitin    19    

Некоторые редко используемые возможности СКД

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

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

11.11.2019    13107    kser87    40    

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

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

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

10.11.2018    40426    ids79    44    

Лайфхак работы с СКД. Собираем отчет.

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

В этой статье я опишу небольшой "лайфхак" по сборке отчетов в СКД. Думаю, этот подход будет интересен тем, кто хочет быстро оформить отчет.

25.10.2019    28484    aximo    38    

Немного про СКД. Характеристики и проверка пустого отчета

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

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

10.10.2019    13949    YPermitin    7