Здравствуйте, Александр подскажите как изменить скрипт, что бы при проведении ДКС документ "выпуск и комплектация" создавался только при наличии в дкс товаров с комплектацией. Сейчас скрипт если нет товаров с комплектацией всегда создает пустой документ "выпуск и комплектация".
Код: Выделить всё
// Данный скрипт предназначен для использования в точке зрения
// в проверке документа кассовой смены перед записью.
// Загружаем реквизиты документа
ДобавитьКонтекст( "SELECT ndok, date, firm, rs, sklad, cur, cur_rate, branch, identity_column
FROM spr008
WHERE identity_column= " + @ИДДокумента, "Документ" );
ОсновнойУчет = ЗАПРОС( "SELECT dbo.fn_getdefaultaccount ( '" + _ТОЧКАЗРЕНИЯ + "' )" );
// Если у документа есть выписанные на основании документы
// выпуска и комплектации, то ничего не делаем
IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM crosslink
WHERE code = '008' AND ic= " + @ИДДокумента + " AND
cr_code = '009') THEN 1 ELSE 0 END " ) == 1 )
RETURN true;
ИмяТаблицыПродукции = "#" + УникальноеИмя( );
//------- Создаем таблицу для сбора необходимой информации
ЗАПРОС( "CREATE TABLE " + ИмяТаблицыПродукции + "
(nn char(10), nnname char(250), kolp float, incena float, cena float, ed char(15),
kodn char(2), koef_e float, koef_c float, sklad char( 3 ) ) " );
СистемноеСообщение( "Пожалуйста, подождите. " +
"Идет проверка документа на наличие производимой продукции." );
ДобавитьКонтекст( "SELECT nn, nnname, SUM( kolp ) AS kolp, ed, kodn, koef_e, koef_c
FROM spec008
WHERE ic= " + @ИДДокумента + "
GROUP BY nn, nnname, ed, kodn, koef_e, koef_c ", "Спецификация" );
ВыбратьКонтекст( "Спецификация" );
ИтогоСумма = 0.00;
WHILE ( !КонецКонтекста( "Спецификация" ) )
{
//------- Если в карточке товара не стоит галочка Формировать автоматически - пропускаем
IF ( ЗАПРОС( "SELECT f_make FROM sprnn WHERE nn= '" + Спецификация.nn + "' " ) )
{
//------- Проверяем наличие необходимого количества уже собранного на складе
ДобавитьКонтекст( "EXECUTE sp_calcsklad '" + Спецификация.nn + "', '" +
TTOC( Документ.date ) + "', '" + Документ.sklad + "', '" +
ОсновнойУчет + "'", "ОстатокНаДату" );
ДобавитьКонтекст( "EXECUTE sp_calcsklad '" + Спецификация.nn + "', '', '" +
Документ.sklad + "', '" + ОсновнойУчет + "'", "ТекущийОстаток" );
// Если не хватает остатка, то добавляем строку в таблицу
IF ( ROUND( Спецификация.kolp - ОстатокНаДату.kolp, 3 ) > 0 OR
ROUND( Спецификация.kolp - ТекущийОстаток.kolp, 3 ) > 0 )
{
Количество = MAX( ROUND( Спецификация.kolp - ОстатокНаДату.kolp, 3 ),
ROUND( Спецификация.kolp - ТекущийОстаток.kolp, 3 ) );
Склад = ЗАПРОС( "SELECT sklad_ingredients FROM sprres_g
WHERE code= (SELECT group_ FROM sprres
WHERE code= '" + Спецификация.nn + "')" );
ЗАПРОС( "INSERT INTO " + ИмяТаблицыПродукции + "
( nn, nnname, kolp, cena, incena, ed, kodn, koef_e, koef_c, sklad )
VALUES ( '" + STDF( Спецификация.nn ) + "', '" +
STDF( Спецификация.nnname ) + "', " +
STR( Количество, 20, 8 ) + ", " +
STR( ОстатокНаДату.cena, 20, 8 ) + ", " +
STR( ОстатокНаДату.cena, 20, 8 ) + ", '" +
STDF( Спецификация.ed ) + "', '" +
STDF( Спецификация.kodn ) + "', " +
STR( Спецификация.koef_e, 20, 8 ) + ", " +
STR( Спецификация.koef_c, 20, 8 ) + ", '" + Склад + "' ) " );
ИтогоСумма += ( Спецификация.kolp - ОстатокНаДату.kolp) *
ОстатокНаДату.cena;
}
УдалитьКонтекст( "ОстатокНаДату" );
УдалитьКонтекст( "ТекущийОстаток" );
}
Пропустить( 1, "Спецификация" );
}
УдалитьКонтекст( "Спецификация" );
//------ Начинаем транзакцию для записи документа Выпуск и комплектация
ЗАПРОС( "BEGIN TRANSACTION" );
//------ Создаем документ Выпуск и комплектация
//------ Код Выпускаи комплектации- 009
// Формируем список учетов для нового документа
СписокУчетов = "";
ДобавитьКонтекст( "SELECT account_ FROM specviewpoints_def
WHERE code= '" + _ТОЧКАЗРЕНИЯ + "' AND objtype= 'DOC' AND
objcode= '009' AND t_concept = ''", "МоделиУчета");
WHILE ( !КонецКонтекста( "МоделиУчета" ) )
{
СписокУчетов += МоделиУчета.account_;
Пропустить( 1, "МоделиУчета" );
}
УдалитьКонтекст( "МоделиУчета" );
СписокУчетов = ALLTRIM( СписокУчетов );
ДобавитьКонтекст( "EXECUTE sp_insertdoc '009', '', '" + Документ.date + "', '', '" +
Документ.firm + "', '', 'RUB', '', '" + СписокУчетов + "', '" +
_ТОЧКАЗРЕНИЯ + "', 0, '" + ОсновнойУчет + "'", "ident" );
ДобавитьКонтекст(
"UPDATE spr009 SET
f_make = 1,
sklad = '" + Документ.sklad + "',
sklad_d = '" + Документ.sklad + "',
summa = " + STR( ИтогоСумма, 20, 8 ) + ",
firm = '" + Документ.firm + "',
rs = '" + Документ.rs + "',
branch = '" + Документ.branch + "',
cur = '" + Документ.cur + "',
cur_rate= " + STR( Документ.cur_rate, 16, 8 ) + ",
taccess = '', caccess='',
note = 'По документу кассовой смены № " +
ALLTRIM( Документ.ndok ) + " от " + DTOC( Документ.date ) + "'
WHERE identity_column= " + ident.ident, "Пустой" );
УдалитьКонтекст( "Пустой" );
ДобавитьКонтекст(
"INSERT INTO spec009 ( ic, nn, spec_ic, ed, kolp, nnname, incena, cena, summa,
kodn, koef_e, koef_c, f_make, sklad )
SELECT " + ident.ident + ", nn, 0, ed, kolp, nnname, incena, cena, kolp * cena,
kodn, koef_e, koef_c, 1, sklad
FROM " + ИмяТаблицыПродукции, "Пустой" );
УдалитьКонтекст( "Пустой" );
//-------- Вызываем процедуру формирования состава продукции
ЗАПРОС("EXECUTE sp_recalc009 " + ident.ident );
// Добавляем связь на основании
ДобавитьКонтекст(
"INSERT INTO crosslink (code, ic, ndok, date, cr_code, cr_ic, cr_ndok, cr_date, cr_type )
VALUES ( '008'," + Документ.identity_column + ", '" + Документ.ndok + "', '" +
TTOC( Документ.date ) + "', '009'," + ident.ident + ", '" + ident.ndok + "', '" +
TTOC( ident.date ) + "', '0' )", "Пустой" );
УдалитьКонтекст( "Пустой" );
ЗАПРОС("IF @@TRANCOUNT > 0 COMMIT TRANSACTION");
СистемноеСообщение( );
УдалитьКонтекст( "Документ" );
//------ Вызываем созданный документ на редактирование
ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕ_ПРОСМОТРДОКУМЕНТА, "009", ident.ident );
УдалитьКонтекст( "ident" );
// Возвращаем ИСТИНУ, т.к. необходимо произвести запись до конца
RETURN true;