Основы реализации подборов в 1С 8.2 для начинающих

24.12.11

Разработка - Работа с интерфейсом

Основные механизмы реализации подборов в 1С  для начинающих

ОПЫТ ПРАКТИЧЕСКОЙ РЕАЛИЗАЦИИ ПОДБОРОВ в 1С 8.2

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

Нужно сделать отступление. Это задача уже решалась в вначале в «1С 7.7 - Торговле», а потом в «1С 8.0 - Управлении Торговлей». Тогда выяснилось, что в силу целого ряда причин, о которых мы не будем здесь говорить штатные средства системы не позволяют это реализовать (так чтобы это было удобно). Как оказалось ситуация в современной конфигурации «Управление торговлей» практически не изменилась.

Во время реализации этой задачи встал вопрос о том, как организовать подборы по остаткам и резервам кабеля из документа «Распоряжение на склад».

 

общий интерфейс 

 

1) Создание команды.

В окне редактирования формы, создаём новую команду. 

Размещаем её на форме в её командной панели и затем в свойствах команды:

- создаём процедуру в свойствах команды;

- настраиваем имя команды и картинку, которая будет отображаться рядом с ней. 

 

 этапы создания команды на форме

 

2) Заполняем созданную процедуру исходным кодом.

 

&НаКлиенте
Процедура Подбор(Команда)

//Фильтр_Номенклатура = Вернуть_СписокНоменклатуры(Объект.Основание);
//АдресХранилища = ПоместитьВоВременноеХранилище(Фильтр_Номенклатура, ЭтаФорма.УникальныйИдентификатор);
АдресХранилища = "";

ОткрытьФорму("ОбщаяФорма.я_ПодборКабеля", Новый Структура("Основание,Склад,ЗакрыватьПриВыборе,АдресТов", Объект.Основание, Объект.Склад, Ложь, АдресХранилища), Элементы.Кабель);

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

 

------------------------------------------------------------------------------------------------- 

 

С помощью функции ОткрытьФорму() открываем специально созданную для подборов форму, в ней с помощью структуры передаём ряд важных параметров:

ЗакрыватьПриВыборе = Ложь - этот параметр позволит организовывать множественный выбор в открываемой форме

Элементы.Кабель - наша табличная часть, куда будут передаваться подобранные данные.

Остальные параметры используются для накладывания фильтров в открываемой форме.

Комментарий.

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

Затем на форме документа создаём процедуру обработки подбора в документ.

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

 

 процедура клиента - Обработка выбора

 

&НаКлиенте
Процедура КабельОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Если
ТипЗнч(ВыбранноеЗначение) = Тип("Структура")
Тогда



Если
ВыбранноеЗначение.Количество = 0
Тогда
Возврат;
КонецЕсли;



var_Флаг = Истина;
// -------------------
Для каждого стр из Объект.Кабель
Цикл

Если (
стр.Номенклатура = ВыбранноеЗначение.Номенклатура) и
(
стр.Тара = ВыбранноеЗначение.Тара)
Тогда
стр.Кол = стр.Кол + ВыбранноеЗначение.Количество;
Сообщить("Подбор ("+ВыбранноеЗначение.Количество+") "+ВыбранноеЗначение.Номенклатура + " был добавлен в строку № "+стр.НомерСтроки);
var_Флаг = Ложь;

Прервать;
КонецЕсли;
КонецЦикла;
// -------------------
Если var_Флаг
Тогда

НоваяСтрока = Объект.Кабель.Добавить();
НоваяСтрока.Номенклатура = ВыбранноеЗначение.Номенклатура;
НоваяСтрока.Тара = ВыбранноеЗначение.Тара;
НоваяСтрока.Кол = ВыбранноеЗначение.Количество;
// -------------------
Сообщить("В документ добавлено: "+НоваяСтрока.Номенклатура+" ("+НоваяСтрока.Тара+") в кол - " + НоваяСтрока.Кол + " м.");
КонецЕсли;
// -------------------
ЭтаФорма.Модифицированность = Истина;
КонецЕсли;



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

 

 

3)      Создаём общую форму

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

 

создание общей формы - для подборов

 

Красиво размещаем элементы на форме (с помощью групп). Размещаем на форме две кнопки «Отобрать» и «Закрыть» и настраиваем запрос в свойствах объекта «Динамический список».

 

 настройка

 

Текст запроса по остаткам и резервам кабеля: 

 

