вторник, 17 декабря 2013 г.

Хранение ВИДОВ настроек пользователя

ПланыВидовХарактеристик.НастройкиПользователей- Предопределенные.

Очевидно сюда можно добавить и свой параметр (при необходимости)!

Запрет использования встроенных печатных форм

 #1c Комментируем список макетов в Функция ПолучитьСтруктуруПечатныхФорм() модуля документа и... остаются только внешние!

среда, 20 ноября 2013 г.

Подменю Операция в документах УТ 10.3

По умолчанию (видимо всегда) сюда (реквизит ВидОперации) отбирается значение [0] из соответствующего перечисления.
Происходит это из процедуры ЗаполнениеДокументов.ЗаполнитьШапкуДокумента() в конструкции
Если ОбщегоНазначения.ЕстьРеквизитДокумента("ВидОперации", МетаданныеДокумента)
  И (НЕ ЗначениеЗаполнено(ДокументОбъект.ВидОперации))
Тогда
ДокументОбъект.ВидОперации = Перечисления[ДокументОбъект.ВидОперации.Метаданные().Имя][0];
КонецЕсли;

Сама эта процедура вызывается в модуле соответствующей формы (может опосредовано через модуль документа).

Соответственно изменить ВидОрерации по умолчанию можно изменить двумя способами:
1. В модуле соответствующей формы.
2. Изменив порядок значений в соответствующем перечислении

среда, 30 октября 2013 г.

Отладка внешних печатных форм

Разработано на Инфостарте. "Фундамент"

Внешняя печатная форма – это внешняя обработка, у которой должны быть:
1. Реквизит "СсылкаНаОбъект" типа ДокументСсылка неопределенного или определенного (если форма предназначена для одного документа) вида;
2. В модуле обработки должна быть функция Печать() с ключевым словом "Экспорт" (результатом выполнения функции должен быть табличный документ или значение "Неопределено").
3. Если в функцию Печать() мы копируем алгоритм заполнения печатной формы из документа, то все параметры типа ЭтотОбъект.Ссылка мы должны заменить на СсылкаНаОбъект
4. Если нужна авторегистрация формы, то создаётся макет с идентификатором "Параметры_Авторегистрации" в первом столбце которого в каждой строчке можно указать объекты, для которых предназначена печатная форма  (Документы.ЗаказПокупателя).

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

  1. Добавляем форму.
  2. При создании формы НЕ НАЖИМАТЬ сразу ГОТОВО, нажимать ДАЛЕЕ! Иначе не будет возможности автоматически создать ПолеВвода для выбора значения реквизита СсылкаНаОбъект.
  3. В обработчик нажатия кнопки "Выполнить" добавим вызов функции Печать() с выводом на экран результата.
Процедура КнопкаВыполнитьНажатие(Кнопка)
     Печать().Показать();
КонецПроцедуры

Теперь просто открыв файл внешней печатной формы и выбрав в поле "Ссылка на объект" нужный документ мы нажимаем кнопку Выполнить и печатаем/отлаживаем!!!

И, что самое важное/приятное- именно эту форму (без малейших изменений) можно сразу добавлять в доп. формы, а при необходимости- извлекать и опять отлаживать!

среда, 9 октября 2013 г.

Поле объекта недоступно для записи

Ключевое слово тут- "объект". Как правило возникает при попытке записать в ссылку!
Еще часто возникает при использовании ТекущаяСтрока вместо ТекущиеДанные

вторник, 1 октября 2013 г.

Номенклатура контрагента (поставщика)

Являет собой регистр сведений.

Из документации. Регистр предназначен для хранения списков номенклатуры поставщиков, возможных для поставки.
Данные регистра используются:
- в помощнике заполнения календарного плана закупок обработки «Календарный план закупок» для определения доступных номенклатурных позиций поставщиков ;
- в форме выбора справочника номенклатура, при выборе номенклатуры из документов «Поступление товаров, услуг», «Заказ поставщику» и прочие приходных документов;
- в обработке подбора номенклатуры, вызываемой из торговых документов.

Его можно заполнять (и использовать) двумя способами.
1. Из "карточки товара".
Закладка "Номенклатура поставщика" становится видимой, когда на за­кладке Дополнительно  заполнен реквизит Основной поставщик. Позволяет привязать товар к определенному поставщику и его номенклатуре (для автоматизации ввода по штрих-коду, заполнения цены в документе Поступление по цене из документа Установка цен номенклатуры контрагентов).

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

ВЫВОД. В подобном виде мало функционально. Более того. При включении в настройках пользователя (или в РС Настройки пользователей)- Другие настройки- Открытие списка выбора номенклатуры по умолчанию с отбором по поставщику в документах поставщиков будет открываться номенклатура поставщика, что не удобно!

НО.. В настоящее время (сентябрь 2013) в документах поставщика (Счет и Заказ) нет возможности отразить длину номенклатуры. В данном регистре это возможно! При необходимости- попробовать!

среда, 18 сентября 2013 г.

Вести партионный учет по сериям в УТ 10.3

Суть выбора этого флага- ведение или нет в РН ПартииТоваровНаСкладах учета по измерению СерияНоменклатуры. Это, в свою очередь, влияет на учет валовой прибыли (чем дешевле куплена серия- тем выше прибыль). Т.о. если менеджеры получают бонус от прибыли этот флаг ставить не желательно.
Флаг "Вести партионный учет по сериям" можно установить/ снять и после начала ведения учета по данной номенклатуре!

четверг, 27 июня 2013 г.

Рисование печатных форм....

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

четверг, 13 июня 2013 г.

Группировка (Сгруппировать) и Итоги в запросе

Вроде и нет ничего проще,а с четким определением проблема.
Итак.

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

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

Итоги по группировкам- значения агрегатных функций по групповым полям(полям с одинаковым значением).

Отличия запроса с группировками (СГРУППИРОВАТЬ ПО) от запроса с итогами по группировкам.
В первом случае в результат запроса попадут только итоговые строки. В примере групповое поле- номенклатура:

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





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

Порядок группировок в запросе с итогами по группировкам имеет важное значение, т.к. итоги рассчитываются по порядку.

Итоги по иерархии. Если групповое (группировочное) поле является ссылкой на справочник, то для расчета итогов по группам справочника (или родительским элементам, если справочник без групп) необходимо указать ключевое слово ИЕРАРХИЯ. В этом случае в результат будут добавлены записи с итогами для уровней иерархии справочника.

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

Синтаксис работы с итогами в выборке из результата запроса

Метод ТипЗаписи()
Пример:
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда

         Продолжить;
КонецЕсли;



Описание:
Получает тип текущей записи выборки.

Возвращаемое значение:
Тип: ТипЗаписиЗапроса

Описание:
Содержит типы записей выборки результатов запроса.

Значения
ДетальнаяЗапись
Детальная (конечная) запись результата запроса.
ИтогПоГруппировке
Итоговая запись по группировке запроса.
ИтогПоИерархии
Итоговая запись по иерархии запроса.
ОбщийИтог
Общая итоговая запись запроса.

Применение.
В примере- если очередная строка выборки запроса имеет тип ИтогПоГруппировке то передать управление в начало цикла (пропустить эту строку).

понедельник, 3 июня 2013 г.

Поиск дублей в табличном поле (таблице значений)

Суть отсюда (из комментария 19). Отличный код! Причем вполне универсальный (меняем только сам источник и ссылки на него, а изменение данных очень просто!), вопреки утверждению автора!

Мой вариант (небольшая адаптация+ комментарии).

"ВЫБРАТЬ
//Основной запрос пакета- выбираем нужные данные,
//и помещаем их во временную таблицу- Таблица.
//Здесь (до ключевого слова ПОМЕСТИТЬ) добавляем/меняем необходимые нам данные.
//В принципе сюда можно выбрать ВСЕ данные исходной таблицы
| УстановкаМестХраненияНоменклатурыТовары.Номенклатура,
| УстановкаМестХраненияНоменклатурыТовары.Партия,
| УстановкаМестХраненияНоменклатурыТовары.Приоритет,
| УстановкаМестХраненияНоменклатурыТовары.НомерСтроки
|ПОМЕСТИТЬ Таблица
|ИЗ
| Документ.УстановкаМестХраненияНоменклатуры.Товары КАК УстановкаМестХраненияНоменклатурыТовары
|ГДЕ
| УстановкаМестХраненияНоменклатурыТовары.Ссылка = &Ссылка
| И УстановкаМестХраненияНоменклатурыТовары.Номенклатура <> ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
| И УстановкаМестХраненияНоменклатурыТовары.Номенклатура.Услуга = ЛОЖЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//Данные по которым нужно произвести сравнение выносим сюда.
//Результатом этого запроса явится "сбор"  элементов с одинаковыми полями 
//( в соответствии с условием  
//КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.НомерСтроки) > 1, т.е. 
//ТЕ ПОЛЯ (РАЗЛИЧАЮЩИЕСЯ НомеромСтроки) которых >1) 
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет
|ПОМЕСТИТЬ Дубли
|ИЗ
| Таблица КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.НомерСтроки) > 1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//Здесь укажем данные, нужные нам в выборке из запроса (к примеру в сообщении)
//и установим связи м.у. нашими таблицами
| Таблица.Номенклатура,
| Таблица.Партия,
| Таблица.Приоритет,
 | Таблица.НомерСтроки
 |ИЗ
 | Дубли КАК Дубли
 |  ЛЕВОЕ СОЕДИНЕНИЕ Таблица КАК Таблица
 |  ПО Дубли.Номенклатура = Таблица.Номенклатура
 |  И Дубли.Партия = Таблица.Партия
 |  И Дубли.Приоритет = Таблица.Приоритет";