ВЫБРАТЬ
Таблица_Сводная.Владелец,
Таблица_Сводная.Код,
Таблица_Сводная.Вид,
Таблица_Сводная.Номер,
Таблица_Сводная.Номер_Длины,
Таблица_Сводная.Метраж,
Таблица_Сводная.Вес,
Таблица_Сводная.Цвет,
Таблица_Сводная.Тара,
Таблица_Сводная.Поставщик,
Таблица_Сводная.Документ_Прихода,
Таблица_Сводная.Остаток,
Таблица_Сводная.Резерв,
Таблица_Сводная.Ссылка,
Таблица_Сводная.Остаток_Свободный

ИЗ

(
ВЫБРАТЬ
я_Кабель.Владелец КАК Владелец,
я_Кабель.Код КАК Код,
я_Кабель.Вид КАК Вид,
я_Кабель.Номер КАК Номер,
я_Кабель.Номер_Длины КАК Номер_Длины,
я_Кабель.Метраж КАК Метраж,
я_Кабель.Вес КАК Вес,
я_Кабель.Цвет КАК Цвет,
я_Кабель.Тара КАК Тара,
я_Кабель.Поставщик КАК Поставщик,
я_Кабель.Документ_Прихода КАК Документ_Прихода,
ЕСТЬNULL(Остатки_КПП.МетражОстаток, 0) КАК Остаток,
ЕСТЬNULL(Резервы_КПП.МетражОстаток, 0) КАК Резерв,
я_Кабель.Ссылка КАК Ссылка,
ЕСТЬNULL(Остатки_КПП.МетражОстаток, 0) - ЕСТЬNULL(Резервы_КПП.МетражОстаток, 0) КАК Остаток_Свободный

ИЗ
Справочник.я_Кабель КАК я_Кабель


ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.я_Кабель_Остатки.Остатки(, Склад = &Фильтр_Склад) КАК Остатки_КПП
ПО (Остатки_КПП.Тара = я_Кабель.Ссылка)

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.я_Кабель_Резервы.Остатки(, ) КАК Резервы_КПП
ПО (Резервы_КПП.Тара = я_Кабель.Ссылка)

ГДЕ
я_Кабель.ПометкаУдаления = ЛОЖЬ
И
я_Кабель.Владелец В(&Фильтр_Номенклатура)) КАК Таблица_Сводная

ГДЕ
Таблица_Сводная.Остаток_Свободный > 0

 

Для того чтобы выделить среди других (раскрасим в желтый) главную для нас колонку свободного остатка мы настраиваем оформление колонки на форме.

 

настройка оформления 

 

 

4)      Создаём процедуры модуля формы подбора.

Алгоритм здесь такой. При открытии формы заполняются реквизиты формы, и запускается процедура отбора по запросу. Перед отбором по запросу, текст его корректируется в зависимости от заполненных на поле фильтров. При нажатии на клавишу «Отбор» происходит всё тоже самое, но без заполнения  реквизитов.

 

&НаСервере
Процедура Установить_Отбор()

var_ТЗ = Новый ТаблицаЗначений;
var_ТЗ = var_Основание.Товары.Выгрузить();
var_ТЗ.Свернуть("Номенклатура");

Фильтр_Номенклатура = var_ТЗ.ВыгрузитьКолонку("Номенклатура");
// -----------------------------
Тара.ТекстЗапроса =

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



var_Строка_Фильтр = "";
// -----------------------------
Если ЗначениеЗаполнено(Фильтр_Вид) Тогда

var_Строка_Фильтр = var_Строка_Фильтр + "И (я_Кабель.Вид = &Фильтр_Вид) ";

КонецЕсли;

Если
ЗначениеЗаполнено(Фильтр_Цвет) Тогда
var_Строка_Фильтр = var_Строка_Фильтр + "И (я_Кабель.Цвет = &Фильтр_Цвет) ";
КонецЕсли;

Если
ЗначениеЗаполнено(Фильтр_Тара) Тогда
var_Строка_Фильтр = var_Строка_Фильтр + "И (я_Кабель.Тара = &Фильтр_Тара) ";
КонецЕсли;
// -----------------------------
Если ЗначениеЗаполнено(var_Строка_Фильтр) Тогда
Тара.ТекстЗапроса = СтрЗаменить(Тара.ТекстЗапроса,"В(&Фильтр_Номенклатура)", "В(&Фильтр_Номенклатура) "+var_Строка_Фильтр);
КонецЕсли;







Тара.ПроизвольныйЗапрос = Истина;
// -----------------------------
Если ЗначениеЗаполнено(Фильтр_Склад) Тогда
Тара.ТекстЗапроса = СтрЗаменить(Тара.ТекстЗапроса,".я_Кабель_Остатки.Остатки(, )", ".я_Кабель_Остатки.Остатки(, Склад = &Фильтр_Склад)");
Тара.Параметры.УстановитьЗначениеПараметра("Фильтр_Склад", Фильтр_Склад);
Иначе
Тара.ТекстЗапроса = СтрЗаменить(Тара.ТекстЗапроса,"Склад = &Фильтр_Склад", "");
КонецЕсли;

// -----------------------------

Тара.Параметры.УстановитьЗначениеПараметра("Фильтр_Номенклатура", Фильтр_Номенклатура);









Если
ЗначениеЗаполнено(Фильтр_Вид) Тогда
Тара.Параметры.УстановитьЗначениеПараметра("Фильтр_Вид", Фильтр_Вид);
КонецЕсли;

Если
ЗначениеЗаполнено(Фильтр_Цвет) Тогда
Тара.Параметры.УстановитьЗначениеПараметра("Фильтр_Цвет", Фильтр_Цвет);
КонецЕсли;

Если
ЗначениеЗаполнено(Фильтр_Тара) Тогда
Тара.Параметры.УстановитьЗначениеПараметра("Фильтр_Тара", Фильтр_Тара);
КонецЕсли;

// -----------------------------
Элементы.Тара.Обновить();

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







&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

//Сообщить(Параметры.Основание);
// ------------------------------
var_Основание = Параметры.Основание;
Фильтр_Склад = Параметры.Склад;
// ------------------------------
var_Адрес = Параметры.АдресТов;

//Фильтр_Номенклатура = Новый СписокЗначений;
//Фильтр_Номенклатура.ЗагрузитьЗначения(ПолучитьИзВременногоХранилища(var_Адрес));
//Фильтр_Номенклатура = ПолучитьИзВременногоХранилища(var_Адрес);

Установить_Отбор();


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



&НаКлиенте
Процедура Отобрать(Команда)

Установить_Отбор();

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




&НаКлиенте
Процедура ТараВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

Перем
Количество;

СтандартнаяОбработка = Ложь;
Количество = Элемент.ТекущиеДанные.Остаток_Свободный;
// --------------------------------
Если ВвестиЗначение(Количество, "Введите количество поступления", Новый ОписаниеТипов("Число"))
Тогда
парам_Номен = Элемент.ТекущиеДанные.Владелец;
парам_Тара = Элемент.ТекущиеДанные.Ссылка;
Элемент.ТекущиеДанные.Остаток_Свободный = Элемент.ТекущиеДанные.Остаток_Свободный - Количество;
ЭтаФорма.ОбновитьОтображениеДанных();
// -----------------------------------
ОповеститьОВыборе( Новый Структура("Номенклатура,Тара,Количество", парам_Номен,парам_Тара,Количество ));
КонецЕсли;

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



&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
// УдалитьИзВременногоХранилища(var_Адрес);
КонецПроцедуры



 

НЕДОСТАТОК ПРИВЕДЕННОГО КОДА

 

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

 

var_ТЗ = var_Основание.Товары.Выгрузить();

 

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

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

 

Правильный путь № 1. Создать параметр формы типа «список значений» и каждый раз перед использованием преобразовывать его в массив и фильтровать по нему в запросе. При этом если в запрос подставить не массив, а «список значений», то запрос сработает только по первому параметру «списка значений».

 

Правильный путь № 2. Создать общий модуль с настройкой «Повторное использование возвращаемых значений» = «на время вызова», тогда возвращаемые значения экспортных функций повторно будут использоваться в разрезе входных значений их параметров.

 

 5)      Возможные варианты повышения «юзабилити»

 

Наглядность.

 

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

 

В нем при открытии формы заполнять список уже добавленными в документ строками. Тогда при нажатии на клавишу «Выполнить» мы будем передавать в наш документ массив с выбранными нами значениями, которым мы будем перезаполнять табличную часть документа.

 

Множественный выбор.

 