Суть. Мы сравниваем строки ТЧ Товары документа УстановкаМестХраненияНоменклатуры по полям: Номенклатура, Партия, Приоритет.
Если существуют (две и более) строки где эти поля равны друг-другу- они попадут в выборку из запроса!

вторник, 14 мая 2013 г.

Ошибка "Не описана ни одна выборка из запроса!" в Запроснике (переработанной консоли запросов)

Сам Запросник.
Q.: Есть ошибка "Не описана ни одна выборка из запроса!". В обычной консоли данный запрос работает.
A.: Если на закладке Выборки стоит режим "Обход по списку настроенных выборок" (или ничего не стоит) и выборки не описаны, то выдается именно это предупреждение В обычной консоли работы с выборками нет!
Отсюда.

воскресенье, 12 мая 2013 г.

Четыре типа соединения таблиц в языке запросов 1С

!!!!! Соединение служит УМЕНЬШЕНИЮ ОБЪЕМА ВХОДЯЩЕЙ ИНФОРМАЦИИ! И ВСЕ! Что выбирать- это условия и т.п..
Синтаксис соединений:
СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора>

Отсюда
Спецификации "ВНУТРЕННЕЕ" и "ВНЕШНЕЕ" ни на что не влияют (их ввели только для красоты).
А так есть четыре типа соединения : 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ- берем только записи удовлетворяющие условию (ни одного флага Все в конструкторе).

ЛЕВОЕ СОЕДИНЕНИЕ- берем весь источник 
указанный слева от слова СОЕДИНЕНИЕ и присоединяем правый по условию (флаг справа от основной таблицы) 

ПОЛНОЕ СОЕДИНЕНИЕ- берем оба источника и заполняем по условию (установлены оба флага Все)

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

Тип соединения в Конструкторе запроса определяется установкой флага Все справа от соединяемых таблиц (видимо Правое соединение не создается конструктором для устранения путаницы?). Справа от какой таблицы установлен флаг Все к той таблице и присоединяется другая. Если выбраны оба- ПОЛНОЕ СОЕДИНЕНИЕ, если ни одного- ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
 Условия соединения описывается в следующей секции- Условие связи.

вторник, 7 мая 2013 г.

Связь по владельцу (элемента формы справочника)

В форме.
Здесь коротко.
Или у нас
Вообще о связях м.у. формой и элементами управления- ИТС- Методическая поддержка- 1С:Предприятие 8- Платформа 1С:Предприятие 8.1- Формы- Связь формы и элементов управления с данными ???

Программно.
Существует справочник Партии с владельцем- справочник Номенклатура (имеющий в свою очередь реквизит- НоменклатурныеГруппы). У справочника Партии есть реквизит Стандарт. Тип у реквизита Стандарт- справочник Стандарты, подчиненный справочнику НоменклатурныеГруппы.
Задача. При создании элемента справочника Партии, нужно программно, элементу справочника Стандарты, назначить владельцем соответствующий элемент справочника НоменклатурныеГруппы.
В общем случае выбор по владельцу задается в обработчике "НачалоВыбора" командой
Элемент.ВыборПоВладельцу = {в эту переменную передаем нужного владельца};
Делаем (картинка от другого примера, смысл тот-же):




Процедура СтандартНачалоВыбора(Элемент, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(ЭлементыФормы.Стандарт.ВыборПоВладельцу) Тогда
Элемент.ВыборПоВладельцу = ЭлементыФормы.Владелец.Значение.НоменклатурнаяГруппа;
КонецЕсли;
КонецПроцедуры


вторник, 16 апреля 2013 г.

% в запросе 1С

Тут
Но... В запросе в %...% часто помещают строку предназначающуюся для замены методом СтрЗаменить.
Пример:
СтрЗаменить(ТекстЗапроса, "%ПОЛЕ_ЗаказПокупателя%", "NULL")

среда, 10 апреля 2013 г.

Проверка наличия значения

ЗначениеЗаполнено (ValueIsFilled)

Синтаксис:

ЗначениеЗаполнено(<Значение>) 
Параметры:
<Значение> (обязательный)

Тип: Произвольный. 
Значение для сравнения. 
Возвращаемое значение:

Тип: Булево. 
Для значений типа Булево всегда возвращается Истина.
Для значений типа Строка возвращается Истина, если в строке есть не пробельные символы.
Для массивов и коллекций возвращается Истина, если в них есть хотя бы 1 элемент. 
Описание:

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

Не работает с мутабельными значениями
(т.е. с Ссылками (СправочникСсылка.Товары) работать будет, а с 
Объектами (СправочникОбъект.Товары) нет!).

среда, 20 марта 2013 г.

пятница, 15 марта 2013 г.

Учет и проведение по партиям

Учет партий товаров в УТ 10 ведется по ДОКУМЕНТАМ. В первую очередь- поступления (именно они записываются в регистры). Серии ни при чем...
Документы- Дополнительно- Проведения по партиям

четверг, 28 февраля 2013 г.

СтандартнаяОбработка

Оператор СтандартнаяОбработка применяется в  обработках событий (к примеру формы-
Процедура ..НачалоВыбора(Элемент, СтандартнаяОбработка)).

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

В нашем примере процедура взята из ТЧ документа и должна обрабатывать НачалоВыбора одной из колонок. Если СтандартнаяОбработка =Ложь, а своего кода мы не дали, то выбор не произойдет!

среда, 20 февраля 2013 г.

Группировка строк в отчете

Статья тут. Копия в EverNote.
Суть.

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

1) наличие в запросе 
или "ИТОГИ ... ПО",
или "СГРУППИРОВАТЬ ПО"

Перед обходом необходимо применить НачатьАвтогруппировкуСтрок()
2) организация вложенных друг-в-друга циклов обхода по группировкам.
После обхода- ЗакончитьАвтогруппировкуСтрок()

У меня получилось (в запросе использовал "ИТОГИ ... ПО")!

вторник, 12 февраля 2013 г.

Расшифровки в отчетах

Тут и тут.
Суть.
При стандартной расшифровки вообще не надо писать процедуру!
Ячейки или рисунку присваиваем ПараметрРасшифровки.
Этому параметру (через коллекцию "Параметры"- ОбластьЭлемент.Параметры.Расшифровка=ВыборкаПодробности.Ссылка;), в цикле заполнения области, присваивается значение типа Ссылка на... (документ, элемент справочника).
Важно!
Табличный документ (Поле табличного документа) должен быть открыт в режиме «ТолькоПросмотр»!

вторник, 29 января 2013 г.

СрезПоследних (SliceLast)


РегистрСведений.<Имя регистра сведений>.СрезПоследних 

СрезПоследних (SliceLast)
Синтаксис:
СрезПоследних(<КонецПериода>, <Отбор>)
Параметры:
<КонецПериода> (необязательный)
Тип: Дата; МоментВремени; Граница.
Определяет момент времени, заканчивая которым необходимо выбрать записи.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.

 
<Отбор> (необязательный)
Тип: Структура. (КлючИЗначение- строковый ключ, любое значение)
Структура, содержащая отбор по измерениям и реквизитам регистра. 
Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, 
а значение элемента структуры - задает отбираемое по данному измерению значение (в примере- &Группы- это массив содержащий не более двух значений).
 
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
 Возвращаемое значение:
Тип: ТаблицаЗначений.
Таблица значений, заполненная данными найденных записей регистра сведений.
Описание:
Получает наиболее поздние записи регистра, соответствующие установленным в параметрах метода значениям ключевых полей. Записи подбираются для каждого сочетания из всех имеющихся значений измерений регистра.
Примечание:
Применим только для периодических регистров сведений.
Пример:

РегистрСведений.НаценкиПоУсловиямПродаж.СрезПоследних(&Дата, НоменклатурнаяЦеноваяГруппа В (&Группы))Т.е.-
выбрать из РегистраСведений 
НаценкиПоУсловиямПродаж записи (на &Дата) измерения НоменклатурнаяЦеноваяГруппа соответствующие значениям элементов массива &Группы
Условие м.б. и сложнее (УТ10.3: Ценообразование.ИзменитьЦенуПоУсловиюПродаж()):
| РегистрСведений.НаценкиПоУсловиямПродаж.СрезПоследних(&Дата,
|       УсловиеПродаж = &УсловиеПродаж И НоменклатурнаяЦеноваяГруппа В (&Группы))