Если в форму подбора открываемую функцией ОткрытьФорму() передать параметр «МножественныйВыбор» = «Истина», то в форме подбора станет возможным выбирать сразу несколько строк для добавления в документ. Для нас программистов это изменит только, то что теперь параметр выбора будет представлять собой ни строку, а массив строк который нужно обрабатывать в цикле Для каждого ... из ... Цикл.

 

Потеря владельца.

 

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

 

 настройка доступности окна-владельца

 

 

6) НЮАНСЫ, на которые стоит обратить внимание.



Повторный подбор одного и того же товара.

Представим следующую ситуацию. Вы подобрали в документ некий товар, потом решили, что мало и решили подобрать ещё ту же номенклатуру. Логично, что не стоит размножать строки с одинаковым товаром в документе. Поэтому перед добавлением строки в таблицу выбора надо проверить, а есть ли там уже строка с выбранным товаром? Если есть, то добавим туда выбранное количество. Если нет, добавим строку.

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

Самый правильный вариант это делать - поиск в табличной части документа (или таблице значений на форме подбора), перебор в цикле строк табличной части (или таблицы значений тоже правильно, но не оптимально).

Например, так:

 

Для каждого СтрокаТоваров из ВыбранныеТовары Цикл
    Поиск = Новый Структура(«Товар», Товар);
    МассивНайденныхСтрок = ТЧ_Документа.НайтиСтроки(Поиск);

    Если
МассивНайденныхСтрок.Количество() > 0 Тогда
         Строка = МассивНайденныхСтрок [0];
    Иначе
         Строка = ТЧ_Документа.Добавить();
         Строка.Товар = Товар;
    КонецЕcли;
КонецЦикла;



Переотбор по фильтрам.

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





Надеюсь, этот материал был Вам полезен.

С уважением, Кутанов Алексей  

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5870    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    4075    13    1    

31

Печатные формы Адаптация типовых решений Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с установленными именами. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

3000 руб.

07.02.2023    6577    72    10    

29

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62878    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18733    26    6    

41
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. fomix 33 23.12.11 10:04 Сейчас в теме
Молодец! Очень подробно и наглядно рассказал. Спасибо и +
2. Yury1001 1472 23.12.11 10:07 Сейчас в теме
Нормальная тема, сам хотел выложить Подбор для Списания товаров в УТ 11, теперь не нужно+
3. Boroda 90 27.12.11 21:09 Сейчас в теме
Спасибо за интересную и познавательную статью. Узнал много нового.
4. ipyu 10.01.12 23:35 Сейчас в теме
5. sytkosa 119 11.01.12 00:00 Сейчас в теме
Молодец. Молоток. Развивай тему
6. dtitov 11.01.12 14:47 Сейчас в теме
Спасибо за статью, интересно.
7. post279 25.01.12 18:33 Сейчас в теме
Спасибо автору за труд
8. Andrey12Andrey 20.02.12 11:09 Сейчас в теме
Спасибо за разъяснения
9. Notorius 20.02.12 11:12 Сейчас в теме
10. neo2012 27.03.12 10:50 Сейчас в теме
Как на мое мнение все написано доходчиво и понятно все что хотел понял поетому автору респект 5+ заслуженое
11. KneZ 31.08.12 01:43 Сейчас в теме
Как раз вовремя попалась статья на глаза, спасибо
12. 2011b11 13.12.12 12:35 Сейчас в теме
Спасибо автору за подробное разъяснение, все доходчево и понятно. Респект автору.
13. ogion 02.04.13 16:10 Сейчас в теме
Хоть и написано: "для начинающих", но ничего не понятно, что за Объект??? ошибка на нём выскакивает.
14. serge_focus 4 01.08.13 20:26 Сейчас в теме
Спасибо автору и + за подробное и наглядное разъяснение вопроса.
15. Penka 10.06.14 09:16 Сейчас в теме
16. Prince_1 4 01.07.14 12:24 Сейчас в теме
17. kitun 12.11.15 14:49 Сейчас в теме
18. plur 22.09.16 12:22 Сейчас в теме
Спасибо, очень доступно и полезно!
19. Wefast 04.08.17 09:41 Сейчас в теме
Вопрос такой, а как отметить товары что уже есть в табличной части родительского документа? К примеру я выбрал "Яблоко" в документе. Нажал снова Подобрать, и чтобы там в списке этого яблока больше не было или оно было выделено по особому
20. user1072643 18.02.19 10:48 Сейчас в теме
Благодарю очень полезная статья
Оставьте свое сообщение